Ý tưởng cốt lõi của chiến lược này là sử dụng chỉ số CCI để xác định hướng xu hướng thị trường và sử dụng chỉ số EMA để làm mịn CCI để thực hiện xu hướng sau khi giao dịch. Đi dài khi CCI vượt qua điểm mua và đi ngắn khi CCI vượt qua dưới điểm bán để theo xu hướng thị trường.
Tính toán chỉ số CCI. Chỉ số CCI đánh giá liệu giá cổ phiếu hiện tại có bị mua quá mức hay bán quá mức dựa trên mức độ lệch so với đường trung bình động 20 ngày. Công thức là: (giá điển hình - SMA 20D) / (0.015 * lệch chuẩn TP 20D).
Làm mịn chỉ số CCI bằng EMA để có được đường cong CCI-EMA, làm giảm biến động của CCI và làm cho tín hiệu rõ ràng hơn.
Thiết lập các điểm mua và bán cho CCI. Đi dài khi CCI-EMA vượt qua điểm mua, và đi ngắn khi CCI-EMA vượt qua dưới điểm bán.
Giữ vị trí cho đến khi CCI-EMA chạm vào điểm mua hoặc bán một lần nữa để đóng vị trí.
Sử dụng CCI để xác định hướng xu hướng thị trường kết hợp với EMA để lọc các tín hiệu sai có thể theo dõi hiệu quả xu hướng thị trường.
CCI nhạy cảm với sự bất thường về giá và có thể nhanh chóng bắt được sự đảo ngược xu hướng. EMA làm giảm các tín hiệu sai. Được sử dụng cùng nhau, chúng có thể nắm bắt các cơ hội ở đầu xu hướng.
Các chiến lược theo xu hướng giảm thiểu giao dịch, giảm chi phí giao dịch và trượt.
Kết quả backtest là tốt, cho chiến lược một số khả năng thực tế.
CCI có thể quá nhạy cảm với đường cong và EMA không thể lọc hoàn toàn tất cả các tín hiệu sai, một số tín hiệu sai vẫn còn.
Các chiến lược theo xu hướng thuần túy có xu hướng thua lỗ khi xu hướng củng cố hoặc đảo ngược.
Hệ thống giao dịch cơ học không thể điều chỉnh các thông số linh hoạt dựa trên thị trường.
Dữ liệu backtest hạn chế không thể phản ánh đầy đủ hiệu suất trực tiếp.
Tối ưu hóa các thông số CCI bằng cách thử nghiệm các khoảng thời gian dài khác nhau.
Tối ưu hóa các thông số EMA để tìm thời gian EMA tối ưu.
Kiểm tra các kết hợp điểm mua / bán khác nhau để tìm các thông số tối ưu.
Bao gồm các chỉ số khác để xác định sự đảo ngược xu hướng và đặt dừng lỗ.
Thêm tối ưu hóa tham số tự động để tìm các tham số tối ưu cho các sản phẩm khác nhau.
Nói chung đây là một xu hướng tương đối đơn giản sau chiến lược giao dịch. Nó sử dụng CCI để xác định hướng xu hướng và nhạy cảm với sự thay đổi giá, kết hợp với bộ lọc EMA để tạo ra tín hiệu. Chiến lược có một số lợi thế nhưng cũng có rủi ro cần lưu ý. Thông qua tối ưu hóa tham số và sử dụng các chỉ số khác, sự ổn định và hiệu suất trực tiếp có thể được cải thiện hơn nữa.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("CCI with EMA Strategy", overlay=false, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.07) length = input(20, minval=1) src = input(close, title="Source") cciSellPoint = input(0, title = 'CCI Sell Point', type = input.integer) cciBuyPoint = input(0, title = 'CCI Buy Buy Point', type = input.integer) lengthcci = input(12,"length cci ema", minval=1) ma = sma(src, length) cci = (src - ma) / (0.015 * dev(src, length)) cciema=ema(cci,lengthcci) plot(cci, "CCI", color=#996A15) plot(cciSellPoint, title = 'CCI Sell Point', color = color.red, linewidth = 1, style = plot.style_cross, transp = 35) plot(cciBuyPoint, title = 'CCI Buy Point', color = color.green, linewidth = 1, style = plot.style_cross, transp = 35) plot(cciema, title = 'CCI EMA', color = color.green, linewidth = 1, transp = 35) band1 = hline(100, "Upper Band", color=#C0C0C0, linestyle=hline.style_dashed) band0 = hline(-100, "Lower Band", color=#C0C0C0, linestyle=hline.style_dashed) fill(band1, band0, color=#9C6E1B, title="Background") startLongTrade= cciema >cciBuyPoint startShortTrade= cciema <cciSellPoint //exitLong = cciema <cciSellPoint //exitShort = cciema >cciBuyPoint strategy.entry("long",strategy.long, when = startLongTrade ) //strategy.close( "long", when=exitLong) strategy.entry("short",strategy.short,when=startShortTrade ) //strategy.close("short", when=exitShort)