Estratégia de Canal Keltner Baseada em Tendências


Data de criação: 2023-11-03 16:59:39 última modificação: 2023-11-03 16:59:39
cópia: 0 Cliques: 791
1
focar em
1617
Seguidores

Estratégia de Canal Keltner Baseada em Tendências

Visão geral

A estratégia baseia-se em três indicadores principais: o indicador de tendência, o canal de Keltner e o indicador DM.

O indicador de tendência é composto por SMA e EMA. Quando a EMA atravessa o SMA, a entrada na tendência é confirmada. O canal de Keltner é usado para determinar os preços de abertura e fechamento da Candle. O indicador DM é usado para determinar a direção da pluralidade.

Os seguintes critérios de admissão permitem que você faça mais:

  1. EMA acima da SMA, confirmando a tendência de alta
  2. Candle preço de abertura na parte superior, preço de fechamento no interior do canal
  3. Indicadores de DM maiores do que a linha de referência definida

A estratégia consiste em definir dois pontos de parada e um ponto de perda. Pode-se considerar o uso de tracking stop loss para obter mais lucro.

Princípio da estratégia

Julgar tendências

A direção da tendência é julgada através da EMA e da SMA. O parâmetro EMA é 46, o parâmetro SMA é 46. Quando a EMA atravessa a SMA, indica que entrou em uma tendência ascendente.

Passagem de Keltner

O canal de Keltner contém três linhas: linha central, linha superior e linha inferior. A linha central é o SMA do preço de fechamento, com um comprimento de 81 anos. A linha superior e a linha inferior estão localizadas acima e abaixo da linha central, respectivamente, com amplitudes reais de multiplicadores especificados.

O canal de Keltner é usado principalmente para determinar se os preços estão dentro do canal e se estão atravessando o canal.

Indicadores de DM

O indicador DM contém três linhas: ADX, + DI e - DI. + DI mede a força ascendente, - DI mede a força descendente. ADX representa um indicador de tendência média, refletindo a força da tendência.

Aqui, o parâmetro ADX é 10, o parâmetro DI é 19. Quando a linha +DI usa a linha de referência definida ((default 27), significa que a tendência é forte e é adequada para fazer mais.

Análise de vantagens

Esta estratégia combina tendências, canais e indicadores de força e fraqueza, permitindo uma avaliação eficaz da direção dos preços e da direção da pluralidade de espaços. Tem as seguintes vantagens:

  1. A avaliação de tendências é relativamente precisa, evitando operações de contra-corrida.

  2. O canal de Keltner é claramente visível, formando pontos de apoio e pressão.

  3. O indicador DM pode medir a força do ar para garantir a direção correta do ar.

  4. As condições de estratégia são rigorosas e podem filtrar efetivamente as falsas brechas de retrocesso.

  5. O sistema de paradas e paradas de perdas permite aproveitar as oportunidades de lucro.

Análise de Riscos

A estratégia também traz alguns riscos:

  1. A tendência pode virar, a EMA pode atravessar o SMA e deve ser retirada a tempo.

  2. Em situações de força, o canal pode falhar e não pode ser considerado um ponto de pressão de suporte rigoroso.

  3. O indicador DM pode emitir sinais errados e deve ser julgado com base na evolução dos preços.

  4. A falsa ruptura pode desencadear a entrada, mas logo depois a recaída, com o estabelecimento de uma parada razoável.

  5. Os pontos de parada e perda precisam ser constantemente otimizados para se adaptar às mudanças do mercado.

Direção de otimização

Otimizar ainda mais as coisas pode ser feito em vários aspectos:

  1. Ajustar parâmetros e testar a eficácia de diferentes métodos de avaliação de tendências.

  2. Optimizar os parâmetros do canal para que estejam mais próximos da verdadeira amplitude de flutuação.

  3. Teste diferentes combinações de parâmetros de DM para escolher o melhor.

  4. Configure diferentes condições de entrada, como filtros de volume de transação.

  5. Optimizar estratégias de stop loss, como testar o rastreamento de stop loss para obter mais lucro.

  6. Teste separadamente para diferentes variedades e selecione a melhor combinação de parâmetros.

Resumir

A estratégia usa vários indicadores para determinar a direção da tendência, apoiar o nível de pressão e a força do espaço, para capturar a tendência e controlar o risco. No entanto, é necessário prestar atenção ao risco e otimizar os parâmetros para se adaptar às mudanças do mercado.

Código-fonte da estratégia
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Original Idea by: Wunderbit Trading

//@version=4
strategy("Keltner Channel ETH/USDT 1H", overlay=true, initial_capital=1000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.07)


/// TREND
ribbon_period = input(46, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

// p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=leadLine2 < leadLine1
DT=leadLine2>leadLine1

///////////////////////////////////////INDICATORS

// KELTNER //
source       = close
useTrueRange = input(true)
length       = input(81, step=1, minval=1)
mult         = input(2.5, step=0.1)

// Calculate Keltner Channel
ma      = sma(source, length)
range   = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="Middle", color=color.orange)
p1=plot(upper, title="Upper", color=color.orange)
p2=plot(lower, title="Lower", color=color.orange)
fill(p1,p2)


// DMI INDICATOR //
adxlen = 10 // input(10, title="ADX Smoothing")
dilen = input(19, title="DI Length")
keyLevel = 23// input(23, title="key level for ADX")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

benchmark=input(title="DMI Benchmark", defval=27, minval=1,step=1)

// plot(sig, color=color.red, title="ADX")
// plot(up, style=plot.style_histogram, color=color.green, title="+DI")
// plot(down, style=plot.style_histogram, color=color.red, title="-DI")
// plot(keyLevel, color=color.white, title="Key Level")

///////////////////////////////////////////////////////////


////////////////////////////////////////////////////Component Code Start

testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
///// Component Code Stop //////////////////////////////////////////

//////////////// STRATEGY EXECUTION //////////////////////////

//LONG SET UP
// Take Profit / Stop Loss
long_tp1_inp = input(4.5, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(20, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)


// STRATEGY CONDITION
// LONG
entry_long = ((open > lower and open < upper) and close > upper) and up > down and up > benchmark //  and volume[0] > volume[1]
entry_price_long=valuewhen(entry_long,close,0)
SL_long = entry_price_long * (1 - long_sl_inp)
exit_long = (close < lower) or low < SL_long


// STRATEGY EXECUTION
if testPeriod()

    // LONG
    if UT
        strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTER LONG COMMAND")
    strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS 
    strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS
    strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND")


//PLOT FIXED SLTP LINE
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")