Home Trading Sistematico Post

Chiudere Ordini per Obiettivo o Limitare le Perdite - Strumento per MetaTrader 4

Allegato
34194.zip (995 bytes, Scarica 0 volte)

In questo articolo, esploreremo come utilizzare questo Expert Advisor (EA) come strumento di trading efficace.

Input Necessari

Per configurare correttamente l'EA, sono richiesti tre input:

  • Obiettivo di Profitto
  • Limite di Perdita
  • Numero Magico
extern    double         inTargetProfitMoney     = 10;       //Obiettivo di Profitto (€)
extern    double         inCutLossMoney          = 0.0      //Limite di Perdita (€)
extern    int            inMagicNumber           = 0        //Numero Magico

Funzione di Inizializzazione

Quando questo EA viene eseguito, verrà prima chiamata la funzione OnInit(), dove verificheremo l'inizializzazione degli input e delle variabili.

int OnInit()
  {
    //---
    if(inTargetProfitMoney <= 0)
       {
        Alert("Input non valido");
        return(INIT_PARAMETERS_INCORRECT);
     }

     inCutLossMoney = MathAbs(inCutLossMoney) * -1;

    //---
    return(INIT_SUCCEEDED);
  }

Funzione OnTick

Ogni volta che ci sarà un movimento di prezzo (tick), verrà chiamata la funzione OnTick().

void OnTick()
  {
    //---

    double   tFloating = 0.0;
    int tOrder  = OrdersTotal();
    for(int i=tOrder-1; i>=0; i--)
       {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
          {
            if(OrderMagicNumber() == inMagicNumber)
               {
                tFloating   += OrderProfit()+OrderCommission() + OrderSwap();
               }
        }
     }

    if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))
     {
      fCloseAllOrders();
     }
  }

Funzione di Chiusura Ordini

La funzione OnTick calcola continuamente il profitto o la perdita totale, chiudendo poi tutti gli ordini che raggiungono l'obiettivo o il limite massimo di perdita.

void fCloseAllOrders()
  {
    double   priceClose = 0.0;
    int tOrders = OrdersTotal();
    for(int i=tOrders-1; i>=0; i--)
       {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
          {
            if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))
               {
                priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);
                if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))
              {
                   Print("AVVISO: Chiusura Fallita");
              }
           }
        }
     }
  }

Unisciti a Noi!

Per ulteriori informazioni dettagliate e per condividere codice MQL4, ti invitiamo a unirti al nostro gruppo Telegram t.me/codeMQL.


Post correlati

Commento (0)