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

 
Класс Ctrade. Иногда не срабатывают рыночные ордера. В чем причина?
Я цену не устанавливаю.
Класс берет его из 
SymbolInfoDouble(symbol_name,SYMBOL_BID);
Так вот тут мне кажется какая то засада. 
            if(!a_trade.Sell(bvolume,_Symbol,0,0,0,""))
              {
               uint _result=a_trade.ResultRetcode();
               Print(__FUNCTION__+"не установлен ордер на продажу. Объем ",bvolume," Result=",_result);
               bysell_slep_time_2  += _timersec;
               _Sleep(__FUNCTION__+"2",bysell_slep_time_2);
               buysellrunning = false;
               return;
              }
bool CTrade::Sell(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="")
  {
//--- check volume
   if(volume<=0.0)
     {
      m_result.retcode=TRADE_RETCODE_INVALID_VOLUME;
      return(false);
     }
//--- check symbol
   string symbol_name=(symbol==NULL) ? _Symbol : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   return(PositionOpen(symbol_name,ORDER_TYPE_SELL,volume,price,sl,tp,comment));
  }
 
Aleksandr Dziuba:
Класс Ctrade. Иногда не срабатывают рыночные ордера. В чем причина?
Я цену не устанавливаю.
Класс берет его из  Так вот тут мне кажется какая то засада. 

Здравствуйте, Александр. Тоже обратил внимание на такую проблему. Цена BID по неведомой мне причине иногда была равна 0.00000. Обошёл её вот такой простой проверкой:

         int symb_dig=(int)SymbolInfoInteger(Symb_Pos,SYMBOL_DIGITS);
         double price_bid=NormalizeDouble(SymbolInfoDouble(Symb_Pos,SYMBOL_BID),symb_dig);
         if(price_bid>0)
            trade.Sell(GetLot(),Symb_Pos,price_bid,0,0);

Больше проблема не проявлялась.

С уважением, Владимир.

 
MrBrooklin #:

Здравствуйте, Александр. Тоже обратил внимание на такую проблему. Цена BID по неведомой мне причине иногда была равна 0.00000. Обошёл её вот такой простой проверкой:

Больше проблема не проявлялась.

С уважением, Владимир.

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

   MqlTick mqltick;
   SymbolInfoTick(_Symbol,mqltick);
 
Aleksandr Dziuba #:

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

Сюда: https://www.mql5.com/ru/forum/455977

Создаёте лаконичный код, воспроизводящий ошибку, и публикуете с описанием.

Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления - В пятницу 20 октября 2023 года выпущена обновленная версия платформы MetaTrader 5 build 4000.
Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления - В пятницу 20 октября 2023 года выпущена обновленная версия платформы MetaTrader 5 build 4000.
  • 2023.10.19
  • www.mql5.com
В ней мы внесли ряд улучшений в новый торговый отчет и веб-терминал. MetaTrader 5 Client Terminal Terminal Улучшен новый торговый отчет. перенесены в раздел Новая версия платформы MetaTrader 5 build 4000 Улучшения в торговом отчете и веб-терминале
 
Aleksandr Dziuba #:

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

Александр, с ценой ASK у меня было тоже самое. Причем в более ранних билдах такой проблемы никогда не замечал. Не знаю - с билдами это связано или нет, но проблема иногда проскакивает.

С уважением, Владимир.

 
Лет 5-6 назад у меня был брокер, который отправил нулевые Ask, а также Bid, одновременно. Я пропускаю таких тиков. 
Они потом исправили это, а потом исчезли.
Обращайтесь к брокеру, чтобы они исправили это.
Советую не торговать у таких брокеров..
 
Artyom Trishkin #:

Сюда: https://www.mql5.com/ru/forum/455977

Создаёте лаконичный код, воспроизводящий ошибку, и публикуете с описанием.

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

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

   

 

Я тут вижу два момента.

1. Торгую (на ФОРТС) рыночными ордерами, цену не ставлю (остаётся нулевая после очистки структуры), CTrade не использую, проблем с исполнением нет.

2. Иногда через SymbolInfoTick() получаю (получал в Открытии, в Финаме пока нет, но и торгую там совсем недавно ) нулевой Bid и/или Ask, приходится проверять и пропускать такие тики.

Думается, если ставить цену равной текущему биду, а цена за время выставления ордера (у Финама 200-300 мс против 20-30 у Открытия) уходит ниже, можем получить описанную выше ситуацию.
 
JRandomTrader #:

Я тут вижу два момента.

1. Торгую (на ФОРТС) рыночными ордерами, цену не ставлю (остаётся нулевая после очистки структуры), CTrade не использую, проблем с исполнением нет.

2. Иногда через SymbolInfoTick() получаю (получал в Открытии, в Финаме пока нет, но и торгую там совсем недавно ) нулевой Bid и/или Ask, приходится проверять и пропускать такие тики.

Такую структуру предлагает МQL. Тоесть если Мы отправляем такую структуру  но с ценой = 0. то все работает?

//--- объявление и инициализация запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result={};
//--- параметры запроса
   request.action   =TRADE_ACTION_DEAL;                     // тип торговой операции
   request.symbol   =Symbol();                              // символ
   request.volume   =0.1;                                   // объем в 0.1 лот
   request.type     =ORDER_TYPE_BUY;                        // тип ордера
   request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
   request.deviation=5;                                     // допустимое отклонение от цены
   request.magic    =EXPERT_MAGIC;                          // MagicNumber ордера
//--- отправка запроса
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
//--- информация об операции
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 
Aleksandr Dziuba #:

Такую структуру предлагает МQL. Тоесть если Мы отправляем такую структуру  но с ценой = 0. то все работает?

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

 
JRandomTrader #:

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

Благодарю. Сейчас попробую с нулевой ценой. отправить через запрос. Отпишусь по результату.