概要
FX自動売買プログラムを作るにあたって、知っておくべき基本的なことと、ベースの設計についてまとめた。
この記事は、ワイみたいなプログラミングがもともとできて、トレードを少しかじって、EA作ってみようという人を主にターゲットにしてるわよ。
いくつかトレードにおける基本知識が必要なこともあると思う。わからないことがあったら質問してもいいわよ。
はじめに
前回の記事 - [EA億り人計画 序章]自動売買プログラム(EA)を自作して、億り人になるために色々調べてみたにおいて、FXの自動売買プログラムをMT5というソフトを使って、MQL5言語で作ることにした。
MQLプログラムの種類
MQLプログラムには2種類ある。
- インジケーター/指標 (チャート上に時系列のデータを表示できる)
- EA (オブジェクトの描画やトレードができる)
このどちらかでしか作ることはないらしいし、どちらかにしかならないようになっているようだ。
EAプログラムの基本
構文はほとんどC++に近いそうだ。(C++詳しくない)
基本的にオブジェクト指向かつ静的型付けのコンパイラー型言語である。モダンエンジニアな人たちはコンパイラーあんまり使ったことないかもね。
(ちなみにインジケーターは今のところ雰囲気でなんとなくは作れるものの、変数の扱いが独特過ぎてわけがわからないので、まだ詳細な記事は作りたくないぞ。笑)
EAのプログラムは、MT5を起動し、チャート画面に紐づける形で、起動できるようになっている。
そして、起動したEAは、所定の時間になったタイミングや、新たな価格配信を取得した時に処理をし、トレードを実行することができる仕組みとなっている。
そう、EAプログラムは、基本的にイベントベースで動く。
基本の流れ
最低限のEAプログラムは、下記の流れで動作する。
- 起動後に初期処理
- 新たな価格が配信された際の処理
初期処理 OnInit
EAのテンプレートや既存のサンプルソースを開くと、OnInitというメソッドが最初から用意されているが、これが起動時に呼ばれるメソッド。俺達は明確にこれを呼ぶ必要はない。勝手にMT5が呼んでくれる。
ただし、EAをチャートに呼び出したときだけでなく、チャートの時間足を変更した際にも呼ばれるため、少し注意が必要。
チャートの時間足の変更時などは、初期化解除処理 OnDeinit と対になって呼ばれる。
ティックイベント OnTick
最も使われるであろうイベント。価格が更新される毎に呼ばれるので、相場や取引所によっては、1秒間のうちに何度も呼ばれることがある。こちらもMT5が勝手に呼ぶので、俺達はこの中身を編集するだけで良い。
絶対に1秒や1分のうちに1回呼ばれるとは限らないので、その場合は EventSetTimer()とOnTimerを使う。こちらは逆に、休場日なども呼ばれるため注意。
トレードの流れ
次は、相場をEAで扱うにあたって、どのような処理となるか、ざっくり解説してく。
ちなみにトレードの大まか流れは、人間がどのようにトレードするかとほとんど同じ考え方だと思われる。
大まかなトレードの流れ
まずは、人間の理解しやすいところで書くと次のような感じでトレードする。
- 使うインジケーターがある場合、その設定などの準備をする。
- チャートを監視し、買い・売りのシグナルがある場合、注文を実行し、ポジションを建てる。
- 引き続きチャートを監視し、儲かったときに利益確定の決済をしたり、儲からなかったときに、損切りの決済をする。
- 1に戻る
EAプログラムの処理の流れ
これを、先のEAプログラムの仕様に落とし込むと、こういった処理になる。
- 初期処理
- インジケーターの初期化、変数の準備などを行う
- ティックイベント
- すでにポジションがある場合
- ポジションの利益確定や損切りを行うかどうかの判断を行う
- 買い・売りの条件を判断
- インジケーターや現在価格などをみて、判断を行う
- すでにポジションがある場合
EAのテスト
MT5には、EAを指定期間の過去データでテストする機能が用意されている。また、取引所が用意してくれている、デモ口座での実行もよりよいEAを作るためにおすすめする。
終わり
ある程度プログラミングができる方であれば、最低限これだけあればまずは作れると思われる。
次回は、相場環境についてなども交えて、もう1歩進んだEAの戦略を考えていきたい。