マーケットクローズ - ページ 7

 
0.5秒のタイマーをセットする。少し良くなった。よし、とりあえずこのままにしておこう。
 
Vasiliy Pushkaryov:
0.5秒のタイマーをセットする。少し良くなった。よし、とりあえずこのままにしておこう。

コードを見せてください。

 
fxsaber:

コードを見せてください。

余分なものを掃除した

しかし、このようなラグは手動で捕らえることができる場合が多く、500msが普通なのでしょうか?


ファイル:
 
Vasiliy Pushkaryov:

余分なものを掃除した

しかし、このようなラグは手動で捕らえることができる場合が多く、500msが普通なのでしょうか?


マーカーを削除するのではなく、マーカーが存在する場合にテキストを置き換えるだけのこの構造を試してみましたが、特に違いは感じられませんでした。

   if(ObjectFind(idChart, nameFix) == 0)
   {
     ObjectSetString(idChart, nameFix, OBJPROP_TEXT, text);
     ChartRedraw();
     return;
   }
 
Vasiliy Pushkaryov:

は、このようなラグを手動でキャッチできることが多いのでしょうか、それとも500msが普通なのでしょうか?

これはラグではありません。OnTimerから時刻を表示し、500ms待つ。その500msの間に時刻が変わるが、OnTimerはまだ呼ばれていない。

TimerCurrentが変化した」瞬間に、正確にEventSetTimer(1)を設定する、という同期が必要です。


この方法で同期を試みました

bool SetTimerSync( const uint TimerMs = 1000, const uint SyncError = 50 )
{
  // https://www.mql5.com/ru/forum/166646/page5#comment_5796939  
  return((GetCurrenTime() % 1000 > 1000 - SyncError) && EventSetMillisecondTimer(TimerMs));
}

void OnTimer()
{
  static bool Sync = GetCurrenTime() * 0;
   // --- при максимизированном окне выводим время на график
  if (Sync)
    showHideTime(); // https://www.mql5.com/ru/forum/166646/page7#comment_6384173
  else
    Sync = SetTimerSync();
}


int OnInit()
{
  EventSetMillisecondTimer(1);
  
  return INIT_SUCCEEDED;
} 
機能しない。そして、MT5のラグに対して悪い印象を持っています。これらの変更によって、あなたのスクリプトがどのように動作するか、ご自身でお確かめください。
 
fxsaber:

この方法で同期を試みました

機能しない。そして、MT5のラグに対して悪い印象を持っています。

設定された ms 以降は OnTimer が呼ばれない。したがって、累積誤差と観測されたラグがある。バグ!

 
fxsaber:

これはラグではありません。OnTimerから画面に時間を出力し、500ms待ちます。この500msの間に時刻は変化しますが、OnTimerはまだ呼び出されていません。

TimerCurrentが変化した」瞬間に、正確にEventSetTimer(1)を設定する、という同期が必要です。


この方法で同期を試みました

機能しない。そして、MT5のラグに対して悪い印象を持っています。これらの変更によって、あなたのスクリプトがどのように動作するか、ご自身でお確かめください。
OnInitのコードにミリ秒タイマーが ありますが、投稿では通常の1秒タイマーを書いていますね。やっぱりEventSetTimer(1)を使いたいのでしょうか?
 
Vasiliy Pushkaryov:
OnInitのコードにミリ秒タイマーがありますが、投稿では通常の1秒タイマーと書かれていますね。やっぱりEventSetTimer(1)を使いたいのでしょうか?

まず最初のタイマーを同期させ、次に2番目のタイマーを設定します。

 
fxsaber:

まず、最初のタイマーで同期をとり、次に2番目のタイマーをセットする。

なるほど、明日にならないと確認できませんね、お疲れ様でした。
 
fxsaber:

設定された ms 以降は OnTimer が呼ばれない。したがって、累積誤差と観測されたラグがある。バグだ!

チャートコメント内のスクリプトでこのバグを確認

input int TimerMs = 1000;

const bool Init = EventSetMillisecondTimer(TimerMs);

void OnTimer()
{
  static ulong StartTime = 0;  
  static int Count = 0;
  
  if (!StartTime)
    StartTime = GetMicrosecondCount();
  
  Comment("Error " + (string)((int)(GetMicrosecondCount() - StartTime) / 1000 - TimerMs * Count) + " ms.");  
  
  Count++;
}
理由: