Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Un'altra nota molto importante per quanto riguarda l'uso del tuo EA su più coppie di valute o time-frames.
Il tuo codice non utilizza la selezione "Magic Number" né controlla il simbolo (né il "Magic number") in uso quando controlla gli ordini aperti nella cronologia. Quindi in sostanza il tuo EA non funzionerà correttamente né con se stesso né con altri EA.
Così com'è, puoi usare questo EA solo da solo senza nessun altro EA in esecuzione, nemmeno se stesso su un altro grafico!
bool ans;
//You do not select an order
if(OrderType()==OP_BUY){
while(fastma < slowma) //Use if not while
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1) //ticket is a local variable and has not been assigned a value
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
Grazie mille per avermi aiutato con il mio codice finora e per il tuo tempo, cercherò di fare le modifiche necessarie.
Poiché hai troppi problemi di logica nel tuo EA, ti suggerisco di dare un'occhiata al codice di esempio di MetaQuotes, vale a dire"Moving Average.mq4" e/o "MACD Sample.mq4" e costruire su quello, fino a capire i principi di base di come funziona un EA.
Ho allegato i file, ma li troverai nella tua cartella "MQL4\Experts".
EDIT: Per quanto riguarda il codice, stai usando OrderSelect, ma stai sempre assumendo che funzioni ogni volta. E quando non funziona continui ad usare le funzioni di dettaglio dell'ordine come OrderTicket() nella tua chiusura, che potrebbe fallire se anche l'iniziale OrderSelect() fallisce.
Dopo aver notato il tuo edit.....
Ho sempre pensato che un OrderSelect() sarebbe stato perso quando c'è un nuovo tick.
Così ho controllato e ho scoperto che una volta che un ordine è selezionato rimane selezionato anche nei nuovi tick successivi.
Imparo qualcosa di nuovo ogni giorno :)
Ho sempre pensato che un OrderSelect() sarebbe stato perso quando c'è un nuovo tick.
Così ho controllato e ho scoperto che una volta che un ordine è selezionato rimane selezionato anche nei nuovi tick successivi.
Imparo qualcosa di nuovo ogni giorno :)
Un'altra nota molto importante per quanto riguarda l'uso del tuo EA su più coppie di valute o time-frames.
Il tuo codice non utilizza la selezione "Magic Number" né controlla il simbolo (né il "Magic number") in uso quando controlla gli ordini aperti nella cronologia. Quindi in sostanza il tuo EA non funzionerà correttamente né con se stesso né con altri EA.
Così com'è, è possibile utilizzare questo EA solo da solo senza altri EA in esecuzione, nemmeno se stesso su un altro grafico!
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
//---Check Order Type
if(OrderType()==OP_BUY)
{
if(fastma < slowma)
{
if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
else
Print("Error : ", GetLastError());
return(0);
break;
}
if(OrderType()==OP_SELL)
{
if(fastma > slowma)
{
if(OrderClose(OrderTicket(),Lots,Ask,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
else
Print("Error : ", GetLastError());
return(0);
break;
}
}
Ecco la sezione OrderClose, non ricevo più l'errore di ticket non valido, ma ora ricevo un prezzo non valido
Qui è direttamente dal log
2016.12.09 10:47:10.243 Simple Moving Average Crossover Strategy EURUSDi,H1: prezzo non valido 1.05454000 per la funzione OrderClose
{
if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
...
{
if(OrderClose(OrderTicket(),Lots,Ask,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
Ecco la sezione OrderClose, non ottengo più l'errore di biglietto non valido, ma ora ottengo il prezzo non valido
Qui è direttamente dal log
2016.12.09 10:47:10.243 Simple Moving Average Crossover Strategy EURUSDi,H1: prezzo non valido 1.05454000 per la funzione OrderClose
Non usare Bid/Ask quando chiudi, usa OrderClosePrice(). Sarà automaticamente il prezzo buono.
Dovrei semplicemente sostituirlo nella funzione OrderClose? e se è così dovrei rimuovere l'OrderClosePrice nella funzione di stampa sotto di esso?
Modifica:
L'ho appena fatto, ma ora non tiene nessuna posizione aperta. Apre e chiude solo le posizioni, anche se ora non ha alcun problema a lavorare su più coppie.
if(OrderType()==OP_BUY)
{
if(fastma < slowma)
{
if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
else
Print("Error : ", GetLastError());
return(0);
break;
}
Non c'è nessun beed per i ritorni o l'interruzione in quanto è necessario completare il ciclo
Inoltre, la vostra stampa dell'errore dipende dal fatto che
if(fastma < slowma)
è falso, non è correlato al fatto che OrderClose() fallisca o meno
if(OrderType()==OP_BUY)
{
if(fastma<slowma)
{
if(OrderClose(OrderTicket(),Lots, OrderClosePrice(),10,clrNONE))
Print("Order Closed : ",OrderClosePrice());
else
Print("Error : ",GetLastError())
}
}