Эта стратегия основана на двух индикаторах Super Trend с различными параметрами настройки и индикаторе CCI, целью которого является фиксация краткосрочных колебаний цен для высокочастотного трейдинга. Индикатор Super Trend динамически оценивает направление тренда путем расчета ATR, в то время как индикатор CCI используется для определения того, является ли рынок перекупленным или перепроданным. Стратегия объединяет оба для формирования торговых сигналов.
Используйте 14 периодов ATR для расчета быстрого супертендента с коэффициентом 3, используйте 14 периодов ATR для расчета медленного супертендента с коэффициентом 6. Быстрый супертендент более чувствителен и может улавливать краткосрочные изменения; медленный супертендент определяет направление основного тренда.
Когда быстрый супер тренд пересекается ниже цены, а медленный супер тренд все еще находится выше цены, он рассматривается как возможный сигнал обворота, чтобы пойти длинным; когда быстрый супер тренд пересекается выше цены, а медленный супер тренд все еще находится ниже цены, он рассматривается как возможный сигнал обворота, чтобы пойти коротким.
В то же время используйте CCI, чтобы судить о том, является ли рынок перекупленным или перепроданным. CCI выше 100 указывает на перекупленный рынок, а ниже -100 означает перепроданный рынок. Сигналы CCI комбинируются для фильтрации ложных прорывов.
Вероятность того, что индикатор Super Trend будет давать сигнал об обратном движении, выше, когда рынок перекуплен или перепродан.
Объединение Super Trend для определения точек перелома тренда и CCI для оценки условий перекупки/перепродажи может эффективно отфильтровать ложные прорывы и улучшить качество сигнала.
Быстрые и медленные кроссоверы Super Trend формируют торговые сигналы для достижения высокочастотного входа и выхода.
Параметры CCI и параметры Super Trend могут быть гибко скорректированы для адаптации к различным рыночным условиям.
Идея стратегии ясна и легко понятна, а корректировка параметров также относительно проста.
Супер Тренд сам по себе имеет задерживающий эффект, возможно, упуская первую возможность отмены.
CCI имеет риски обратного вызова, а чрезмерные колебания также могут привести к повторяющейся торговле.
Высокочастотная торговля имеет тенденцию увеличивать частоту транзакций и затраты на торговлю.
Комбинация параметров может быть пересечена и оптимизирована на основе максимального снижения или соотношения прибыли/убытка, чтобы найти оптимальный параметр.
Методы машинного обучения, такие как Random Forest, могут быть использованы для выбора функций на параметрах для достижения автоматической оптимизации параметров.
Исследуйте возможность ограничения максимального количества открытых позиций в течение определенного цикла для контроля рисков.
Стратегия в полной мере использует индикатор Super Trend для определения краткосрочных точек обратного тренда, дополненный индикатором CCI для фильтрации сигналов. Когда параметры параметров разумны, она может достичь эффективной краткосрочной торговли. Но также нужно быть осторожным с рисками, возникающими в результате чрезмерной торговли, и постоянно улучшать эффективность стратегии посредством настройки параметров и оптимизации алгоритма.
/*backtest start: 2023-02-19 00:00:00 end: 2024-02-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supertrend & CCI Strategy Scalp", overlay=true) // SuperTrend Settings atrLength1 = input(14, "ATR Length 1") factor1 = input(3.0, "Factor 1" ) atrLength2 = input(14, "ATR Length 2") factor2 = input(6.0, "Factor 2") // Calculate SuperTrend 1 [superTrend1, direction1] = ta.supertrend(factor1, atrLength1) // // Calculate SuperTrend 2 [superTrend2, direction2] = ta.supertrend(factor2, atrLength2) // superTrend1 := barstate.isfirst ? na : superTrend1 // upTrend1 = plot(direction1 < 0 ? superTrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr) // downTrend1 = plot(direction1 < 0 ? na : superTrend1, "Down Trend", color = color.red, style = plot.style_linebr) // bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none) // fill(bodyMiddle1, upTrend1, color.new(color.green, 90), fillgaps = false) // fill(bodyMiddle1, downTrend1, color.new(color.red, 90), fillgaps = false) // superTrend2 := barstate.isfirst ? na : superTrend2 // upTrend2 = plot(direction1 < 0 ? superTrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr) // downTrend2 = plot(direction1 < 0 ? na : superTrend2, "Down Trend", color = color.red, style = plot.style_linebr) // bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none) // fill(bodyMiddle2, upTrend2, color.new(color.green, 90), fillgaps = false) // fill(bodyMiddle2, downTrend2, color.new(color.red, 90), fillgaps = false) // CCI Settings //cciLength = input.int(14, title="CCI Length") cciLevel = input.int(100, title="CCI Level") // Calculate CCI length = input.int(20, minval=1) src = input(hlc3, title="Source") ma = ta.sma(src, length) cci = (src - ma) / (0.015 * ta.dev(src, length)) //plot(cci, "CCI", color=#2962FF) //band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed) //hline(0, "Middle Band", color=color.new(#787B86, 50)) //band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed) //fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background") ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing") smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing") smoothingLine = ma(cci, smoothingLength, typeMA) //plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none) // Entry conditions longCondition = superTrend1 > close and superTrend2 < close and smoothingLine < -100 shortCondition = superTrend1 < close and superTrend2 > close and smoothingLine > 100 /// Initialize variables to track trade direction var bool isLong = na var bool isShort = na // Strategy entry and exit if (longCondition) strategy.entry("Long", strategy.long) isLong := true isShort := false if (shortCondition) strategy.entry("Short", strategy.short) isShort := true isLong := false // Close Long positions if (isLong) strategy.close("Long", when = superTrend1 < close or superTrend2 > close or cci > 100) // Close Short positions if (isShort) strategy.close("Short", when = superTrend1 > close or superTrend2 < close or cci < -100) // Plotting plot(superTrend1, color=color.blue, title="SuperTrend 1") plot(superTrend2, color=color.red, title="SuperTrend 2") //plot(cci, color=color.orange, title="CCI")