FC2ブログ

機械学習EA出来てはみたものの・・・

EA作成中
06 /21 2020
機械学習でEAを作ったら、いけるんじゃない?という目論見で始めましたが、無理なんじゃ?というところに来ています。
一番大きな理由がオーバーフィッティング・・・カーブフィッティングですね。

既知のデータに対して学習し、「既知のデータで推測可能な」未知のデータを予測、分類するというのが機械学習ですね。

ここが重要→「既知のデータで推測可能な」未知のデータ
FXって違うんですよねー・・・知ってたけどww

既知のデータで学習するしかないのですが、既知のデータから推測できない未知のデータはどうやっても推測できないのです。
まぁ、当たり前 ┐( ̄o ̄)┌ 

2020年1月~3月で学習し、4月~5月のデータでは少し良い感じになったとしても、2019年のデータでは全く通用しないとか、よくあるEAの動きですね。

汎化したらいいのでは?

汎化したら?と思い、いろいろ試してみましたが、汎化しすぎると機械学習する意味もないですよね。
たとえば、ADXが0.35以上はトレンドが発生しそうだからシグナルを通すとか単純なフィルタリングするレベルになってしまいます。
それ以上の学習をさせてしまうとカーブフィッティングになります。

バックテストで最適化しただけでもカーブフィッティングになるのですからね。機械学習なんてしたら完全なカーブフィッティングになることは当然でしょう。

じゃぁ機械学習って使えない?

時系列データの考慮をしたとしても、カーブフィッティングになるのは防げないのでは?と思っています。
なのでRNN、LSTMを使ったとしても「学習」で覚えてしまえば、その学習データのクセを覚えてしまうと思われます。
なので、直接的な使い方は難しいのかもしれません。

カーブフィッティングにならないような学習の方法があれば良いのですけど・・・
例えば、数値をそのまま学習するのではなく、レベルを学習するとかですね。広がりが大きい、中くらい、小さいとか、10.0ずつ区切って10分割で学習するとかが有効かもしれません。

バックテスト

学習したデータと結果はこちら

データ:BB-width,MACD,VQ,ADX
BB-width, 24.396581
MACD,     27.096298
VQ,       32.675617
ADX,       15.831504

accurate =  14.378698224852071  
real accurate =  42.99242424242424

total profit = 985.500000, 
order error= 239 / 528, 54.734848%

2020年1月~3月で学習したモデルで、2020年4月~5月で評価した結果です。
54.73%の勝率で、985PIPSの利益が見込めることになっています。

macdランダムフォレスト-バックテスト

52.88%の勝率で、588.92PIPSの利益になりました。

macdランダムフォレスト-グラフ

macdランダムフォレスト2019-グラフ

上が2020年4月~5月で、下が2019年7月~12月です。
確実に最適化、カーブフィッティングになっています。

次の手はあるのか・・・

機械学習については、まずはこの状態で置いておいて、良い手を思いつけばということろです。
実数から段階表記にして学習という手はありますが、これがダメだと本当に手がないので、他のことをやりながら、進めていくほうがダメージが少ないかもw
( ̄- ̄;)

MT5にもずいぶん慣れてきましたので、単純なシグナルで世にあるインジケータの有効性を調べてみようかなと思っています。
単純なシグナルは、MACDのシグナル線とのクロスとか、ストキャスティクスの80-20ライン越えとか、ボリンジャーバンドの2.5σ越えとかですね。
このシグナルを、このインジケータでフィルタしたら良い結果が得られるのか?とか・・・インジケータ探しをしてみようかと思います。

pythonとMT5の連携もやってみたいですね。

まだまだ夢(右肩上がりEA)の実現へ向かって突き進みますよー
Oo。。( ̄¬ ̄*)




iCustomからライブラリ化

EA作成中
06 /14 2020
インジケータからライブラリへの移植がすみました。
インジケータのコードを切り出してライブラリにするだけなので、OnTickで現在値(始値とか終値とか)の取得をして、整形すればほぼ完了でした。

iCustomでバックテストをしていた時には、テストを行った後は必ずMT5を立ち上げなおさないと、次にエラーが出てテストを連続で行えませんでした。
ライブラリ化後は何回テストしても、そのような現象にはならないです。
iCustomの不具合??

ただ、以前から出ているティックデータが取れない現象は続いています。
これは何でしょう???

新たな問題

予測結果が100%になる不具合は修正できたのですが、修正すると予測結果が40%台がMAX
(_ _|||)

うむ~~~~
学習方法を工夫してみても50%台がベスト。こんな感じです。
202004-macd-いまいち

まぁ右肩上がりと言えばそう見えますけどねー
良いような、あまり意味ないような・・・

そして他の年度でも試してみました。2019年です。
macd2019-いまいち

2019年の1月から7月までのティックデータが取れない現象が出ていますので、8月以降のバックテストですね。微妙ですねー
┐( ̄- ̄)┌ 

