Risposta

Il nuovo metodo di SQX? SL/PT basato sui pip fissi o sul valore ATR.

5 risposte

eastpeace

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

Visita il profilo

5 anni fa #240480

Nel codice TS, ho scoperto che il calcolo SL/PT è diverso tra SQX e SQ 3.8.

Stile SQX:

se(MarketPosition > 0) allora iniziare
Se BarsSinceEntry = 0 allora iniziare
LongSL = 0;
LongTrailingStop = 0;
fine;
LongSLPlaced = false;
// StopLoss
LongSL = EntryPrice - 450,0 * tickSize;
LongSL = SQ_CorrectMinMaxSLPT(LongSL, MinimumSLPT, MaximumSLPT, true);

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

// ProfitTarget
PT = EntryPrice + 955,0 * tickSize;
PT = SQ_CorrectMinMaxSLPT(PT, MinimumSLPT, MaximumSLPT, false);
Vendere("LongPT") la prossima barra al limite del PT;

Stile SQ 3.8

{
Strategia di Tradestation del 25_03_2017Strategia 1.3073

Generato da StrategyQuant versione 3.8.1
Generato a Wed Apr 17 08:20:00 GMT 2019

Testato su SHEF_RB, H1, 27.03.2009 - 03.03.2017
}

ingressi:

//——————————————————————
// Opzioni strategiche
MaxTradesPerDay(10),
ExitOnClose(false),
LimitSignalsToRange(false),
TimeRangeFrom(0900),
TimeRangeTo(1455),

//——————————————————————
// Parametri di gestione del denaro
// MoneyManagementType:
// 0 - dimensione fissa (da TradeSize)
// 1 - rischio fisso % del capitale proprio del conto
// 2 - importo fisso di rischio in $
//——————————————————————
CapitalSize(10000),
MoneyManagementType(0),
TradeSize(1.0),
DimensioneRivoluzione(0),
RiskPerTrade(0), // in % o in $, a seconda del tipo di MM
MaxTradeSize(0);

vars:
tickSize(MinMove/PriceScale),
Livello di prezzo(0), Numero di azioni(0),
LongSL(0),LongPT(0),
ShortSL(0),ShortPT(0),
SLSize(0),
LongEntryCondition(false),ShortEntryCondition(false),
LongExitCondition(false),ShortExitCondition(false);

// ——————————————
// REGOLE DI ISCRIZIONE
// ——————————————
if(LimitSignalsToRange = false o (Time >= TimeRangeFrom e Time < TimeRangeTo)) allora iniziare

// Lungo ---
se(MaxTradesPerDay = 0 o EntriesToday(Date) < MaxTradesPerDay) allora iniziare
LongEntryCondition = (High[18] < Open[1]);
se(LongEntryCondition = true) allora iniziare
SLSize = Round2Fraction((5,88 * AvgTrueRange(109)[0]);
NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);

Buy("LongMarket") Numero di azioni della barra successiva al mercato;
fine;
fine;

// Breve ---
se(MaxTradesPerDay = 0 o EntriesToday(Date) < MaxTradesPerDay) allora iniziare
ShortEntryCondition = (Low[18] > Open[1]);
se(ShortEntryCondition = true) allora iniziare
SLSize = Round2Fraction((5,88 * AvgTrueRange(109)[0]);
NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);
SellShort("ShortMarket") Numero di azioni della barra successiva al mercato;
fine;
fine;
fine;

// ——————————————
// GESTITE LE REGOLE DI TRADING E DI USCITA
// ——————————————

