
이 전략은 상품 통로 지수 ((CCI) 지표를 기반으로 동적 적응력 엔트리 기준을 사용하여 트렌드 반전의 시기를 판단하며, 추적 스톱로스를 사용하여 수익을 잠금합니다. 전략 이름 CCI 바닥을 포착하는 상품 거래 전략에는 전략의 핵심 요소가 포함되어 있습니다. CCI 지표를 사용하여 오버셀 지역을 판단하여 반전 기회를 포착하고, 동적 적응력 엔트리를 사용하여 엔트리를 수평적으로 최적화합니다.
핵심 지표는 CCI 지표로, 오버셀 지역을 판단하여 트렌드 반전을 유도하는 기회를 결정합니다. 또한, 다른 지표와 시장 환경에 따라 CCI 오버셀 지역의 폭도 다를 수 있습니다. 따라서,이 전략은 관망적인 방법을 사용하여, 지난 기간 CCI 최저점의 위치를 판단하여 CCI 구매 수준을 동적으로 설정합니다. 지난 40 일 동안 CCI 최저점이 -90보다 크면 -90은 새로운 오버셀 지역 수준으로; 지난 50 일 동안 CCI 최저점이 -70보다 크면 -70은 새로운 오버셀 지역 수준으로, 다음과 같이 권장됩니다.
구체적으로, 기본 구매 신호의 CCI 레벨은 -145 ᄂ. 다음으로 지난 40일, 50일 등 다양한 날의 CCI 최저점의 위치를 판단한다. 최저점이 기본 레벨의 다음 레벨인 -90보다 높으면 -90을 새로운 entry 레벨로 한다. 최저점이 다시 -90보다 높으면 -70을 새로운 entries 레벨로 한다. 따라서 entry 레벨은 -145 / -90 / -70 / -50 / -4 / 0 / +25 / +50 / +70 사이에 동적으로 전환할 수 있다.
이 전략은 또한 수익을 고정하기 위해 스톱로스를 추적하는 것을 채택하고 있으며, 스톱로스 수준은 가격의 움직임에 따라 계속 올라갑니다.
고정된 엔트리 수준에 비해 이러한 동적 디자인은 엔트리 시기를 최적화 할 수 있습니다. 더 높은 엔트리 기준을 추구하는 것은 추락하는 시장에서 위험을 줄일 수 있습니다.
CCI 자체는 과매매를 판단하는 지표로도 명확하고 신뢰할 수 있으며, CCI를 기반으로 한 추세 반전의 사고 방식이 효과적입니다. 동적 엔트리 디자인을 결합하면이 전략의 전반적인 장점은 뚜렷합니다.
CCI에 기반한 트렌드 전환점을 판단하는 사고에는 약간의 지연성이 있으며, 가격이 빠르게 상승하거나 급락할 때, 엔트리 시기가 정확하지 않을 수 있습니다. 또한, 엔트리의 수평적 역동적 적응 장치가 현재 시장 환경에 완벽하게 맞추기 어렵기 때문에 엔트리가 반드시 최적의 시기가 아닙니다. 마지막으로, 상품 시장 자체는 변동성이 높으며, 정지 손실이 설정되어 있더라도 특정 매개 변수가 설정되지 않으면 큰 손실이 발생할 수 있습니다.
주로 CCI 파라미터 자체, 엔트리 레벨 설정 및 스톱 로즈 파라미터의 몇 가지 측면에서 최적화 할 수 있습니다. 특정 지표에 대해 더 나은 위치를 결정하는 파라미터는 전략의 효과를 향상시킬 수 있습니다.
이 전략은 CCI 지수 판단 과매매 과매매의 사고와 동적 적응 엔트리 레벨 디자인을 통합하여 돌파 트렌드를 포착한다. 고정 파라미터에 비해, 동적 엔트리 레벨은 전략의 적응력을 크게 강화한다. 엔트리 기반의 역전 포착 모드가 추적 중지와 결합하여, 강한 동력의 기회를 잡을 수 있으며, 적시에 중지한다. 이 전략은 파라미터를 정밀하게 설정하는 전제 조건에 따라, 전체적인 효과는 강하다. CCI 파라미터 설정과 엔트리 레벨 판단을 계속 최적화하여 전략의 안정성과 수익률을 더욱 향상시킬 수 있다.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Extended Adaptive CCI Entry Strategy for Commodities", shorttitle="Ext_Adaptive_CCI_Entry_Com", overlay=true)
// Inputs
cciLength = input(20, title="CCI Period")
defaultCCIEntryOversold = input(-145, title="Default CCI Entry Oversold Level")
adaptiveCCIEntryLevel90 = input(-90, title="Adaptive CCI Entry Level for 40 Days")
adaptiveCCIEntryLevel70_50Days = input(-70, title="Adaptive CCI Entry Level for 50 Days")
adaptiveCCIEntryLevel50 = input(-50, title="Adaptive CCI Entry Level for 60 Days")
adaptiveCCIEntryLevel4 = input(-4, title="Adaptive CCI Entry Level for 90 Days")
adaptiveCCIEntryLevel0 = input(0, title="Adaptive CCI Entry Level for 120 Days")
adaptiveCCIEntryLevel25 = input(25, title="Adaptive CCI Entry Level for 140 Days")
adaptiveCCIEntryLevel50_160Days = input(50, title="Adaptive CCI Entry Level for 160 Days")
adaptiveCCIEntryLevel70_180Days = input(70, title="Adaptive CCI Entry Level for 180 Days")
lookback40 = input(40, title="Lookback Period for -90 Level")
lookback50 = input(50, title="Lookback Period for -70 Level")
lookback60 = input(60, title="Lookback Period for -50 Level")
lookback90 = input(90, title="Lookback Period for -4 Level")
lookback120 = input(120, title="Lookback Period for 0 Level")
lookback140 = input(140, title="Lookback Period for +25 Level")
lookback160 = input(160, title="Lookback Period for +50 Level")
lookback180 = input(180, title="Lookback Period for +70 Level")
// Indicator Calculation
cci = ta.cci(close, cciLength)
// Determine adaptive entry level based on lookback periods
var float entryLevel = defaultCCIEntryOversold // Initialize with the default level
if ta.lowest(cci, lookback40) > adaptiveCCIEntryLevel90
entryLevel := adaptiveCCIEntryLevel90
if ta.lowest(cci, lookback50) > adaptiveCCIEntryLevel70_50Days
entryLevel := adaptiveCCIEntryLevel70_50Days
if ta.lowest(cci, lookback60) > adaptiveCCIEntryLevel50
entryLevel := adaptiveCCIEntryLevel50
if ta.lowest(cci, lookback90) > adaptiveCCIEntryLevel4
entryLevel := adaptiveCCIEntryLevel4
if ta.lowest(cci, lookback120) > adaptiveCCIEntryLevel0
entryLevel := adaptiveCCIEntryLevel0
if ta.lowest(cci, lookback140) > adaptiveCCIEntryLevel25
entryLevel := adaptiveCCIEntryLevel25
if ta.lowest(cci, lookback160) > adaptiveCCIEntryLevel50_160Days
entryLevel := adaptiveCCIEntryLevel50_160Days
if ta.lowest(cci, lookback180) > adaptiveCCIEntryLevel70_180Days
entryLevel := adaptiveCCIEntryLevel70_180Days
// Entry Condition
longCondition = cci < entryLevel
// Entry and Exit
if (longCondition)
strategy.entry("Long", strategy.long, qty=1)
alert("Long entry executed at " + str.tostring(close), alert.freq_once_per_bar)
trailOffset = input(10.0, title="Trailing Stop Offset in USD")
strategy.exit("Trailing Stop", "Long", trail_offset = trailOffset, trail_price = close)
if (close < entryLevel - trailOffset)
alert("Long position closed at " + str.tostring(close), alert.freq_once_per_bar)
// Plotting
plot(series=cci, color=color.purple, title="CCI")
hline(price=defaultCCIEntryOversold, color=color.red, title="Default CCI Entry Oversold Level")
hline(price=adaptiveCCIEntryLevel90, color=color.orange, title="CCI -90 Level (40 Days)")
hline(price=adaptiveCCIEntryLevel70_50Days, color=color.yellow, title="CCI -70 Level (50 Days)")
hline(price=adaptiveCCIEntryLevel50, color=color.green, title="CCI -50 Level (60 Days)")
hline(price=adaptiveCCIEntryLevel4, color=color.blue, title="CCI -4 Level (90 Days)")
hline(price=adaptiveCCIEntryLevel0, color=color.purple, title="CCI 0 Level (120 Days)")
hline(price=adaptiveCCIEntryLevel25, color=color.aqua, title="CCI +25 Level (140 Days)")
hline(price=adaptiveCCIEntryLevel50_160Days, color=color.black, title="CCI +50 Level (160 Days)")
hline(price=adaptiveCCIEntryLevel70_180Days, color=color.gray, title="CCI +70 Level (180 Days)")