Il nuovo metodo di SQX? SL/PT basato sui pip fissi o sul valore ATR.
5 risposte
eastpeace
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.3073Generato da StrategyQuant versione 3.8.1
Generato a Wed Apr 17 08:20:00 GMT 2019Testato 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?
tomas262
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.
eastpeace
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.
tomas262
4 anni fa #242343
Grazie, gli sviluppatori verificheranno il problema e lo risolveranno al più presto.
Mark Fric
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
eastpeace
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
Stai visualizzando 5 risposte - da 1 a 5 (di 5 totali)