errore 4756 - pagina 2

 
angevoyageur:
Quale funzione, classe/metodo stai usando per inviare/modificare i tuoi ordini?
OrderSend() dopo aver impostato laMqlTradeRequest
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() dopo aver impostatoMqlTradeRequest

Avete visto questo (da OrderSend doc)?

Va notato che il completamento dell'operazione del metodo OrderSend() non significa sempre il completamento dell'operazione quando si piazza un ordine a mercato. Controllate il valore delretcode che contiene il codice di ritorno del trade server e i valori del campo deal o order a seconda del tipo di operazione nelrisultato restituito .


Sarebbe più facile aiutare a vedere il codice.

 
angevoyageur:

Hai visto questo (da OrderSend doc)?


Sarebbe più facile aiutare a vedere il codice.

Controllo il risultato restituito e provo a piazzare lo SL & TP solo se restituisce TRADE_RETCODE_PLACED o 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:

Controllo il risultato restituito e provo a piazzare lo SL & TP solo se restituisce TRADE_RETCODE_PLACED o TRADE_RETCODE_DONE


Va notato che il completamento dell'operazione del metodo OrderSend() non significa sempre il completamento dell'operazione quando si piazza un ordine a mercato. Controllate il valore delretcode che contiene il codice di ritorno del trade server e i valori del campo deal o order a seconda del tipo di operazione nelrisultato restituito .

Dovete controllare il numero di ticket dell'operazione:

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

Questa non è l'ultima parola, se il vostro deal ticket è 0, la vostra modifica di SL/TP non verrà eseguita comunque. Sto ancora cercando...


 
angevoyageur:

Dovete controllare il numero di deal ticket:

Non è l'ultima parola, se il tuo deal ticket è 0, la tua modifica di SL/TP non verrà eseguita comunque. Sto ancora cercando...

Posso farlo, ma il problema è che il trade ha avuto successo e la posizione è stata aperta . . eppure quando ho provato ad aggiungere lo SL & TP è fallito con Invalid Stops anche se non erano invalidi. Sembra che io debba aspettare che succeda qualcosa prima di poter inviare la richiesta per impostare il TP & SL . . . ma non so davvero quale sia la cosa ufficiale e documentata che dovrei aspettare.

Grazie per la risposta :-)

 
RaptorUK:

Posso farlo, ma il problema è che il trade ha avuto successo e la posizione è stata aperta... ma quando ho provato ad aggiungere lo SL e il TP è fallito con Invalid Stops anche se non erano invalidi. Sembra che devo aspettare che succeda qualcosa prima di poter inviare la richiesta per impostare il TP e lo SL... ma non so davvero quale sia la cosa ufficiale e documentata che dovrei aspettare.

Grazie per la risposta :-)

Lo so. Sto controllando tutto il sito mql5 per trovare una risposta :-D

Modifica:

Nonc'è assolutamente nulla su questo sito che mostra come mettere un sl / tp con un tipo di esecuzione del commercio dimercato.

In realtà ho lo stesso problema ma usando PositionOpen al posto di OrderSend, posso anche farlo manualmente.

 
angevoyageur:

Lo so. Sto controllando tutti i siti mql5 per trovare una risposta :-D

Modifica:

Nonc'è assolutamente nulla su questo sito che mostri come mettere un sl / tp con un tipo di esecuzione commerciale dimercato.

In realtà ho lo stesso problema ma usando PositionOpen al posto di OrderSend, posso anche farlo manualmente.

Ho trovato. E' un problema di sincronizzazione tra il tuo EA e il trade server. Devi usare il gestore di eventi OnTradeTransaction().

Il risultato dell'esecuzione della richiesta di trade su un server inviato dalla funzione OrderSend() può essere tracciato dal gestore OnTradeTransaction. Va notato che OnTradeTransaction handler sarà chiamato diverse volte durante l'esecuzione di una richiesta di compravendita.

Per esempio, quando si invia un ordine di acquisto a mercato, questo viene gestito, viene creato un ordine di acquisto appropriato per il conto, l'ordine viene poi eseguito e rimosso dalla lista di quelli aperti, poi viene aggiunto alla cronologia degli ordini, viene aggiunta un'operazione appropriata alla cronologia e viene creata una nuova posizione. La funzione OnTradeTransaction sarà chiamata per ognuno di questi eventi.

RTFM ;-) Fai una prova... domani per me.
 
angevoyageur:

Ho trovato. È un problema di sincronizzazione tra il tuo EA e il server commerciale. Devi usare il gestore di eventi OnTradeTransaction().

RTFM ;-) Fai una prova... domani per me.
Ahhhh, grazie, darò un'occhiata :-)
 
RaptorUK:
Ahhhh, grazie, darò un'occhiata :-)
Era questo il thread che hai trovato?https://www.mql5.com/en/forum/10850 riporta lo stesso problema che sto avendo io
 

Il mio EA sta portando strani errori con la build 778. Il volume di 0,1 è normalizzato e chiaramente non valido.

2013.03.12 07:29:57 pivots (SILVER,M5) SILVER failed ORDER_TYPE_SELL_STOP with volume 0.10; err# 4756 check code: 10014 commenti: Volume non valido

2013.03.12 07:20:00 pivots (SILVER,M5) SILVER failed ORDER_TYPE_SELL_STOP with volume 0.10; err# 4756 returned code: 10014, commenti del broker: Volume non valido

Ecco il codice che lo porta su

      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