*

MT4でマルチタスク処理

公開日: : FX自動売買開発 , , ,

MT4/MT5は基本的にC言語ベースなのでマルチスレッドはできません。

しかし、複数のチャート上でEAを別々に稼働させられるので、
とらえ方によってはマルチタスクが可能です。

背景としては、
一瞬で両建てをしたい場合などです。

普通に記述すると、

買いオーダーを送信

ブローカー側で買いオーダーの処理

約定

ブローカーからレスポンスが返ってくる

売りオーダーを送信

という形になり、オーダーの処理に数秒かかることもあるので、
売りと買いのタイミングが数秒ずれてしまうことがあります。

これは特に暴騰暴落時に発生しがちで、
一番両建てをしたいタイミングでそれぞれの約定レートとタイミングが大きくずれてしまいます。

他にも合成通貨アービトラージをする場合にも同じ理屈でマルチタスクが必要になります。

そこでどうするかというと、
普段の演算とオーダーを分けて処理するようにします。

構成としては、
EA1:テクニカルやチャート更新ごとに演算を行う
EA2:EA1から指示を受けて実際にオーダーを出す(買い注文)
EA3:EA1から指示を受けて実際にオーダーを出す(売り注文)
と3つ作ります。

そして、それぞれを別々のチャートにセットすれば準備完了です。

さて、
問題はどうやってEA間で情報をやりとりするかということですが、
グローバル変数を使います。

ファイル関数でもいいですが、同一MT4上の場合グローバル変数の方が高速です。

グローバル変数を他で使うケースがないので、プログラマの方でも使ったことがない場合があるかもしれません。

基本的には上記で取得したりセットするだけです。

注意点は数字しか保存できないという点です。
文字列は代入できないので、USDJPY_buyのような情報は渡せません。

そのため、あらかじめ通貨ペアを決めておくか暗号化処理をするしかありません。
ここで言う暗号化処理とは文字列を数字に変換する機構のことです。

たとえば、
a=00
b=01
c=02

y=24
z=25
として
usdjpy=201803091524
と暗号化してもOKです。

あとはEA1で買いのシグナルがでたらグローバル変数に買いの情報を流し、
EA2で買いオーダーを出します。

EA2で買いオーダーを出したらグローバル変数の中身を書き換えます。
(空でも0でもなんでもOKです)

あとは以下繰り返す仕様にすれば完成です。

具体的なコードは合成通貨アービトラージを参照してください。

Message

メールアドレスが公開されることはありません。

このコメントはWEBに公開されるので、問い合わせ等はメールでお願いします。

関連記事

第0回:プログラミングの基本ルールと心が折れないための心得

プログラミングにはどの言語にも基本的に共通したルールがあります。 ルール1 入力は半角英数字

記事を読む

【無料プレゼント】ストキャスティクス スイングEA

2018/1/1~2018/12/31 M5 EURCAD PF:10.99 勝率:82.46%

記事を読む

【VPSスピード勝負】お名前ドットコム vs Beeks

トレード用のVPSを使う上で重要な項目はいろいろありますが、 その中でもスピードは要です。

記事を読む

自動売買プログラム他 無料プレゼント 2019年2月

口座開設プレゼント企画 下記のリンクより口座開設していただいた方にお好きなツールを一つプレゼントし

記事を読む

第25回:EAに指値注文、逆指値注文でエントリーさせる

EAに指値注文、逆指値注文でエントリーさせる記述 これまでには決済で指値注文、逆指値注文をしてきま

記事を読む

 
  • ブログ管理人の横瀬兼元(ペンネーム)です。

    各トピックに対するコメントは各記事のコメント欄にお願いします。それ以外のご質問、ご相談などは
    infoあっとfxantenna.com
    まで
    私の偽者がいるらしいのでご注意ください。
質問回答コラム

Q. 管理人さん自身はEAで運用しているのですか A.  して

【MT5】MACD, ストキャスティクス, モメンタムEA(配布)

GBPUSD 2018/1/1~2018/12/31 H2

【MT5】 3通貨相関アービトラージEA(無料プレゼント)

EUR, GBP, USD の3通貨の相関を利用したさや取りトレード

no image
仮想通貨対応マーチンゲールEA(無料配布)

USDJPY 2018/1/1~2018/12/31 Spread:

最適化なしで勝率98.31%()のトレードシステム【あげます】

GBPUSD D1 Spread:2 2018/1/1~2018/1

→もっと見る

PAGE TOP ↑