Chiến lược này dựa trên chỉ số CCI để thực hiện giao dịch đảo ngược. Nó sẽ thực hiện giao dịch đảo ngược khi chỉ số CCI xuất hiện khu vực mua quá bán. Nói chung, chiến lược này sử dụng đặc điểm mua quá bán của chỉ số CCI để nắm bắt cơ hội biến đổi giá.
Đầu tiên, chiến lược này dựa trên chỉ số CCI. Công thức tính toán của chỉ số CCI là:
CCI = (Typical Price - Simple Moving Average) / (0.015 * chênh lệch trung bình)
Trong đó, Giá điển hình = (giá cao nhất + giá thấp nhất + giá đóng cửa) / 3 Simple Moving Average = Trung bình di chuyển của giá điển hình trong N ngày qua Điểm chênh lệch trung bình = trung bình của số bình phương của chênh lệch giá điển hình trong N ngày qua
Chiến lược này sử dụng chỉ số CCI có chiều dài 11 và đặt 150 là khu vực bán tháo, 150 là khu vực mua tháo.
Khi mỗi dây K đóng lại, chỉ số CCI có chiều dài 11 sẽ được kiểm tra. Nếu CCI vượt quá 150, sẽ phát ra tín hiệu nhiều; Nếu CCI vượt quá 150, sẽ phát ra tín hiệu trống.
Sau khi nhận được tín hiệu, mở một vị trí với giá thị trường. Và thiết lập 1% dừng, 0.5% dừng.
Chiến lược đảo ngược 4 giờ CCI nói chung là một chiến lược đơn giản để sử dụng chỉ số CCI để giao dịch đảo ngược. Nó có logic chiến lược rõ ràng và dễ thực hiện. Nhưng cũng có tín hiệu CCI không ổn định, dừng lỗ không đủ linh hoạt và những nhược điểm khác.
/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("4H CCI Strategy", overlay=true)
length = input( 11 )
overSold = input( -150 )
overBought = input( +150 )
price1 = high
price2 = low
ucci = cci(price1, length)
dcci = cci(price2, length)
vcci = cci(ohlc4, 11)
resCustom = input(title="Timeframe", defval="15")
Length = input(16, minval=1)
xPrice = request.security(syminfo.tickerid, resCustom, hlc3)
xvnoise = abs(xPrice - xPrice[1])
nfastend = 0.666
nslowend = 0.0645
nsignal = abs(xPrice - xPrice[Length])
nnoise = sum(xvnoise, Length)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
nAMA = nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))
basis1 = nAMA
slope = change(basis1,1)
if (not na(vcci))
if (crossover(dcci, overSold))
strategy.entry("CCILE", strategy.long, comment="CCILE")
strategy.exit("exit", "CCILE", profit = 0.01, loss = 0.005)
if (crossunder(ucci, overBought))
strategy.entry("CCISE", strategy.short, comment="CCISE")
strategy.exit("exit", "CCISE", profit = 0.01, loss = 0.005)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)