
Esta estratégia é uma estratégia de negociação automática de quantificação de Bitcoin baseada em indicadores de super tendências. Utiliza indicadores de super tendências para avaliar a tendência do mercado, em combinação com o controle de risco do princípio de parada de ATR, para realizar negociações bidirecionais de curto prazo. A maior vantagem da estratégia é que a relação risco / retorno é boa, a estratégia de parada é confiável e adequada para a posse de médio a longo prazo.
Esta estratégia usa o indicador de tendência super para determinar a direção da tendência do mercado. Quando o indicador de tendência super muda de tendência descendente para tendência ascendente, faça entrada de cabeça; Quando o indicador de tendência super muda de tendência ascendente para tendência descendente, faça entrada de cabeça.
Especificamente, a estratégia primeiro calcula o comprimento do indicador ATR de 14 ciclos, determinando a distância de parada de cada um por multiplicação por um múltiplo de parada de perda ATR (como 1,5 vezes). Em seguida, calcula o indicador de super-trend, cujo parâmetro de indicador adota o valor padrão (ciclo ATR 9, o fator de super-trend 2.5) e emite um sinal de negociação quando o indicador de super-trend muda de direção.
Após a entrada, o ponto de parada é fixado acima ou abaixo do ponto de parada ATR. O primeiro ponto de parada é calculado de acordo com a relação de risco-retorno, assumindo que 0,75, ou seja, a distância de parada é 0,75 vezes a distância de parada. Quando o preço atinge o primeiro ponto de parada, elimine 50% da posição e mova o ponto de parada para o preço de abertura.
Desta forma, esta estratégia pode garantir a rentabilidade através de um bloqueio parcial, garantindo o controle do risco de parada de perdas, adequado para a estratégia de investimento de detenção de linhas médias e longas.
A principal vantagem desta estratégia é a boa relação risco-receita, que pode ser mantida a médio e longo prazo. As vantagens específicas são:
O uso de super tendências para avaliar as tendências do mercado, filtrar o ruído do mercado e evitar perder as principais tendências.
ATR de rastreamento dinâmico de stop loss, controle confiável de perdas individuais.
A parcela do método de suspensão bloqueia o lucro, o risco é maior do que o lucro.
Quando o preço atinge o Stop Loss 1, ajuste o Stop Loss ao preço de abertura para garantir o lucro e aumentar a estabilidade da estratégia.
A lógica de transação é super simples, fácil de entender, com grande espaço para ajuste de parâmetros.
Pode ser aplicado em dados diários ou de alta frequência das principais bolsas, com grande flexibilidade.
A estratégia também apresenta alguns riscos, que se concentram nos seguintes aspectos:
O risco pode ser reduzido através de um ajuste razoável do ATR Stop Loss Coefficient.
Os indicadores de super tendência falham em seu julgamento, causando erros nos sinais de negociação. ATR e a combinação de parâmetros de super tendência podem ser adequadamente ajustados para otimização.
Algumas das taxas de liquidação são muito altas e não permitem um lucro de tendência suficiente. Algumas taxas de liquidação devem ser ajustadas de acordo com os diferentes mercados.
A frequência de negociação pode ser muito alta ou muito baixa. Os parâmetros de super tendência devem ser ajustados para encontrar o melhor equilíbrio.
A estratégia ainda tem muito espaço para otimização e concentra-se nas seguintes áreas:
Tente diferentes métodos de parada de perda de ATR, como ATR padrão, parada de força, parada de faixa de Brin para otimizar a estratégia de parada.
Teste os indicadores de tendência super de diferentes parâmetros para encontrar a combinação ideal de parâmetros. A otimização de parâmetros multidimensionais pode ser feita usando otimização progressiva ou algoritmos genéticos.
Tente sobrepor um segundo nível de stop loss, como o canal Donchian, ao stop loss para torná-lo mais confiável.
Teste diferentes proporções de liquidação parcial para encontrar o melhor equilíbrio entre lucro e risco. A proporção de liquidação parcial também pode ser ajustada dinamicamente.
Explorar estratégias baseadas em aprendizagem de máquina para parar a dinâmica e ajustar a posição dinâmica.
Esta estratégia é uma estratégia quantitativa baseada em supertrend, ATR, stop loss, stop profit. Ela é bem equilibrada em risco e ganho, adequada para negociação automática. A estratégia pode otimizar significativamente o superponto, o modo de parar o prejuízo, o modo de ganhar, etc. É uma estratégia quantitativa que vale a pena ajustar e usar a longo prazo.
/*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))