Dual Take Profit Dual Stop Loss Trailing Stop Loss Bitcoin Estrategia cuantitativa

El autor:¿ Qué pasa?, fecha: 2024-01-19 15:07:04
Las etiquetas:

img

Resumen general

Estrategia lógica

La entrada larga cuando la EMA cruza la WMA desde abajo y la entrada corta cuando la EMA cruza la WMA desde arriba.

En el lado de la ganancia, hay dos objetivos de toma de ganancias.

El primer stop loss se establece a 20 pips por debajo del precio de entrada, y el segundo stop loss se establece en el precio de entrada en sí.

Cuando se activa la primera toma de ganancias, se cerrará el 50% de la posición, y se seguirá el stop loss hasta el precio de entrada para bloquear las ganancias, mientras se busca mayores ganancias del segundo objetivo de toma de ganancias.

Como tal, puede haber tres resultados posibles para cada comercio:

  1. El precio golpea la parada de pérdida primero, pierde el 2% del capital.
  2. Primero golpea el precio toma ganancia primero para obtener un 1% de ganancia, luego golpea la segunda parada de pérdida, terminando con un 1% de ganancia.
  3. El precio golpea primero toma ganancia primero para el 1% de ganancia, continúa corriendo y golpea segundo toma ganancia, terminando con un 3% de ganancia.

Análisis de ventajas

La mayor ventaja de esta estrategia radica en su metodología de gestión de riesgos. Al establecer ganancias de doble toma y pérdidas de doble parada, puede bloquear ganancias parciales después de que se logre la primera ganancia, mientras continúa buscando mayores ganancias. Esto puede mejorar significativamente la rentabilidad.

Otra ventaja es que al dividir una sola operación en tres posibles resultados, reduce la probabilidad de pérdida máxima, haciendo que los rendimientos generales sean más consistentes.

Análisis de riesgos

Los principales riesgos de esta estrategia provienen de la configuración de stop loss. Si la distancia de stop loss es demasiado amplia, puede resultar en una pérdida de una sola operación de gran tamaño. Si la distancia de stop loss es demasiado estrecha, puede ser detenida prematuramente por los ruidos del mercado. La distancia de stop loss adecuada debe establecerse en función de las características y la volatilidad de diferentes instrumentos comerciales.

Otro riesgo es que la posición restante después de la primera toma de ganancias todavía conlleva riesgos de pérdida. Si la pérdida posterior excede la primera toma de ganancias, compensará partes o todas las ganancias realizadas. Esto debe abordarse siguiendo estrictamente el stop loss para proteger las ganancias bloqueadas.

Direcciones de optimización

Las siguientes áreas pueden optimizarse para la estrategia:

  1. Prueba diferentes combinaciones de parámetros para encontrar parámetros óptimos, como probar 15 pips, 25 pips toman distancias de ganancia / stop loss.

  2. Pruebe otras combinaciones de indicadores técnicos para señales de entrada, como KDJ, cruce MACD.

  3. Optimizar el porcentaje de posición cerrada en la primera toma de ganancias, como el 50% puede no ser óptimo, el 30% o el 70% podría tener un mejor rendimiento potencial.

  4. Prueba diferentes configuraciones para la velocidad de stop loss para equilibrar el bloqueo de las ganancias y dar a los precios suficiente espacio para fluctuar.

Conclusión

En conclusión, esta es una estrategia general robusta, que puede mejorar significativamente la rentabilidad y reducir los riesgos de cola a través de los mecanismos de doble toma de ganancias, doble stop loss y trailing stop loss. También hay un amplio margen de optimización a través de ajuste de parámetros e ingeniería de indicadores técnicos para lograr un rendimiento aún mejor. Es adecuado para los inversores que buscan ganancias de inversión altas y constantes.


/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-18 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
start_month   = input(title='Start month'  ,defval=1)
start_day     = input(title='Start day'    ,defval=1)
start_hour    = input(title='Start hour'   ,defval=0)
start_minute  = input(title='Start minute' ,defval=0)
end_time      = input(title='set end time?',defval=false)
end_year      = input(title='end year'     ,defval=2019)
end_month     = input(title='end month'    ,defval=12)
end_day       = input(title='end day'      ,defval=31)
end_hour      = input(title='end hour'     ,defval=23)
end_minute    = input(title='end minute'   ,defval=59)

// MA
ema_period = input(title='EMA period',defval=10)
wma_period = input(title='WMA period',defval=20)
ema        = ema(close,ema_period)
wma        = wma(close,wma_period)

// Entry Condition
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)


Más.