Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Sistemi Esperti

Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - sistema esperto per MetaTrader 5

Visualizzazioni:
66
Valutazioni:
(5)
Pubblicato:
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

Questo blocco di codice funziona se si utilizza uno Stop Loss o meno.


Requisiti

  • È necessario includere "Trade.mqh" per avere accesso alla classe CTrade che consente di lavorare con posizioni e ordini.

#include <Trade\Trade.mqh> // <<------------------------------------------ Includere questo "Trade.mqh" per accedere alla classe CTrade 

  • È necessario impostare un parametro di input per regolare la distanza di trailing come si desidera. Non è necessario, ma è comodo.
input double Traling_Step = 3.0;
  • È necessario definire un'istanza della classe CTrade, il cui nome può essere qualsiasi. Sarebbe meglio inserirla dopo il gestore dell'evento OnInt .

  • Quindi è necessario creare un'istruzione if per verificare se una posizione è in corso al momento. Questa istruzione richiama la funzione Check_TrailingStop(); per ogni tick. Questo è importante perché l'EA deve seguire un percorso netto e regolare. Ricordate di inserire questa istruzione all' inizio del gestore dell'evento OnTick per funzionare correttamente.
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- creare il timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }


CTrade trade; // <<------------------------------------------ Dichiarare la calss "CTrade". è possibile sostituire "trade" con un nome qualsiasi.
void OnTick()
  {
   
   if(PositionsTotal() > 0) // chiama la funzione di trailing stop per ogni tick se ci sono posizioni in corso. 
     {
      Check_TralingStop(); 
     } 
     
       
  }

  • È necessario dichiarare una funzione personalizzata chiamata Check_TrailingStop(); ( in questo caso) per fare il resto. Si può usare il nome che si desidera.
  • La funzione personalizzata esegue un loop di tutte le posizioni aperte e le traccia alla distanza desiderata.
void Check_TralingStop()
  {
   int totalPositions = PositionsTotal();
   for(int count =0; count < totalPositions; count++)
     {
      ulong TicketNo = PositionGetTicket(count); // Ottenere il numero del biglietto di posizione utilizzando l'"indice" della posizione.

      if(PositionSelectByTicket(TicketNo)) // Selezionare una posizione utilizzando il numero di biglietto (abbiamo già scelto il numero di biglietto).
        {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // Controllare la posizione Tipo.
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);       // <<-------------------Raccogliere la posizione attuale Stop Loss
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // Nessun stop loss è vero.
              {
               if(bidPrice > openPrice && trailingLevel > openPrice) // Viene eseguito solo una volta per posizione. Imposta il primo SL.

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade".
              }


            if(bidPrice > openPrice && trailingLevel > stopLoss) // verifica che il livello di trailing sia superiore al livello precedente.
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade".
              }

           }
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            double askPrice  = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // Nessun stop loss è vero.
              {
               if(askPrice < openPrice && trailingLevel < openPrice) // Viene eseguito solo una volta per posizione. Imposta il primo SL.

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade".
              }

            if(askPrice < openPrice && trailingLevel < stopLoss) // verifica che il livello di trailing sia superiore al livello precedente.
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade".
              }
           }

        }
     }
  }










    Tradotto dall’inglese da MetaQuotes Ltd.
    Codice originale https://www.mql5.com/en/code/49021

    StoDiv StoDiv

    Un tipico indicatore di segnale semaforico che utilizza l'oscillatore stocastico e i frattali.

    ComprareVendere ComprareVendere

    Questo indicatore mostra l'ultima "linea di difesa" della tendenza attuale. Il cambiamento di tendenza è indicato da quadrati colorati e la direzione della tendenza da punti colorati.

    Simple Code for Detect  A  "New Bar or New Candle " Received Simple Code for Detect A "New Bar or New Candle " Received

    Questo blocco di codice rileva una Nuova barra o una Nuova candela quando viene ricevuta.

    Correlazione di rango Ultra Spearman Correlazione di rango Ultra Spearman

    Questo indicatore di tendenza del segnale si basa sulle letture dell'indicatore personalizzato Spearman Rank Correlation e sull'analisi della tendenza delle sue linee di segnale multiple.