
Chiến lược này dựa trên chỉ số CCI, được thiết kế để làm nhiều hơn trong trường hợp bán quá mức và giảm trong trường hợp mua quá mức. Nó cũng có thể sử dụng bộ lọc EMA để kiểm soát giao dịch chỉ theo hướng xu hướng. Chiến lược này cũng cung cấp một cách dừng lỗ dựa trên tỷ lệ phần trăm cố định hoặc phạm vi trung bình thực tế (ATR).
Sử dụng chỉ số CCI để đánh giá xu hướng thị trường
CCI đo động lực bằng cách so sánh giá hiện tại với giá trung bình trong một chu kỳ nhất định
CCI trên 150 là mua quá mức, dưới -100 là bán quá mức
Có thể sử dụng EMA filter
Chỉ làm nhiều hơn khi giá cao hơn EMA, làm trống khi giá thấp hơn EMA
Sử dụng EMA để đánh giá xu hướng và tránh giao dịch ngược xu hướng
Có hai cách để ngăn chặn thiệt hại
Hạn chế lỗ hổng dựa trên tỷ lệ phần trăm cố định: sử dụng tỷ lệ phần trăm cố định của giá nhập để thiết lập Hạn chế lỗ hổng
Đặt lệnh dừng dựa trên ATR: sử dụng số nhân của ATR để đặt lệnh dừng và sau đó tính toán lệnh dừng dựa trên tỷ lệ rủi ro trả lại
Điều kiện nhập học
CCI làm nhiều hơn khi đi qua đường 100.
CCI có khoảng trống khi đi qua đường 150
Nếu EMA được bật, chỉ làm nhiều khi giá cao hơn EMA và làm trống khi giá thấp hơn EMA
Điều kiện thi đấu
Giá chạm ngưỡng dừng lỗ
CCI trở lại khu vực mua bán quá mức
Hình vẽ
Sử dụng CCI để đánh giá tình trạng quá mua quá bán, đây là cách sử dụng cổ điển của chỉ số CCI
EMA tùy chọn đảm bảo chỉ giao dịch theo hướng xu hướng và tránh đảo ngược
Cung cấp hai phương thức dừng lỗ, có thể điều chỉnh các tham số dừng lỗ theo thị trường
Theo chỉ số CCI, một lần nữa vào vùng quá mua quá bán để giảm bớt, có thể khóa lợi nhuận đảo ngược xu hướng
Hình vẽ các tín hiệu CCI nổi bật, dễ đọc
Chiến lược logic rõ ràng, đơn giản, dễ hiểu và tối ưu hóa
Chỉ số CCI bị trễ, có thể bị lật ngược hoặc phát ra tín hiệu sai
Cài đặt tham số EMA không chính xác có thể bỏ lỡ xu hướng hoặc vô hiệu hóa chiến lược
Tỷ lệ phần trăm dừng lỗ khó thích ứng với sự thay đổi của thị trường, đặt các tham số rộng hơn
ATR Stop Stop Stop là nhạy cảm với chu kỳ khoảng thời gian, nên được điều chỉnh thành tham số tối ưu
Rủi ro rút tiền cao hơn, quản lý vị trí nên được điều chỉnh thích hợp
Hiệu quả Các tham số chỉ số nên được đánh giá phù hợp với môi trường thị trường thay đổi
Đánh giá các tham số CCI trong các chu kỳ khác nhau để tìm ra sự kết hợp tốt nhất
Kiểm tra các chu kỳ EMA khác nhau để xác định chu kỳ định hướng phù hợp nhất
Điều chỉnh các tham số dừng lỗ để đạt được tỷ lệ lợi nhuận rủi ro tối ưu
Thêm các điều kiện lọc khác, chẳng hạn như khối lượng giao dịch, để lọc thêm các tín hiệu giả
Xác định hình dạng kết hợp với đường xu hướng hoặc đồ họa để tăng hiệu quả
Tăng các chiến lược quản lý vị trí, chẳng hạn như cố định vị trí, để kiểm soát rủi ro rút lui
Đánh giá toàn diện các dữ liệu môi trường thị trường khác nhau, tham số điều chỉnh động
Chiến lược này sử dụng nguyên tắc mua quá mức cổ điển của chỉ số CCI để mở đầu. Thêm bộ lọc EMA có thể kiểm soát hướng xu hướng. Cung cấp hai cách dừng lỗ để dễ dàng điều chỉnh.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alifer123
//@version=5
// strategy("CCI+EMA Strategy with Percentage or ATR TP/SL [Alifer]", shorttitle = "CCI_EMA_%/ATR_TP/SL", overlay=false,
// initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.045)
length = input(14, "CCI Length")
overbought = input.int(150, step = 10, title = "Overbought")
oversold = input.int(-140, step = 10, title = "Oversold")
src = hlc3
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
// EMA
useEMA = input(true, "Use EMA", tooltip = "Only enters long when price is above the EMA, only enters short when price is below the EMA")
emaLength = input(55, "EMA Length")
var float ema = na
if useEMA
ema := ta.ema(src, emaLength)
// Take Profit and Stop Loss Method
tpSlMethod_percentage = input(true, "Percentage TP/SL", group="TP/SL Method")
tpSlMethod_atr = input(false, "ATR TP/SL", group="TP/SL Method")
// Percentage-based Take Profit and Stop Loss
tp_percentage = input.float(10.0, title="Take Profit (%)", step=0.1, group="TP/SL Method")
sl_percentage = input.float(10.0, title="Stop Loss (%)", step=0.1, group="TP/SL Method")
// ATR-based Take Profit and Stop Loss
atrLength = input(20, title="ATR Length", group="TP/SL Method")
atrMultiplier = input(4, title="ATR SL Multiplier", group="TP/SL Method")
riskRewardRatio = input(2, title="Risk Reward Ratio", group="TP/SL Method")
// Calculate TP/SL levels based on the selected method, or leave them undefined if neither method is selected
longTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 + tp_percentage / 100) : na
longSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 - sl_percentage / 100) : na
shortTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 - tp_percentage / 100) : na
shortSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 + sl_percentage / 100) : na
if tpSlMethod_atr
longSL := strategy.position_avg_price - ta.atr(atrLength) * atrMultiplier
longTP := ((strategy.position_avg_price - longSL) * riskRewardRatio) + strategy.position_avg_price
shortSL := strategy.position_avg_price + ta.atr(atrLength) * atrMultiplier
shortTP := ((strategy.position_avg_price - shortSL) * riskRewardRatio) - strategy.position_avg_price
// Enter long position when CCI crosses below oversold level and price is above EMA
longCondition = ta.crossover(cci, oversold) and (not useEMA or close > ema)
if longCondition
strategy.entry("Buy", strategy.long)
// Enter short position when CCI crosses above overbought level and price is below EMA
shortCondition = ta.crossunder(cci, overbought) and (not useEMA or close < ema)
if shortCondition
strategy.entry("Sell", strategy.short)
// Close long positions with Take Profit or Stop Loss
if strategy.position_size > 0
strategy.exit("Long Exit", "Buy", limit=longTP, stop=longSL)
// Close short positions with Take Profit or Stop Loss
if strategy.position_size < 0
strategy.exit("Short Exit", "Sell", limit=shortTP, stop=shortSL)
// Close positions when CCI crosses back above oversold level in long positions or below overbought level in short positions
if ta.crossover(cci, overbought)
strategy.close("Buy")
if ta.crossunder(cci, oversold)
strategy.close("Sell")
// Plotting
color_c = cci > overbought ? color.red : (cci < oversold ? color.green : color.white)
plot(cci, "CCI", color=color_c)
hline(0, "Middle Band", color=color.new(#787B86, 50))
obband = hline(overbought, "OB Band", color=color.new(#78867a, 50))
osband = hline(oversold, "OS Band", color=color.new(#867878, 50))
fill(obband, osband, color=color.new(#787B86, 90))