月別アーカイブ: 2015年7月

OpenCV 3.0 でハマった事

割りと軽いノリでOpenCV 3.0 に移行した結果、
あれこれハマった事や面倒だった事のメモ。

ビルドの問題に関しては、
cudaを使ってるのが主な原因の様な気がする。

contribでビルドできないmoduleが、いくつもある

gitでも3.00のアーカイブでも同様。
opencv-text や opencv-tracking は、試したかった機能なので残念。

cudaを使わなければビルドできてた様に覚えているし、
ビルドエラーは見れば直ぐに修正できそうな感じなので、
早晩対応されると思う。

pyton-bindingがビルドできない!

gitでも3.00のアーカイブでも同様。
OpenCV3のウリの一つだっただけに、これは本当に残念。

CV_~の定数を、cv::〜に置き換える

CV_~の定数は、まだ使えるみたいだけど
そろそろcv::~ のenumに書き換えた方が良い
CV_BGR2GRAY → cv::COLOR_BGR2GRAY とか

でも、どれが移行出来るのかとか、一覧できないので
順次、気がついたソースから修正中。

OpenCV 1.x 風マクロの置き換え

OpenCV1 APIからC++風APIに書き換えるのは、地味に面倒。
やっぱり、動いたり動かなかったりするので
ビルドしてみてエラーになった物から修正中。

とりあえず、VideoCapture や VideoWriter かな。
あと、画像処理のAPIのドキュメントが無かったりするので、
何となくエラーが出ないように修正して動かしている状況。
動いてはいるみたいだけど。

IplImage * と cv::Mat を暗黙で変換してくれなくなった

コンストラクタで暗黙変換しなくなったのが一番影響大きいかな。
そもそも、もう IplImage は使わない方が良いんだろうけど、
プロジェクト単位で見ると、地味に修正箇所が多い。

意を決っして全部修正しているところ。

どうしても IplImage を使いたいところは

とかしてる。

CV_RGB から cv::Scalar に置き換え

RGBの順番が変わるので要注意。

色指定はCV_RGB が便利なんだけど、
中途半端はイヤなので、cv::Scalar に修正中。
揃えるのも大事。

Macはどうしよう…

こんな状態なので、Macの方は暫く様子見の予定。
現状では Homebrew でサクっと移行できるワケじゃなさそうだし。

C/C++は、プロジェクト毎にライブラリを管理すれば良いけど、
pythonの場合は、WindowsとMacでバージョンが違うと不便なので。

WordPress WP-Markdown plugin を入れてみた

プラグインの新規追加で「WP-Markdown」を検索してインストールし、 ダッシュボード>設定>投稿設定で有効にするだけ。

うちで使いそうな Markdown は、こんな感じ。 Markdownリファレンス

強調

斜字にしたいテキスト 強調したいテキスト

リンク

