Mql4 chiudere tutti gli ordini appena....

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico
Rispondi
Paul9
Messaggi: 20
Iscritto il: 21/04/2017, 21:11

Mql4 chiudere tutti gli ordini appena....

Messaggio da Paul9 »

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
Semporasere
Messaggi: 21
Iscritto il: 19/02/2021, 15:00

Re: Mql4 chiudere tutti gli ordini appena....

Messaggio da Semporasere »

Buongiorno.
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;
         }
      }
   }      
} 
Saluti
Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti