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

 
Lizar:
Предпоследняя строчка - это результат работы OrderCheck() в методе PositionOpen() класса CTrade. Торговый приказ на сервер не ушел. Посмотрите как это сделано в кассе.

Первая строчка это результат скрипта представленного выше. А следующие это попытка открыться экспертом в ручном режиме в момент, когда рынок был закрыт. 

Когда рынок открыт всё работает. Как сейчас:

 

Мне теперь придётся ждать выходных, чтобы заняться проверками на открытость/закрытость рынка (не успел). ))

 

Саммым точным определением закрыт рынок или нет!

к сожалению будет именно попытка отрыть например отложенный ордер !

цена по которому будет достаточно далека от текущего АСК и БИД

--

алгоритм прост!


1-узнаем по нужному символу текущий асб или бид !

2 делаем очень большое смещение

3 пытаемся выставить ордер! с самым малым лотом - и  далеко от текущей цены

4 если ордер не удается выставить анализируем ошибку

5 если это ошибка имеет тип  TRADE_RETCODE_MARKET_CLOSED  радуемся! мы определили что в данный момент рынок закрыт!

6 если ордер удалось отрыть - тут же удаляем его и тоже радуемся - рынок работает!


это будет самый надежный способ!

все другие будут информационные! и не надежные! и не гарантирующие результат





 
YuraZ:

... 

это будет самый надежный способ!

все другие будут информационные! и не надежные! и не гарантирующие результат

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

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

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

У меня вот так получилось.

В принципе очень даже замечательно работает. Пока косяков не нашел.

if (SymbolInfoInteger(zSymbolName,SYMBOL_TRADE_MODE) != SYMBOL_TRADE_MODE_FULL ||
                !zSymbolInfoSessionTrade(zSymbolName))                         {zSymbolTrade = false;}

if (SymbolInfoInteger(zSymbolName,SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL)
{
if (zSymbolInfoSessionTrade(zSymbolName))                                      {zSymbolTrade = true;}
}


..........

bool zSymbolInfoSessionTrade(string zSymbol)
{
datetime StartHour, FinishHour;

MqlDateTime zTimeCurrent;
TimeCurrent(zTimeCurrent);
zTimeCurrent.year=1970;
zTimeCurrent.mon=01;
zTimeCurrent.day=01;
datetime CurrentHour = StructToTime (zTimeCurrent);

SymbolInfoSessionTrade(zSymbol,(ENUM_DAY_OF_WEEK)zTimeCurrent.day_of_week,0,StartHour,FinishHour);

return (StartHour<CurrentHour && CurrentHour<FinishHour);
}
 
awkozlov:

У меня вот так получилось.

В принципе очень даже замечательно работает. Пока косяков не нашел.

Спасибо. Как вариант, да. Но вопрос стоял, как получить код TRADE_RETCODE_MARKET_CLOSED до совершения торговой операции
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
tol64:
Спасибо. Как вариант, да. Но вопрос стоял, как получить код TRADE_RETCODE_MARKET_CLOSED до совершения торговой операции
Через  OrderCheck() , уже ответили выше. Функция не совершает сделку, а лишь проверяет правильность запроса.
 
Urain:
Через  OrderCheck() , уже ответили выше. Функция не совершает сделку, а лишь проверяет правильность запроса.
Николай, я попробовал так, как в этом посте в выходной день. В ответ я получаю (OK!) (retcode==ноль), то есть нет знака, что рынок закрыт. При попытке открыть позицию получаю market closed (10018). Или я что-то неправильно делаю?
 
tol64:
Николай, я попробовал так, как в этом посте в выходной день. В ответ я получаю (OK!) (retcode==ноль), то есть нет знака, что рынок закрыт. При попытке открыть позицию получаю market closed (10018). Или я что-то неправильно делаю?

А вы точно сheckresult.retcode смотрите? а не result.retcode ? (имена могут быть другие,но смысл ответа от запроса проверки)

 
Karlson:

А вы точно сheckresult.retcode смотрите? а не result.retcode ? (имена могут быть другие,но смысл ответа от запроса проверки)

Я смотрю вот этот retcode:

struct MqlTradeCheckResult
  {
   uint         retcode;             // Код ответа
   double       balance;             // Баланс после совершения сделки
   double       equity;              // Эквити после совершения сделки
   double       profit;              // Плавающая прибыль
   double       margin;              // Маржевые требования
   double       margin_free;         // Свободная маржа
   double       margin_level;        // Уровень маржи
   string       comment;             // Комментарий к коду ответа (описание ошибки)
  };

На выходных попробую ещё раз посмотреть. 

P.S. Вообще-то сбит немного с толку разнонаправленными мнениями опытных участников. :) 

 

 

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

MqlTradeResult result;
MqlTradeCheckResult check;
MqlTradeRequest request;

void OnStart()
    {       double price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
            
            request.action=TRADE_ACTION_DEAL;
            request.symbol=_Symbol;
            request.volume=0.05;
            request.sl=0;
            request.tp=0;
            request.deviation=100;
            request.type=ORDER_TYPE_BUY;
            request.price=NormalizeDouble(price,_Digits);
            
            bool Ch=OrderCheck(request,check);
            Print (check.retcode);
    
            bool Se=OrderSend(request,result);
            Print (result.retcode);
     } 

 

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