*

[MQL]ティック更新よりも早い頻度で演算させる方法 と ちょっとした注意事項

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

Originally posted 2019-05-09 18:35:41.

MT4のEAは基本的にティックレートを受信する度に一回演算する仕組みになっています。

USDJPYやEURUSDの場合は、いつでもそこそこティックがあるので、あまり気になりませんが、マイナー通貨の場合は1分に一回程度しかティックが来ないものもあります。(レンジの時間帯とか)

 

1分足以内のスキャルピングやアービトラージをしようとすると、ここら辺が比較的ネックになるので、ティック更新を待たずに次の計算をさせる必要があります。

ただし、これは比較的荒業で、メモリに負荷がかかることは想像に難くありません。

OnTick内でループさせる

実にかんたんな話で、OnTick,(OnStart,Start,OnCalculate)内全体をループ処理させるだけです。

ポイントはループ処理する場合、レートや口座情報が更新されないので、
RefreshRate()を頭に持ってきて、半強制的にレート更新をする必要があることです。

あとはEAを停止させようとしたときにフリーズする可能性が高いので、OnChartEvent内に停止ボタンを設置し、そこからEAを停止処理する記述を書くことを強くおすすめします。

for文でループさせれば上の心配はないと思います。以前はwhile文で紹介していましたが、for文の方が安全だと思います。

また、上のコードの場合100回演算が終わるとループを一回抜けてしまいますが、それくらいがちょうどいいと思います。

 

というのも、while文のように本当に延々とループさせてしまうと、メモリのキャッシュがクリアされないらしく、パソコンがフリーズする原因になるようです。

なので、for文で定期的にOnTickを一度終了させる必要があります。

 

もちろん、ループを抜け出した直後~次のティック到達の間に何か重要なトレードタイミングが発生する可能性がありますが、そのデメリットを飲んでもfor文にした方が良いと思います。

もし、上記のリスクを減らしたい場合は100回ではなく、1000回~432,000回にすればいいと思います。(60*60*24*5=432,000)

 

もう一つの欠点として、ティック更新が激しい場合、かつ、演算が軽量な場合、
1秒間隔で演算させるよりも通常のティック更新の方が速い可能性は十分に考えられます。

これらを考慮すると、使用場面はかなり限定的ですね。おそらくメタクオーツ側もあまりやって欲しくはないやり方だと思います。

 

【追記】OnTimerなる関数が実装されたので、OnTimerを使えばすべて解決すると思います。

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

Message

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

CAPTCHA


関連記事

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

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

記事を読む

no image

利用可能なトレード系APIまとめ

今まで当たり前のようにMT4/MT5で開発をしてきましたが、そういえばAPIを使った取引も可能だよね

記事を読む

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

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

記事を読む

EAを実際に逆コンパイルしてみて、対策を考える(追記あり)

逆コンパイルとは 逆コンパイルというのは実行ファイルからソースコードファイルを復元することで、デコ

記事を読む

MT4のメールを複数のアドレスに送るには

MT4が出すメールを複数のアドレスに送信したいときがあります。   MT4では複数のア

記事を読む

 
  • fxfx.work

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

     


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

    プロフィール
    商材を買わせようとする偽者がいるらしいのでご注意ください。
    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を) 4000文字未満のトピックや話題はツイッターで発信しています。
  • fxfx.work

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

Translate »
ページトップへ