В процессе загрузки ресурсов... загрузка...

Стратегия скальпинга Supertrend и CCI

Автор:Чао Чжан, Дата: 2024-02-26 10:39:49
Тэги:

img

Обзор

Эта стратегия основана на двух индикаторах 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")



Больше