AI「scikit-learn」によるFXテクニカル分析をやってみた

### 目次
１．初めに
２．ドキュメント構成
３．ドキュメント内容（抜粋）
４．印象に残った途中経緯
５．「PDF版ドキュメントと実行用データ一式」入手先

### １．初めに

アメンボです。（もちろんペンネーム）
実は筆者は以前からMT4（MQL4）のEA開発を、半ば趣味で出来れば実益につなげたいと思いながら続けてきており、ここ1～2年は特にMT4とAIを連動させること（特に非テクニカル分析）を主眼にトライしていましたが、なかなか成果が上がらず行き詰まっていました。

そこで、チョット頭休めと言う訳では無いですが、MT4の機能・性能で充分と考えていた「テクニカル分析」にAIを適用してみたらどうなるかを試したのが、『AI「scikit-learn」によるFXテクニカル分析』です。

筆者はAIに関しては初心者なので、これまでにFXテクニカル分析にAIを活用しようとする記事や資料を沢山調べました。（ネットや本）
しかし公開されているものには、残念ながらまともに使えそうなものは見つかりませんでした。
たぶん、非公開の業務用のものには使えるものがあるのかもしれませんが、筆者の様な一般人には手に入りません。

そこで筆者独自方法（たぶん）として試してみたのが、AIで使用する「特徴量」の選定にMT4（MQL4）を活用する方法です、実は使えそうな他のツール（特にPythonベース）を見つけられなかったために取った方策なのですが、たぶん他の開発者の皆さんとの開発プロセス上の違いだと思っています。

現状はプロトタイプ版ではありますが『磨けば光りそうな結果』が得られましたので、皆様に公開することにした次第です。ドキュメント（レポート）はシリーズ化して２つに分けてあります。（現状は2つですが、今後も増やす予定）

### ２．ドキュメント構成

本シリーズは、FX（USDJPY；ドル/円）のテクニカル分析による予測にAI（scikit-learn）を使用した場合のテスト結果を報告するものです。（現状はプロトタイプ版）

**AI「scikit-learn」によるFXテクニカル分析の試み；**
［第1部］と［第２部］に分けてあります。

◎［第1部］を先ず読んで頂き、［第2部］も読む価値がありそうだと判断したら入手してください。
　（入手方法は［第1部］に記載してあります。）

※［第１部］［第２部］ともにPDF形式、またデータはZIP形式で準備しています。
Qiita上にMarkdown形式で全てを記載せず、またGitHubも使っていないのは、筆者の技量ではまだ使いこなせないからです。

### ３．ドキュメント内容（抜粋）

**［今回の目標］**・・ブロック図を参照
　MT4（MQL4）側に渡す価値がある「テクニカル分析結果」をAI側で抽出することです。
　正直、テクニカル分析機能はMT4(MQL4)のもので充分と思ってはいるのですが、
　試してみたところ結構面白い結果が得られました、トライは無駄にはならなかったと思います。
　（AIプログラムはPythonで記述しています）
![19_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/66e01228-5cf0-d390-afe4-0b7cb7a763bb.png)

　※売買情報（データ）をPythonコード側からMT4（MQL4）に渡すための「DLL」とその
　　使い方については、筆者のWEBサイトを参照ください。（DLLも置いてあります）

**［第1部］と［第2部］での解説内容；**
　まず、今回筆者が採用した「FXのテクニカル分析にAIを適用する手順」は下記になります。
![19_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/eceffce4-a080-cae2-56a5-cf3520ebbef2.png)
　※筆者はPython開発環境にSpyderを使っています。

（１）［第1部］は、
　　　最後のステージの実例です
　・為替（FX）チャートから生成済みのDataFrame（特徴量とラベル）と
　　Pythonプログラムを使って機械学習・予測を実施した例を解説。

（２）［第2部］では、
　　　一番初めのステージからDataFrameを作成するまでを実例で解説します
　・［第１部］（別稿）で使用したDataFrame（特徴量とラベル）の生成方法を詳細に解説。

