Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 30
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
Sto imparando, sto cercando di usare la guida, ma mi rendo conto che sto ottenendo delle sciocchezze, mi piacerebbe vedere un esempio di come fare.
Buona giornata a tutti! Potete per favore consigliarmi come impostare la cancellazione di un ordine in un EA?
La situazione è la seguente:
Mettiamo 2ordini pendenti in direzioni diverse, non appena uno di essi scatta, l'altro viene rimosso e non viene più esposto.
Sarei molto grato per qualsiasi aiuto.
Grazie.
Qualcosa del genere
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
"Continuiamo a cercare" deve essere rimosso!
Puoi modificare i tuoi messaggi sul forum. Tutto quello che hai scritto in post separati sopra può essere inserito in uno solo.
Ciao, ho introdotto una rete a strascico takeprofit utilizzando il seguente algoritmo:
if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magico && OrderSymbol()==asset& OrderType()==OP_BUY)
{
RefreshRates();
se(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
PRENDERE CONDIZIONE DI PROFITTO;
ORDINARE LA MODIFICA DI UN NUOVO TAKEPROFIT;
}
}
}
}
Ma il limite di tempo non funziona per qualche motivo e succede che se una posizione non viene chiusa nel timeframe corrente, essa si trascina anche nel timeframe successivo se le condizioni sono soddisfatte.
Cosa c'è di sbagliato nel mio ultimo if()?
Ciao, ho introdotto un takeprofit trawl utilizzando il seguente algoritmo:
se(totale>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magico && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates();
se(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
CONDIZIONE DI TP FINALE;
{ MODIFICA DELL'ORDINE AL NUOVO TAKEPROFIT;
}
}
}
}
Ma per qualche motivo il limite di tempo non funziona, e succede che se la posizione non viene chiusa nel timeframe corrente, scatta anche in quello successivo, se le condizioni sono soddisfatte.
Cosa c'è di sbagliato nel mio ultimo if()?
Beh, non lo so, non ho ancora visto nulla di sbagliato lì. Ho rimosso il controllo ridondante sul numero di ordini (è già presente nelle condizioni del ciclo) e ho aggiunto un controllo per entrambi i tipi di posizioni (Acquisto e Vendita)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Dove // le condizioni di pesca a strascico e di modifica, inserire Print() con i valori delle variabili temporali e vedere cosa dice il log.
Non so, non vedo ancora cosa ci sia di sbagliato con una rapida occhiata. Ho rimosso il controllo non necessario sul numero di ordini (è già presente nelle condizioni di ciclo) e ho aggiunto il controllo su entrambi i tipi di posizioni (Acquisto e Vendita)
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Dove // trawl e condizioni di modifica, inserire Print() con i valori delle variabili temporali e vedere cosa dice il log.
Ho condizioni diverse per Vendere, quindi ho mostrato solo COMPRARE.
"con variabili temporali" - intendete TimeCurrent()? Scusa se questo ti sorprende - sono uno zero-meno nella programmazione.
E non capisco questo -OrderType()>OP_SELL. Perché >? OrderType OP_SELL ha valore = 1 eOP_BUY = 0. Quindi deve essere <= ? Grazie.
Ho diverse condizioni di pesca a strascico per SELL, quindi ho mostrato solo BAI.
"con valori di variabili temporali" - intendi TimeCurrent()? Scusa se questo ti sorprende - sono uno zero-meno nella programmazione.
E non capisco questo -OrderType()>OP_SELL. Perché >? OrderType OP_SELL ha valore = 1 eOP_BUY = 0. Quindi deve essere <= ? Grazie.
Saluti. Potreste dirmi perché nel caso della seguente voce
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Il sistema genera costantemente errori
ticket non valido per la funzione OrderDelete
: errore OrderDelete 4051
Secondo il libro di riferimento è
Valore non valido del parametro della funzione
Anche se i parametri sembrano essere gli stessi.
Anche se se si rimuove la condizione e si lascia solo
OrderDelete(ticketD);
OrderDelete(ticketUP);
si cancella con successo (ma mi serve per condizione). Cosa sto facendo di sbagliato?
Saluti. Potreste dirmi perché nel caso della seguente voce
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Il sistema genera costantemente errori
ticket non valido per la funzione OrderDelete
: errore OrderDelete 4051
Secondo il libro di riferimento è
Valore non valido del parametro della funzione
Anche se i parametri sembrano essere gli stessi.
Anche se se si rimuove la condizione e si lascia solo
OrderDelete(ticketD);
OrderDelete(ticketUP);
si cancella con successo (ma mi serve per condizione). Cosa sto facendo di sbagliato?