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