이 전략은 다른 매개 변수 설정과 CCI 지표와 함께 두 개의 슈퍼 트렌드 지표에 기반하여 고주파 거래의 단기 가격 변동을 파악하는 것을 목표로합니다. 슈퍼 트렌드 지표는 ATR을 계산하여 동적으로 트렌드 방향을 판단하고 CCI 지표는 시장이 과소매 또는 과소매인지 결정하는 데 사용됩니다. 전략은 둘을 결합하여 거래 신호를 형성합니다.
빠른 슈퍼 트렌드를 계산하기 위해 14 기간 ATR을 사용하여 인수 3로 설정; 느린 슈퍼 트렌드를 계산하기 위해 14 기간 ATR을 사용하여 인수 6로 설정합니다. 빠른 슈퍼 트렌드는 더 민감하며 단기 변화를 포착 할 수 있습니다. 느린 슈퍼 트렌드는 주요 트렌드 방향을 결정합니다.
빠른 슈퍼 트렌드가 가격 아래로 넘어가고 느린 슈퍼 트렌드가 여전히 가격 위에 있을 때, 그것은 긴 거리의 가능한 역전 신호로 판단됩니다. 빠른 슈퍼 트렌드가 가격 위에 넘어가고 느린 슈퍼 트렌드가 여전히 가격 아래로 넘어가면, 그것은 짧은 거리의 가능한 역전 신호로 판단됩니다.
동시에 CCI를 사용하여 시장이 과잉 구매 또는 과잉 판매인지 판단하십시오. CCI 100 이상은 과잉 구매 시장을 나타냅니다. -100 이하는 과잉 판매 시장을 의미합니다. CCI 신호는 가짜 브레이크를 필터링하기 위해 결합됩니다.
슈퍼 트렌드 지표가 반전 신호를 발산 할 확률은 시장이 과소매 또는 과소매가 될 때 더 높습니다. 이것이 전략의 핵심 논리입니다.
트렌드 반전점을 결정하기 위한 슈퍼 트렌드와 과잉 구매/ 과잉 판매 상황을 판단하기 위한 CCI를 결합하면 잘못된 파장을 효과적으로 필터링하고 신호 품질을 향상시킬 수 있습니다.
빠르고 느린 슈퍼 트렌드 크로스오버는 높은 주파수 진입과 출구를 달성하기 위해 거래 신호를 형성합니다.
CCI 매개 변수와 슈퍼 트렌드 매개 변수는 다양한 시장 조건에 따라 유연하게 조정할 수 있습니다.
전략 아이디어는 명확하고 이해하기 쉽고 매개 변수 조정도 비교적 간단합니다.
슈퍼 트렌드 자체는 지연 효과를 가지고 있습니다. 아마도 첫 번째 역행 기회를 놓칠 수 있습니다. ATR 기간을 단축하려고 할 수 있습니다.
CCI는 콜백 리스크가 있으며 과도한 변동은 반복적인 거래를 유발할 수 있습니다. CCI 매개 변수를 증가시키거나 경계를 조정하는 것을 시도 할 수 있습니다.
높은 주파수 거래는 거래 주파수와 거래 비용을 증가시키는 경향이 있습니다. 보유 시간을 조정하고 오픈 / 클로즈 주파수를 줄이는 것이 좋습니다.
매개 변수 조합은 최적의 매개 변수를 찾기 위해 최대 마이너다운 또는 이익/손실 비율을 기반으로 통과 및 최적화 될 수 있습니다.
무작위 숲과 같은 기계 학습 방법은 자동 매개 변수 최적화를 달성하기 위해 매개 변수에서 특징 선택에 사용할 수 있습니다.
특정 주기에 최대 개설 포지션을 제한하여 위험을 통제하는 방법을 탐구합니다.
이 전략은 단기 트렌드 반전 지점을 결정하기 위해 슈퍼 트렌드 지표를 완전히 활용하고, 신호를 필터링하기 위해 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")