Home Trading Sistematico Post

Gestire il Take Profit in Base al Profitto Corrente su MetaTrader 4

Allegato
47010.zip (1.03 KB, Scarica 0 volte)

Introduzione

Molti Expert Advisor (EA) tendono a chiudere gli ordini in take profit basandosi sulla distanza in pips dal prezzo di acquisto. Tuttavia, il codice utilizzato da EA Perceptron si basa principalmente sul profitto corrente. Questo approccio ti permette di gestire facilmente il take profit con più posizioni aperte, monitorando il profitto totale attuale in base al magic number, nel caso tu utilizzi più istanze di bot o diversi EA contemporaneamente. Seguimi e aggiungimi tra gli amici per rimanere aggiornato sulle novità!

Utilizzare questo codice può anche avere un impatto positivo su alcuni problemi che possono verificarsi quando si usa un take profit basato sui pips. Ad esempio, un take profit basato sui pips potrebbe variare a seconda dello slippage del tuo broker, limitando i profitti. Con un codice basato sul profitto corrente, puoi evitare questo problema e avere maggiore controllo sulle tue operazioni.

Se vuoi approfondire su come impostare un take profit basato sul profitto corrente, puoi utilizzare il codice di EA SwingBot come riferimento.


Totale Ordini

Iniziamo con il codice che calcola il numero totale di ordini aperti con lo stesso magic number.

Il magic number è un identificatore unico assegnato a un ordine dal trader o da un EA (Expert Advisor).

Il codice inizializza una variabile total_orders a zero. Poi, utilizza un ciclo for per scorrere tutti gli ordini aperti e seleziona ogni ordine usando la funzione OrderSelect(). Se un ordine viene selezionato con successo, incrementa la variabile total_orders di uno.

//----------------- 
   int total_orders = 0;
   for(int i = 0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == MagicNumber)
         {
         total_orders++;
        }
        }
     }


Calcolo del Profitto Corrente

Il codice inizializza due variabili: ProfittoMinimo e Profit. La variabile ProfittoMinimo è utilizzata per attivare il take profit a questo livello, il valore è espresso nella valuta del conto. La variabile Profit è utilizzata per accumulare il profitto corrente di tutte le posizioni aperte che hanno lo stesso magic number. La variabile StopLoss è utilizzata per lo stop loss.

Il codice utilizza un ciclo for per iterare attraverso tutte le posizioni aperte usando la funzione OrdersTotal(). Per ogni posizione aperta, l'ordine corrispondente viene selezionato usando la funzione OrderSelect(). Se l'ordine viene selezionato con successo e ha lo stesso magic number, il profitto dell'ordine viene aggiunto alla variabile Profit.

      double ProfittoMinimo = 3; // profitto obiettivo
      double Profit = 0; // profitto corrente
      
      for(int i=0; i<OrdersTotal(); i++)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderMagicNumber() == MagicNumber) // In caso di più EA, puoi rimuovere il filtro del MagicNumber per mantenere la funzione sul totale degli ordini
              {
               Profit += OrderProfit();
              }
        }


Il profitto minimo può essere impostato come una variabile esterna e configurato nelle opzioni dell'EA:

Profitto Minimo


Chiusura delle Posizioni se il Profitto è Raggiunto

Il codice utilizza un ciclo for per iterare attraverso tutti gli ordini aperti usando la funzione OrdersTotal(). Il ciclo inizia dall'ultimo ordine e va fino al primo ordine. Per ogni ordine, il corrispondente trade viene selezionato usando la funzione OrderSelect().

Se il trade selezionato ha lo stesso simbolo del grafico corrente, è di tipo OP_BUY, e ha lo stesso magic number specificato nel codice, verifica se il Profit del trade è maggiore o uguale a ProfittoMinimo. Se sì, chiude il trade al prezzo di bid utilizzando la funzione OrderClose() e stampa un messaggio che indica che l'ordine di acquisto è stato chiuso.

In modo simile, se il trade selezionato ha lo stesso simbolo del grafico corrente, è di tipo OP_SELL, e ha lo stesso magic number specificato nel codice, verifica se il Profit del trade è maggiore o uguale a ProfittoMinimo. Se sì, chiude il trade al prezzo di ask utilizzando la funzione OrderClose() e stampa un messaggio che indica che l'ordine di vendita è stato chiuso.

      for(int e = OrdersTotal() - 1; e >= 0; e--)
        {
         if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // l’ordine viene modificato solo se il MagicNumber corrisponde a quello dell’ordine in corso.
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Prezzo Bid
                  Print("Ordine di acquisto chiuso", Profit, " - Stoploss minimo: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }

            if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Prezzo Ask
                  Print("Ordine di vendita chiuso", Profit, " - Stoploss minimo: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }
        }
        }


Conclusione

Questo codice potrebbe essere utile per tutte le strategie di chiusura delle posizioni basate sul take profit, ma potrebbe anche essere combinato con uno stop loss dinamico basato sull'aumento del profitto corrente. Il sistema è anche utile in caso di più Expert Advisors. Se escludi la condizione if sul MagicNumber, puoi impostare livelli di take profit generali per controllare simultaneamente tutte le posizioni aperte da tutti gli EA attivi.



    Post correlati

    Commento (0)