Estrategia de Stop Loss y Take Profit basada en el precio

El autor:¿ Qué pasa?, Fecha: 2023-11-23 15:36:00
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es utilizar los importes de stop loss y take profit de entrada para establecer niveles razonables de stop loss y take profit tick, para gestionar el riesgo y la recompensa de cada operación.

Estrategia lógica

La estrategia primero establece señales de entrada aleatorias, yendo largo cuando SMA14 cruza SMA28, y corto cuando SMA14 cruza bajo SMA28.

Después de la entrada, la estrategia utiliza la función moneyToSLPoints para calcular el nivel de tick de stop loss basado en la entrada de la cantidad de stop loss en dólares.

Por ejemplo, si se compran 100 contratos con cada tick por valor de $ 10, y se establece un stop loss de $ 100, entonces el nivel de tick de stop loss se calcularía como 100/10/100 = 0,1 ticks.

Por finstrategy.exitLas líneas de stop loss y take profit también se trazan con fines de depuración.

Análisis de ventajas

La mayor ventaja de esta estrategia de stop loss y take profit basada en el precio es que los parámetros son intuitivos.

Además, las paradas en dólares pueden controlar mejor la exposición al riesgo real en comparación con las paradas fijas cuando cambia la volatilidad del mercado.

Análisis de riesgos

Hay algunos riesgos con esta estrategia de stop loss y take profit:

  1. Si el stop loss es demasiado amplio, es fácil quedar atrapado en reversiones.

  2. Si la distancia de toma de beneficios es muy pequeña, sería difícil para las tendencias unilaterales normales alcanzarla, lo que hace que las ganancias sean poco probables.

  3. Si se utiliza un contrato de alto valor de tick como el petróleo crudo, el mismo stop loss en dólares se traduciría en ticks muy pequeños, que pueden ser fácilmente detenidos por el ruido.

Direcciones de optimización

Algunas de las formas en que esta estrategia puede mejorarse son:

  1. La señal de entrada se puede mejorar combinando mejor la tendencia, la volatilidad, la estacionalidad, etc. con las entradas de tiempo.

  2. Los porcentajes de stop/beneficio adecuados pueden elegirse en función de diferentes productos.

  3. Las paradas pueden adaptarse a la volatilidad, ampliarse cuando la volatilidad aumenta y ajustarse cuando la volatilidad baja.

  4. Se pueden utilizar diferentes enfoques de stop/profit para diferentes sesiones de negociación.

Conclusión

Esta estrategia implementa un stop loss intuitivo y toma ganancias basadas en cantidades de dólares. Sus ventajas son parámetros intuitivos y control de capital. Los inconvenientes son la facilidad de ser atrapado en reversiones y ganancias perdidas. Se puede mejorar mejorando las entradas, optimizando paradas / objetivos, eligiendo mejores productos, etc. para hacerlo más estable.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

Más.