Antwort

Die neue Methode von SQX? SL/PT basierend auf festen Pips oder ATR-Wert.

5 Antworten

eastpeace

Kunde, bbp_participant, community, sq-ultimate, 305 Antworten.

Profil besuchen

vor 5 Jahren #240480

Im TS-Code habe ich festgestellt, dass die SL/PT-Berechnung zwischen SQX und SQ 3.8 unterschiedlich ist.

SQX-Stil:

if(MarktPosition > 0) then begin
If BarsSinceEntry = 0 then begin
LongSL = 0;
LongTrailingStop = 0;
Ende;
LongSLPlaced = false;
// StopLoss
LongSL = EntryPrice - 450.0 * tickSize;
LongSL = SQ_CorrectMinMaxSLPT(LongSL, MinimumSLPT, MaximumSLPT, true);

Sell("LongSL") nächster Bar zum LongSL-Stop;
LongSLPlaced = true;

// ProfitTarget
PT = EntryPrice + 955,0 * tickSize;
PT = SQ_CorrectMinMaxSLPT(PT, MinimumSLPT, MaximumSLPT, false);
Sell("LongPT") nächster Bar zum PT-Limit;

SQ 3.8 Stil

{
Tradestation Strategie vom 25_03_2017Strategie 1.3073

Erzeugt von StrategyQuant Version 3.8.1
Erzeugt am Wed Apr 17 08:20:00 GMT 2019

Getestet am SHEF_RB, H1, 27.03.2009 - 03.03.2017
}

Eingaben:

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

//——————————————————————
// Parameter für die Geldverwaltung
// MoneyManagementType:
// 0 - feste Größe (aus TradeSize)
// 1 - Risiko fest % des Eigenkapitals des Kontos
// 2 - Risiko Festbetrag in $
//——————————————————————
CapitalSize(10000),
MoneyManagementType(0),
TradeSize(1.0),
SizeRounding(0),
RiskPerTrade(0), // in % oder in $, je nach MM-Typ
MaxTradeSize(0);

vars:
tickSize(MinMove/PriceScale),
PriceLevel(0), NumberOfShares(0),
LongSL(0),LongPT(0),
ShortSL(0),ShortPT(0),
SLSize(0),
LongEntryCondition(false),ShortEntryCondition(false),
LongExitCondition(false),ShortExitCondition(false);

// ——————————————
// EINTRITTSVORSCHRIFTEN
// ——————————————
if(LimitSignalsToRange = false oder (Time >= TimeRangeFrom und Time < TimeRangeTo)) then begin

// Lang ---
if(MaxTradesPerDay = 0 oder EntriesToday(Date) < MaxTradesPerDay) then begin
LongEntryCondition = (High[18] < Open[1]);
if(LongEntryCondition = true) then begin
SLSize = Round2Fraction((5.88 * AvgTrueRange(109)[0]));
NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);

Buy("LongMarket") NumberOfShares Aktien nächster Balken am Markt;
Ende;
Ende;

// Kurz ---
if(MaxTradesPerDay = 0 oder EntriesToday(Date) < MaxTradesPerDay) then begin
ShortEntryCondition = (Low[18] > Open[1]);
if(ShortEntryCondition = true) then begin
SLSize = Round2Fraction((5.88 * AvgTrueRange(109)[0]));
NumberOfShares = SQ_MoneyManagement(CapitalSize, SLSize, MoneyManagementType, TradeSize, SizeRounding, RiskPerTrade, MaxTradeSize);
SellShort("ShortMarket") NumberOfShares Aktien nächster Balken am Markt;
Ende;
Ende;
Ende;

// ——————————————
// HANDELS- UND AUSSTIEGSREGELN VERWALTEN
// ——————————————

// Lang ---
if(MarktPosition > 0) then begin
If BarsSinceEntry = 0 then begin
LongPT = 0;
LongSL = Round2Fraction(EntryPrice - (5,88 * AvgTrueRange(109)[0]));
Ende;

 

// Profit nachlaufend
PriceLevel = Round2Fraction((3.23 * AvgTrueRange(126)[0]));
if(Preisniveau > 0) then begin
PriceLevel = Close - PriceLevel;
if(LongSL = 0 oder LongSL < PriceLevel) then
LongSL = PreisNiveau;
Ende;

