Pazar kapalı - sayfa 2 123456789...12 Yeni yorum prostotrader 2017.01.13 23:17 #11 İşlem süresi kontrolünü şu şekilde değiştirmeniz gerektiğini öneririm: 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 Windows yerel saatinin MT5 Synchronise Windows local time Sergey Chalyshev 2017.01.14 02:24 #12 prostotrader : Serezha! TimeCurrent yardımını okuyun - bunun SUNUCU zamanı olduğunu söylüyor Возвращает последнее известное время сервера , время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. Kene, hafta sonu veya işlem dışı zaman yoksa, TimeCurrent değişmez. Ve TimeTradeServer çalışmıyor , bilgisayarın yerel saatini gösteriyor. Danışmanı çalıştırarak kontrol etmek kolaydır: //+------------------------------------------------------------------+ 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 (), "" ); } //+------------------------------------------------------------------+ Bilgisayardaki saat değiştiğinde, TimeTradeServer da değişir ve bilgisayarın TimeLocal saatini gösterir. Market closed OnInit and OnTick never MQL4 ve MQL5 ile prostotrader 2017.01.14 10:05 #13 Sergey Chalyshev : Kene, hafta sonu veya işlem dışı zaman yoksa, TimeCurrent değişmez. Ve TimeTradeServer çalışmıyor , bilgisayarın yerel saatini gösteriyor. Danışmanı çalıştırarak kontrol etmek kolaydır: //+------------------------------------------------------------------+ 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 (), "" ); } //+------------------------------------------------------------------+ Bilgisayardaki saat değiştiğinde, TimeTradeServer da değişir ve bilgisayarın TimeLocal saatini gösterir. Ve önce TimeTradeServer aracılığıyla işlem süresini kontrol etmenizi ve ardından (zaman işlem yapıyorsa) daha doğru bir kontrol için, yukarıda yazdığım fonksiyon? Katma Tabii ki, bu bir seçenek olmasa da, çünkü bu sembol için tırnak işareti olmayabilir :( benden tahmin Nasıl kodlanır? FOREX - Trendler, Tahminler Sergey Gritsay 2017.01.16 07:27 #14 Biraz kafamı kırdım ve böyle bir seçenek yazdım, kimin aklına bu uygulama. //+------------------------------------------------------------------+ //| 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 Hatalar, hatalar, sorular simple question about OrderSend Denis Kirichenko 2017.01.16 08:38 #15 prostotrader : Arkadaşlar geliştiriciler! Peki, terminalin saatini Borsa saatiyle ne zaman senkronize ediyorsunuz? Mikalas, bu kesinlikle geliştiriciler için bir soru değil. Bu, komisyoncu yöneticileri tarafından yapılır. Onları hedef almalısın :-)) Sergey Gritsay 2017.01.16 09:20 #16 Kod üzerinde biraz daha büyü, olan buydu. //+------------------------------------------------------------------+ //| 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 ); } //+------------------------------------------------------------------+ sonuç Market closed Any rookie question, so Forumu kirletmemek için herhangi prostotrader 2017.01.16 13:34 #17 Sergey Gritsay : Kod üzerinde biraz daha büyü, olan buydu. Ne hakkında konuştuğumuzu bile anlıyor musun? Sergey Gritsay 2017.01.16 13:53 #18 prostotrader : Ne hakkında konuştuğumuzu bile anlıyor musun? Belki de tam olarak anlamadım, nasıl olduğunu anladım, borsanın işlem saatleri dışında piyasaya çıkmamak için bir çözüme ihtiyaç var. prostotrader 2017.01.16 13:58 #19 Sergey Gritsay : Belki de tam olarak anlamadım, nasıl olduğunu anladım, borsanın işlem saatleri dışında piyasaya çıkmamak için bir çözüme ihtiyaç var. Çözümler programcılardan değil, geliştiricilerden (veya ona bağlıysa bir komisyoncu, Broker) Sağladığınız kod, GÜNCEL DEĞİŞİM saatini kontrol etmiyor prostotrader 2017.01.16 14:42 #20 Şimdilik, bu çözümle sıkışıp kaldım 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 ); } İlk önce TimeTradeServer'ı alıyorum - mevcut "kirli" zamanı alıyorum Tüm oturumları "örtüşen" hafta sonlarını ve zamanı (işlem) kontrol ediyorum, ve sonra TimeCurrent'ı kullanın oturumlar içindeki zamanı kontrol etmek için sunucunun geçerli saati. Katma Ancak bu kontrolün önemli bir dezavantajı vardır . Bilgisayarın yerel saati sunucunun saatinden büyükse, her şey yolunda gidecektir, ancak yerel alan daha küçükse, o zaman büyük bir sorun ortaya çıkar - biz alım satım sunucusu saati ile yerel saat arasındaki fark için alım satım başlangıcını atlayın :( Bu nedenle, TimeCurrent yalnızca bilinen son alıntının zamanını değil, her zaman sunucu zamanını döndürür. Katma Başka bir dezavantaj Fiyat teklifleri takasa gelmez, bu nedenle takasta TimeCurrent kullanmak (örneğin, bekleyen emirleri kaldırmak için) anlamsızdır :( Windows yerel saatinin MT5 Synchronise Windows local time Market closed 123456789...12 Yeni yorum
İşlem süresi kontrolünü şu şekilde değiştirmeniz gerektiğini öneririm:
{
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 );
}
Serezha!
TimeCurrent yardımını okuyun - bunun SUNUCU zamanı olduğunu söylüyor
Kene, hafta sonu veya işlem dışı zaman yoksa, TimeCurrent değişmez.
Ve TimeTradeServer çalışmıyor , bilgisayarın yerel saatini gösteriyor.
Danışmanı çalıştırarak kontrol etmek kolaydır:
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 (),
"" );
}
//+------------------------------------------------------------------+
Bilgisayardaki saat değiştiğinde, TimeTradeServer da değişir ve bilgisayarın TimeLocal saatini gösterir.
Kene, hafta sonu veya işlem dışı zaman yoksa, TimeCurrent değişmez.
Ve TimeTradeServer çalışmıyor , bilgisayarın yerel saatini gösteriyor.
Danışmanı çalıştırarak kontrol etmek kolaydır:
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 (),
"" );
}
//+------------------------------------------------------------------+
Bilgisayardaki saat değiştiğinde, TimeTradeServer da değişir ve bilgisayarın TimeLocal saatini gösterir.
Ve önce TimeTradeServer aracılığıyla işlem süresini kontrol etmenizi ve ardından (zaman işlem yapıyorsa) daha doğru bir kontrol için,
yukarıda yazdığım fonksiyon?
Katma
Tabii ki, bu bir seçenek olmasa da, çünkü bu sembol için tırnak işareti olmayabilir :(
Biraz kafamı kırdım ve böyle bir seçenek yazdım, kimin aklına bu uygulama.
//| 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 );
}
//+------------------------------------------------------------------+
...
Arkadaşlar geliştiriciler!
Peki, terminalin saatini Borsa saatiyle ne zaman senkronize ediyorsunuz?
Kod üzerinde biraz daha büyü, olan buydu.
//| 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 );
}
//+------------------------------------------------------------------+
sonuç
Kod üzerinde biraz daha büyü, olan buydu.
Ne hakkında konuştuğumuzu bile anlıyor musun?
Belki de tam olarak anlamadım, nasıl olduğunu anladım, borsanın işlem saatleri dışında piyasaya çıkmamak için bir çözüme ihtiyaç var.
Çözümler programcılardan değil, geliştiricilerden (veya ona bağlıysa bir komisyoncu, Broker)
Sağladığınız kod, GÜNCEL DEĞİŞİM saatini kontrol etmiyor
Şimdilik, bu çözümle sıkışıp kaldım
{
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 );
}
İlk önce TimeTradeServer'ı alıyorum - mevcut "kirli" zamanı alıyorum
Tüm oturumları "örtüşen" hafta sonlarını ve zamanı (işlem) kontrol ediyorum,
ve sonra TimeCurrent'ı kullanın
oturumlar içindeki zamanı kontrol etmek için sunucunun geçerli saati.
Katma
Ancak bu kontrolün önemli bir dezavantajı vardır .
Bilgisayarın yerel saati sunucunun saatinden büyükse, her şey yolunda gidecektir, ancak
yerel alan daha küçükse, o zaman büyük bir sorun ortaya çıkar - biz
alım satım sunucusu saati ile yerel saat arasındaki fark için alım satım başlangıcını atlayın :(
Bu nedenle, TimeCurrent
yalnızca bilinen son alıntının zamanını değil, her zaman sunucu zamanını döndürür.
Katma
Başka bir dezavantaj
Fiyat teklifleri takasa gelmez, bu nedenle takasta TimeCurrent kullanmak (örneğin, bekleyen emirleri kaldırmak için) anlamsızdır :(