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

 
fxsaber:

このような場合のみ、タイミングが異なることがわかります。


MqlTickが tickをそのまま返さないことは、何度か議論されています。見積もりと取引の2つのティックストリームがあること。また、CopyTicksでは、ストリームが非同期であるため、時には遡ってマージされることがあります。そして、MqlTickとCopyTicksのタイミングが一致しない場合があること。


10SEK.が一致しないことは本当にあるのでしょうか?

2017.09.22 11:18:38.257 Test_time (RTS-12.17,M1)        CopyTicks time = 11:18:27; SymbolInfoTick = 11:18:37
 
prostotrader:

10SEC.はマッチングしないのでしょうか?

Metaquotes-Demoにそのようなものはありません。

 
fxsaber:

Metaquotes-Demoでは、そのようなことはありません。


デモオープナーなので、本番で試してみます...。

追加

ああ、現実じゃないほうが楽しいな。

2017.09.22 11:58:03.892 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:03
2017.09.22 11:58:03.922 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:03
2017.09.22 11:58:05.186 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:04
2017.09.22 11:58:06.110 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:05
2017.09.22 11:58:06.230 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:06.350 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:06.430 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:06.430 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:07.174 Test_time (Si-12.17,M1) CopyTicks time = 11:58:07; SymbolInfoTick = 11:58:07
 
prostotrader:

現実にはない方が面白い。

ミリ秒などの データがある。

 
fxsaber:

ミリ秒などの データが得られます。


とりあえず、以下を行うことにした。

//bool CheckMarketTime(const string a_symbol)
bool CheckMarketTime()
{
  sv_time.year = 0;
  TimeTradeServer(sv_time);
  if(sv_time.year > 0)
  {
    if((sv_time.day_of_week == int(FirstDay)) ||                 //первый выходной
       (sv_time.day_of_week == int(SecondDay))) return(false);   //Второй выходной
    sv_time.year = 0;   
    TimeCurrent(sv_time);
    if(sv_time.year > 0)
    {   
      ulong cur_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
      if(((cur_time >= time_st_mon) && (cur_time < 50370)) ||
         ((cur_time >= time_st_day) && (cur_time < 67470)) ||
         ((cur_time >= time_st_evn) && (cur_time < 85770)))
      {
        return(true);
      }
    }
  }
}
 

良いアイデアは、単純にサーバー(交換機)の時刻を翻訳することです

の代わりに、Market Watch の直近の気配値から取得される TimeCurrent() を使用します。

は、交換の時間を単純に変換する関数TimeServer()を作る。

そうすれば、TimeTradeServer() は不要になります。

この2つの機能で十分です

TimeLocal()とTimeServer()

 
prostotrader:

とりあえず、このように作ることにした

このスレッドでのTCの振る舞いを思い出す。

Перевод string в часы и минуты
Перевод string в часы и минуты
  • 2017.09.06
  • www.mql5.com
Когда встаёт задача задать во входных параметрах время в формате ЧЧ:ММ, приходится решать дилему: удобство пользователя при вводе значений или удоб...
 

写真では、チャート上の出力はTimeTradeServer()関数で、時間はより速く実行されます。
TimeCurrent()を出力すると、現在のシンボルによる最新の気配値の時刻になるため、不整合もしばしば発生します。
Market Watchの時刻と同期して、直近の気配値の時刻を出力するにはどうしたらよいですか。



 
Vasiliy Pushkaryov:

Market Watchの時刻と同期して、直近の気配値の時刻を出力するにはどうしたらよいですか。

TimeCurrent

 
fxsaber:

TimeCurrent。

ええ、それもあまり良いものではありません。OnTimerを使って1秒に1回出力しているので、メッセージ出力もprintに追加することにしました。そこに同じ時間が2回流れているのがわかる。OnTimerのTimeCurrentは Market Watchウィンドウで利用可能な任意のシンボルの最終気配値の時間、このウィンドウのヘッダーに表示されているのと同じ時間」とヘルプに書いてありました。

つまり、これが必要なのです。理論上は。しかし、実際には何か違和感がある。



理由: