*

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に公開されるので、問い合わせ等はメールでお願いします。

関連記事

EA、インジケーターに有効期限をつける

EAやインジケーターをお試しで使ってもらい 気に入ってもらったら購入してもらうというビジネスモデル

記事を読む

no image

ストップレベル=0はストップレベルがないことではない

MT4/MT5では予約注文を行う際にストップレベルというものがあります。ストップレベルというのは、現

記事を読む

第5回:コンパイルとEAの生成

ここではソースコードからEAを生成します。 mqファイルのコンパイル ソースコードファイルは

記事を読む

【MQL4】外部ソフトなしで稼働するコピートレードツールを作る。その②

コピーツールを作る前に、MT4の仕様上の話をしなくてはなりません。 複数のMT4業者を利用した

記事を読む

購入したEAは基本的には編集・改造できません

タイトルですべて終わっているのですが、 こういった問い合わせが多いので一応記事にします。 F

記事を読む

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

    各トピックに対するコメントは各記事のコメント欄にお願いします。それ以外のご質問、ご相談などは
    infoあっとfxantenna.com
    まで
    私の偽物がいるらしいので偽物にご注意ください。
no image
シンプルなニューラルネットワークに基づいたEA(の記事)

MQLの記事って、ロシア語->英語->日本語の順に訳されるんで日本語の

no image
自動売買における仮想ストップロス、仮想テイクプロフィットの概念と意味

最近の自動売買系の論文やコードを読んでいると「仮想ストップロス」、「仮

no image
[bitwallet]paypal, Netteler, Skrillの次のオンラインマネーウォレット

近頃FX業界ではbitwallet(旧:mybitwallet)という

no image
ストップレベル=0はストップレベルがないことではない

MT4/MT5では予約注文を行う際にストップレベルというものがあります

no image
私の偽者、偽ブログにご注意ください

読者の方からご連絡いただいたのですが、私のブログの内容をそのままコピー

→もっと見る

PAGE TOP ↑