Ciao a tutti,
sto provando a scrivere un codice mql4 che....
appena l'ultimo trade aperto in ordine cronologico chiude per raggiunto TP, si chiudono anche tutti gli altri trade aperti e tutti gli ordini pendenti.
Non sono esperto ovviamente, comunque ho provato diverse soluzioni ma mi sono incartato.
Qualcuno mi può dare delle indicazioni?
Grazie
Mql4 chiudere tutti gli ordini appena....
-
- Messaggi: 21
- Iscritto il: 19/02/2021, 15:00
Re: Mql4 chiudere tutti gli ordini appena....
Buongiorno.
Assumendo che le operazioni d' apertura e chiusura siano gestite da un EA, potresti aggiungere il codice seguente:
Saluti
Assumendo che le operazioni d' apertura e chiusura siano gestite da un EA, potresti aggiungere il codice seguente:
Codice: Seleziona tutto
// Variabili globali
int MagN= 12345; //magic number
int LastTicket= 0;
// variabili locali alla funzione di apertura ordini
int op; // OP_BUY | OP_SELL
double lotti;
double prezzo= op == OP_BUY ? MarketInfo(_Symbol,MODE_ASK) : MarketInfo(_Symbol,MODE_BID);
// Quando l'EA apre una nuova posizione deve aggiornare il valore di LastTicket
LastTicket= OrderSend(_Symbol,op,lotti,prezzo,40,0,0,NULL,MagN);
// Controlla se l'ultimo ordine aperto e' stato chiuso in positivo, ed eventualmente chiude tutto
if(OrderSelect(LastTicket,SELECT_BY_TICKET,MODE_HISTORY))
if(OrderProfit() > 0) ChiudiTutto(_Symbol,MagN);
//+------------------------------------------------------------------+
// Chiude tutte le posizioni corrispondenti ai parametri passati
//+------------------------------------------------------------------+
void ChiudiTutto(string coppia= "", int magN= 0){
double prezzo;
string simbolo;
while(IsTradeContextBusy()) Sleep(100);
int tot= OrdersTotal();
for(int i= tot-1; i >= 0 ; i--){
//--- errore nella selezione ordine
if(!OrderSelect(i,SELECT_BY_POS)){
Alert("ERRORE Selezione Ordine #"+IntegerToString(GetLastError()));
break;
}
if((OrderSymbol() == coppia || coppia == "") && (OrderMagicNumber() == magN || magN == 0)){
simbolo= OrderSymbol();
prezzo= OrderType() == OP_BUY ? MarketInfo(simbolo,MODE_BID) : MarketInfo(simbolo,MODE_ASK);
if(!OrderClose(OrderTicket(),OrderLots(),prezzo,40)){
Alert("ERRORE Chiusura ordine #"+IntegerToString(GetLastError()));
break;
}
}
}
}
Chi c’è in linea
Visitano il forum: Nessuno e 0 ospiti