Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 82
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
Avrai l'ultimo perdente, cosa fare con esso e quali parametri regolare per te stesso, penso che lo capirai
Grazie, penso di aver capito.
Come faccio a far tornare il lotto al suo valore originale dopo il take profit?
{
lot=0.1
}
Grazie, penso di aver capito.
Come faccio a far tornare il lotto al suo valore originale dopo il take profit?
{
lot=0.1
}
Ho il seguente schema
se (OrdiniTotali()==0)
{
aprire con lotto iniziale
}
else
...
cioè se non ci sono ordini, non si aprirà con il vecchio lotto
Naturalmente è possibile memorizzare ogni ordine, ma non ci dicono come farlo.Un contatore dovrebbe essere avviato e riportato al suo valore iniziale quando viene raggiunta una certa soglia:
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Spiegare perché la funzione OrderProfit()<0 non funziona?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
Voglio vedere quanti stoploss per giorno della settimana
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
e qui penso che sia la stessa ragione per cui non funziona
Spiegare perché la funzione OrderProfit()<0 non funziona?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
Voglio vedere quanti stoploss per giorno della settimana
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
e qui mi sembra che sia la stessa ragione per cui non funziona
Perché DayOfWeek() restituisce il numero d'ordine del giorno della settimana dell'ultima ora conosciuta del server.
E avete bisogno del giorno della settimana dell'ora di chiusura dell'ordine: TimeDayOfWeek(OrderCloseTime());
Perché DayOfWeek() restituisce il numero d'ordine del giorno della settimana dell'ultima ora conosciuta del server.
E avete bisogno del giorno della settimana dell'ora di chiusura dell'ordine: TimeDayOfWeek(OrderCloseTime());
Ma il risultato è lo stesso, come se ignorandoif(OrderProfit()<0) e c'è un ciclo, le variabili ottengono grandi valori.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
E il ciclo con un lotto? L'ho copiato male qui, ho corretto il segnoif(OrderProfit()>0&&OrderType()<2), ma non cambia l'essenza, il ciclo funziona correttamente senza questa condizione.
Ma il risultato è lo stesso, come sese(OrderProfit()<0) viene ignorato e c'è un ciclo, le variabili hanno grandi valori.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
E il ciclo con un lotto? L'ho copiato male qui, ho corretto il segnoif(OrderProfit()>0&&OrderType()<2), ma non cambia l'essenza, il ciclo funziona correttamente senza questa condizione.
Dove sono dichiarati day1 e day2?
Dove sono dichiarati day1 e day2?
Ho il sospetto che sto selezionando l'ordine in modo errato, non funziona(OrderProfit()<0), devo essere più specifico su quale ordine ho bisogno. Non so perché salta un ordine quando l'ultimo si è chiuso al Take-Point e non ce ne sono altri. Forse, se voglio cercare nella storia, il ciclo dovrebbe essere costruito diversamente?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
La ragione è che gli Expert Advisors costruiscono cicli con condizioni simili e funzionano come richiesto, ma lavorano usandoOrdersTotal().
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Questo non può essere risolto in un solo ciclo. In questo ciclo, dovreste memorizzare i ticker degli ordini da cancellare nell'array, nel prossimo ciclo, dovreste cancellarli per ticker.
Inoltre, hai un pasticcio con le parentesi graffe, stai lavorando con gli ordini al di fuori del bloccoOrderSelect{}, questo non è corretto.