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

 
Karlson:

Действительно .Ответы 0 (check)  и  10018 (result).

Это или баг или недоработка или мы что-то неправильно делаем. :) Можно попробовать в сервисдеск написать.
 
tol64:
Это или баг или недоработка или мы что-то неправильно делаем. :) Можно попробовать в сервисдеск написать.

Видимо баг, так как проверка пройдена нормально,

то ответом может быть лишь исполнение ордера либо проблемы исполнения на стороне сервера, но ни как не проблемы с запросом.

Закрытый рынок по логике не является проблемой исполнения (это проблема предварительной проверки), и должен присутствовать и в check.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
tol64:
Это или баг или недоработка или мы что-то неправильно делаем. :) Можно попробовать в сервисдеск написать.

Urain:

Закрытый рынок по логике не является проблемой исполнения (это проблема предварительной проверки), и должен присутствовать и в check.

В СД. По любому проверка должна отслеживать данную ошибку.

Давать дополнительный функционал (позволяющий самостоятельно определить возможность торгов) или нет это дело разработчиков, но проверка должна возвращать 10018 вместо 0.

 
Interesting:
В СД. По любому проверка должна отслеживать данную ошибку.

Давать дополнительный функционал (позволяющий самостоятельно определить возможность торгов) или нет это дело разработчиков, но проверка должна возвращать 10018 вместо 0.

Кто то уже написал в СД, или разрешения ждёмс?
 
Urain:
Кто то уже написал в СД, или разрешения ждёмс?
Я как понял tol64 этим вопросом хотел заняться, я полагаю нужно кому-то одному заявку писать. Конечно если что и я могу, тока чуток позже.
 
Interesting:
Я как понял tol64 этим вопросом хотел заняться, я полагаю нужно кому-то одному заявку писать. Конечно если что и я могу, тока чуток позже.

Я напишу сейчас. Ждал, когда больше людей выскажется по этой теме, так как были сомнения, что что-то может неправильно делаю.

Хочу ещё добавить/спросить. Удобнее ли будет, если функция OrderCheck() будет проверять любую ситуацию на возможность совершить торговую операцию?

Например, если нет соединения с сервером, она также возвращает 0. Но зато исправно возвращает код ошибки нехватки средств. :) Узнать, есть ли соединение с сервером можно и так: TerminalInfoInteger(TERMINAL_CONNECTED), но и  OrderCheck() по моему должна возвращать ошибку.

Николай (Urain) в самом начале предложил добавить флаг на проверку доступности торговли. Было бы так, например:  TerminalInfoInteger(MARKET_CLOSED) или скорее всего SymbolInfoInteger(SYMBOL_MARKET_CLOSED) , что тоже удобно. 

 

tol64:

Хочу ещё добавить/спросить. Удобнее ли будет, если функция OrderCheck() будет проверять любую ситуацию на возможность совершить торговую операцию?

Например, если нет соединения с сервером, она также возвращает 0. Но зато исправно возвращает код ошибки нехватки средств. :) Узнать, есть ли соединение с сервером можно и так: TerminalInfoInteger(TERMINAL_CONNECTED), но и  OrderCheck() по моему должна возвращать ошибку.


Да, проверка должна возвращать код ошибки  Ситуация когда чек возвращает 0, а запрос код ошибки которую заранее можно было просчитать не допустима.
 
tol64:

Спасибо Юрий. Ваше мнение всегда очень интересно. 

Получается остаётся актуальным вопрос по внедрению разработчиками функционала, который бы гарантированно возвращал код, закрыт или открыт на данный момент рынок. Флаг  TRADE_RETCODE_MARKET_CLOSED ведь нам возвращает сервер. Почему бы не сделать возможность получать эту информацию без попытки осуществления торговой операции, то есть абсолютно ненужных "телодвижений"? 


На стороне клиентского терминала это определить невозможно - в случае отсутствия тиков, клиентский терминал не имеет гарантированно точного значения текущего торгового времени, соответственно, даже имея расписание, нет возможности с нужной точностью определить текущее состояние рынка.

Использовать собственное время клиентского компьютера нельзя - точность его часов величина неопределённая.
Это же относится и к праздникам и к выходным дням.

В любом случае - посмотрим, что можно сделать.

 
Alexander:

...
В любом случае - посмотрим, что можно сделать.

Спасибо. Приоритет этой возможности не такой уж и большой, но было бы просто удобно.
 

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

используем SymbolInfoSessionTrade

//------------------------------------------------------------------    IsSessionOpen
bool IsSessionOpen(string smb)
{
        MqlDateTime dt; datetime tc=TimeTradeServer(dt);
        
        // проверяем время торгов по инструменту
        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 i=0; i<10; i++) // подразумеваем, что админ сделал не более 10 сессий в сутки
        {
                datetime fs, ts;
                if (!SymbolInfoSessionTrade(smb, (ENUM_DAY_OF_WEEK)dt.day_of_week, i, fs, ts)) break; // данные сессии
                if (sec>=fs && sec<=ts) return(true);
        }
        return(false);
}
Причина обращения: