Как узнать, что по выходным нет торговли? - страница 6

 
а я вообще только после нового минутного бара работаю (в основном из-за того, что тестер позволяет торговать на выходных, что искажает результаты тестирования), хотя и использую таймер
 
o_o:

есть решение проще.

используем SymbolInfoSessionTrade

СПАСИБО!

Для МТ4

//------------------------------------------------------------------    IsSessionOpen
bool IsSessionOpen(string smb)
{
     //MqlDateTime dt; datetime tc=TimeTradeServer(dt);
      datetime tc= TimeCurrent();
     // проверяем время торгов по инструменту
     datetime t=(datetime)SymbolInfoInteger(smb, SYMBOL_EXPIRATION_TIME);
     if (tc>t && t>0) return(false);
     t=(datetime)SymbolInfoInteger(smb, SYMBOL_START_TIME);
     if (tc<t && t>0) return(false);
     
     // проверяем сессии инструмента
     datetime ds=tc/(60*60*24); ds*=(60*60*24); // начало сегодня
     datetime sec=tc-ds; // число секунд от начала дня
     bool b=false;
     for (int l=0; l<10; l++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
             datetime fs, ts;
             if (!SymbolInfoSessionTrade(smb, TimeDayOfWeek(TimeCurrent()), l, fs, ts)) break; // данные сессии
             if (sec>=fs && sec<=ts) return(true);
     }
     return(false);
}


 

Та же ошибка ( 10018 ) вылезла на закрытие позиции в icmarkets.

Хоть от публикации прошло 9 лет, но все прекрасно работает, ошибка исчезла.

От Души! автору.

 
Renat Akhtyamov #:

СПАСИБО!

Для МТ4

//------------------------------------------------------------------    IsSessionOpen
bool IsSessionOpen(string smb)
{
     //MqlDateTime dt; datetime tc=TimeTradeServer(dt);
      datetime tc= TimeCurrent();
     // проверяем время торгов по инструменту
     datetime t=(datetime)SymbolInfoInteger(smb, SYMBOL_EXPIRATION_TIME);
     if (tc>t && t>0) return(false);
     t=(datetime)SymbolInfoInteger(smb, SYMBOL_START_TIME);
     if (tc<t && t>0) return(false);
     
     // проверяем сессии инструмента
     datetime ds=tc/(60*60*24); ds*=(60*60*24); // начало сегодня
     datetime sec=tc-ds; // число секунд от начала дня
     bool b=false;
     for (int l=0; l<10; l++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
             datetime fs, ts;
             if (!SymbolInfoSessionTrade(smb, TimeDayOfWeek(TimeCurrent()), l, fs, ts)) break; // данные сессии
             if (sec>=fs && sec<=ts) return(true);
     }
     return(false);
}


Здесь, видимо, надо использовать TimeLocal(), ибо TimeCurrent() в выходные вернёт время пятницы, если нет Котировочной сессии.

 
Andrey Kaunov #:

Здесь, видимо, надо использовать TimeLocal(), ибо TimeCurrent() в выходные вернёт время пятницы, если нет Котировочной сессии.

Это не поможет.

Котировки идут, время идет, но всё-же рынок закрыт.

Причина обращения: