Respuesta

¿El nuevo método de SQX? SL/PT basado en pips fijos o valor ATR.

5 respuestas

eastpeace

Cliente, bbp_participante, comunidad, sq-último, 305 respuestas.

Visitar el perfil

hace 5 años #240480

En el código TS, encontré que el cálculo SL/PT es diferente entre SQX y SQ 3.8.

Estilo SQX:

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

Vender("LongSL") la próxima barra al stop LongSL;
LongSLPlaced = true;

// ProfitTarget
PT = EntryPrice + 955.0 * tickSize;
PT = SQ_CorrectMinMaxSLPT(PT, MinimumSLPT, MaximumSLPT, false);
Vender("LongPT") la siguiente barra al límite PT;

Estilo SQ 3.8

{
Tradestation Estrategia de 25_03_2017Estrategia 1.3073

Generado por StrategyQuant versión 3.8.1
Generado en Wed Apr 17 08:20:00 GMT 2019

Probado en SHEF_RB, H1, 27.03.2009 - 03.03.2017
}

entradas:

//——————————————————————
// Opciones estratégicas
MaxTradesPerDay(10),
ExitOnClose(false),
LimitSignalsToRange(false),
TimeRangeFrom(0900),
TimeRangeTo(1455),

//——————————————————————
// Parámetros de gestión monetaria
// MoneyManagementType:
// 0 - tamaño fijo (de TradeSize)
// 1 - riesgo fijo % de los fondos propios de la cuenta
// 2 - importe fijo de riesgo en $
//——————————————————————
CapitalSize(10000),
MoneyManagementType(0),
TradeSize(1.0),
SizeRounding(0),
RiskPerTrade(0), // en % o en $, según el tipo de MM
MaxTradeSize(0);

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

// ——————————————
// NORMAS DE INSCRIPCIÓN
// ——————————————
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);

Comprar("MercadoLargo") NúmeroDeCasas acciones próxima barra a mercado;
fin;
fin;

// Corto ---
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("MercadoCorto") NúmeroDeAcciones de la próxima barra en el mercado;
fin;
fin;
fin;

// ——————————————
// GESTIONAR LAS REGLAS DE NEGOCIACIÓN Y SALIDA
// ——————————————

// Long ---
if(PosiciónMercado > 0) then begin
Si BarsSinceEntry = 0 entonces begin
LongPT = 0;
LongSL = Round2Fraction(PrecioEntrada - (5.88 * AvgTrueRange(109)[0]));
fin;

 

// Profit final
NivelPrecio = Round2Fraction((3,23 * AvgTrueRange(126)[0]);
if(NivelPrecio > 0) then begin
NivelPrecio = Cierre - NivelPrecio;
if(LongSL = 0 o LongSL < NivelPrecio) then
LongSL = NivelPrecio;
fin;

if(LongPT > 0) then
Vender("LongPT") la próxima barra al límite de LongPT;
if(LongSL > 0) then
Vender("LongSL") la próxima barra al stop LongSL;
fin;

// Corto ---
if(PosiciónMercado < 0) then begin
Si BarsSinceEntry = 0 entonces begin
ShortPT = 0;
ShortSL = Round2Fraction(EntryPrice + (5.88 * AvgTrueRange(109)[0]));
fin;

 

// Profit final
NivelPrecio = Round2Fraction((3,23 * AvgTrueRange(126)[0]);
if(NivelPrecio > 0) then begin
NivelPrecio = Cierre + NivelPrecio;
if(ShortSL = 0 o ShortSL > NivelPrecio) then
ShortSL = NivelPrecio;
fin;

if(ShortPT > 0) then
BuyToCover("ShortPT") próxima barra en el límite de ShortPT;
if(ShortSL > 0) then
BuyToCover("ShortSL") próxima barra en el stop de ShortSL;
fin;

if(ExitOnClose) then
SetExitOnClose;

 

Está bien cuando la estrategia utiliza pips fijos. Tienen el mismo esfuerzo.

Pero cuando usamos la configuración de SL y PT de ATR, los dos métodos no hacen lo mismo.

En el estilo de SQX, el valor de SL y PT se cambiaría barra a barra, porque el ATR no es el fijo.

No me gusta este nuevo método, ¿se trata de un error?

 

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 5 años #240493

Hola,

Se han realizado modificaciones en el código de TS en comparación con SQ3. Si tiene problemas con una estrategia SL/PL cuando se utiliza ATR, por favor adjúntelo a nuestra hoja de ruta para que los desarrolladores puedan comprobarlo https://roadmap.strategyquant.com/projects/sq4/tasks

0

eastpeace

Cliente, bbp_participante, comunidad, sq-último, 305 respuestas.

Visitar el perfil

hace 4 años #242341

Hola, Tomas,

Aquí está el puesto en la tarea de hoja de ruta. ¿Podrías revisarlo? Creo que es un tema básico e importante.

 

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

0

tomas262

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 4 años #242343

Gracias, los desarrolladores comprobarán el problema y lo resolverán lo antes posible.

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 4 años #242377

Entiendo tu punto de vista, pero es así a propósito y es por la gestión del dinero.

 

Verá, si usted tiene MM para arriesgar por ejemplo 5% del saldo de su cuenta, se calcula a partir de Stop Loss. Así que usted perderá sólo 5% cuando su SL es golpeado.

Esta es la razón por la que necesitamos que el SL se calcule en el momento en que se coloca la operación, y no se puede volver a calcular dinámicamente en cada barra.

 

 

 

Mark
Arquitecto de StrategyQuant

0

eastpeace

Cliente, bbp_participante, comunidad, sq-último, 305 respuestas.

Visitar el perfil

hace 4 años #242408

Tienes razón, Mark. Estoy de acuerdo contigo en la primera parte.

Y en el código TS/MC ahora, el nivel SL y el objetivo PT se cambian realmente cada barra cuando mantiene la posición. Puede imprimir el valor SL/PT en MC. Por favor, compruébelo de nuevo.

Con la orden de entrada Stop, primero conocemos el precio de entrada. Un pequeño problema cuando se utiliza la orden de Mercado. En el modo barra por barra de MC, no puede calcular el SL/PT con ATR al mismo tiempo de la entrada.

Podemos suponer que el precio de entrada es el cierre de la barra de señal anterior.

 

if marketpostion0 then begin

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

fin

0

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)