機械学習で未来のレートを予測できるか(第一弾)

細かい話はいいので、機械学習のEAが欲しいという方はこちらからEA申請してください。

方針

最近、機械学習(AI)で為替予測なるものが徐々に増えていますが、1日以上先の中長期の予測が多いようです。しかし、為替は経済指標発表や要人発言といった外部要因だけで大きく動きます。
機械学習(AI)は、過去のレートなどの情報から未来を予測するので、こういった外部要因を加味することはできません。

そこで我々は30分という短い未来を予測できるかを試します。
30分以内にわずかに6pips獲得できるかを予測することで外部要因を極力排除します。

USDJPYをBUYする例

現在110.115円が30分以内に110.175円に上がるかどうかを予測

機械学習の概要

学習データ

  • 30分以内に6pip上がるか、もしくは6pips下がったデータを正解データとする
  • 大きく負けるのは困るので逆の方向に18pip以上うごいたものは正解データから外す
  • 通貨ペアはEURUSD (他も試していますが、似た結果なので掲載するのは1つに絞ります)

学習ロジック 

  • シンプルにランダムフォレストで学習
  • 決定木の数は学習しながら複数試す

主な説明変数(重要度が高い順番に)

  • 価格変動の標準偏差
  • 一定期間内の高値、安値
  • 企業秘密のパラメータA
  • 時間帯
  • 移動平均

学習期間と検証期間

  1. 2007年~2012年の5年で学習し、2013年~2017年6月の4年半で勝てるかを検証。決定木数などの各種パラメータを調整。
  2. 過学習していないことを確認するため、最新の期間から1年を残して過去5年間を同じパラメータのまま学習し、最新の1年間でも勝てるかを検証。

システム構成と検証方法

下記のように、モデル構築とAPI運用にわけた構成です。

検証方法

  • MT4から1分に一度APIを呼んで確率を取得
  • 算出したCSVをMT4に読み込み、確率が70%のときに取引を開始(Open)
  • Open後は6pipで利益確定、-18pipで損切

    本番運用

    • MT4から1分に一度APIを呼んで確率を取得
    • あとは検証と同様のロジックで取引

    学習と検証の結果

    2007年~2012年の5年で学習し、2013年~2017年6月の4年半で勝てるかを検証。下記の通り、激しく勝ちます!

    過学習していないことを確認するため、最新の期間から1年を残して過去5年間を同じパラメータのまま学習し、最新の1年間でも勝てるかを検証。PF値が1.4になり、さらに勝ちます!これはもう完璧だと思い、ドキドキしながら本番運用に進みました。

     

    実際の取引と結果の考察

    実際の取引結果 
    約2か月運用しましたが、結果としては130pips負けました。。
    EURUSD以外の通貨ペアも取引したので、いろいろ混ざってしまっています。
    実は2年前に検証したロジックなので、日付は少し古いです。

    考察 
    こんなに安定していたのに、なぜ負けたのか。。
    最も可能性の高い理由は、学習で「Spreadを加味していない」ことです。
    取引履歴を見ると、レートの動きが活発な時間が多いため、Spreadが広がったタイミングで取引をしていることが多いです。

    MT4でSpreadが広がっている時間には取引しない条件を入れることもできますが、根本解決にはなりません。学習自体にSpreadを加味できていないことが問題です。

    今回はBidで学習していますが、例えばBidが100.110、Askが100.120だとSpreadが1pipですが、Spreadが9pipsに広がった場合、BidとAskの平均値を中心にBidとAskがそれぞれ広がり、Bidが100.070、Askが110.160になります。

    つまり何も値動きがないのに、Bidだけ見ると4pipも動いたことになります。これでは誤ったデータで学習したことになります。

    次回 
    次回は、BidとAskの中間値で学習をしてみます。
    さらにほかにも色々と改善を盛り込んで追加検証を続けます。
    上手くいったら、EA配信も考えていますので、乞うご期待!
    第二弾の改善版はこちら

    機械学習の最新版は激しく勝てるようになったので無料EA配布始めました。
    EAが欲しい方はこちらからEA申請してください。

    おすすめの記事