見出し画像

MT4ツール|Python連携bot(プロトタイプ版)

PythonからMT4に指示を与えることで チャート画面の左側に文字を描画

※ 新しいバージョンを公開しました。 → こちらから参照ください

Pythonなどの外部スクリプトから指示を受けて MT4のチャート画面に文字列を描画するツールです。このバージョンでは 機能の実装が”文字列の表示”のみですが、今後、4本値や移動平均線の値などをMT4が出力する機能追加を準備しています。→すでに実装したバージョンを公開しました!

このツールは、以下のような使い方をされることを想定しています。なお、簡易的には 手動で指示を出すことも可能なつくりを目指しています(ファイル経由での指示発出、データ受け取りになります)。

  • PythonでWEB情報を収集し、MT4のチャート画面へリアルタイムに情報を表示させる。

  • MT4が保持している4本値や移動平均線の値を このツールが出力(→バージョン1.10として公開しました!)して Pythonに渡すことで、Python側でAI処理させるなどし その結果を再度 MT4側の画面に返し表示。

  • (手動で)データファイルに備忘録などを記載し、チャート画面に常時表示させる。
    などなど

指示の出し方(概要)

テキストファイル(= csvファイル)を経由させて このツールに指示を渡すことで、対話的 かつ リアルタイムに処理をおこないます。

図の下側に配置されている「eimCsvExec」が 本ツールになります

2つのテキストファイル(=csvファイル)は次のように利用します。

  • コントロールファイル(ファイル名: eimCsvExec_ctrl.csv)に現在の状況や 指示コマンドを記述します。
    指示の内容は 次の2つの項目をセットで記述し 相手に渡します。
    1つは Python側とMT4ツール側のどちらが 相手に指示や情報を伝えようとしているのかを示すもので、これをステータスコードと呼びます。「まだ(Python側で)指示書き込み中」、「MT4側での処理頼む」などの状況を互いに伝えるためのコードになります。いわゆる セマフォとしての役割を果たすと理解ください。
    2つめは 指示の内容そのもので、「文字列を描画せよ」などの コマンドになります。

  • 具体的な指示の内容、ここでは文字列の描画方法は、データファイル(ファイル名: eimCsvExec_data.csv)に記述して相手(この場合はMT4側のツール)に渡します。具体的な内容は、描画位置(x,y座標)、文字サイズ、文字カラー、描画する文字列の5つを記載します。ファイル内の各行が1つの文字列の描画指示となり、現時点ではいくつでも、何行でも文字列の描画指示をだすことができます。

具体的な指示の例

  • コントロールファイル:
    同梱のファイルには、あらかじめ「110,100」をセットしています。
    最初の「110」がステータスを表し、この状態ではpython側が準備中であることをあらわします(詳細は後述)。2つめの「100」は、文字列の描画を指示するコマンドをあらわします。
    そのため、このままMT4でこのツールを起動しますと、「110,100」を読み取りに行きますが なにも起こりません。ツールの起動後に コントロールファイルをテキストエディタで開き(手動で大丈夫です!)、1つめの「110」を「190」に変えて、そのままファイルを上書き保存してください。「190」は MT4のツールが指示を受け取り解釈をおこない 与えられた処理をおこないます。そのためMT4のチャート画面には データファイルにて細かく設定して位置、文字サイズおよび色で文字列を描画されます。
    現在は プロトタイプ版のため MT4側のツールから コントロールファイルへのステータス書き換えは行っていませんので、あなたが データファイルの内容を書き換えるたびに チャート画面にその内容が反映されます。いろいろお試しください。

  • データファイル:
    今回は文字列描画のみの機能公開(しかも プロトタイプです)になります。そのためここでの説明も文字列描画のみを想定したものとなります。(今後、機能追加をおこなっていくことで、コントロールファイルで指定できるコマンドが増え、コマンド内容によって データファイルに記述する内容は変わってきます。→すでに公開しました!
    まず、最初の値はX座標(ピクセル)、以降順に、Y座標(ピクセル)、文字列の色指定、文字サイズ(pt)、文字列となります。
    1行に1つの文字列描画指示を記述できます。下図の例ですと 5行ありますから 5つの文字列を描画する指示になりますね。
    なお、この内容のデータファイルを ダウンロードファイル(zipファイル)に同梱しています。

  • 文字列の削除:
    描画の指示をおこなった「行」を空行にしてください。何も記述せず改行にした状態で、またコントロールファイルに「190,100」を記述しておくことで 文字列描画の指示を出しておくと 描画した文字列が削除されます。この方法ですと MT4における”オブジェクト”として削除されます。同様にチャート画面の文字列を消す方法としては、文字列の部分だけを空欄(=座標や文字サイズ、色などを残した状態)にしてもチャート画面では文字列が消えますが ”オブジェクト”としては残っています。ただし、ツール終了時には 削除されます。

  • 配布ファイルのインストール:
    ツール本体(拡張子がex4)は、ご自身のMT4のデータフォルダ配下で、・・・\MQL4\Indicators\の中に格納します。
    指示用のファイル(拡張子がcsv)の2つは、同様にMT4のデータフォルダ配下で、・・・\MQL4\Filesの中に格納します。

データファイルの記述例 5つの文字列を描画させる内容になっていますね

コントロールファイルのステータス詳細

  • まず前提として、PythonなどのMT4以外の外部スクリプトをリーダー役、MT4で動作する本ツールをフォロワーと呼ぶこととします。基本的にフォロワーはリーダーからの指示によって動作します。現時点ではフォロワーが自発的に動作する仕様とはしません。

  • ステータスは、コントロールファイルの1行目の1つ目の数字であらわします。3ケタの数字で表現し、それぞれのケタ位置に意味をもたせています。

ステータスコードは セマフォとしての役割
  • 3ケタの数字のうち 1番左側の数字(百の位のケタ)は、コントロールファイルを最後に触ったのがどちらであるかをあらわします。リーダーは「1」、フォロワーは「2」をセットします。

  • 左側から2番目の数字(十の位のケタ)は、”データを用意している最中”などの作業中かどうか示します。この値が「1」の場合は 作業中であることをあらわすこととします。この値を読み取って 相手が作業中であった場合には コントロールファイルの読み込み以外の動作をおこなわないようにします。相手側が、コントロールファイルとデータファイルを占有している占有モードとなります。

  • 左側から3番目の数字(一の位のケタ)は、(主にフォロワーからの)エラーコードになります。正常に処理が行われた場合は 「0」となります。リーダー側は特に使用する必要はありませんので 通常は「0」をセットしてください。

  • 例1)ステータス:110の場合
    この場合、百の位が1なので Python側が書き込んでいます。十の位も1ですので データファイルの準備などの作業中であることを示します。したがって、この数字「110」の意味は、Python側がMT4側に指示する準備をしているので、MT4側は待っててね、というものになります。

  • 例2)ステータス:190の場合
    さきほどと比べますと、十の位が9になりました。この9はPython側での作業終了をしめします。ですので意味は、Python側がMT4側に指示する準備が完了したので、MT4側での作業実施よろしくね、となります。

  • 今回のバージョンでは、プロトタイプとしての公開のため フォロワー側からの 書き込みはありません(コントロールファイルも含めて)。


ダウンロードファイル

※ このツールは 現在 新しいバージョン(各種インジケータの値を出力する機能を実装しました!)を公開しています。以下の記事から参照ください。



ファイル名:eimCsvExec.ex4

この記事が気に入ったらサポートをしてみませんか?