// Lungo ---
se(MarketPosition > 0) allora iniziare
Se BarsSinceEntry = 0 allora iniziare
LongPT = 0;
LongSL = Round2Fraction(EntryPrice - (5,88 * AvgTrueRange(109)[0]);
fine;

 

// Profit trailing
PriceLevel = Round2Fraction((3.23 * AvgTrueRange(126)[0]);
se(PrezzoLivello > 0) allora iniziare
PriceLevel = Close - PriceLevel;
se(LongSL = 0 o LongSL < LivelloPrezzo) allora
LongSL = Livello di prezzo;
fine;

se(LongPT > 0) allora
Vendere("LongPT") la prossima barra al limite LongPT;
se(LongSL > 0) allora
Vendere("LongSL") la prossima barra allo stop LongSL;
fine;

// Breve ---
se(MarketPosition < 0) allora cominciare
Se BarsSinceEntry = 0 allora iniziare
ShortPT = 0;
ShortSL = Round2Fraction(EntryPrice + (5,88 * AvgTrueRange(109)[0]);
fine;

 

// Profit trailing
PriceLevel = Round2Fraction((3.23 * AvgTrueRange(126)[0]);
se(PrezzoLivello > 0) allora iniziare
PriceLevel = Close + PriceLevel;
se(ShortSL = 0 o ShortSL > LivelloPrezzo) allora
ShortSL = Livello di prezzo;
fine;

se(ShortPT > 0) allora
BuyToCover("ShortPT") la prossima barra al limite dello ShortPT;
se(ShortSL > 0) allora
BuyToCover("ShortSL") barra successiva allo stop ShortSL;
fine;

se(ExitOnClose) allora
SetExitOnClose;

 

Va bene quando la strategia utilizza i pip fissi. Hanno lo stesso sforzo.

Ma quando utilizziamo le impostazioni SL e PT di ATR, i due metodi non fanno la stessa cosa.

Nello stile di SQX, i valori di SL e PT verrebbero modificati barra per barra, perché l'ATR non è fisso.

Non mi piace questo nuovo metodo, è un bug?

 

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

5 anni fa #240493

Salve,

sono state apportate modifiche al codice di TS rispetto a SQ3. Se avete problemi con lo SL/PL di una strategia quando viene utilizzato l'ATR, allegatela alla nostra roadmap in modo che gli sviluppatori possano controllarla https://roadmap.strategyquant.com/projects/sq4/tasks.

0

eastpeace

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

Visita il profilo

4 anni fa #242341

Ciao, Tomas,

Ecco il post nel compito della roadmap. Potreste per favore controllarlo? Penso che sia un problema fondamentale e importante.

 

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

0

tomas262

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

4 anni fa #242343

Grazie, gli sviluppatori verificheranno il problema e lo risolveranno al più presto.

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

4 anni fa #242377

Capisco il tuo punto di vista, ma è così di proposito ed è a causa della gestione del denaro.

 

Vedete, se avete MM da rischiare, ad esempio 5% del vostro saldo del conto, questo viene calcolato a partire dallo Stop Loss. Quindi perderete solo 5% quando il vostro SL viene colpito.

Per questo motivo è necessario che lo SL sia calcolato nel momento in cui viene piazzato il trade e non può essere ricalcolato dinamicamente ad ogni barra.

 

 

 

Marchio
Architetto StrategyQuant

0

eastpeace

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

Visita il profilo

4 anni fa #242408

Hai ragione, Mark. Sono d'accordo con te nella prima parte.

E nel codice TS/MC ora, il livello SL e il target PT vengono realmente modificati ad ogni barra quando si mantiene la posizione. È possibile stampare il valore SL/PT in MC. Si prega di ricontrollare.

Con l'ordine di entrata Stop, conosciamo innanzitutto il prezzo di entrata. Un piccolo problema quando si utilizza l'ordine Market. Nella modalità barra per barra di MC, non è possibile calcolare lo SL/PT con l'ATR al momento dell'entrata.

Possiamo ipotizzare che il prezzo di ingresso sia la chiusura della barra del segnale precedente.

 

se marketpostion0 allora iniziare

print("date: ",date,",mp=",marketposition,",entryprice=",entryprice,",atr=",SQ_ATR(20)[1],",sl=",LongSL);

fine

0

Stai visualizzando 5 risposte - da 1 a 5 (di 5 totali)