こんにちは。
MQL5からコンピュータのローカルタイムを調整することは可能ですか?
GetLocalTime()、SetLocalTime()は動作するのでしょうか?
確認したところ、動作しています。
//| TimeTest.mq5 |
//| Copyright 2016 prostotrader |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016 prostotrader"
#property link "https://www.mql5.com"
#property version "1.00"
//---
struct _SYSTEMTIME {
ushort wYear;
ushort wMonth;
ushort wDayOfWeek;
ushort wDay;
ushort wHour;
ushort wMinute;
ushort wSecond;
ushort wMilliseconds;
};
_SYSTEMTIME loc_time;
#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
GetLocalTime(loc_time);
if(loc_time.wYear > 0)
{
loc_time.wSecond = 55;
if(SetLocalTime(loc_time))
{
if(loc_time.wYear > 0)
{
}
}
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
あとは、ローカルタイムを正しく同期させる方法を考えるだけです
の時刻をMT5サーバーの時刻に合わせる。ただし、FORTSでは清算時および非取引時にはTimeCurrent()が更新されないことを考慮する。
何かアイデアはありますか?
あとは、ローカルタイムを正しく同期させる方法を考えるだけです
の時刻をMT5サーバーの時刻に合わせる。ただし、FORTSでは清算時および非取引時にはTimeCurrent()が更新されないことを考慮する。
何かアイデアはありますか?
だから、アップデートはティックが来たときだけでいいんです。そのため、OnTickの中だけで呼び出す。複雑すぎるのです。
何もかもがやりすぎで...。
相場がスタックに入ってくるプレマーケットがあるので、9-50から10-00まではサーバーの 時刻と同期させることができます。
追加
任意のシンボルのスタンを追加すると、フィルタリングなしで、すべての楽器からのイベントがそこに行くようになります。
Market Watchで選択されているもの。そして、CopyTicks()をとって、同期する時間を見る...。
こんな感じ。
追加
見落としがあったら訂正してください。
//| Time_sync_forts.mq5 |
//| Copyright 2017 prostotrader |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link "https://www.mql5.com"
#property version "1.00"
//---
struct _SYSTEMTIME
{
ushort wYear;
ushort wMonth;
ushort wDayOfWeek;
ushort wDay;
ushort wHour;
ushort wMinute;
ushort wSecond;
ushort wMilliseconds;
};
_SYSTEMTIME loc_time;
#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//---
bool is_sync;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
is_sync=false;
MarketBookAdd(Symbol());
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
MarketBookRelease(Symbol());
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
loc_time.wYear=0;
GetLocalTime(loc_time);
if(loc_time.wYear>0)
{
if((loc_time.wHour==9) && (loc_time.wMinute>=50) && (loc_time.wMinute<=59))
{
MqlTick curr_tick[1];
if(CopyTicks(symbol,curr_tick,COPY_TICKS_ALL,0,1)==1)
{
MqlDateTime sv_time;
TimeToStruct(curr_tick[0].time,sv_time);
if(!is_sync)
{
loc_time.wHour=ushort(sv_time.hour);
loc_time.wMinute = ushort(sv_time.min);
loc_time.wSecond = ushort(sv_time.sec);
loc_time.wMilliseconds=ushort(ulong(curr_tick[0].time_msc)-ulong(curr_tick[0].time)*1000);
if(SetLocalTime(loc_time))
{
is_sync=true;
Print("Local time sync is done.");
}
}
}
}
else is_sync=false;
}
}
//+------------------------------------------------------------------+
念のため、"鮮度 "の引用を確認する。
{
if((loc_time.wDayOfWeek == ushort(sv_time.day_of_week)) &&
(loc_time.wHour == ushort(sv_time.hour)))
{
loc_time.wMinute = ushort(sv_time.min);
loc_time.wSecond = ushort(sv_time.sec);
loc_time.wMilliseconds=ushort(ulong(curr_tick[0].time_msc)-ulong(curr_tick[0].time)*1000);
if(SetLocalTime(loc_time))
{
is_sync=true;
Print("Local time sync is done.");
}
}
}
あとは、ローカルタイムを正しく同期させる方法を考えるだけです
清算時および非取引時(FORTS)にはTimeCurrent()が更新されないことを考慮し、MT5サーバー時刻を持つコンピュータを使用します。
何かアイデアはありますか?
もしかして、ソースと同期しやすい?取引所で発生したイベントには、そのタイムスタンプが付与されます。取引所自体の時刻は、天文時刻とミリ秒単位の誤差で同期している。ブローカー側にある)MT5サーバーへの通知の到着時刻が既に異なっているのに対し、端末へのパケット送信時刻は3番目、端末への到着時刻は4番目です。システム時刻をローカルコンピュータの天文時刻と同期させれば、常に動作し、ローカル時刻は 取引所の時刻と一致します。正確な時刻を知るためのNTPサーバーは、数百種類も公開されている(無料)。これらは、例えば、今生きて働いている。
195.234.155.123;ntp.dvconsulting.dk
85.17.207.62;ntp.edge.tillo.ch
195.34.89.227;ntp.favey.ch
195.234.155.124;ntp.gal.dk
193.226.65.36;ntp.idsi.md
オリジナルソースとシンクロさせる方が簡単なのでは?取引所で発生したイベントには、そのタイムスタンプが付与されます。取引所自体の時刻は、天文時刻とミリ秒単位の誤差で同期している。ブローカー側にある)MT5サーバーへの通知の到着時刻が既に異なっているのに対し、端末へのパケット送信時刻は3番目、端末への到着時刻は4番目です。システム時刻をローカルコンピュータの天文時刻と同期させれば、常に動作し、ローカル時刻は取引所の時刻と一致します。正確な時刻を知るためのNTPサーバーは、数百種類も公開されている(無料)。これらは、例えば、今生きて働いている。
195.234.155.123;ntp.dvconsulting.dk
85.17.207.62;ntp.edge.tillo.ch
195.34.89.227;ntp.favey.ch
195.234.155.124;ntp.gal.dk
193.226.65.36;ntp.idsi.md
CopyTicks()から取得した時間 これは為替時間であり、配信に遅延があることは明らかである
が、4-6msと非常に小さくなっています。
正確な時間は、交換時間がそれと一致しないかもしれないので、何も与えません、そして、我々は交換時間に正確にトレントします。
とMT5からです。
CopyTicks[0]に、pingを追加します。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは。
MQL5からコンピュータの ローカルタイムを調整することは可能ですか?
GetLocalTime()、SetLocalTime()は動作しますか?