Répondre

La nouvelle méthode de SQX ? SL/PT basé sur des pips fixes ou sur la valeur ATR.

5 réponses

paix à l'est

Client, bbp_participant, community, sq-ultimate, 305 réponses.

Visiter le profil

il y a 5 ans #240480

Dans le code TS, j'ai trouvé que le calcul SL/PT est différent entre SQX et SQ 3.8.

Style SQX :

if(MarketPosition > 0) then begin
Si BarsSinceEntry = 0 alors begin
LongSL = 0 ;
LongTrailingStop = 0 ;
fin ;
LongSLPlaced = false ;
// StopLoss
LongSL = EntryPrice - 450.0 * tickSize ;
LongSL = SQ_CorrectMinMaxSLPT(LongSL, MinimumSLPT, MaximumSLPT, true) ;

Sell("LongSL") next bar at LongSL stop ;
LongSLPlaced = true ;

// ProfitTarget
PT = EntryPrice + 955.0 * tickSize ;
PT = SQ_CorrectMinMaxSLPT(PT, MinimumSLPT, MaximumSLPT, false) ;
Sell("LongPT") next bar at PT limit ;

SQ 3.8 style

{
Stratégie Tradestation du 25_03_2017Stratégie 1.3073

Généré par StrategyQuant version 3.8.1
Généré le Wed Apr 17 08:20:00 GMT 2019

Testé sur SHEF_RB, H1, 27.03.2009 - 03.03.2017
}

les entrées :

//——————————————————————
// Options stratégiques
MaxTradesPerDay(10),
ExitOnClose(false),
LimitSignalsToRange(false),
TimeRangeFrom(0900),
TimeRangeTo(1455),

//——————————————————————
// Paramètres de gestion de l'argent
// MoneyManagementType :
// 0 - taille fixe (à partir de TradeSize)
// 1 - risque fixé % des fonds propres du compte
// 2 - montant fixe du risque en $
//——————————————————————
CapitalSize(10000),
MoneyManagementType(0),
TradeSize(1.0),
SizeRounding(0),
RiskPerTrade(0), // en % ou en $, selon le type de MM
MaxTradeSize(0) ;

vars :
tickSize(MinMove/PriceScale),
Niveau de prix(0), Nombre d'actions(0),
LongSL(0),LongPT(0),
ShortSL(0),ShortPT(0),
SLSize(0),
LongEntryCondition(false),ShortEntryCondition(false),
LongExitCondition(false),ShortExitCondition(false) ;

// ——————————————
// RÈGLES D'ENTRÉE
// ——————————————
if(LimitSignalsToRange = false or (Time >= TimeRangeFrom and Time < TimeRangeTo)) then begin

// Long ---
if(MaxTradesPerDay = 0 or 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 shares next bar at market ;
fin ;
fin ;

// Court ---
if(MaxTradesPerDay = 0 or 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") Nombre d'actions de la prochaine barre au marché ;
fin ;
fin ;
fin ;

// ——————————————
// GÉRER LES RÈGLES DE TRANSACTION ET DE SORTIE
// ——————————————

// Long ---
if(MarketPosition > 0) then begin
Si BarsSinceEntry = 0 alors begin
LongPT = 0 ;
LongSL = Round2Fraction(EntryPrice - (5.88 * AvgTrueRange(109)[0])) ;
fin ;

 

// Profit trailing
Niveau de prix = Round2Fraction((3.23 * AvgTrueRange(126)[0])) ;
if(PriceLevel > 0) then begin
Niveau de prix = Clôture - Niveau de prix ;
if(LongSL = 0 ou LongSL < PriceLevel) then
LongSL = PriceLevel ;
fin ;

if(LongPT > 0) then
Sell("LongPT") next bar at LongPT limit ;
if(LongSL > 0) then
Sell("LongSL") next bar at LongSL stop ;
fin ;

// Court ---
if(MarketPosition < 0) then begin
Si BarsSinceEntry = 0 alors begin
ShortPT = 0 ;
ShortSL = Round2Fraction(EntryPrice + (5.88 * AvgTrueRange(109)[0])) ;
fin ;

 

// Profit trailing
Niveau de prix = Round2Fraction((3.23 * AvgTrueRange(126)[0])) ;
if(PriceLevel > 0) then begin
Niveau de prix = Clôture + Niveau de prix ;
if(ShortSL = 0 ou ShortSL > PriceLevel) then
ShortSL = PriceLevel ;
fin ;

if(ShortPT > 0) then
BuyToCover("ShortPT") prochaine barre à la limite ShortPT ;
if(ShortSL > 0) then
BuyToCover("ShortSL") next bar at ShortSL stop ;
fin ;

if(ExitOnClose) then
SetExitOnClose ;

 

C'est correct lorsque la stratégie utilise des pips fixes. Ils ont le même effort.

Mais lorsque nous utilisons les paramètres SL et PT d'ATR, les deux méthodes ne font pas la même chose.

Dans le style de SQX, les valeurs SL et PT seraient modifiées barre par barre, car l'ATR n'est pas fixe.

Je n'aime pas cette nouvelle méthode. S'agit-il d'un bogue ?

 

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

il y a 5 ans #240493

Bonjour,

des modifications ont été apportées au code de TS par rapport à SQ3. Si vous avez des problèmes avec le SL/PL d'une stratégie lorsque l'ATR est utilisé, veuillez l'attacher à notre feuille de route pour que les développeurs puissent le vérifier. https://roadmap.strategyquant.com/projects/sq4/tasks

0

paix à l'est

Client, bbp_participant, community, sq-ultimate, 305 réponses.

Visiter le profil

Il y a 4 ans #242341

Bonjour, Tomas,

Voici le post dans la tâche de la feuille de route. Pourriez-vous le vérifier ? Je pense qu'il s'agit d'une question fondamentale et importante.

 

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

0

tomas262

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 4 ans #242343

Merci, les développeurs vont vérifier le problème et le résoudre dès que possible.

0

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 4 ans #242377

Je comprends votre point de vue, mais c'est volontaire et c'est à cause de la gestion de l'argent.

 

Si vous avez des MM à risquer, par exemple 5% du solde de votre compte, ils sont calculés à partir du Stop Loss. Vous ne perdrez donc que 5% lorsque votre Stop Loss sera atteint.

C'est pourquoi nous avons besoin que le SL soit calculé au moment où la transaction est placée, et il ne peut pas être recalculé dynamiquement à chaque barre.

 

 

 

Marque
StratégieArchitecte de Quantités

0

paix à l'est

Client, bbp_participant, community, sq-ultimate, 305 réponses.

Visiter le profil

Il y a 4 ans #242408

Vous avez raison, Mark. Je suis d'accord avec vous pour la première moitié.

Dans le code TS/MC actuel, le niveau SL et la cible PT sont réellement modifiés à chaque barre lorsqu'ils sont maintenus en position. Vous pouvez imprimer la valeur SL/PT dans le code MC. Veuillez vérifier à nouveau.

Avec l'ordre stop, nous connaissons d'abord le prix d'entrée. Un petit problème se pose lorsque l'on utilise l'ordre de marché. En mode barre par barre du MC, il ne peut pas calculer le SL/PT avec l'ATR au même moment que l'entrée.

Nous pouvons supposer que le prix d'entrée est la clôture de la barre de signal précédente.

 

if marketpostion0 then begin

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

fin

0

Affichage de 5 réponses de 1 à 5 (sur un total de 5)