マーケットクローズ - ページ 2 123456789...12 新しいコメント prostotrader 2017.01.13 22:17 #11 取引時間チェックをこのように変えた方がいいと思うんです。bool CheckExchTime(){ MqlTick cur_tick[1]; MqlDateTime cur_time; if(CopyTicks(Symbol(), cur_tick, COPY_TICKS_INFO, 0, 1)==1) { TimeToStruct(cur_tick[0].time, cur_time); ulong trade_time = cur_time.hour * 3600 + cur_time.min * 60 + cur_time.sec; if(((trade_time >= time_st_mon) && (trade_time < 50370)) || ((trade_time >= time_st_day) && (trade_time < 67470)) || ((trade_time >= time_st_evn) && (trade_time < 85770))) { return(true); } } return(false);} Market closed Synchronise Windows local time WindowsのローカルタイムをMT5サーバーと同期させる Sergey Chalyshev 2017.01.14 01:24 #12 prostotrader:セルゲイ!TimeCurrentのヘルプを読むと、これはサーバーの時間であると書かれています。Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.ティック、週末、非取引時間がない場合、TimeCurrentは変化しない。また、TimeTradeServerは機能 せず、コンピュータのローカルタイムが表示されます。Expert Advisorを実行することで簡単に確認することができます。//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetTimer(1); return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+void OnTimer() { Comment( "\n TimeCurrent: ",TimeCurrent(), "\n TimeTradeServer: ",TimeTradeServer(), "\n TimeLocal: ",TimeLocal(), ""); }//+------------------------------------------------------------------+コンピュータの時刻が変わるとTimeTradeServerも 変わり、コンピュータの時刻TimeLocalを 表示する。 help please エキスパートアドバイザー - 雑多な質問 Market closed prostotrader 2017.01.14 09:05 #13 Sergey Chalyshev: ティック、週末、非取引時間帯がない場合、TimeCurrentは変化しない。また、TimeTradeServerは動作 せず、ローカルコンピュータの時刻を表示します。EAを実行することで簡単に確認することができます。//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetTimer(1); return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+void OnTimer() { Comment( "\n TimeCurrent: ",TimeCurrent(), "\n TimeTradeServer: ",TimeTradeServer(), "\n TimeLocal: ",TimeLocal(), ""); }//+------------------------------------------------------------------+コンピュータの時刻が変わるとTimeTradeServerも 変わり、コンピュータの時刻TimeLocalを 表示する。まずTimeTradeServerでコンピュータの時刻を確認し、(時刻が正しければ)その後に関数を使えば、より正確にチェックできるのでは?によって追加されました。もちろん、これは解決策にはなりませんが、このシンボルに対する引用符が存在しない可能性があるからです :( Sergey Gritsay 2017.01.16 06:27 #14 ちょっと頭を悩ませて、このオプションを書きましたが、この実装について考えている人.//+------------------------------------------------------------------+//| test03.mq5 |//| Sergey Gritsay |//| https://www.mql5.com/ru/users/sergey1294 |//+------------------------------------------------------------------+#property copyright "Sergey Gritsay"#property link "https://www.mql5.com/ru/users/sergey1294"#property version "1.00"//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- if(CheckExchTime())Print("Торговля разрешена"); else Print("Торговля запрещена"); }//+------------------------------------------------------------------+bool CheckExchTime() { MqlTick last_tick; MqlDateTime last_time; MqlDateTime start_time; MqlDateTime end_time; datetime trade_time_start=0; datetime trade_time_end=0; datetime start=0; datetime end=0; ResetLastError(); if(SymbolInfoTick(_Symbol,last_tick)) { TimeToStruct(last_tick.time,last_time); Print(last_tick.time,": Bid = ",last_tick.bid," Ask = ",last_tick.ask," Last = ",last_tick.last," Volume = ",last_tick.volume); if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=__DATE__+(start_time.hour*60+start_time.min)*60; end=__DATE__+(end_time.hour*60+end_time.min)*60; Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end); Print(start," - ",end); if(start==end)return(true); if(last_tick.time>start && last_tick.time<end)return(true); } else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError()); if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=__DATE__+(start_time.hour*60+start_time.min)*60; end=__DATE__+(end_time.hour*60+end_time.min)*60; Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end); Print(start," - ",end); if(start==end)return(true); if(last_tick.time>start && last_tick.time<end)return(true); } else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError()); } else Print("SymbolInfoTick() failed, error = ",GetLastError()); return(false); }//+------------------------------------------------------------------+... Market closed mql5言語の特徴、微妙なニュアンスとテクニック エラー、バグ、質問 Denis Kirichenko 2017.01.16 07:38 #15 prostotrader:あなたたちは開発者だ!端末の時刻とExchangeの時刻を同期させるのはいつですか? ミカラス それは絶対、開発者に聞くことじゃないよ。それがブローカー管理者の仕事です。狙わないとダメなんです :-)) Sergey Gritsay 2017.01.16 08:20 #16 もう少しコードをいじってみると、このようになりました。//+------------------------------------------------------------------+//| test06.mq5 |//| Sergey Gritsay |//| https://www.mql5.com/ru/users/sergey1294 |//+------------------------------------------------------------------+#property copyright "Sergey Gritsay"#property link "https://www.mql5.com/ru/users/sergey1294"#property version "1.00"//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetMillisecondTimer(1);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {//--- }//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+void OnTimer() {//--- string text=NULL; int symbol_total=SymbolsTotal(true); for(int i=0; i<symbol_total; i++) { string symbol=SymbolName(i,true); if(CheckExchTime(symbol,TimeCurrent()))text+="\n"+symbol+": Торговля разрешена"; else text+="\n"+symbol+": Торговля запрещена"; } Comment(text); }//+------------------------------------------------------------------+bool CheckExchTime(string symbol,datetime times) { MqlDateTime last_time; MqlDateTime start_time; MqlDateTime end_time; datetime trade_time_start=0; datetime trade_time_end=0; datetime start=0; datetime end=0; ResetLastError(); datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME); if(expiration!=0 && times>=expiration)return(false); TimeToStruct(times,last_time); if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00"); end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00"); if(start==end)return(true); if(times>start && times<end)return(true); }//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError()); if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00"); end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00"); if(start==end)return(true); if(times>start && times<end)return(true); }//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError()); return(false); }//+------------------------------------------------------------------+結果 Market closed どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 prostotrader 2017.01.16 12:34 #17 Sergey Gritsay:もう少しコードをいじってみると、このようになりました。 何を言ってるのかわかってるのか? Sergey Gritsay 2017.01.16 12:53 #18 prostotrader: 何の話かわかっているのだろうか? 私がよく理解していないのかもしれませんが、取引所取引時間外のマーケットクローズで捕まらないようにするためのソリューションが必要なことは理解できます。 prostotrader 2017.01.16 12:58 #19 Sergey Gritsay: 多分、私はよく理解していない、私は方法を理解して、私は取引所の取引時間外の市場の閉鎖を回避するためのソリューションが必要です。解決策はプログラマーからではなく、開発者(あるいはブローカーが、その責任を負うのであれば、ブローカー)からである引用されたコードは、Exchangeの現在時刻を チェックしていません。 prostotrader 2017.01.16 13:42 #20 今のところ、この解決策に落ち着きましたbool CheckTradingTime(MqlDateTime &tick_time){ datetime lk_time = TimeTradeServer(tick_time); if ( ( tick_time.day_of_week == int(FirstDay)) || ( tick_time.day_of_week == int(SecondDay)))//выходные { return(false); }#ifdef DEBUG if ((tick_time.hour >= 0) && (tick_time.hour < 6)) // DEBUG 6-00 { return(false); }#else if ((tick_time.hour >= 0) && (tick_time.hour < 10)) { return(false); }#endif// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30// 14 * 3600 = 50400 - 14:00:00// 14 * 3600 + 30 = 50430 - 14:00:30// 14 * 3600 + 60 = 50460 - 14:01:00// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30// 18 * 3600 + 45 * 60 = 67500 - 18:45:00// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30// 18 * 3600 + 46 * 60 = 67560 - 18:46:00// 19 * 3600 = 68400 - 19:00:00// 19 * 3600 + 60 = 68460 - 19:01:00 // 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30// 23 * 3600 + 50 * 60 = 85800 - 23:50:00// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30// 23 * 3600 + 51 * 60 = 85860 - 23:51:00//--- lk_time = TimeCurrent(tick_time); ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec; //--- //10:00:02 if(((trade_time >= time_st_mon) && (trade_time < 50370)) || ((trade_time >= time_st_day) && (trade_time < 67470)) || ((trade_time >= time_st_evn) && (trade_time < 85770))) { return(true); }return(false); } まず、TimeTradeServerを 使用して、現在の「ダーティ」な時間を取得します。すべてのセッションに「重なる」週末と時間(取引)をチェックしています。とし、TimeCurrentを 使用する。 セッション内の時間を確認するための、現在のサーバーの時間です。によって追加されました。しかし、このチェックには一つ大きな欠点が ある。ローカルコンピュータの時間がサーバーの時間より長い場合は問題ありませんがしかし、現地時間の方が少ないとなると、大問題です。取引サーバーの時間と現地時間の差で入札開始を逃すと :(そのため、TimeCurrentが 必要なのです は常にサーバーの時刻を返し、最後の既知の引用符の時刻だけを返すわけではありません。によって追加されました。もう一つの欠点清算時に相場が来ないので、清算時にTimeCurrentを使うのは(例えば、保留中の注文を取り消す ために)無意味です :( WindowsのローカルタイムをMT5サーバーと同期させる Synchronise Windows local time Market closed 123456789...12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
取引時間チェックをこのように変えた方がいいと思うんです。
{
MqlTick cur_tick[1];
MqlDateTime cur_time;
if(CopyTicks(Symbol(), cur_tick, COPY_TICKS_INFO, 0, 1)==1)
{
TimeToStruct(cur_tick[0].time, cur_time);
ulong trade_time = cur_time.hour * 3600 + cur_time.min * 60 + cur_time.sec;
if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
((trade_time >= time_st_day) && (trade_time < 67470)) ||
((trade_time >= time_st_evn) && (trade_time < 85770)))
{
return(true);
}
}
return(false);
}
セルゲイ!
TimeCurrentのヘルプを読むと、これはサーバーの時間であると書かれています。
ティック、週末、非取引時間がない場合、TimeCurrentは変化しない。
また、TimeTradeServerは機能 せず、コンピュータのローカルタイムが表示されます。
Expert Advisorを実行することで簡単に確認することができます。
int OnInit()
{
//--- create timer
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer()
{
Comment(
"\n TimeCurrent: ",TimeCurrent(),
"\n TimeTradeServer: ",TimeTradeServer(),
"\n TimeLocal: ",TimeLocal(),
"");
}
//+------------------------------------------------------------------+
コンピュータの時刻が変わるとTimeTradeServerも 変わり、コンピュータの時刻TimeLocalを 表示する。
ティック、週末、非取引時間帯がない場合、TimeCurrentは変化しない。
また、TimeTradeServerは動作 せず、ローカルコンピュータの時刻を表示します。
EAを実行することで簡単に確認することができます。
int OnInit()
{
//--- create timer
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer()
{
Comment(
"\n TimeCurrent: ",TimeCurrent(),
"\n TimeTradeServer: ",TimeTradeServer(),
"\n TimeLocal: ",TimeLocal(),
"");
}
//+------------------------------------------------------------------+
コンピュータの時刻が変わるとTimeTradeServerも 変わり、コンピュータの時刻TimeLocalを 表示する。
まずTimeTradeServerでコンピュータの時刻を確認し、(時刻が正しければ)その後に
関数を使えば、より正確にチェックできるのでは?
によって追加されました。
もちろん、これは解決策にはなりませんが、このシンボルに対する引用符が存在しない可能性があるからです :(
ちょっと頭を悩ませて、このオプションを書きましたが、この実装について考えている人.
//| test03.mq5 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
if(CheckExchTime())Print("Торговля разрешена");
else Print("Торговля запрещена");
}
//+------------------------------------------------------------------+
bool CheckExchTime()
{
MqlTick last_tick;
MqlDateTime last_time;
MqlDateTime start_time;
MqlDateTime end_time;
datetime trade_time_start=0;
datetime trade_time_end=0;
datetime start=0;
datetime end=0;
ResetLastError();
if(SymbolInfoTick(_Symbol,last_tick))
{
TimeToStruct(last_tick.time,last_time);
Print(last_tick.time,": Bid = ",last_tick.bid," Ask = ",last_tick.ask," Last = ",last_tick.last," Volume = ",last_tick.volume);
if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=__DATE__+(start_time.hour*60+start_time.min)*60;
end=__DATE__+(end_time.hour*60+end_time.min)*60;
Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end);
Print(start," - ",end);
if(start==end)return(true);
if(last_tick.time>start && last_tick.time<end)return(true);
}
else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=__DATE__+(start_time.hour*60+start_time.min)*60;
end=__DATE__+(end_time.hour*60+end_time.min)*60;
Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end);
Print(start," - ",end);
if(start==end)return(true);
if(last_tick.time>start && last_tick.time<end)return(true);
}
else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
}
else Print("SymbolInfoTick() failed, error = ",GetLastError());
return(false);
}
//+------------------------------------------------------------------+
...
あなたたちは開発者だ!
端末の時刻とExchangeの時刻を同期させるのはいつですか?
もう少しコードをいじってみると、このようになりました。
//| test06.mq5 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(1);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
string text=NULL;
int symbol_total=SymbolsTotal(true);
for(int i=0; i<symbol_total; i++)
{
string symbol=SymbolName(i,true);
if(CheckExchTime(symbol,TimeCurrent()))text+="\n"+symbol+": Торговля разрешена";
else text+="\n"+symbol+": Торговля запрещена";
}
Comment(text);
}
//+------------------------------------------------------------------+
bool CheckExchTime(string symbol,datetime times)
{
MqlDateTime last_time;
MqlDateTime start_time;
MqlDateTime end_time;
datetime trade_time_start=0;
datetime trade_time_end=0;
datetime start=0;
datetime end=0;
ResetLastError();
datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME);
if(expiration!=0 && times>=expiration)return(false);
TimeToStruct(times,last_time);
if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
if(start==end)return(true);
if(times>start && times<end)return(true);
}
//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
if(start==end)return(true);
if(times>start && times<end)return(true);
}
//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
return(false);
}
//+------------------------------------------------------------------+
結果
もう少しコードをいじってみると、このようになりました。
何の話かわかっているのだろうか?
多分、私はよく理解していない、私は方法を理解して、私は取引所の取引時間外の市場の閉鎖を回避するためのソリューションが必要です。
解決策はプログラマーからではなく、開発者(あるいはブローカーが、その責任を負うのであれば、ブローカー)からである
引用されたコードは、Exchangeの現在時刻を チェックしていません。
今のところ、この解決策に落ち着きました
{
datetime lk_time = TimeTradeServer(tick_time);
if ( ( tick_time.day_of_week == int(FirstDay)) ||
( tick_time.day_of_week == int(SecondDay)))//выходные
{
return(false);
}
#ifdef DEBUG
if ((tick_time.hour >= 0) && (tick_time.hour < 6)) // DEBUG 6-00
{
return(false);
}
#else
if ((tick_time.hour >= 0) && (tick_time.hour < 10))
{
return(false);
}
#endif
// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30
// 14 * 3600 = 50400 - 14:00:00
// 14 * 3600 + 30 = 50430 - 14:00:30
// 14 * 3600 + 60 = 50460 - 14:01:00
// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30
// 18 * 3600 + 45 * 60 = 67500 - 18:45:00
// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30
// 18 * 3600 + 46 * 60 = 67560 - 18:46:00
// 19 * 3600 = 68400 - 19:00:00
// 19 * 3600 + 60 = 68460 - 19:01:00
// 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30
// 23 * 3600 + 50 * 60 = 85800 - 23:50:00
// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30
// 23 * 3600 + 51 * 60 = 85860 - 23:51:00
//---
lk_time = TimeCurrent(tick_time);
ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec;
//--- //10:00:02
if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
((trade_time >= time_st_day) && (trade_time < 67470)) ||
((trade_time >= time_st_evn) && (trade_time < 85770)))
{
return(true);
}
return(false);
}
まず、TimeTradeServerを 使用して、現在の「ダーティ」な時間を取得します。
すべてのセッションに「重なる」週末と時間(取引)をチェックしています。
とし、TimeCurrentを 使用する。
セッション内の時間を確認するための、現在のサーバーの時間です。
によって追加されました。
しかし、このチェックには一つ大きな欠点が ある。
ローカルコンピュータの時間がサーバーの時間より長い場合は問題ありませんが
しかし、現地時間の方が少ないとなると、大問題です。
取引サーバーの時間と現地時間の差で入札開始を逃すと :(
そのため、TimeCurrentが 必要なのです
は常にサーバーの時刻を返し、最後の既知の引用符の時刻だけを返すわけではありません。
によって追加されました。
もう一つの欠点
清算時に相場が来ないので、清算時にTimeCurrentを使うのは(例えば、保留中の注文を取り消す ために)無意味です :(