if(LongPT > 0) then
Sell("LongPT") nächster Takt zum LongPT-Limit;
if(LongSL > 0) then
Sell("LongSL") nächster Bar zum LongSL-Stop;
Ende;

// Kurz ---
if(MarktPosition < 0) then begin
If BarsSinceEntry = 0 then begin
KurzPT = 0;
ShortSL = Round2Fraction(EntryPrice + (5,88 * AvgTrueRange(109)[0]));
Ende;

 

// Profit nachlaufend
PriceLevel = Round2Fraction((3.23 * AvgTrueRange(126)[0]));
if(Preisniveau > 0) then begin
PriceLevel = Close + PriceLevel;
if(ShortSL = 0 oder ShortSL > PriceLevel) then
ShortSL = PreisNiveau;
Ende;

if(KurzPT > 0) then
BuyToCover("ShortPT") nächster Takt am ShortPT-Limit;
if(ShortSL > 0) then
BuyToCover("ShortSL") nächster Takt zum ShortSL-Stop;
Ende;

if(ExitOnClose) then
SetExitOnClose;

 

Es ist OK, wenn die Strategie feste Pips verwendet. Sie haben den gleichen Aufwand.

Aber wenn wir die SL- und PT-Einstellung von ATR verwenden, haben die beiden Methoden nicht dasselbe getan.

Im SQX-Stil würden die SL- und PT-Werte von Takt zu Takt geändert werden, da die ATR nicht fest ist.

Ich mag diese neue Methode nicht, und ist das ein Fehler?

 

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 5 Jahren #240493

Hallo,

Es wurden Änderungen am TS-Code im Vergleich zu SQ3 vorgenommen. Wenn Sie Probleme mit einer Strategie SL/PL haben, wenn ATR verwendet wird, fügen Sie es bitte in unsere Roadmap ein, damit die Entwickler es überprüfen können https://roadmap.strategyquant.com/projects/sq4/tasks

0

eastpeace

Kunde, bbp_participant, community, sq-ultimate, 305 Antworten.

Profil besuchen

vor 4 Jahren #242341

Hallo, Tomas,

Hier ist der Beitrag zur Aufgabe der Roadmap. Würden Sie ihn bitte überprüfen? Ich denke, es ist ein grundlegendes und wichtiges Thema.

 

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

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 4 Jahren #242343

Danke, die Entwickler werden das Problem prüfen und so schnell wie möglich beheben.

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 4 Jahren #242377

Ich verstehe Ihren Standpunkt, aber es ist absichtlich so, und zwar wegen der Geldverwaltung.

 

Sehen Sie, wenn Sie MM haben, um zum Beispiel 5% Ihres Kontostandes zu riskieren, wird es von Stop Loss berechnet. So dass Sie nur 5% verlieren werden, wenn Ihr SL getroffen wird.

Aus diesem Grund muss der SL zum Zeitpunkt der Handelsplatzierung berechnet werden und kann nicht dynamisch für jeden Bar neu berechnet werden.

 

 

 

Mark
StrategyQuant Architekt

0

eastpeace

Kunde, bbp_participant, community, sq-ultimate, 305 Antworten.

Profil besuchen

vor 4 Jahren #242408

Sie haben Recht, Mark. Ich stimme Ihnen in der ersten Hälfte zu.

Und in der TS/MC-Code jetzt, die SL-Ebene und PT Ziel ist wirklich jeder bar geändert, wenn es Position halten. Sie können den SL/PT-Wert in MC drucken. Bitte überprüfen Sie es noch einmal.

Bei der Stop-Entry-Order kennen wir zunächst den Einstiegskurs. Ein kleines Problem gibt es bei der Verwendung von Market-Orders. Im Bar-by-Bar-Modus von MC kann der SL/PT nicht mit der ATR zum gleichen Zeitpunkt des Einstiegs berechnet werden.

Wir können davon ausgehen, dass der Einstiegskurs der Schlusskurs des vorherigen Signalbalkens ist.

 

if marketpostion0 then begin

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

Ende

0

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)