Risposta

SL e PT con atr per MultiCharts

2 risposte

eastpeace

Cliente, bbp_partecipante, comunità, sq-ultimate, 305 risposte.

Visita il profilo

4 anni fa #254805

Ciao, Mark,

Anche se questo problema è stato chiuso con uno stato risolto. Vorrei discutere nuovamente lo SL e il PT con ATR per Multicharts.

https://roadmap.strategyquant.com/tasks/sq4_5100

Il codice di MC è così ora.

———-
se(MarketPosition > 0) allora iniziare
LongSLPlaced = false;
Se BarsSinceEntry = 0 allora iniziare
IntLongSL = 0;
IntLongTS = 0;
fine;
// StopLoss
IntLongSL = Round2Fraction(EntryPrice - (StopLossCoef * SQ_ATR(20)[1]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
….
————-

Nel codice attuale, poiché il valore ATR cambierà ogni barra dopo l'entrata. Anche SL, PT e RR Ratio cambieranno, anche se la variazione non è eccessiva. Ma è anche dannoso.

Supponendo di mantenere una posizione lunga, se la volatilità diminuisce e il mercato scende lentamente, lo stop loss sarà ampliato.

 

La maggior parte delle strategie in MC funziona per barra, aggiornando i segnali e le azioni dopo la chiusura della barra. Pertanto, quando viene attivato l'ordine di stop entry, viene utilizzato il valore ATR precedente (barra del segnale), non quello della barra corrente (barra di entrata).

Quindi non è un problema per il calcolo del MM. Può e deve utilizzare il valore ATR fisso. Nel codice del Mc. si presenta così,

se(MarketPosition > 0) allora iniziare
LongSLPlaced = false;
Se BarsSinceEntry = 0 allora iniziare
IntLongSL = prezzo d'ingresso - AtrSLmulti * ATRvalue[1] ;
IntLongPT = prezzo di entrata + AtrPTmulti * ATRvalue[1] ;
fine;

 

Questo sarà del tutto coerente con il valore ATR utilizzato dal calcolo del MM quando la condizione di entrata è vera.
Questo non ha nulla a che fare con le variabili globali. Funziona bene in MC. E trovo che il codice generato da un altro software imposta anche lo SL nel blocco di codice if (BarsSinceEntry = 0).

 

Vi preghiamo di riconsiderare questo approccio, grazie.

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

4 anni fa #254893

Salve,

attualmente deve essere così com'è. Cioè lo SL deve essere modificato in base al valore dell'ATR. In futuro potremmo modificare questo aspetto, ma ora, per quanto riguarda il funzionamento del TS, preferiamo mantenerlo in questo modo.

0

eastpeace

Cliente, bbp_partecipante, comunità, sq-ultimate, 305 risposte.

Visita il profilo

4 anni fa #254939

Un altro motivo per cui è necessario regolare l'implementazione dello stop loss e del profitto iniziale.

La strategia utilizza i livelli degli indicatori come stop loss. Lo stop loss iniziale diventerebbe un trailing stop loss o la condizione dell'indicatore per l'uscita.

Ciò indebolirà l'effetto delle regole di uscita (condizione di uscita degli indicatori) o del metodo del trailing stop, o causerà confusione logica.

 

//--------
// Ordini di uscita (SL, PT, Trailing) per la regola: Ingresso lungo
//--------
se(MarketPosition > 0) allora iniziare
LongSLPlaced = false;
Se BarsSinceEntry = 0 allora iniziare
IntLongSL = 0;
IntLongTS = 0;
fine;
// StopLoss
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
Vendere("LongSL") la prossima barra allo stop IntLongSL;
LongSLPlaced = true;

...

 

Come mostrato nella figura, se lo stop loss iniziale viene eseguito secondo la logica corretta, lo stop loss intermedio non dovrebbe verificarsi.

 

Quando modifico i codici in MC. La strategia funziona in modo logico. Il modulo di trailing stop svolgerà il ruolo che gli compete.

 

se(MarketPosition > 0) allora iniziare

LongSLPlaced = false;

Se BarsSinceEntry = 0 allora iniziare
//IntLongSL = 0;
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);

IntLongTS = 0;
fine;

// StopLoss
//IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
//IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);

Vendere("LongSL") la prossima barra allo stop IntLongSL;
LongSLPlaced = true;

 

 

Allegati:
Dovete essere collegato per visualizzare i file allegati.

0

Stai visualizzando 2 risposte - da 1 al 2 (di 2 totali)