
Esta estrategia es una estrategia de comercio automático de Bitcoin basado en indicadores de tendencia súper. Utiliza indicadores de tendencia súper para determinar la tendencia del mercado, en combinación con el control de riesgo del principio de detención de ATR, para realizar operaciones a dos sentidos en el corto plazo. La mayor ventaja de esta estrategia es que el riesgo y la ganancia son buenos, la estrategia de detención de pérdidas es confiable y adecuada para la tenencia a medio y largo plazo.
Esta estrategia utiliza un indicador de tendencia súper para determinar la dirección de la tendencia del mercado. Cuando el indicador de tendencia súper se convierte de una tendencia descendente a una tendencia ascendente, haga una entrada de más; Cuando el indicador de tendencia súper se convierte de una tendencia ascendente a una tendencia descendente, haga una entrada de menos.
Concretamente, esta estrategia primero calcula la longitud de los indicadores ATR de 14 ciclos, determinando la distancia de parada de cada uno multiplicado por un multiplicador de pérdidas de ATR (por ejemplo, 1.5 veces). Luego calcula el indicador de tendencia súper, cuyo parámetro de indicador adopta el valor predeterminado (ciclo ATR 9, factor de tendencia súper 2.5) y emite una señal de negociación cuando el indicador de tendencia súper cambia de dirección.
Después de la entrada, el stop loss se fija por encima o por debajo del stop loss ATR. El primer stop loss se calcula en función de la proporción de riesgo-rentabilidad, con la intuición de 0.75, es decir, el stop loss es 0.75 veces el stop loss. Cuando el precio alcanza el primer stop loss, se cancela el 50% de la posición y se traslada el stop loss al precio de la posición de apertura (<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
De esta manera, esta estrategia puede asegurar ganancias a través de paradas parciales, asegurando que el riesgo de pérdidas sea controlado, y es adecuada para la estrategia de inversión de tenencia de líneas medianas y largas.
La mayor ventaja de esta estrategia es que tiene un buen riesgo-beneficio y se puede mantener a medio o largo plazo. Las ventajas específicas son:
Utiliza las supertendencias para juzgar las tendencias del mercado, filtrar el ruido del mercado y evitar perder las principales tendencias.
ATR para el control de pérdidas individuales.
El método de suspensión parcial bloquea las ganancias, el riesgo es mayor que el beneficio.
Cuando el precio alcanza el Stop Loss 1, ajuste el Stop Loss al precio de apertura, asegure la rentabilidad y mejore la estabilidad de la estrategia.
La lógica de transacción es súper simple, fácil de entender y de implementar, con un gran espacio para ajustar los parámetros.
Se puede aplicar a los datos diarios o de alta frecuencia de las principales bolsas, con gran flexibilidad.
La estrategia también tiene ciertos riesgos, que se centran en los siguientes aspectos:
Las emergencias del mercado causan brechas o saltos, no pueden detenerse y enfrentan grandes pérdidas. Se puede reducir el riesgo ajustando razonablemente el multiplicador de pérdidas de ATR.
Los indicadores de supertrend no se juzgan y causan errores en las señales de negociación. Se puede ajustar adecuadamente el ATR y la combinación de parámetros de supertrend para optimizarlos.
El porcentaje de cierre parcial está demasiado alto para obtener suficientes ganancias de tendencia. Se debe ajustar el porcentaje de cierre parcial según los diferentes mercados.
La frecuencia de las operaciones puede ser demasiado alta o demasiado baja. Se debe ajustar el parámetro de la tendencia súper para encontrar el equilibrio óptimo.
La estrategia tiene un amplio margen de mejora y se centra en:
Pruebe diferentes métodos de ATR para detener la pérdida, como ATR estándar, detener el movimiento, detener la banda de Brin, etc. para optimizar la estrategia de detener la pérdida.
Prueba de indicadores de tendencia de superposición de diferentes parámetros para encontrar la combinación óptima de parámetros. Se puede utilizar optimización progresiva o algoritmos genéticos para la optimización de parámetros multidimensionales.
Intentar sobreponer el stop a una segunda capa de indicadores de stop, como el canal Donchian, para que el stop sea más fiable.
Prueba diferentes proporciones de liquidación parcial para encontrar el equilibrio óptimo entre ganancias y riesgos. La proporción de liquidación parcial también se puede ajustar dinámicamente.
Explorar estrategias basadas en el aprendizaje automático como la detención dinámica, el ajuste de posición dinámica y otras.
Esta estrategia es una estrategia cuantitativa basada en el juicio de tendencias de tendencias supertrend, ATR para detener el deterioro dinámico y para detener parcialmente el beneficio. Es un buen equilibrio de riesgos y ganancias, adecuado para el comercio automatizado. La estrategia puede optimizar significativamente el exceso de referencia, la forma de detener el deterioro, la forma de obtener ganancias, etc., es una estrategia cuantitativa que vale la pena ajustar y usar a largo plazo.
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
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/
// Developed by © StrategiesForEveryone
//@version=5
strategy("SuperTrend Strategy for BTCUSD 4H", overlay=true, process_orders_on_close = true, initial_capital = 100, default_qty_type = strategy.cash, precision = 2, slippage = 50, commission_value = 0.03, backtest_fill_limits_assumption = 50)
// ------ Date filter (obtained from ZenAndTheArtOfTrading) ---------
initial_date = input(title="Initial date", defval=timestamp("10 Feb 2014 13:30 +0000"), group="Time filter", tooltip="Enter the start date and time of the strategy")
final_date = input(title="Final date", defval=timestamp("01 Jan 2030 19:30 +0000"), group="Time filter", tooltip="Enter the end date and time of the strategy")
dateFilter(int st, int et) => time >= st and time <= et
colorDate = input.bool(defval=false, title="Date background", tooltip = "Add color to the period of time of the strategy tester")
bgcolor(colorDate and dateFilter(initial_date, final_date) ? color.new(color.blue, transp=90) : na)
// ------------ Super Trend ----------
atrPeriod = input(9, "ATR Length SuperTrend")
factor = input.float(2.5, "Factor SuperTrend", step = 0.05)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
show_supertrend = input.bool(defval = false, title="Show supertrend ?", group = "Appearance")
bodyMiddle = plot(show_supertrend ? ((open + close) / 2) : na, display=display.none)
upTrend = plot(show_supertrend and direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(show_supertrend and direction > 0 ? supertrend : na, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
// ---------- Atr stop loss (obtained from garethyeo)
source_atr = input(close, title='Source', group = "Atr stop loss", inline = "A")
length_atr = input.int(14, minval=1, title='Period', group = "Atr stop loss" , inline = "A")
multiplier = input.float(1.5, minval=0.1, step=0.1, title='Atr multiplier', group = "Atr stop loss", inline = "A", tooltip = "Defines the stop loss distance based on the Atr stop loss indicator")
shortStopLoss = source_atr + ta.atr(length_atr) * multiplier
longStopLoss = source_atr - ta.atr(length_atr) * multiplier
show_atr_stoploss = input.bool(defval=false, title="Show Atr stop loss ?", group = "Appearance")
plot(show_atr_stoploss ? longStopLoss : na, color=color.white, style = plot.style_circles)
plot(show_atr_stoploss ? shortStopLoss : na, color=color.white, style = plot.style_circles)
// ------------- Money management --------------
strategy_contracts = strategy.equity / close
distance_sl_atr_long = -1 * (longStopLoss - close) / close
distance_sl_atr_short = (shortStopLoss - close) / close
risk = input.float(2.5, '% Account risk per trade', step=1, group = "Risk management for trades", tooltip = "Percentage of total account to risk per trade")
long_amount = strategy_contracts * (risk / 100) / distance_sl_atr_long
short_amount = strategy_contracts * (risk / 100) / distance_sl_atr_short
// ---------- Risk management ---------------
risk_reward_breakeven_long= input.float(title="Risk/reward for breakeven long", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_take_profit_long= input.float(title="Risk/reward for take profit long", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_breakeven_short= input.float(title="Risk/reward for break even short", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_take_profit_short= input.float(title="Risk/reward for take profit short", defval=0.75, step=0.05, group = "Risk management for trades")
tp_percent=input.float(title="% of trade for first take profit", defval=50, step=5, group = "Risk management for trades", tooltip = "Closing percentage of the current position when the first take profit is reached.")
// ------------ Trade conditions ---------------
bought = strategy.position_size > 0
sold = strategy.position_size < 0
long_supertrend=ta.crossover(close, supertrend)
short_supertrend=ta.crossunder(close, supertrend)
var float sl_long = na
var float sl_short = na
var float be_long = na
var float be_short = na
var float tp_long = na
var float tp_short = na
if not bought
sl_long:=na
if not sold
sl_short:=na
// ---------- Strategy -----------
// Long position
if not bought and long_supertrend
sl_long:=longStopLoss
long_stoploss_distance = close - longStopLoss
be_long := close + long_stoploss_distance * risk_reward_breakeven_long
tp_long:=close+(long_stoploss_distance*risk_reward_take_profit_long)
strategy.entry('L', strategy.long, long_amount, alert_message = "Long")
strategy.exit("Tp", "L", stop=sl_long, limit=tp_long, qty_percent=tp_percent)
strategy.exit('Exit', 'L', stop=sl_long)
if high > be_long
sl_long := strategy.position_avg_price
strategy.exit("Tp", "L", stop=sl_long, limit=tp_long, qty_percent=tp_percent)
strategy.exit('Exit', 'L', stop=sl_long)
if bought and short_supertrend
strategy.close("L", comment="CL")
// Short position
if not sold and short_supertrend
sl_short:=shortStopLoss
short_stoploss_distance=shortStopLoss - close
be_short:=((short_stoploss_distance*risk_reward_breakeven_short)-close)*-1
tp_short:=((short_stoploss_distance*risk_reward_take_profit_short)-close)*-1
strategy.entry("S", strategy.short, short_amount, alert_message = "Short")
strategy.exit("Tp", "S", stop=sl_short, limit=tp_short, qty_percent=tp_percent)
strategy.exit("Exit", "S", stop=sl_short)
if low < be_short
sl_short:=strategy.position_avg_price
strategy.exit("Tp", "S", stop=sl_short, limit=tp_short, qty_percent=tp_percent)
strategy.exit("Exit", "S", stop=sl_short)
if sold and long_supertrend
strategy.close("S", comment="CS")
// ---------- Draw position on chart -------------
if high>tp_long
tp_long:=na
if low<tp_short
tp_short:=na
if high>be_long
be_long:=na
if low<be_short
be_short:=na
show_position_on_chart = input.bool(defval=true, title="Draw position on chart ?", group = "Appearance", tooltip = "Activate to graphically display profit, stop loss and break even")
position_price = plot(show_position_on_chart? strategy.position_avg_price : na, style=plot.style_linebr, color = color.new(#ffffff, 10), linewidth = 1)
sl_long_price = plot(show_position_on_chart and bought ? sl_long : na, style = plot.style_linebr, color = color.new(color.red, 10), linewidth = 1)
sl_short_price = plot(show_position_on_chart and sold ? sl_short : na, style = plot.style_linebr, color = color.new(color.red, 10), linewidth = 1)
tp_long_price = plot(strategy.position_size>0 and show_position_on_chart? tp_long : na, style = plot.style_linebr, color = color.new(#11eb47, 10), linewidth = 1)
tp_short_price = plot(strategy.position_size<0 and show_position_on_chart? tp_short : na, style = plot.style_linebr, color = color.new(#11eb47, 10), linewidth = 1)
breakeven_long = plot(strategy.position_size>0 and high<be_long and show_position_on_chart ? be_long : na , style = plot.style_linebr, color = color.new(#00ff40, 60), linewidth = 1)
breakeven_short = plot(strategy.position_size<0 and low>be_short and show_position_on_chart ? be_short : na , style = plot.style_linebr, color = color.new(#00ff40, 60), linewidth = 1)
position_profit_long = plot(bought and show_position_on_chart and strategy.openprofit>0 ? close : na, style = plot.style_linebr, color = color.new(#4cd350, 10), linewidth = 1)
position_profit_short = plot(sold and show_position_on_chart and strategy.openprofit>0 ? close : na, style = plot.style_linebr, color = color.new(#4cd350, 10), linewidth = 1)
fill(plot1 = position_price, plot2 = position_profit_long, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = position_profit_short, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = sl_long_price, color = color.new(color.red,90))
fill(plot1 = position_price, plot2 = sl_short_price, color = color.new(color.red,90))
fill(plot1 = position_price, plot2 = tp_long_price, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = tp_short_price, color = color.new(color.green,90))