*

[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を使えばすべて解決すると思います。

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

Message

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

CAPTCHA


関連記事

iCustomではEA化できないインジケーターをEA化するやり方

世の中にはいろいろなMT4用インジケーターがあるわけですが、その中にもEA化できるインジケーターとE

記事を読む

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

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

記事を読む

[MT4EA]完全無敗 勝率100%のバックテストを生成するEA[ソースコードあり]

今回はバックテストで完璧な成績を出すEAを作成しました。 意味は...ありません。ただの道楽です。

記事を読む

2chの市況版のスレをテキストマイニングして逆張りするやり方

よく「大衆の逆をいけば勝てる」みたいなことが相場の世界では言われますよね。 今回は2chの市況版の

記事を読む

no image

プログラマのための自動売買を開発するためのアイディア

「MQL4/MQL5は使えるようになったけど、プログラミングするアイディアがない」というプログラマは

記事を読む

 
  • fxfx.work

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

     


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

    プロフィール
    商材を買わせようとする偽者がいるらしいのでご注意ください。(商材販売は今も過去も一切していません。)

    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を)
  • fxfx.work

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

Translate »
ページトップへ