Pythonと機械学習

Pythonも機械学習も初心者ですが、頑張ってこのブログで勉強してこうと思います。

決定木アルゴリズムを使った自動取引EAを作成

scikit-learnを使って決定木アルゴリズムにより自動取引させるEAを作ってみました。

BTCUSDの日足チャートで、チャート更新時に明日のOpen価格の上昇・下降を予測します。

上昇シグナル時は買いを入れ、もし買いポジションを持っていた場合は、そのまま保持します。

下降シグナル時は何もしません。もし買いポジションがある場合は決裁します。

コードの解説

iPySafeExec("import numpy as np");

iPySafeExec()は引数である文字列をPythonコマンドとしてそのまま実行します。

iPySafeExec("for i in range(0, theNumberOfTrainAndKyoushiSet):\n   train_X.append(data[1 + i:theNumberOfTrainData + 1 + i])\n   train_y.append(int(0 < data[i]))");

Pythonはfor文やif文は改行で表してやるので、iPySafeExec()に改行文字を渡さなければいけません。 改行文字をn\として記述してやります。

iPyListAppendDouble("data", data);

iPyListAppendDouble()は、EA内のdouble型配列をPython内のdouble型リストにコピーします。

upOrDownRatio=fPyEvalDouble("upOrDownRatio");

fPyEvalDouble()は、Python内のdouble型変数をEA内のdouble型変数にコピーします。

取りあえずこれだけできれば大抵のことはできると思いますが、その他の関数に関してはOTMql4Pyのwikiサイトを参照のして下さい。

バックテストの実施

トレーニングデータ数:36、トレーニングデータと教師データのセット数:36で、期間2016-04-01から2015-08-6までのバックテスト結果です。

f:id:darden:20160807170423p:plain

まあ、こんなもんでしょうね。

バックテストのトレード結果をチャートで見てみましょう。

f:id:darden:20160807171543p:plain

上昇トレンドはうまくとらえてますが、レンジ相場では全然だめですね。

もっと勉強しましょう。