2020年よりも2019年の方が(どちらかと言えば)いまいちです。原因は何だろうと考えてみると、終値や移動平均値を価格そのままで学習させているからでは?という基本的な考慮漏れww
だめだなぁ、最初に考えていたのに、EA作ることにかかりっきりになると忘れてしまう。

トレンド系のインジケータからオシレータ系に全面的に移行したほうが良いとは思うのですが、それで予測確度が上がるのか?やってみないとわからないですね。

オシレータ系テクニカル

トレンド系のテクニカルはほぼチャートに表示されますので分かりやすいです。
オシレータ系のテクニカルは別窓で表示され(トレンド系でも別窓はありますが)どう見たらいいのかがテクニカルごとに違うのでややこしいですね。

今回使おうと思っているのは、この3つ。
  • Momentum
  • CCI
  • ATR
ストキャスティクス、RSI、ADX(トレンド系ですが)は試してみて、ダメでした。
(あくまでも自分が作っている機械学習ではダメだっただけで、一般的には使えるテクニカル指標です)

いまいちな結果であれば、いろいろなテクニカル指標を順次試していこうと思っています。

機械学習期間macd

こんなバックテストになれば目標達成なのですが、無理でしょうねー
(学習期間のバックテストですw)

パぺ太メモ

iCustomでのEA開発には落とし穴がいろいろありますね。
初めからライブラリで作っておけば良かったと後悔しています。・・・時間の無駄><
まさか、バックテストを連続でできないのもiCustomが原因とは思いませんでした。

ティックデータが取れない現象はまだまだ続いています。
MT5特有の現象とは思いますが、自分のEAが悪いのかMT5が悪いのかブローカーサーバーが悪いのか全く切り分けができないのが辛いです。

EAの評価ができないわけではないので、まずはバグのない右肩上がりのEAを目指しましょう。
o( ̄ー ̄)o



EA作り直し?!iCustomの罠

EA作成中
06 /05 2020
iCustomの罠というか、ただ単に自分が勘違いしていただけというか・・・
(_ _|||)

インジケータで売買シグナルをチャートに表示し、そのデータをiCustomでインジケータバッファから読み取り、オーダーをかける。
まぁ読めば普通に聞こえるし、できそうに思います。というかiCustomってそういう使い方OKでしょ?って思うのは自分だけかも?

でも、できません。いや、できるかもしれませんが、自分は諦めました。
iCustomってEAがインジケータのバッファを参照できる仕組みです。
  • EAはOnTick関数でバッファを見に行きます。
  • インジケータはOnCalculateでバッファにテクニカルを描画します。
EAがインジケータに描画を依頼するわけではなく、インジケータがバッファに描画したと報告するわけでもなく、どうやってEAはインジケータの【更新データを漏れなく】受け取れるのでしょう?

グローバル変数でインジケータの状態を書き込み、EAで監視するなどの方法もありますが、これもEAが更新をスルーする可能性が高い、基本的にEAとインジケータは同期して動けませんし、同期させるとMT5の動作が不安定になる可能性があると思います。(Mutexなどで片方を止めておくなどの方法で同期させた場合)

インジケータの描画OnCalculateのタイミング、EAのOnTickのタイミングはMT5の勝手です。(仕様とかあるかもしれませんが、ググっても同期方法がヒットしない・・・)

解決方法は?

簡単です。作り直し。(TヘT)

よく考えると、iCustomってインジケータはテクニカル表示して、EAでシグナルの判断していますよね。これが正解な使い方です。

今回作成しているのは機械学習EAなので、インジケータでも機械学習のシグナル、EAでも同様なので、インジケータで行っている計算などを全部クラスライブラリにして、includeファイルにしてしまいます。
これをインジケータで表示できるようになれば、エンジン部分は共通で、インジケータとEAは側だけ作れば良いということです。
まぁ、MT4の時にやっていた方法に戻ります。

やることは増えましたが、解決する可能性の低い方法に固執していても時間の無駄ですからね。

データが取れない、その後


データが取れない

バックテストをすると、こんな状態でした。
リアルティックが取れないよーってエラー、知らんわ!ググっても有益な情報もなく・・・
OANDAのせいかなぁ・・・と、途方に暮れていたら、「まさか?!」MT4で「n/a」になった時のように、データの齟齬が起きているのでは?と思いつき、
ティックデータを読み込んでみました。

ティック読み込み

やったー( ̄。 ̄)
バックテストでエラーが出なくなりました。

OANDAさん疑ってすみませんでした><

パぺ太メモ

さて、今週末はライブラリを作ってインジケータ、EAを動かすぞー

バックテストでのエラーも解消したし、大きな問題が起きなければ来週末にはある程度、形にできそうですねー
大きな問題・・・何か忘れている気が?
そういえば、機械学習の予測100%はバグが見つかっていない><

EAが動いて正常にデータ収集ができるようになってからまた予測させてみよう!


パペ太

パペ太は自動人形(EA)を操るという意味で、puppeteer(人形遣い)から付けました。
高収益のEAを目指して日々悩んでいます。