Estratégia de negociação baseada no canal de supertendência adaptável


Data de criação: 2023-09-20 15:17:51 última modificação: 2023-09-20 15:17:51
cópia: 1 Cliques: 810
1
focar em
1617
Seguidores

Visão geral

Esta estratégia cria um sinal de negociação através da construção de um canal de tendência super duplo, combinado com um canal de ruptura de preço. Ao mesmo tempo, o uso da flutuação de preços para ajustar a largura do canal, para obter o efeito de auto-adaptação.

Princípio da estratégia

  1. Calcule o diferencial padrão do preço e a taxa de flutuação ATR, ajustando a largura do canal de ultra-trend de acordo com a taxa de flutuação.

  2. Construção de dois níveis de canais de super-tendência, com canais internos mais sensíveis e canais externos mais estáveis.

  3. Quando o preço quebra o canal de tendência superior do nível interno ou externo, gera um sinal de compra ou venda.

  4. A estrutura de duas camadas de passagem permite filtrar algumas falhas.

  5. A taxa de flutuação ATR é usada para ajustar a largura do canal, aumentando a largura do canal quando a flutuação aumenta, para obter um efeito de auto-adaptação.

Análise de vantagens

  1. O Supertrend Channel é simples e fácil de usar, permitindo um melhor acompanhamento das tendências.

  2. A estrutura de duas camadas de canais pode melhorar a qualidade do sinal, filtrando as falsas brechas.

  3. A taxa de flutuação adapta-se à largura do canal para que o canal seja mais adequado a diferentes condições de mercado.

  4. É fácil de implementar e de ajustar os parâmetros.

  5. Visualizar os canais e as rupturas, formando um sinal de transação intuitivo.

Análise de Riscos

  1. A falha de detecção de sinais de ruptura pode levar a erros de interpretação e à perda desnecessária de recursos.

  2. O risco de negociação de contrapartida.

  3. A adaptação pode ser muito sensível e muito extensa.

  4. A otimização de parâmetros imprópria pode levar à otimização excessiva.

  5. Como uma estratégia de acompanhamento de tendências, o “uddle” é uma estratégia que pode resultar em ganhos ou prejuízos.

Direção de otimização

  1. Teste a influência de diferentes parâmetros na auto-adaptação do canal.

  2. Tente combinar indicadores como a linha média para determinar a direção das grandes tendências.

  3. Otimizar o mecanismo de confirmação de brechas para evitar falsas brechas.

  4. Adicionar estratégias de stop loss para controlar perdas individuais.

  5. Avaliação do impacto de ajustes nos parâmetros de canal na frequência de transação.

  6. Os parâmetros podem ser dinâmicamente otimizados por algoritmos de aprendizado de máquina.

Resumir

A estratégia usa uma dupla camada de auto-adaptação do canal de super-tendência para capturar a tendência dos preços. A vantagem é que é simples e intuitiva, pode acompanhar a tendência de forma eficaz. Mas também há alguns erros de julgamento e erro de julgamento de tendência.

Código-fonte da estratégia
/*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()