Esta estratégia constrói canais de supertrend de camada dupla e gera sinais de negociação quando o preço atravessa os canais.
Calcular o desvio-padrão do preço e a volatilidade ATR, utilizar a volatilidade para ajustar a largura do canal.
Construir canais de supertendência de duas camadas, com camada interna mais sensível e camada externa mais estável.
Gerar sinais de compra/venda quando o preço atravessa o canal interno ou externo.
A estrutura de canal duplo ajuda a filtrar alguns falhos.
A volatilidade do ATR adapta a largura do canal, mais ampla quando a volatilidade aumenta para efeito adaptativo.
Os canais de Supertrend são simples e eficazes no acompanhamento de tendências.
O canal duplo filtra falsos e melhora a qualidade do sinal.
O ajustamento adaptado à volatilidade torna os canais adequados a diferentes ambientes de mercado.
Fácil de implementar com um simples ajuste de parâmetros.
Os canais visualizados e os breakouts formam sinais comerciais intuitivos.
Os sinais de ruptura podem produzir falsos sinais, resultando em perdas desnecessárias.
Não consegue determinar a direcção da tendência, os riscos de negociação contra-tendência.
O ajuste adaptativo pode ser demasiado sensível, com excessos de ajustes.
A otimização de parâmetros inadequada leva ao sobreajuste.
Como uma tendência que segue a estratégia, luta em mercados de gama.
Parâmetros de ensaio
Incorporar MA para determinar as principais tendências.
Otimizar a confirmação da fuga para evitar falsas fugas.
Adicionar stop loss ao limite de perda por transação.
Avalie a sintonização do canal na frequência de negociação.
Usar machine learning para otimizar dinamicamente parâmetros.
Esta estratégia usa canais de dupla supertendência adaptativos para capturar tendências de preços. É simples e intuitivo no rastreamento de tendências. Mas os riscos incluem falhas e direção incorreta da tendência.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000) //Inputs multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1) period = input(title="Period", type=input.integer, step=1, defval=10, minval=1) SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// dev = stdev(close, period) stdDev = (dev / close) * 100 + 1 MultDev = SelfAdjust ? multi * stdDev : multi up_lev1 = hl2 - MultDev * atr(period) dn_lev1 = hl2 + MultDev * atr(period) up_lev2 = hl2 - (MultDev * 2 * atr(period)) dn_lev2 = hl2 + (MultDev * 2 * atr(period)) up_trend1 = 0.0 up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1 up_trend2 = 0.0 up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2 down_trend1 = 0.0 down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1 down_trend2 = 0.0 down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2 trend1 = 0 trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1) trend2 = 0 trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1) st_line1 = trend1 == 1 ? up_trend1 : down_trend1 st_line2 = trend2 == 1 ? up_trend2 : down_trend2 // Plotting plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1") plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2") fill(plot1, plot2, color = color.aqua, title = "Cloud") buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1 sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1 if(buy and time_cond) strategy.entry("long", long = true , comment="long") if (close < st_line1 and time_cond or close < st_line2 and time_cond) strategy.close("long") if (not time_cond) strategy.close_all()