
Esta estratégia combina o canal de Kentner, o indicador CCI e o indicador RSI com as condições de volume de negociação para uma estratégia de negociação de tendência mais completa. A estratégia pode gerar sinais de compra e venda ao romper áreas de preços críticas, quando os indicadores emitem sinais de negociação e quando há grandes volumes de negociação.
A estratégia baseia-se principalmente nos seguintes indicadores e condições para tomar decisões de negociação:
Canal de Kentner: para determinar se o preço está dentro da área do canal, baseando-se no preço típico de um determinado período e no cálculo do ATR para cima e para baixo.
Indicador CCI: usado para determinar se o preço está sobrecomprado ou sobrevendido.
O RSI é um indicador que ajuda a avaliar se o preço está sendo super comprado ou super vendido
Volume de transação: exige que o volume de transação ultrapasse um determinado valor médio para que a transação ocorra.
Filtragem de tendências de linha média: combinação de indicadores de linha média como SMA, EMA e outros para determinar a direção da tendência geral dos preços.
Em condições de acordo com a direção da tendência, se o preço quebrar o canal de Kentner para cima e para baixo, e os indicadores CCI e RSI emitirem sinais e o volume de negociação aumentar significativamente, os sinais de compra e venda serão gerados.
A estratégia combina vários indicadores e condições que podem efetivamente eliminar alguns sinais de negociação incerta, tornando a decisão de negociação mais estável e confiável. As principais vantagens são:
O mecanismo de filtragem de tendências pode evitar oscilações pouco claras no mercado.
O preço do canal de Kettner está a ultrapassar uma zona crítica.
O CCI e o RSI são mais precisos em emitir sinais de supercompra e supervenda.
A condição de grandes volumes de transações pode evitar algumas falsas brechas.
A estratégia apresenta os principais riscos:
O mecanismo de determinação de tendências é imperfeito e pode perder oportunidades de tendências mais fortes. Pode testar diferentes parâmetros de linha média.
Os parâmetros do indicador estão mal definidos, podendo perder momentos críticos de negociação ou gerar sinais errados.
Quando o efeito de amplificação do volume de transação não é visível, existe um certo risco de falsa ruptura. Pode-se testar diferentes multiplicadores de amplificação do volume de transação.
A estratégia pode ser melhorada em vários aspectos:
Teste diferentes tipos e comprimentos de linha média para encontrar os parâmetros de filtragem de tendência mais adequados.
Otimizar os parâmetros de indicadores como o canal de Kentner, o CCI, o RSI e outros para tornar o sinal mais preciso.
Teste diferentes volumes de transações para aumentar o múltiplo e encontrar o múltiplo mais adequado.
Pode-se considerar a inclusão de uma estratégia de stop loss para controlar a perda máxima de uma única transação.
Em geral, esta estratégia combina o canal Keltner, o CCI, o RSI e as condições de volume de negociação, criando uma estratégia de negociação de tendência de filtragem de volume relativamente completa. Quando o preço quebra uma região-chave, o indicador dá um sinal de negociação e um grande volume de negociação ocorre, ele pode gerar um sinal de compra e venda. Ao mesmo tempo, o uso de médias móveis para julgar a tendência evita negociações sem uma tendência clara.
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Custom Keltner CCI Strategy with Trend Filter", overlay=true )
// Input Parameters for allowing long and short trades
allowLong = input(true, title="Allow Long Trades")
allowShort = input(true, title="Allow Short Trades")
// Trend Filter Inputs
maType = input(title="MA Type", options=["OFF", "SMA", "EMA", "SMMA", "CMA", "TMA"], defval="OFF")
trendFilterMethod = input(title="Trend Filter Method", options=["OFF", "Normal", "Reversed"], defval="OFF")
maLength = input(14, title="MA Length")
// Other Input Parameters
lengthKC = input(30, title="Keltner Channels Length")
multKC = input(0.7, title="Keltner Channels Multiplier")
lengthCCI = input(5, title="CCI Length")
overboughtCCI = input(75, title="CCI Overbought Level")
oversoldCCI = input(-75, title="CCI Oversold Level")
rsiPeriod = input(30, title="RSI Period")
rsiOverbought = input(60, title="RSI Overbought Level")
rsiOversold = input(60, title="RSI Oversold Level")
volumeMultiplier = input(0, title="Volume Multiplier", type=input.float, step=0.1, minval=0)
// Define Moving Averages
var float maValue = na
if (maType == "SMA")
maValue := sma(close, maLength)
else if (maType == "EMA")
maValue := ema(close, maLength)
else if (maType == "SMMA")
maValue := na(maValue[1]) ? sma(close, maLength) : (maValue[1] * (maLength - 1) + close) / maLength
else if (maType == "CMA")
maValue := na(maValue[1]) ? sma(close, maLength) : (sma(close, maLength) + (sma(close, maLength) - maValue[1])) / 2
else if (maType == "TMA")
maValue := sma(sma(close, round(maLength/2)), round(maLength/2)+1)
// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == "OFF" or (trendFilterMethod == "Normal" and close > maValue) or (trendFilterMethod == "Reversed" and close < maValue))
shortCondition = allowShort and (trendFilterMethod == "OFF" or (trendFilterMethod == "Normal" and close < maValue) or (trendFilterMethod == "Reversed" and close > maValue))
// Keltner Channels
typicalPrice = hlc3
middleLine = sma(typicalPrice, lengthKC)
range = multKC * atr(lengthKC)
upperChannel = middleLine + range
lowerChannel = middleLine - range
// CCI
cci = cci(close, lengthCCI)
// RSI
rsi = rsi(close, rsiPeriod)
// Volume
volCondition = volume > sma(volume, 50) * volumeMultiplier
// Combined Entry Conditions with Trend Filter
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition
// Execute orders at the open of the new bar after conditions are met
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// Exit Conditions
strategy.close("Long", when = cci > 0)
strategy.close("Short", when = cci < 0)
// Plotting
plot(upperChannel, color=color.red, linewidth=1)
plot(lowerChannel, color=color.green, linewidth=1)
hline(overboughtCCI, "Overbought", color=color.red)
hline(oversoldCCI, "Oversold", color=color.green)