【不定期更新のとりとめもない話】ゼロからはじめるEA開発日記~(その12)エントリー条件をプログラムで見つけ出すには~

前回の開発日記でも書いたが普通に開発しててもまともなEAを作るのはかなり難しい。裁量でよほど勝てていれば別であるがそんな場合はまれである。また裁量で勝てていたとしてもそのロジックをEAに落とし込むのはかなり難しい。かといってエントリー条件をプログラムで解析するとなると組み合わせ爆発(NP困難)になってしまう。プログラムでエントリ条件を見つけ出すにはどうしたらよいのだろうか?

注意事項

本記事はFXの自動売買について紹介していますが内容を保証するものではありません。金銭にかかわる内容であるためご注意ください。参考にする場合は自己責任でお願いします。

EA実装の難しさ

普通の手順で開発してても無理な気がしてきた。

裁量で勝てていてもEA実装は難しい

EAで取引する場合は裁量の感覚をすべて数値化して実装しなくてはならない。何となくがまったく許されない世界なのでルールではなく感覚に頼っている場合はEA化できない。ルールがあったとしてもEA化が難しいケースもあり簡単ではない。

【不定期更新のとりとめもない話】ゼロからはじめるEA開発日記~(その5)裁量取引のプログラミング化が想像以上に難しい~

作成するEAの9割がゴミ

裁量で良しとされる方法で色々なEAをつくってみたものの9割がゴミ。なので巷にあふれている手法のほとんどが検証したらマイナスということがよくわかった。相当特殊な条件を組み合わせないとまともに勝てるEAはつくれない。

【不定期更新のとりとめもない話】ゼロからはじめるEA開発日記~(その11)EA設計について再考してみる~

バックテストの信頼性

ちょっと厳しめの条件にしてもバックテストとフォーワードテストとの乖離が大きい。以前の記事でもいったがスプレッドの広がりや約定タイミングなどバックテストにない不利な要因がありすぎる。なのでバックテストでかなり好成績をだしていないとフォワードテストで歯が立たないことが多い。

【不定期更新のとりとめもない話】ゼロからはじめるEA開発日記~(その10)FX作業を中断した理由~

EA開発を根本から見直す

プログラムを使ってエントリー条件を自動抽出するしかない。

通常のEA開発

通常のEA開発では勝てる見込みのあるルールを見つけそれをプログラムに落とし込んでいく。ルールは裁量経験が多少でもあれば「こんなチャートだと勝ちやすい」ってのがあるのでだいたい目星はつく。

開発手順
  1. エントリーと決済のルールを設計する
  2. ルールをEAで実装
  3. バックテストでパラメータ調整
  4. フォワードテスト
  5. 本運用

筆者の裁量の腕前はプラマイゼロか微マイナス程度である。なので筆者の感覚をEAに落とし込めば大きなマイナスにはならないだろうと考えたが・・・。開発したEAはバックテストの時点でほぼ壊滅状態。どんなに複雑なエントリー条件を設定してもバックテストでプラス収支になることはほとんどない。EA化してみると普段やっている裁量取引ルールがどんだけあいまいなものなのかよーくわかる。根本的にルールがダメなのか無意識部分がEAに反映されていないのかはわからないが上手くいかない。

組み合わせ条件の手動検証は不可能

ダメならダメで条件を組み合わせたり変えたりすればいいのではと思うが意外に難しい。条件どうしの相性もあって中々いい条件を見つけることができない。例えば中期MAの動きとBB2αの相性はいいが短期MAと相性が悪いなどどの条件がどう作用するかはバックテストしてみないとわからない。チャートを分析してある程度予測はできるものの役に立たないことが多い。条件の組み合わせを考えるとほぼ無限大で手動では処理できない。

目視チャート分析

一時期特徴的なチャートを1,000枚くらいスナップショットして分析したがまともに成果が出なかった。筆者の分析が悪いのかEA実装がわるいのかわからないがチャートに潜む共通のポイントを見つけ出すのは想像以上に難しい。昔は手動で目視検証をしていたが今考えると無理があるように思う。

条件の自動抽出

筆者は一応ではあるがAIやビッグデータ分析の開発をしたことがありある程度の知識はある。

ビッグデータと言えば併売分析などが有名なところ。売上データから缶ビールのケースとおむつの購入が同時に行われやすいのをみつけるなど。データからある法則を導き出す方法。チャートから値動きがある方法を見つけ出すのもこれと同じ。ただビッグデータ分析はデータアナリストなる専門職が色々なクエリーを使ってDBをこねくり回してるので、これをFXのチャート分析に当てはめるのは難しいだろうか。ただ大量のデータ(チャートの情報)から何らかの法則を導き出すという方法論については同じである。

AIでは通常コンピューターでは普通に処理しきれない問題(NP困難)を処理することがある。こちらは有名なところだとビンパッキング問題や巡回セールスマン問題などがある。FXの課題も同じでエントリー条件がそれぞれのエントリーポイントでトレードオフになっている場合が多く大量の組み合わせによる検証が必要になってくる。ただ目的はただ一つで資産を増やすだけなのでそのゴールにたどり着く条件をどうやって見つけ出すかがポイント。

AIの汎用パッケージは使えるか

ちょっと検証していないので何とも言えないがFXチャートの分析に汎用パッケージは難しい気がしている。もし使うとしてもかなりカスタマイズが必要。自分でソルバー(最適数値を求める機能)作った方がやはい気がする。

チャート分析システムを自作

色々と考えた結果自分でチャートを分析するプログラムを開発することにした。MT4で使用するMQL4はC言語ベースでちょっと扱いづらいのでシステムはJavaを使って構築予定(現時点で進捗5割程度)である。システム開発のベースにMQL4はいくらなんでも辛すぎる。ただチャート操作はMQL4の有利な点もあるためMQL4とJavaで組み合わせた方がよさそう。MT4でしかできない部分は最小限にしてあとはJavaにまかせる感じだろうか。

まとめ

EA開発をしていて行きついた答えが「チャート分析プログラム」である。人の力だけで分析するのは不可能だと思う。しばらくはこのプログラム作成に時間を費やしたいと思う。

ポイント
  • エントリー条件を手動で見つけるのは難しい
  • 良い条件を見つけないとEAの成績は良くならなに
  • チャートから条件を見つけ出すようなプログラムに可能性あり

筆者はプログラミングが一切苦にならい特異体質です。