1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

備忘録 入門-MQL5のTimerオブジェクトに関して-

Posted at

概要

MQLの仕様が良く解っていない私が自動売買のシステムを作成するにあたって、
OnTimerで複数処理を呼び出したいと思い検証した内容を記す

理由として、MQL5のリファレンスに下記が記載されていた

通常、この関数は OnInit() 関数またはクラスコンストラクタで呼ばれるべきです。タイマーからくるイベントを処理するために,エキスパートアドバイザーはOnTimer() 関数を持つべきです。

エキスパートアドバイザーならびに指標は、全て独自のタイマーで動作しそこからのみイベントを受けとります。作成されたタイマーは EventKillTimer() 関数で無効にされていない限り MQL5 プログラムの操作の終了時に強制的に破壊されます。

プログラムでは複数のタイマーを実行することは出来ません。各MQL5アプリケーションとチャートは、新たに到着したイベントが配置されるイベントの独自のキューを持っています。タイマーイベントがキューに存在するまたは処理中の場合、新しいタイマーイベントは MQL5 プログラムのキューに加えられません。

一つのソースからは単一のイベントしか起動出来ない、、、、
という事は、複数のチャートへそれぞれEAを動かした場合どうなるのだろうと思い試した内容を記す。

結果

結果としては、複数のチャート画面にそれぞれEAを設定さえすれば複数の時間起動システムを実行する事は可能だった。

 試験方法

①15秒置きにログが出力されるEAを作成
②適当なチャート2つにそれぞれEAを設定する。

 試験判定方法

ログ出力画面に15秒より短い頻度でコメントが出力されるかを判定

使用したEAのソース

出す程の物では無いが一応

int OnInit()
  {
//--- create timer
   EventSetTimer(15); ①15秒毎にonTimerを実行
   
//---
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer(); ③EA終了時にTimerイベントを終了
   
  }
void OnTimer()
  {
//---
   printf("hahaha");   ②時間が来たら適当に笑え
  }
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?