
Эта стратегия объединяет в себе условия Кентнерского канала, показателя CCI, а также RSI и объема торгов, что позволяет достичь более полной стратегии торговли с переизбытком тренда. Эта стратегия может генерировать сигналы покупки и продажи при прорыве ключевых ценовых зон, появлении торговых сигналов от индикаторов и большого объема торгов. В то же время, стратегия включает в себя оценку тренда по равной линии, чтобы избежать торговли без четкой тенденции.
Стратегия основывается на следующих показателях и условиях для принятия решений о сделках:
Кентнерский канал: оценивает, находится ли цена в пределах коридора, исходя из типичных цен и ATR, рассчитанных в течение определенного периода.
Индекс CCI: используется для определения того, является ли цена перекупленной или перепроданной.
RSI - индикатор, который помогает определить, является ли цена перекупленной или перепроданной.
Объем сделки: требуется объем сделки, превышающий определенную среднюю величину, чтобы совершить сделку.
Фильтр среднелинейных тенденций: в сочетании с среднелинейными индикаторами, такими как SMA, EMA, для определения направления общей тенденции цены.
При условии соответствия направлению тренда, если цена прорывает Кентнерский канал вверх и вниз, и CCI и RSI дают сигнал, а также значительно увеличивается объем торгов, то возникают сигналы покупки и продажи.
Эта стратегия в сочетании с различными показателями и условиями позволяет эффективно отсеивать некоторые неопределенные торговые сигналы, что делает торговые решения более стабильными и надежными. Основные преимущества:
Тренд-фильтрация позволяет избежать неопределенного рыночного колебания.
Цены в Кентнерском коридоре пробились в ключевые зоны.
CCI и RSI дают более точные сигналы о перепродаже.
Некоторые ложные прорывы могут быть предотвращены при условии большого объема торгов.
Основные риски, связанные с этой стратегией:
Механизм определения тенденции не является совершенным, и возможно, мы пропустим более сильные тенденции. Можно тестировать различные средние параметры.
Неправильно настроенные параметры индикатора могут пропустить ключевые моменты торговли или создать ошибочный сигнал.
Существует определенный риск ложного прорыва, когда эффект увеличения объема сделки не очевиден. Можно тестировать различные множества увеличения объема сделки.
Эта стратегия может быть оптимизирована в следующих аспектах:
Тестируйте средние линии разных типов и длин, чтобы найти наиболее подходящие параметры фильтрации тенденций.
Оптимизация параметров Kentner Channel, CCI, RSI и других показателей, чтобы сделать сигнал более точным.
Проверьте разные объемы транзакций, чтобы найти наиболее подходящий множитель.
Можно рассмотреть возможность включения стратегии стоп-лосса, чтобы контролировать максимальные потери от одной сделки.
В целом, эта стратегия сочетает в себе Keltner channel, CCI, RSI и условия объема торгов, создавая относительно полную стратегию торговли с переизбыточным количеством трендов. Она может генерировать сигналы покупки и продажи, когда цены прорываются в ключевые зоны, индикатор дает торговый сигнал, и появляется большое количество торгов. В то же время, использование движущихся средних для определения тенденции позволяет избежать торгов без четкой тенденции.
/*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)