Не удаётся выставить экспирацию ордера.

 

Коллеги, доброго времени суток.


Пытаюсь выставить экспирацию ордера, но в ответ получаю: invalid expiration type.

Код выглядит следующим образом:

datetime expir=TimeTradeServer()+PeriodSeconds(PERIOD_M5);

ct.BuyLimit(vol,price,sym1,0,0,ORDER_TIME_SPECIFIED,expir);


Пожалуйста помогите.

Спасибо.

 
Например:
input int t_ord=1;//t_ord=1; //количество часов
...............
datetime expir=TimeCurrent()+t_ord*3600;//3600-количество секунд в часе

ct.BuyLimit(vol,price,sym1,0,0,ORDER_TIME_SPECIFIED,expir);
 
nx0x2:

Коллеги, доброго времени суток.


Пытаюсь выставить экспирацию ордера, но в ответ получаю: invalid expiration type.

Код выглядит следующим образом:


Пожалуйста помогите.

Спасибо.

Экспирация должна быть не менее 10 минут от текущего времени. А в приведенном примере - 5 минут.
 
rosomah:

Спасибо, но предложенный Вами метод не сработал. Более того, при выставлении Вашим способом время экспирации равняется 00:00:00(ордер не выставляется с отбоем invalid expiration type), а если выставлять так:

datetime expir=TimeCurrent()+300;
..то время отображается так как нужно 00:05:00, при этом ордер всё равно не выставляется с ошибкой invalid expiration type
 
Ihor Herasko:
Экспирация должна быть не менее 10 минут от текущего времени. А в приведенном примере - 5 минут.

Спасибо, но более чем на 10 мин(1 час), ордера всё равно не выставляются.

 
nx0x2:

Спасибо, но более чем на 10 мин(1 час), ордера всё равно не выставляются.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

При модификации ордера возникает ошибка 131

fxsaber, 2017.09.12 19:47

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

А пока складывается ощущение, что задача не найти решение, а отвечать да/нет.

 
nx0x2:

Спасибо, но более чем на 10 мин(1 час), ордера всё равно не выставляются.

Надо сделать проверку на доступность установки истечения - не у всех символов она включена - SymbolInfoInteger(  , SYMBOL_EXPIRATION_MODE) - вернет маску флагов разрешенных режимов.

 
fxsaber:

Ошибка модификации ордера. Код ошибки=4753

 
nx0x2:

Ошибка модификации ордера. Код ошибки=4753

Торговый сервер, символ?


Возможно, так решится

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.02.25 16:16

// Возвращает тип истечения ордера, равный Expiration, если он доступен на символе Symb, иначе - корректный вариант.
ENUM_ORDER_TYPE_TIME GetExpirationType( const string Symb, uint Expiration = ORDER_TIME_GTC )
{
  const int ExpirationMode = (int)::SymbolInfoInteger(Symb, SYMBOL_EXPIRATION_MODE);

  if ((Expiration > ORDER_TIME_SPECIFIED_DAY) || (((ExpirationMode >> Expiration) & 1) == 0))
  {
    if ((Expiration < ORDER_TIME_SPECIFIED) || (ExpirationMode < SYMBOL_EXPIRATION_SPECIFIED))
      Expiration = ORDER_TIME_GTC;
    else if (Expiration > ORDER_TIME_DAY)
      Expiration = ORDER_TIME_SPECIFIED;

    uint i = 1 << Expiration;

    while ((Expiration <= ORDER_TIME_SPECIFIED_DAY) && ((ExpirationMode & i) != i))
    {
      i <<= 1;
      Expiration++;
    }
  }

  return((ENUM_ORDER_TYPE_TIME)Expiration);
}
Применение
Request.type_time = GetExpirationType(Request.symbol, (uint)Expiration); // Expiration может быть datetime-временем

if (Expiration > ORDER_TIME_DAY)
  Request.expiration = Expiration;
Такое изменение
ct.BuyLimit(vol,price,sym1,0,0,GetExpirationType(sym1, (uint)expir),(expir > ORDER_TIME_DAY) ? expir : 0);
 
fxsaber:

Торговый сервер, символ?


Возможно, так решится

Боевой сервер Открытие-Брокер, FORTS, sbrf-12.17

 
nx0x2:

Боевой сервер Открытие-Брокер, FORTS, sbrf-12.17

Выше решение.

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