
이 전략은 세 가지 기술 지표: 시세 지표 ((CCI), 방향 운동 지표 ((DMI) 및 이동 평균 집약 지표 ((MACD) 를 결합하여 시장의 과매도 과매도 상태를 판단하고 트렌드 방향을 판단합니다. CCI가 과매도 영역에서 상향으로 돌파되고 DI+가 DI-보다 크고 MACD가 신호선보다 크면 구매 신호가 발생하며 CCI가 과매도 영역에서 하향으로 돌파되고 DI-가 DI+보다 크고 MACD가 신호선보다 작으면 판매 신호가 발생합니다.
이 전략은 CCI, DMI, MACD의 세 가지 기술 지표를 결합하여 시장의 과매매 상태, 트렌드 방향 및 트렌드 강도를 종합적으로 판단하여 매매 신호를 생성합니다. 전략 아이디어는 명확하고 구현하기 쉽지만 실제 응용에서는 전략 매개 변수를 최적화하고 거래 빈도 및 위험을 제어하여 전략의 안정성과 수익성을 높이기 위해 주의해야합니다.
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("CCI, DMI, and MACD Strategy", overlay=true)
// Define inputs
cci_length = input(14, title="CCI Length")
overbought_level = input(100, title="Overbought Level")
oversold_level = input(-100, title="Oversold Level")
// Calculate CCI
cci_value = ta.cci(close, cci_length)
// Calculate DMI
[di_plus, di_minus, _] = ta.dmi(14, 14)
// Calculate MACD
[macd_line, signal_line, _] = ta.macd(close, 24, 52, 9)
// Define buy and sell conditions
buy_signal = ta.crossover(cci_value, oversold_level) and di_plus > di_minus and macd_line > signal_line // CCI crosses above -100, Di+ > Di-, and MACD > Signal
sell_signal = ta.crossunder(cci_value, overbought_level) and di_minus > di_plus and macd_line < signal_line // CCI crosses below 100, Di- > Di+, and MACD < Signal
// Define exit conditions
buy_exit_signal = ta.crossover(cci_value, overbought_level) // CCI crosses above 100
sell_exit_signal = ta.crossunder(cci_value, oversold_level) // CCI crosses below -100
// Execute trades based on conditions
strategy.entry("Buy", strategy.long, when=buy_signal)
strategy.close("Buy", when=buy_exit_signal)
strategy.entry("Sell", strategy.short, when=sell_signal)
strategy.close("Sell", when=sell_exit_signal)
// Plot CCI
plot(cci_value, title="CCI", color=color.blue)
// Plot DMI
plot(di_plus, title="DI+", color=color.green)
plot(di_minus, title="DI-", color=color.red)
// Plot MACD and Signal lines
plot(macd_line, title="MACD", color=color.orange)
plot(signal_line, title="Signal", color=color.purple)
// Plot overbought and oversold levels
hline(overbought_level, "Overbought", color=color.red)
hline(oversold_level, "Oversold", color=color.green)