Класс Ctrade. Иногда не срабатывают рыночные ордера. В чем причина? - страница 2

 
JRandomTrader #:

Я добавил в предыдущем сообщении

Может это из за параметра проскальзывание? он у меня стоял 1 пипс. Но для срочного рынка это как то нормально.

В структуре тоже нужно выставлять проскальзывание. Какое из опыта у Вас?

 
Aleksandr Dziuba #:

Может это из за параметра проскальзывание? он у меня стоял 1 пипс. Но для срочного рынка это как то нормально.

В структуре тоже нужно выставлять проскальзывание. Какое из опыта у Вас?

Проскальзывание не ставлю.

 
Aleksandr Dziuba #:

Это не Вам Петрос. Это Тришкину.  

Если бы я мог отправить "Лаконичный код" б..дь. Я бы это сделал. Если бы эта ошибка была постоянной. Я бы это сделал. Я в тестировании 20 лет.  Умник. Если больше никто не торгует через МТ5 в России фонду а торгует только Финам. То выбирать не из чего. 
Проблема в рыночной заявке.  Она через терминал отправляется. Класс Ctrade. Что то не так. Параметров в рыночной заявке нет. Только символ и объем.  Объем 1 лот.  Я уже подставил специально цену.
Но тоже не работает.  Может брокер что то натворил. Все работало год. 

  

Эмм, а что за хамство и грубости?

Ваш вопрос?

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

Класс Ctrade. Иногда не срабатывают рыночные ордера. В чем причина?

Aleksandr Dziuba, 2023.12.05 08:36

Да Владимир. Похоже 0 как раз и выдается. И это имеет значение для ошибки.  Я заметил что вообще системные процедуры SymbolInfoDouble начали выдавать не правильные значения.  Это касается не только бида. Но и ласта и др. 
Я начал использовать получение этих значений через  MqlTick Она по крайней мере работает. Куда сообщать об ошибках. Ведь это системная функция. 

   MqlTick mqltick;
   SymbolInfoTick(_Symbol,mqltick);

Цитирую, если не заметили:

Куда сообщать об ошибках. Ведь это системная функция

Я Вам ответил на Ваш вопрос. В чём  проблема, и почему хамите?

 
Artyom Trishkin #:

Эмм, а что за хамство и грубости?

Ваш вопрос?


Цитирую, если не заметили:

Я Вам ответил на Ваш вопрос. В чём  проблема, и почему хамите?

Сорри. Нервы. Проблема оказалась банальной. Ни аск ни бид. Просто Финам не прописывает символы как надо. Сегодня они похоронили.  

ORDER_FILLING_FOK


И оставили только ORDER_FILLING_IOC. Ну соответственно заявки отказывались срабатывать так как в символе то прописано  ORDER_FILLING_FOK.

Костыль воткнул. На время.  Мне все равно. Я торгую минимальным лотом. Он на рынке всегда есть. 

 
Artyom Trishkin #:


Нулевые возвраты цен бывают, но это сторона брокера, лаконичный код здесь не составить для воспроизведения. А вот штатную проверку на ноль было бы не плохо. Текущие цены нужны не только для выставления позиций. И всегда приходится делать проверку на ноль.

 
Aleksandr Dziuba #:

Сорри. Нервы. Проблема оказалась банальной. Ни аск ни бид. Просто Финам не прописывает символы как надо. Сегодня они похоронили.  

ORDER_FILLING_FOK


И оставили только ORDER_FILLING_IOC. Ну соответственно заявки отказывались срабатывать так как в символе то прописано  ORDER_FILLING_FOK.

Костыль воткнул. На время.  Мне все равно. Я торгую одним лотом. Он на рынке всегда есть. 

А вот это интересно. У меня в коде ставится именно ORDER_FILLING_FOK, именно этот код используется, но в логах, как минимум с 2019 года, вижу ORDER_FILLING_IOC.

И ещё момент в Финаме:

Выставление лимитных заявок возможно только с истечением "до отмены" - ORDER_TIME_GTC, хотя по факту действует истечение "день" - ORDER_TIME_DAY (заявки снимаются на вечернем клиринге).

Было бы логично и правильно, если бы, как минимум, заявки с истечением ORDER_TIME_DAY не отвергались по "неверному истечению".

 
Valeriy Yastremskiy #:

Нулевые возвраты цен бывают, но это сторона брокера, лаконичный код здесь не составить для воспроизведения. А вот штатную проверку на ноль было бы не плохо. Текущие цены нужны не только для выставления позиций. И всегда приходится делать проверку на ноль.

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

 
Ответ Финама по сегодняшней проблеме. 
Александр Константинович, вернули всё как было и сделаем отдельное объявление с разъяснениями по каждому рынку, перед тем, как обратно включим"
 

Так. Сделал по классике код для рыночных заявок. Запустил на тесте.
Так вот почему-то фортс работает все равно через лимитный ордер
 
А фонда рыночными.

Кто ни будь может этот феномен объяснить??????



//+------------------------------------------------------------------+
bool BuyMarket(const string symbol,const double volume,uint&resultcode,ulong&resultorder)
  {
//--- объявление и инициализация запроса и результата
   MqlTradeRequest request= {};
   MqlTradeResult  result= {};
//--- параметры запроса
   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции
   request.symbol   =symbol;                                // символ
   request.volume   =volume;                                // объем в 0.1 лот
   request.type     =ORDER_TYPE_BUY;                        // тип ордера
   request.price    =0;                                     // цена для открытия по рынку
   request.deviation =_deviation;                           // допустимое отклонение от цены
   request.magic    =Expert_MagicNumber;                    // MagicNumber ордера
//--- отправка запроса
   if(!OrderSend(request,result))
     { 
      resultorder = 0;
      resultcode=result.retcode;
      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      return(false);
     }
//--- информация об операции
   resultorder = result.order;
   resultcode = 0;
   return(true);
  }
//+------------------------------------------------------------------+
bool SellMarket(const string symbol,const double volume,uint&resultcode,ulong&resultorder)
  {
//--- объявление и инициализация запроса и результата
   MqlTradeRequest request= {};
   MqlTradeResult  result= {};
//--- параметры запроса
   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции
   request.symbol   =symbol;                                // символ
   request.volume   =volume;                                // объем в 0.1 лот
   request.type     =ORDER_TYPE_SELL;                       // тип ордера
   request.price    =0;                                     // цена для открытия по рынку
   request.deviation =_deviation;                           // допустимое отклонение от цены
   request.magic    =Expert_MagicNumber;                    // MagicNumber ордера
//--- отправка запроса
   if(!OrderSend(request,result))
     {
      resultorder = 0;
      resultcode=result.retcode;
      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      return(false);
     }
//--- информация об операции
//--- информация об операции
   resultorder = result.order;
   resultcode = 0;
   return(true);
  }
//+------------------------------------------------------------------+
 
Aleksandr Dziuba #:

Так. Сделал по классике код для рыночных заявок. Запустил на тесте.
Так вот почему-то фортс работает все равно через лимитный ордер
 
А фонда рыночными.

Кто ни будь может этот феномен объяснить??????

Люди! Это сервер подставляет лимитки?  Кому вопросы задавать?