ошибка 4756 - страница 2

 
angevoyageur:
Какую функцию, классы/метод вы используете для отправки/изменения ордеров?
OrderSend() после настройкиMqlTradeRequest
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure - Documentation on MQL5
 
RaptorUK:
OrderSend() после настройкиMqlTradeRequest

Видели ли вы это (из документации OrderSend)?

Следует отметить, что успешное завершение операции метода OrderSend() не всегда означает успешное завершение сделки при размещении рыночного ордера. Проверьте значение retcode, содержащее код возврата торгового сервера , и значения поля deal или order в зависимости от типа операции в возвращаемомрезультате.


Былобы проще помочь , увидев код.

 
angevoyageur:

Видели ли вы это (из документа OrderSend)?


Былобы проще помочь , увидев код.

Я проверяю возвращаемый результат и пытаюсь разместить SL и TP, только если он возвращает TRADE_RETCODE_PLACED или TRADE_RETCODE_DONE

         if( result.retcode != TRADE_RETCODE_PLACED && result.retcode != TRADE_RETCODE_DONE ) 
            {
            SetTPandSL = false;
            Print("Return code # ", result.retcode, " Bid ", result.bid, " Ask ", result.ask, " Deal price ", result.price);
            }
         else SetTPandSL = true;

         if(SetTPandSL && ECN)
            {
            // now modify Position to add SL & TP
            ZeroMemory(request);
            ZeroMemory(result);
            request.action = TRADE_ACTION_SLTP;                   // setting the TP & SL
            request.symbol = _Symbol;                             // symbol
            request.sl = lastTick.ask - SL_Size * _Point;        // Stop Loss
            request.tp = lastTick.ask + TP_Size * _Point;        // Take Profit  
            
            //--- send a trade request
            OrderSend(request,result);
            
            //--- write the server reply to log  
            Print(__FUNCTION__,": Placeing SL & TP ",result.comment, " Return code # ", result.retcode);  
            if( result.retcode != TRADE_RETCODE_PLACED && result.retcode != TRADE_RETCODE_DONE ) 
               Print("Return code # ", result.retcode, " Bid ", lastTick.bid, " Ask ", lastTick.ask, " Deal price ", 
                  result.price, " SL: ", request.sl, " TP: ", request.tp, " Freeze: ", Freeze, " Stoplevel: ", Stop );
            }
 
RaptorUK:

Я проверяю возвращаемый результат и пытаюсь разместить SL и TP, только если он возвращает TRADE_RETCODE_PLACED или TRADE_RETCODE_DONE


Следует отметить, что успешное завершение операции метода OrderSend() не всегда означает успешное завершение сделки при размещении рыночного ордера. Проверьте значениеretcode, содержащее код возврата торгового сервера, и значения поля deal или order в зависимости от типа операции в возвращаемомрезультате.

Вы должны проверить номер тикета сделки:

  if( (result.retcode != TRADE_RETCODE_PLACED && result.retcode != TRADE_RETCODE_DONE) || result.deal == 0) 

Это не последнее слово, если ваш тикет сделки равен 0, то ваша модификация SL/TP все равно не будет выполнена. Все еще в поиске...


 
angevoyageur:

Вы должны проверить номер тикета сделки:

Это не последнее слово, если ваш тикет сделки равен 0, ваша модификация SL/TP все равно не будет выполнена. Все еще в поиске...

Я могу сделать это, но проблема в том, что сделка была успешной и позиция была открыта ... но когда я попытался добавить SL и TP, он потерпел неудачу с Invalid Stops, хотя они не были недействительными. Кажется, что я должен ждать, пока что-то произойдет, прежде чем я смогу отправить запрос на установку TP и SL ... но я действительно не знаю, что является официальной, документированной вещью, которую я должен ждать.

Спасибо за ответ :-)

 
RaptorUK:

Я могу это сделать, но проблема в том, что сделка была успешной и позиция была открыта... но когда я попытался добавить SL и TP, произошел сбой с сообщением Invalid Stops, хотя они не были недействительными. Кажется, что я должен ждать, пока что-то произойдет, прежде чем я смогу отправить запрос на установку TP и SL... но я действительно не знаю, что является официальной, документированной вещью, которую я должен ждать.

Спасибо за ответ :-)

Я знаю. Я проверяю весь сайт mql5, чтобы найти ответ :-D

Edit:

На этом сайте нет абсолютно ничего, показывающего , как поставить sl / tp с торговым исполнением типарынка.

На самом деле у меня та же проблема, но я использую PositionOpen вместо OrderSend, я также могу сделать это вручную.

 
angevoyageur:

Я знаю. Я проверяю весь сайт mql5, чтобы найти ответ :-D

Редактировать:

На этом сайтенет абсолютно ничего, показывающего , как поставить sl / tp с типом исполнения сделкиmarket.

На самом деле у меня та же проблема, но я использую PositionOpen вместо OrderSend, я также могу сделать это вручную.

Я нашел. Это проблема синхронизации между вашим советником и торговым сервером. Вы должны использовать обработчик события OnTradeTransaction().

Результат выполнения торгового запроса на сервере, отправленного функцией OrderSend(), может быть отслежен обработчиком OnTradeTransaction. Следует отметить, что обработчик OnTradeTransaction будет вызываться несколько раз при выполнении одного торгового запроса.

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

RTFM ;-) Попробуйте... завтра для меня.
 
angevoyageur:

Я нашел. Это проблема синхронизации между вашим советником и торговым сервером. Вы должны использовать обработчик события OnTradeTransaction().

RTFM ;-) Попробуйте... завтра для меня.
Аааа, спасибо, посмотрю :-)
 
RaptorUK:
Ааа, спасибо, посмотрим :-)
Вы нашли именно эту тему?https://www.mql5.com/en/forum/10850 В ней сообщается о той же проблеме, что и у меня.
 

Мой советник выдает странные ошибки в билде 778. Объем 0.1 нормализован и явно не является недействительным.

2013.03.12 07:29:57 pivots (SILVER,M5) SILVER failed ORDER_TYPE_SELL_STOP with volume 0.10; err# 4756 check code: 10014 комментарии: Неверный объем

2013.03.12 07:20:00 pivots (SILVER,M5) SILVER failed ORDER_TYPE_SELL_STOP with volume 0.10; err# 4756 returned code: 10014, комментарии брокера: Неверный объем

Вот код, который приводит к этому

      ResetLastError();
      if(OrderCheck(_request,_check)){
         if(!OrderSend(_request,_result)){
            Print(TradeSymbol," failed ",EnumToString(OrderType)," with volume ",DoubleToString(OrderVolume,2),"; err# ",GetLastError()," returned code: ",_result.retcode,", broker comments: ",_result.comment);
            return(false);}
         else{
            if(_result.retcode!=(0||TRADE_RETCODE_PLACED||TRADE_RETCODE_DONE)){
               Print(TradeSymbol," failed ",EnumToString(OrderType)," with volume ",DoubleToString(OrderVolume,2),"; err# ",GetLastError()," returned code: ",_result.retcode,", broker comments: ",_result.comment);}}}
      else{
         Print(TradeSymbol," failed ",EnumToString(OrderType)," with volume ",DoubleToString(OrderVolume,2),"; err# ",GetLastError()," check code: ",_check.retcode," comments: ",_check.comment);
         return(false); }


Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Order Properties - Documentation on MQL5
Причина обращения: