Pagina 1 di 1

Errore 4051

Inviato: 03/03/2022, 0:49
da thinky
Salve ho il problema con errore 4051 ho scritto questo ma mi da questo errore.

void EseguiOrdineLong(){

if(Ticket>0){
if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES))Print("Errore Ordine Select",GetLastError());

if(OrderCloseTime()==0 && OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber){

if(!OrderClose(Ticket,OrderLots(),Ask,0,0)){
Print("Errore Ordine Close",GetLastError());
}
Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-10*SL*Point,Ask+10*TP*Point,"Ordine Buy 3 Soldati ",MagicNumber,0,0);


}
else
if(OrderCloseTime()!=0 && OrderMagicNumber()==MagicNumber){

Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-10*SL*Point,Ask+10*TP*Point,"Ordine Buy 3 Soldati ",MagicNumber,0,0);
}
}
else Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-10*SL*Point,Ask+10*TP*Point,"Ordine Buy 3 Soldati ",MagicNumber,0,0);



}

Re: Errore 4051

Inviato: 03/03/2022, 9:20
da Semporasere
Salve.
Senza entrare nel merito della logica della funzione, l'errore #4051 dovrebbe derivare dalla presenza del n."0" come ultimo parametro delle funzioni OrderSend(...) ed OrderClose(): provi a toglierlo.

Annotazioni:
La variabile globale Ticket dovrebbe essere verificata/valorizzata all'avvio dell'EA (e comunque prima di richiamare la funzione).
La 2^ if del codice dovrebbe verificare la negazione "if(!OrderSelect..."
Bisognerebbe gestire gli eventuali errori restituiti da OrderSelect(...) ed OrderClose(...), magari solamente uscendo dalla funzione.
Bisognerebbe verificare il risultato di OrderSend.

Saluti.