In questo articolo voglio parlarti di un interessante codice che ti consente di chiudere automaticamente tutte le posizioni aperte quando il drawdown raggiunge una certa percentuale del saldo del tuo conto.
Per utilizzare questo codice, dovrai semplicemente inserire il numero magico delle posizioni (puoi inserire 0 per controllare tutte le posizioni) e la percentuale massima di drawdown che consentirà alla logica del codice di chiudere le operazioni al raggiungimento di tale soglia.
Basta chiamare la funzione DD_close per utilizzare questo codice.
In allegato trovi il file di intestazione di questo codice con l'EA che è costruito su di esso.
// Per utilizzare questa opzione, devi solo chiamare la funzione : ( DD_close ) //+------------------------------------------------------------------+ //| Ambito globale | //+------------------------------------------------------------------+ bool Close_All_V; //+------------------------------------------------------------------+ //| Funzione principale | //+------------------------------------------------------------------+ // DD: Qui si indica la percentuale di DD, 100 significa non chiudere mai alcuna posizione. // Magic_Number: Il numero magico del tuo EA, inserisci 0 per controllare tutte le posizioni. void DD_close(int DD,int Magic_Number) { if(DD(Magic_Number)>=DD) Close_All_V=true; if(Close_All_V) Close_All(Magic_Number); } //+------------------------------------------------------------------+ //| Controlla chiusura | //+------------------------------------------------------------------+ void Check_Close(int Check_Number) // controlla chiusura ordine { if(Check_Number<0) Print("Chiusura ordine fallita con errore: ",ErrorDescription(GetLastError())); else Close_All_V=false; } //+------------------------------------------------------------------+ //| Chiudi tutto | //+------------------------------------------------------------------+ void Close_All(int M_N) { int Loop=0; for(int i=0; Loop<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { Loop++; if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==M_N || OrderMagicNumber()==0) { if(OrderType()==OP_BUY) Check_Close(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE)); if(OrderType()==OP_SELL) Check_Close(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE)); } } } //+------------------------------------------------------------------+ //| Calcola perdita | //+------------------------------------------------------------------+ double Loss(int M_N) { double re=0; int Loop=0; for(int i=0; Loop<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { Loop++; if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==M_N || OrderMagicNumber()==0) re=re+OrderProfit(); } return re * -1; } //+------------------------------------------------------------------+ //| Calcola la percentuale di drawdown | //+------------------------------------------------------------------+ double DD(int M_N) { return ( 100 / AccountBalance ( ) ) * Loss ( M_N ); } //+------------------------------------------------------------------+
Post correlati
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI
- Utilizzare MQL5 Wizard per generare segnali di trading: Hammer e Hanging Man con CCI
- MQL5 Wizard: Creare Trade Signals con Hammer/Hanging Man e RSI
- MQL5 Wizard: Crea Expert Advisor per segnali di trading basati su Dark Cloud Cover e Piercing Line con CCI