[リンクをはるテキスト](http://url.xxx/)

見出し

H1見出し ## H2見出し ### H3見出し #### H4見出し ##### H5見出し ###### H6見出し

コード表記

先頭に半角スペースを4つを入れる、チルダ3つで囲む、 短かい分ならシングルコーテーションで挟むと コードとして扱われます。 これは便利かも。

リスト

項目を*、−、+、数字で始めると、リストになります。

  • python
  • OpenCV
  • C/C++
  1. Mac
  2. Windows

使ってみた感触

それにしても。

JP Markdownもそうだったけど。 何故、見出し記号が#なのか。*に変えられないのか。。。

よりによってコメント記号の#にしなくても良いじゃないか。 普段org-modeやrstを使っていると、不便なんだよなぁ。

これだけ設定で変えられると嬉しいんだけど。

くるくるワイドの検証 1:概念の理解

FX界で著名な「魚屋」さん開発の両建てFX手法
くるくるワイド」について検証してみた。

トラリピと組み合わせた、安全な両建ての方法を考えてみる。

くるくるワイドの特徴は、
本体の仕掛けと反対売買の細かなトラップを組み合わせること。

更に、固定ショートや複利運用を組み合わせて、
リスクを抑えつつ利益を確保する、結構ややこしい方法。

まず、本体を買いで入ることとして、どういう動作をするのか整理してみた。

レンジ相場の場合

本体の決済はなく、反対売買のトラップとスワップが損益になる。

ずっとレンジ相場なら、本体の存在意味はない。
いつか相場が上抜けか下抜けするまで、
トラップの利益を重ねつつ待つ。

多分、
これが主な利益になるんだと思う。

相場が上抜けした場合

通常なら、本体の決済で利益が出る。

でも、
その時には反対売買のトラップは含み損状態のはずなので、
まとめて決済した結果、本体の利益は相殺されてしまう。

本体とトラップのポジション量が同じなら。
決済時の利益は、本体だけの時の半分程度になってしまう。

逆を言えば、
期待に反してレンジ相場がすぐに終わってしまい、
反対売買のトラップが失敗に終ったとしても、
損害にはならない。

とも言える。

したがって、
決済を全部まとめた合計が、なるべく赤字にならないよう
出来れば利益を残すような仕掛けのバランスが望ましい。

せっかく相場が上抜けしたのに赤字で終わったのでは、
バカらしい。

かと言って、
本体の仕掛けの利益に期待するのであれば、
そもそも反対売買のトラップは邪魔なだけなので、
最初から不要だったと言うこと。

なら。
市場の上抜けで利益を得ようとはしないで、
主な利益になるべきトラップのポジション量を増やし、
本体の倍くらいとる考え方もある。

損益が相殺されるおかげで、
倍くらいまでは赤字にならない。

まぁ、利益があるに越したことは無いけど。。。

相場が下抜けした場合

これが問題。

反対売買のトラップが利益を積み重ねるが、
本体の仕掛けが含み損をかかえてしまう。

だからと言って、
本体を損切りしてしまっては、やはり意味がない。

それならば、
最初から予算の範囲内で、
反対売買のトラップだけ仕掛けていれば良い。
その方が効率的だ。

と言うことは、
下抜けした時の本体の損切りは有り得ない。

本体の仕掛けは、
何があってもロスカットされない量だけにする、
という事。

決済するのは、上抜けした時だけ!

資金を焦げつかせない範囲で、
下抜けした間の反対売買トラップを効果的に働かせるよう、
工夫するべき。

やり過ぎてトラップの数を増やし過ぎると、
いつか相場が反転した場合に、
ロスカットの危険が出てくる。

また、
相場が大きく下離れした場合に、
本体の仕掛けが大きな含み損をかかえたまま放置し、
反対売買のトラップの数を一定に保ったまま、
トラップを下値の方へとズラしていく考え方もある。

あまりに本体と離れてしまうと、
上抜けした時に、御互いを相殺して
損益0以上で全部決済することが出来なくなる。

この場合も、
いつか相場が反転して上抜けするまで、
じっと放置するしかない。

やはり資金に余裕をもっている必要がある。

下抜けした場合には、
資金に余裕を持つ以外に、
上抜けした場合の様なリスク対策はない
ということ。

ここは徹底した
自分自信のリスク管理が必要。

トラップが追従する範囲を損益分岐点から離れないとこまでに抑えるか、
トラップのポジション量を十分少なく抑える。

反対売買のトラップのポジション量は、
ここでも制限されることになる。

トラップのポジション量が少ないと、利益が出せない。
ここが矛盾。

最後は、資金力の問題だ!

あるいは、積極的に固定ショートをとって、
リスクを減らすか。。。

リスク管理のまとめ

ここまでの検証の通り、

相場が上抜けした場合には、リスク無しで全部決済し、やり直す事が出来る。

相場が下抜けした場合に、どこまで市場を追い掛けるべきか、追い掛けられるのか。
下抜けのリスクだけ考えれば良い。

その時のリスクと利益がどうなるのかが、最大の課題。

  • 資金 >> 最大費用 = 本体費用 + トラップ費用
  • 本体費用 = ((仕掛け開始価格) – (想定最安値) + 0.04 * (現在価格)) * 本体ポジション数
  • トラップ費用 = ((現在価格) – (平均価格) + 0.04 * (現在価格)) * トラップポジション数

もう一点。
重要で注意が必要な両建てのメリットとして、
ポジション数に対する証拠金が少なくて済む
というのがある。

買いと売りを比較して、
ポジション数の大きい方の証拠金で計算する証券会社が多い。

スワップが多い方が良いのか?少ない方が良いのか?

本体の仕掛けは
上抜け以外では決済しないので、長期間保持することになる。

という訳で、スワップがもらえる方向で仕掛けを作った方が得ではある。

ただ、
証券会社によっては、
マイナススワップがかなり大きいので注意は必要。

トラップのポジションを持ち越すことが少ない通貨なら、
スワップの多い方が良いので、
トラップ幅よりも十分値動きが激しくなるようにすると良いんだろう。

どの通貨に向いてそう?

当然ながら、
底値に近い通貨の方がリスクは少ない。
証拠金も少なくてすむ。

ただ、落ちる余地が少ないと、
ショートで利益を詰み上げる効率が悪い。

スワップがそんなに多くなくて下落余地があるのは。。。

ユーロ、ポンド、カナダドルあたりか。

「出口」とは?

今のところ、反対売買のトラップが失敗した時の保険の役割しか見出せていない。

出口に設定するのは、
単純に資金との兼ね合い。

もうちょっと考える事にする。

くるくるワイド、ここまでのまとめ

  • 本体の仕掛けと反対売買の細かなトラップを組み合わせる
  • 本体の仕掛けは、絶対にロスカットされない価格とポジション量の範囲を尊守するけ
  • 相場が上抜けしたら、損益分岐点の手前で全部決済する (やり直す)
  • 相場が下抜けした場合でも損切りせず、資金の範囲でトラップを追従させ続ける
  • 更に、確定利益の運用や、固定ショートなどの、積極的リスク管理を加える

ん?

これって

普通のトラリピに
反対方向の指値ポジションを加えるのと同じ?

含み損状態のまま塩漬けになりがちな、
トラリピの高値ポジションを相殺するのに使えそう。

Windows版 OpenCV 3.0 のコンパイル

必要にかられてOpenCVの機械学習を使い始めたのだけど、
ひどく遅くて仕事にならない。

配布されたライブラリだと
シングルタスクでしか動かないらしい。

12コアのCPUを積んでるのに、1コアしか使わないなんて…

そこで。
TBBやらCUDAやらを有効にして再ビルドすることにしたのだけど、
機械学習関係は最新版が色々良いらしい。。。

との風の噂を信じて。
バージョンを 2.4.11から3.0へバージョンアップ!

リリースしたての 3.0.0。
マイナーバージョンが0ってのが、身の危険を感じさせてくれます。

とは言え
どうせビルドするなら、
トラブル解決ついでに新しいAPIの流儀を覚えるのも悪くない。
いいかげん、手持ちのプロジェクトに残ってる OpenCV1の名残を消したいし。

ビルドの基本的な作業は
アーカイブ展開 → cmake → VisualStudio でビルド
という手順。

なのだけど、
リリースホヤホヤの新作だけに、
オプション全部入りにしておいて終夜稼動でビルド。
翌朝 にっこり。

と言う訳には行かない。

今回必要なオプションは
CUDA 5.5、TBB、EIGEN、contribのmoduleのいくつか。

opencv3.0とcontribのアーカイブはgitからクローンし、
TBBとEIGENは最新のアーカイブを取ってくる。

CUDAは既にインストール済み。

CUDAを含めたOpenCVのビルドにはべらぼうな時間がかかるので、
まず最初にTBBとEIGENだけ有効にしたCPUだけの環境をインストールした。

このOpenCV3環境を使って、
手元のプロジェクトをOpenCV3対応に修正する作業の裏で、
CUDAを有効にした環境のビルド作業を続ける。

でもでも。
CUDAを組込む前から、
既に恐しく高速化された関数群の恩恵に感動!
TBBの影響かな?爆速です。

中の方々に感謝です。

が、
このgit版のソースでは、エラーが多くてCUDAを組み込んだビルド諦めた。

中の方々に感謝しつつ、
CUDA版は3.0リリース日に固められていたアーカイブを
ダウンロードして使うことに。

contribのmoduleでソースの修正が必要そうなものは、
CMake でチェックを外してスキップすることにし、
再びビルド。

待つこと半日。
ビルドが遅いのは、VisualStudio版のcudaのコンパイラnvccのせい。
Linux版のnvccは速いのだけどね。本当、遅い。

3度ほど、この作業を繰り返して
必要なライブラリ群は、ビルドとインストールが完了した。

仕事しながら裏で作業していたとは言え、
全部合わせるとcuda版のビルドに2日かかったことになる。

大昔のntemacs並ですわ。

悲しいのは
python用のbindingがビルドできなかった事。
まぁ、pythonはメインの仕事には使わないんだけど。

あと大事なTipsを一つ。

cmakeでPATHを新たに指定するとき、
PATHにバックスラッシュを含んでいると、
エスケープ記号と間違われて、後でコンパイルエラーになる。

結構後で分かるので、時間のロスが悲しいよ。

スラッシュで置き換えれば、問題なくコンパイルできる。
2.4.11の時は、困った記憶がないんだけどな。

それと、ソースファイルの文字コードでワーニングがしこたま出るけど、
まさか日本語を直書きしている訳ではないと思うので、今回はスルー。

リビジョンが10回くらい上がったら、もう一回ビルドだ!

続・アイネット証券のループイフダンの落とし穴&重複有り設定に注意!

稼ぎ頭の USDJPY B15_B15 が止まっていた!

その原因解明編。

USDJPY B15_B15 を仕掛けたのは、1ドル 125.582円のとき。

慎重に考えていれば、 S15_15 を選んだかも知れないけど、
この時はトラリピとの比較が目的だったので BUY にしたんだと思う。

で、どうやら、ポジション数を50で制限する設定を加えていたらしい。(覚えてないけど)

それなら、0.15*50 = 7.5 円の変動までは対応できたはずだから、
118.0 までの下落までは追従したはず。

ところが。
実際のB15のポジションは 122.751円、
たったの 2.8 円の値幅で、ポジション数50の制限にかかってしまっていた。

当初見込の1/3の値幅で制限にひっかかった訳。

つまり、「重複有り設定」のために想定の3倍のポジションをとっていたと言うこと。
やたらと利益が多かった訳も、これで合点がいった。

これは想像よりも、かなり大きな誤差。
その上、取引履歴を見てみても、成行発注だけに、全く実態がつかめない。

USDJPY B25_25 の仕掛けの方はと言うと、
現在13ポジション(=想定値幅3円)で、その値幅は2.95円 (122.772 〜 125.722)。
ほぼピッタリ、当初の想定通り。
B15より少ないとは言え、このままの調子で行けば、年間30%の利益率を達成できる勢い。

B15_15(重複有り設定) の利益率が異常だったということ。
利益が多いのは良いことだけど、
想定と3倍も違ってしまうのでは、リスク管理もできないので危険すぎる。

で。
これまでのまとめ。

重複有り設定なら、ループイフダンの利益額は、トラリピ強欲設定の倍以上を見込める。
その代りに、リスクは3倍程度に上がる可能性がある上に、事実上リスク管理が出来ない。

「重複有り」の爆発力は魅力的だけど、
ループイフダンは「重複無し設定」が正しい選択の様だ。

巷で言われる様に、手数料の差が結構あるので、
同じ条件なら、トラリピよりループイフダンの方が利益率は高いのは正しいと思う。

ただ、同じ発注条件で比較しても、実態に則した比較の方法とは良いにくい。
それぞれに適した使い方があるのだから、それぞれのメリットを活かした上で比較した。

今後、
重複無し設定で、トラリピとループイフダンの現実的な比較を行ないたいと思う。

でも。
USDJPY B15_15の含み損が無くなるまで、おあずけ。

アイネット証券のループイフダンの落とし穴

先月は、USDJPYのB15_B15で予想外にがっぽり利益を頂いたのだけど、
7月に入ってからサッパリだなぁ… と思っていたら。

稼ぎ頭の USDJPY B15_B15 が止まっていた!

他の売買システムは動いている。

今現在の USDJPY B15_B15のポジション数を計算すると、丁度15万ポジション。
一回につき3000通貨の設定で、50回分のポジションを取って以降、
新規ポジションをとった様子がない。

全然記憶にないけれど、お試しだからと、最大ポジション数を50に設定していたのかもなぁ。

バカだな → その時の自分

それにしても。

アイネット証券のループイフダンは、動作開始した後、設定を確認することが出来ない。
HPを調べたり、ネットで色々検索してみたけど、方法が見付からないので、
多分確認する方法がないんだと思う。

何より、全部決済、この場合は損切り!しないと設定し直せない、というトンデモ仕様なので、
諦めがつく程度には円安ドル高に戻ってもらわないことには、手が出せないのだ。

値動きが激しいぶん、他の仕掛け達が働いてくれるので影響は少なめだけど、
やってしまったなぁ…

python pandas データフレームに空のシリースを追加すると、またしても警告が…

またしても SettingWithCopyWarning の警告が出た。

既にあるデータフレーム(シリーズ)に、空の新しいシリーズを作ってすぐ追加したい場合に。

こんな警告が出てくる。

便利APIやアクセサ経由でデータフレームを操作した時に出た警告と同じだけど、

今度は、自分のコード自体がエラーの発生箇所になってるけど、
指定されたURLを覗いてみると、原因は以前の時と同じみたいだ。

pythonの中で二度呼びされるから、予期しない結果になるかも知れないよ、とのこと。

Since the chained indexing is 2 calls, it is possible that either call may return a copy of the data because of the way it is sliced. Thus when setting, you are actually setting a copy, and not the original frame data. It is impossible for pandas to figure this out because their are 2 separate python operations that are not connected.

The SettingWithCopy warning is a ‘heuristic’ to detect this (meaning it tends to catch most cases but is simply a lightweight check). Figuring this out for real is way complicated.

The .loc operation is a single python operation, and thus can select a slice (which still may be a copy), but allows pandas to assign that slice back into the frame after it is modified, thus setting the values as you would think.

The reason for having the SettingWithCopy warning is this. Sometimes when you slice an array you will simply get a view back, which means you can set it no problem. However, even a single dtyped array can generate a copy if it is sliced in a particular way. A multi-dtyped DataFrame (meaning it has say float and object data), will almost always yield a copy. Whether a view is created is dependent on the memory layout of the array.

0のリストを二つ作ったつもりが、一つしか作られてないって事なんでしょね。

ちなみに初期値をあたえないで、こう書くと、警告は出ない。

けど、NaNで都合が悪い場合は、改めて初期値を入れてやんなきゃならない。

2015年の6月末までの取引成果

2015年の6月の総利益はおよそ 65万円/月でした。

裁量取引の成果

dyerware.com


2015年の6月の利益はおよそ 10万円/月です。
5月同様、自信を持って狙えるテクニカル指標のシグナルが少ない月でした。
原資を削減した中、不安なく利益を上げられた結果なので、
内容的には不満はありません。

今後の裁量取引の課題

トラリピとループイフダンで、安定した収入を得られるようになってきているので、
裁量取引は無理をしないようになってきました。

裁量取引に割り当てた予算と利益率からいっても毎月10万円前後度が妥当な範囲なので、
市場の方向性が明確になるまでは、このペースで行きたいと思います。

裁量取引の7月の目標は、10万円とします。

トラリピ/ループイフダン成果

トラリピとループイフダンも振り返りたいと思います。

dyerware.com


中旬からのオセアニア通貨の不振と
ループイフダンの比較実験のためにUSDJPYの仕掛けを変えたことで、
トラリピのリピート分の利益は先月の半分程度に下がっています。

一方で、
高金利通貨達のポジションを増やした分のスワップ増加があること、
ループイフダンのUSDJPYの利益が20万円以上になったことで、
全体的には先月よりも良い成績になりました。

今月は、
先月の爆発的なリピートと比べて、下落以外の値動きが極小さい月でしたが、
それでも、月間で同等以上の結果が出せたことには驚きです。

ループイフダンは、仕掛けを選べば、レンジ相場の強い見方になりそうです。
この事については、別記事で継続して検討していきます。

今後のトラリピ/ループイフダンの課題

安定して利益を上げ続けるためには、
NZD、AUD、TRY、USDの仕掛けが交互に働いて欲しいのですが、
徐々に、そういう恵まれた環境では無くなった来た様です。

主力のNZDJPYとAUDJPYが不調です。

dyerware.com



dyerware.com



dyerware.com



dyerware.com


元々高金利通貨に政治や地政学的なリスクは付き物ですが、
NZDJPYに政策的リスク、AUDJPYに経済的リスク、
TRYJPYに政治的リスクが表面化してきました。

リスクの程度としては、 NZDJPY > TRYJPY > AUDJPY と考えていますが、
既に高値圏にいるAUDJPYとNZDJPYには要注意です。

AUDJPYの比率は既に充分下げているので、
今後はNZDJPYの比率を、今の7割位まで徐々に落していきます。

ちょっと遅かったかも知れませんが。。

また、
当面は円安進行を見込んでいるので、全てクロス円で取引していますが、
ドルストレートを加えることも考えます。

底値に近づいていて、スワップも良い NZDUSD が、今の有力候補ですが、
歴史的な底値にはまだまだ遠いので、そこまでどう凌ぐかが課題です。

USDJPYは、130円前後まではループイフダンの買いで攻めますが、
売りに変更する時期をいつにするか、良く検討する必要があります。
これは別記事で検討したいと思います。

トラリピ/ループイフダン考察

ループイフダンの特徴を活かすと、資金効率を改善することが出来そうです。

dyerware.com



dyerware.com



dyerware.com



dyerware.com


別記事で紹介した通り、レンジ相場でも、荒れた相場でも
トラリピと同等以上の成果を上げてくれました。

トラップの設定枠から外れて利益機会を逃すこともありませんし、
トラリピよりも、もっと放置する自動運転に向いています。

一方で、ループイフダンはリスク管理が難しい面があり、
トラリピの様に細かく調整することが出来ません。
継続して検討が必要です。