*

[MQL4]MT4でマルチタスク/マルチスレッド処理

公開日: : 中級者EA開発 ,

Originally posted 2017-11-24 19:37:27.

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

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

 

マルチタスクの背景

超高速で両建てしたい場合

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

普通に記述すると、

買いオーダーを送信

FX業者側で買いオーダーの処理

約定

FX業者からレスポンスが返ってくる

売りオーダーを送信

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

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

 

合成通貨アービトラージで必要

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

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

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

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

 

MT4でマルチタスクを実装するには

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

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

 

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

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

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

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

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

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

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

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

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

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

 

Q.MT4でのマルチスレッドについての質問

Q. マルチスレッドについてご質問です。記事のように両建てをする際にマルチスレッドによる両建てとシングルスレッドによる両建てでは、オーダー処理にかかる時間にどのくらいの差が出るのでしょうか?

A.

MT4の処理は基本的にはシングルスレッドなので、両建ての処理をしようとした場合、

ティック到来

いろいろ条件をクリアして買いのオーダーをFX業者サーバーに出す

↓(数百ミリ秒~)

FX業者のサーバーが受理してオーダーを処理する(数百ミリ秒~)

↓(数百ミリ秒~)

サーバーからオーダー処理の結果が返ってくる

売りオーダーを出す(両建てをする)

FX業者のサーバーがオーダーを処理する

という流れなので、ネットワークの状態によっては、行って帰ってくるまでに数秒かかるでしょうね。(どんなに早いマシンでも1秒以上はロスが発生していると思います)

また、FX業者がオーダーの処理に時間を要する場合も、同様にロスが生じます。(もしかしたらこっちの方が大きいかも)

 

一方、マルチスレッドの場合は、

ティック到来

いろいろ条件をクリアして、両建てのオーダーを別チャートのEAに渡し、FX業者サーバーにオーダーを出す

↓(数百ミリ秒~)

FX業者のサーバーがオーダーを処理する

という流れなので、全然速度が違います。

 

問題は、「そこまで早くすることによって、その両建てロジックがどれだけ活きるのか」というところだと思いますが…

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。
 

この記事にコメントを残す

  1. SIN000 より:

    マルチスレッドについてご質問です。
    記事のように両建てをする際に
    マルチスレッドによる両建てと
    シングルスレッドによる両建てでは、
    オーダー処理にかかる時間にどのくらいの差が出るのでしょうか?

Message

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

CAPTCHA


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

関連記事

(MQL4)MT4チャート上で動画を表示するやり方[EA自作]

MT4にはチャート上に画像を表示させる機能があります。 しかし、動画を表示させる機能はありません。

記事を読む

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

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

記事を読む

スマホから稼働中のEAを操作、チェックするアイディア[RDP以外で]

自動売買システムはVPSなどに設置することで24時間稼働させられますが、スマホから外出先でチェック、

記事を読む

[MQL4]EAの稼働が終了しても、データを記録しておく方法

(注:ディープラーニング関連の話ではありません。) MT4のEA、インジケーターは、基本的にバ

記事を読む

[MT4]EA単体でFX業者間アービトラージ ~為替システムの穴~

より高速になったアービトラージEA 業者間アービトラージが話題になった時代が数年前にありましたが、

記事を読む

 
  • (↑広告です。このサイトの管理者の運営ではありません)

     


  • 横瀬兼元(ペンネーム)です。

    プロフィール
    物を買わせようとする偽者がいるらしいのでご注意ください。
    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を)

Translate »
ページトップへ