Discussione sull’articolo "Come creare il Tuo Trailing Stop"

 

Il nuovo articolo Come creare il Tuo Trailing Stop è stato pubblicato:

La regola di base del trader: lascia che il profitto cresca, riduci le perdite! Questo articolo considera una delle tecniche di base che consentono di seguire questa regola: spostare lo stop level protettivo (livello di Stop Loss) dopo aver aumentato il profitto della posizione, ovvero il livello di Trailing Stop. Troverai la procedura step by step per creare una classe per il trailing stop sugli indicatori SAR e NRTR. Tutti potranno inserire questo trailing stop nei propri expert o utilizzarlo autonomamente per controllare le posizioni nei propri account.

Figura 11. Pulsanti e Indicatori sul Grafico dopo l'Avvio di Sample_TrailingStop.

Autore: Dmitry Fedoseev

 

Molto utile. Grazie.


Steven

 

L'esempio successivo fallisce con un errore.

 
Si prega di specificare quale.
 

Programmatori, aiuto con mql5, per favore!!!

E' possibile utilizzare una normale funzione di trailing come in mql4 senza alcuna classe? Proprio come, ad esempio, la funzione TradeSizeOptimised è implementata in Moving Averages.mq5.

Ho già cercato di tutto, negli esempi, negli articoli, nel forum - non ho trovato nulla. Mi sono già perso completamente.... Forse qualcuno ha una variante pronta, gliene sarò molto grato!!! - Vorrei partecipare al campionato.

 
Setslav:

Programmatori, aiuto con mql5, per favore!!!

E' possibile utilizzare una normale funzione di trailing come in mql4 senza alcuna classe? Proprio come, ad esempio, la funzione TradeSizeOptimised è implementata in Moving Averages.mq5.

Ho già cercato di tutto, negli esempi, negli articoli, nel forum - non ho trovato nulla. Mi sono già perso completamente.... Forse qualcuno ha una variante pronta, gliene sarò molto grato!!! - Vorrei partecipare al campionato.


ecco a voi

int TrailingStop()
  {
   if(PositionSelect(Symbol())) // selezionare la posizione
     {
      //MqlTradeRequest m_request;// dichiarare la struttura della richiesta al server
      //MqlTradeResult m_result;// dichiarare la struttura di risposta del server
      double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);                         // scrivere il prezzo dell'offerta nella variabile
      double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);                         // scrivere nella variabile ask price
      double OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);                     // scrivere il prezzo di apertura della posizione nella variabile
      double PositionSL=PositionGetDouble(POSITION_SL);                            // scrivere il livello di stop loss nella variabile
      double PositionTP=PositionGetDouble(POSITION_TP);                            // scrivere il livello di take profit nella variabile

      if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // definire il tipo di posizione
        {
         if(TrailWhileMinus==true || Bid-OpenPrice>_Point*Trail) // non si può fare la pesca a strascico fino a quando non si raggiunge il pareggio con il primo trasferimento di tappa
           {
            if(Bid-PositionSL>Trail*_Point) //condizione di base per la necessità di spostare lo stop loss
              {
               //--- scrivere i dati nella struttura
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Bid-Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                              // inviare la richiesta al server
              }
           }
        }
      else
        {
         if(TrailWhileMinus==true || OpenPrice-Ask>_Point*Trail) // non si può fare la pesca a strascico fino a quando non si raggiunge il pareggio con il primo trasferimento di tappa
           {
            if(PositionSL-Ask>Trail*_Point) //condizione di base per la necessità di spostare lo stop loss
              {
               //--- scrivere i dati nella struttura
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Ask+Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                            // inviare la richiesta al server
              }
           }
        }
     }
   return(0);
  }
 
sergey1294:

ecco a voi

Presumo (probabilmente non senza ragione) che sia meglio passare il risultato come parametro :)

Altrimenti non c'è modo di analizzarlo. In qualche modo non va bene...

PS

Creerei anche due funzioni - TrailingStopBuy e TrailingStopSell

 
Interesting:

Presumo (probabilmente non senza ragione) che sia meglio passare il risultato come parametro :)

Altrimenti non c'è modo di analizzarlo. In qualche modo non va bene...

PS

Creerei anche due funzioni - TrailingStopBuy e TrailingStopSell.

Beh, ho dato alla persona un esempio, perché ha già fatto il suo cervello come scrivere un trailing ordinario, e poi lasciarlo pensare un po ', che avrebbe funzionato senza errori, nel tester in linea di principio e questa costruzione funziona normalmente. nella vita reale non ha controllato
 
sergey1294:
Beh, ho dato all'uomo un esempio, perché ha già fatto il suo cervello come scrivere un trailing ordinario, e poi lasciarlo pensare un po ', che avrebbe funzionato senza errori, nel tester in linea di principio, e questo disegno funziona bene. nella vita reale non ha verificato
Come esempio ovviamente va bene, ma se senza analizzare il risultato ci saranno molti errori (prima o poi)...
 
sergey1294:

Ecco a voi.

Grazie!
 

sergey1294,

Grazie ancora, funziona tutto!!!

C'è un'altra piccola domanda, come aggiungere un controllo per numero magico alla funzione? Sto cercando di inserire un controllo di questo tipo:

if (OrderGetInteger(ORDER_MAGIC)==EA_Magic)
{
.....
}
..... ma qualcosa rompe l'intera operazione.....