FXの環境認識に機械学習を使ってみる(機械学習1回目)

2018年10月26日

ネットワーク

前々からトレードに機械学習を組み込みたかったので、実際に試してみようと思います。

まずは、シンプルにチャートの環境認識をするところからスタートします。

用語の確認

前提として理解しておきたい用語を記載します。

機械学習とは?

機械学習(きかいがくしゅう、英: machine learning)とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

人工知能の一分野として機械学習があります。

また、機械学習は大きく分けると、「教師あり学習」と「教師なし学習」に分かれます。

 

教師あり学習

例えば、この画像は上昇トレンド、この画像は下降トレンド・・・・というように人間が答えを教える方法です。

 

教師なし学習

例えば、100枚のチャート画像を与えたら、いい感じに5種類に分類してくれる・・・・というように人間が答えを教えなくても一定のルールに沿って答えを導きます。

 

環境認識とは?

ネットで調べても、はっきりとした定義が見つかりませんでした。

ここでは、「大きなタイムフレームでチャートを見た時に、どういう状況なのか?」を確認することとさせてください。

具体的には、日足を見て上昇トレンドにある、下降トレンドにある、横ばいである・・・といったトレード前の全体的な状況を把握することです。

 

詳細に落とす

冒頭に記載しましたが、環境認識を機械学習で実現したいです。

今回は、クラスタリング(教師なし学習)で分類したいと思います。

 

準備するもの

チャート画像

通常はネットから拾ってくるのでしょうが、少しでも分類の精度を上げたいので、自分で準備します。

MT4のチャートをスクロールしながら、地道に右クリックして保存しました。

 

分類プログラムの準備

Kmeansという、クラスタリングでは最も基本的なアルゴリズムを使います。

 

実行結果

1回目

[条件]

ローソク足のスクリーンショットで実行しました。

枚数:50枚

1回目のスクリーンショット

[結果]

上昇トレンドと下降トレンドの区別が全くつかず、一貫性のない分類でした。

そもそもがトレンドを判定したいのに、陽線は中抜きで陰線は塗りつぶしという部分で判定できなかった可能性が高いです。

 

2回目

[条件]

ローソク足ではなくラインチャートに変更して実行しました。

枚数:40枚

2回目のスクリーンショット

[結果]

分類できませんでした。

一瞬上手く分類できたように見えたのですが、よく見てみると背景のグリッド毎に分類されたようです。

 

3回目

[条件]

背景のグリッドを消して実行しました。

枚数:50枚

3回目のスクリーンショット

[結果]

分類できませんでした。

 

4回目

[条件]

ライン以外を全て削除して実行しました。

枚数:70枚

4回目のスクリーンショット

[結果]

分類できませんでした。

この後に、画像のサイズを変更して何回か実行したところそれなりの分類ができました。

以下が分類した結果の一部です。

 

[下降トレンド気味]

下降トレンド

 

[上昇トレンド気味]

上昇トレンド

 

ただ、完全に同じ画像を70枚使って2回分類した場合でも、以下のように大きな誤差が出ることがあり、安定しません。

  • 1回目・・・69枚と1枚
  • 2回目・・・20枚と50枚

69枚と1枚のパターンでは何も分類できていないのと同じなので、かなり厳しい結果です。

また、8つに分類した場合は、「1個、1個、63個、1個、1個、1個、1個、1個」のような結果になってしまいました。

[ここまでで分かったこと]

  • 画像のサイズが結果に大きく影響する
  • 実行するたびに結果が大きく異なる
  • 3つ以上に分類した場合、更に精度が悪い

[仮説]

ラインチャートでは、背景に占めるラインの割合が小さすぎて上手く判定できていないのではないか?

 

5回目

[条件]

次はローソク足を全て白塗りにして試してみました。

また、なるべく白の割合を増やすために、縦長の画面にしました。

枚数:50枚

白黒のチャート

[結果]

ある程度上手く分類できました。

また、複数回実行した場合でも結果の誤差が少なくなりました。

 

[下降トレンド気味]

白黒の下降トレンド

 

[上昇トレンド気味]

白黒の上昇トレンド

ただ、分割数を4以上にすると精度が落ちます。

 

課題と改善点

課題

  • 上昇下降はとらえられたが、その他の細かい分類ができない
  • 実行するたびに結果が異なる

 

改善点

  • クラスタリングのアルゴリズムを変えてみる
  • ラインを更に太くする
  • ラインやローソク足は角ばっているので滑らかな移動平均線を使う
  • 教師ありで分類してみる

 

最後に

課題や改善点は沢山ありますが、どうにかクラスタリングできたのではないかと思います。

最終的には、Pythonで環境認識した結果やチャートパターンを自動売買ルールの1つに組み込みたいです。

 

[機械学習をやってみた感想]

これまでは書籍や動画で機械学習を学んできただけでしたが、実戦で使えるように試行錯誤しながらやってみると、楽しさと本気度が全く違いました。

今回の収穫は、前処理の「重要性と難しさ」を身をもって経験できたことです。

前処理自体にもしっかりした設計が必要で、設計するにはモデルの特性を理解している必要があると思いました。

「今の私には荷が重いな。」というのが正直なところですが、また諦めずにチャレンジしていきたいと思います。

 

ここまで読んでいただき、ありがとうございました。

機械学習に興味がある方は、「為替において単回帰分析で何ができるか?(機械学習2回目)」もご参照ください。