MT4ツール|Python連携bot-インジケータの値をファイル出力
今回公開するツールは、Python等のような MT4の外部アプリ/スクリプトから、MT4を操作するためのツール(=bot)です。
前バージョンでは、任意の文字(列)をチャート画面に表示する機能のみを実装していましたが、今回は、各通貨ペアの4本値、移動平均線、ボリンジャーバンド、一目均衡表、MACDなど 各種インジケータの値を 出力する機能を追加実装しました。
本ツールの基本的な 動作は、前回記事(前回バージョン)と同じです。
動作イメージ
まずは 登場人物の紹介的な 全体像説明です。
下の図1にあるように MT4上のインジケータとして動作する本ツール(=bot)は、PythonなどのMT4の外で動作するアプリやスクリプトと連携して動作させるためのものです。
連携するために 両者の中間に2つのファイルを仲介として配置します。
1つは、いま どちらが 何の処理をしているのかという状況を示したり、本ツールに指示するコマンドを渡すための「コントロールファイル」。もう1つは コマンドの詳細(表示させる文字列)や本ツールが処理した結果(各種インジケータの値)を渡すための 「データファイル」になります。
実際の動作は、PythonなどのMT4の外部アプリ/スクリプト側からの指示から開始されます。本ツールは(現時点のバージョンでは)常に受け身で動作します。
図2のように Python等からの指示を受け、その結果を画面やデータファイルに対し処理を行います。このツールが処理をおこなった後は、コントロールファイルに その旨を記載することで Python等に処理のイニシアティブを渡します。
「Pythonが指示→本ツールが処理→Pythonが結果受け取り→(繰り返し)」
出力可能なインジケータ
前回バージョンでは文字列処理のみが可能でしたが、今回はMT4が保持しているデータ(=インジケータの計算する値)をファイル出力する機能を実装しています。そのため、以下の通り コマンドが増えています。
以下、コマンドと そのコマンドで処理される動作のリストとなります。
100 : 文字列の表示
201 : 4本値(現在の値のみ)
202 : 4本値
203 : 移動平均線
204 : ボリンジャーバンド
205 : 一目均衡表
206 : MACD
207 : RSI
208 : ストキャスティクス
※ コマンド「202」以降は、過去の履歴をファイル出力できます。最大数は MT4保持している分までとなりますが、出力する数は 指定し絞り込むことができます。
出力イメージ
出力されるファイルはCSV形式ですが、エクセルで開くと以下のようになります。これはコマンド208番のストキャスティクスを指示した結果になります。コマンド203から208番は、4本値と一緒に出力します。
もうちょっと詳しい指示方法
1行目:(通貨ペア),(時間軸) [ex]GBPJPY-cd,H1
2行目:(現在価格から出力する数) [ex]100
3行目以降:(コマンドによって変化;以下を参照)
201 現在足の4本値(上記の1行目のみを記述。2行目以降は不要)
202 4本値:(上記の1,2行目を記述。)
203 4本値+移動平均線:(メインラインを計算をする平均期間),(移動平均シフト),(移動平均メソッド(0-3)=ENUM_MA_METHOD列挙の値を指定) [ex] 25,0,0 *移動平均線は3本まで描画可能/適用価格はPRICE_CLOSE=終値に固定
204 4本値+ボリンジャーバンド:(メインラインを計算をする平均期間),(バンドシフト),(標準偏差1){,(標準偏差2)}{,(標準偏差3)} [20,0,5,1,2,3] *標準偏差は3組まで描画可能
205 一目均衡表:(転換線期間),(基準線期間),(先行スパン期間) [ex]9,26,52
206 MACD:(ファーストEMA期間),(スローEMA期間),(シグナルライン期間),(適用価格=ENUM_APPLIED_PRICE列挙の値を指定) [ex]12,26,9,0
207 RSI:(平均期間),(適用価格=ENUM_APPLIED_PRICE列挙の値) [ex]14,0
208 ストキャスティクス:(%K期間),(%D期間),(スローイング),(平均化メソッド),(価格フィールド(0:Low/High または 1:Close/Close)) [ex]5,3,3,0,0
設定例
以下の通りに設定できれば 手動でも指示を与えることができます。
このツールを起動した後、所定のフォルダ(MT4フォルダの\MQL4\Filesフォルダ)に以下の順に2つのファイルを配置してください。
ここでは移動平均線を3本出力することを指示してみます。移動平均線は、それぞれ短期移動平均線25日、中期75日、長期120日にしました。
さきにコントロールファイルを置いてしまいますと、処理を開始してしまいますので、最初にセットするのはデータファイルの方になります。
1行目には 通貨ペア名、時間軸を記述。なお通貨ペア名は お使いのMT4(FX会社)によって異なる場合があります。ご確認のうえセットしてください。
2行目には出力する データ個数。ここでは100個出力します。0を記述するとMT4が保持している時間のすべてを出力します。
3行目以降は 出力させたい移動平均線のプロパティになります。それぞれ左から、期間、シフト数、および 移動平均メソッド(SMAとかEMAのこと)になり、ここではSMA(=単純移動平均)とします。
ファイル名は、「eimCsvExec_data.csv」としてください。拡張子は.csvです。
データファイルを保存できたら、続いてコントロールファイルをセットします。図4の内容です。こちらは1行のみ、2項目だけです。
「190」はステータス情報です。意味は、百の位が”Python側が書き込みをしている”をあらわし、十の位は”Python側の処理は完了”、一の位は ここでは意味なしです。詳しくは前回の記事を参照ください。
2つめの項目は、コマンドです。ここでは、移動平均線の出力を指示する”コマンド208番”を記述します。最後に、ファイルを「eimCsvExec_ctrl.csv」として保存します。
コントロールファイルを保存後、デフォルトでは 7秒以内に処理が開始されます。僕のノートパソコンでは すぐに処理は完了しています。
プロパティ設定
動作間隔 : このツールが 指示を確認する間隔
表示位置 : コマンド100番のチャート画面に文字列を表示する際の位置情報になります。
以下に ex4 ファイルを公開します。ver 1.10になります。
まだまだ エラー処理が 不十分ですので おかしなコマンドを渡すと動作停止になることがあるかとおもいますが 許してください・・。
PS
あまりPython連携にニーズがないようでしたら エラー処理が簡易になるので 完全手動動作版に書き換えることも検討しています。うーーン、Python連携の需要あるといいけどなぁ どうかなぁ。。
この記事が気に入ったらサポートをしてみませんか?