**＜使用インディケータ（例）＞**・・［第2部］掲載
![19_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/9fd745e8-bf4e-84be-f379-cbe84fc606a6.png)
特徴量の抽出に使用するインディケータは、筆者オリジナル（松葉型フィルター）とありふれた
　ボリンジャー・バンドです。


**＜生成DataFrame＞**・・［第1部］掲載
　実例のDataFrameは、1049行まであります。
　・列要素が特徴量とラベル、・行要素がFXチャートから抽出した「データ」です
![19_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/43da9522-6d51-c73b-53d0-c10c5b213ec3.png)

**＜予測結果＞**・・［第1部］掲載、「2例」あります
  下図は記載内容から切り取った画像です（Spyderの出力）
　例1；
![19_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/4ec8235b-a708-85c3-2e7f-e152d29b5317.png)
例2；
![19_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/d4ce79e4-9d10-eb8b-d2eb-297af633db01.png)

**［勝敗判定方法］**
　※勝敗判定は、MT4のEAを作成する場合と同一の考え方を採用しています。
　　つまり、profit（利確レベル）、loss（損失レベル）、spreadを指定して「買い、あるいは売り」
　　からマーケットに入ったときの勝敗判定結果を学習しテスト・データに対して予測を行います。
　　なお、ランダム・フォレストによる「分類」で勝敗「学習と予測」を行っています。

※記載内容を実行するために必要な開発環境（全て無償で入手可能）は［第1部］に記載してあります。
但し初心者の方に必要なPython、scikit-learnやMT4の入手方法、技術的な解説はしていません。
初心者の方に必要な知識の若干は、筆者のWEBサイト（下記）で参照可能です。
・・記載内容の理解に必要な知識は、全てこのQiitaなどWEB上から入手可能なものばかりです。

### ４．印象に残った途中経緯
　※当初、アルゴリズムに「SVC(SVM)」を使ったのですが、その結果（初期に実施した例）は
　　下記の状況でした。
![19_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317816/b7faffc1-8ce7-b9d4-7903-da3de9e87b48.png)
　◆なんと、予測結果が全て「－１」になると言う現象が発生し、いくら色々試しても
　　改善出来ませんでした。（「－１」と言うのは、予測結果が「損切り」の場合です）
　　が、しかし、全体の正解率は「138／210」（66％）となる訳で、理解に苦しみました。

　原因は、SVC(SVM) では特に「不均衡データ」を扱う場合、つまりクラス間でデータ数が
　大きく偏るような対象を扱う場合には、色々と事前の調整が必須であることを知りました。
　（スケーリング、正規化など、ヤヤコシイ調整が必要）
　結局、分類アルゴリズムを「ランダム・フォレスト」に変更して、この厄介な問題を
　回避した結果、かなり納得がいく結果が得られました。

### ５．「PDF版ドキュメントと実行用データ一式」入手先

**◎［第1部］の入手先URL**
**①ドキュメント（PDF）**	；http://mql4.s1002.xrea.com/ai_tec/ai_tec_01.pdf
**②データ一式（.zip）**	；http://mql4.s1002.xrea.com/ai_tec/ai_tec_01.zip
※データ一式には「Pythonコード、DataFrameなど」実行に必要な資料が入っています。
　　
**◎PythonとMT4の連携方法について**
※更新中のサイトです、基礎的な内容もアップしてあります。
  ［アメンボの新ページ］;http://mql4.s1002.xrea.com/ai_mql4/index.html

**◎MT4（MQL4）、EAについて**
※若干古くなりましたが、未だ一読の価値があると思います。
MT4やMQL4の基礎をアップしています、だたし「Build_600」以前（と言うか未満）の
MQL4コード（スクリプト）は、現在は動かすためには、かなり修正が必要なことに、
ご注意ください。
  [アメンボのページ]；http://www.green.dti.ne.jp/sdimension/mql/


**以　上**