Chiến lược này dựa trên chỉ số Commodity Channel Index (CCI) và sử dụng các mức nhập khẩu thích nghi năng động để xác định thời gian đảo ngược xu hướng, trong khi sử dụng lệnh dừng lỗ để khóa lợi nhuận. Tên chiến lược
Chỉ số cốt lõi là CCI, được sử dụng để phát hiện các vùng bán quá mức, do đó gợi ý về cơ hội đảo ngược xu hướng. Ngoài ra, mức độ của các khu vực bán quá mức CCI khác nhau trên các công cụ và môi trường thị trường khác nhau. Do đó, chiến lược này có cách tiếp cận "nhìn xa", kiểm tra các mức CCI thấp nhất trong một số thời gian xem lại nhất định, để thiết lập động mức nhập CCI mua. Nếu CCI thấp nhất trong 40 ngày qua là trên -90, thì -90 trở thành ngưỡng khu vực bán quá mức mới, v.v. Thiết kế thích nghi này cho phép các mức nhập năng động phù hợp với các điều kiện thị trường khác nhau, theo đuổi các mục nhập bảo thủ hơn trong các xu hướng giảm mạnh trong khi các mục nhập tích cực hơn trong các thị trường giới hạn phạm vi.
Đặc biệt, mức tín hiệu mua CCI mặc định là -145. Chiến lược sau đó kiểm tra các chỉ số CCI thấp nhất trong 40 ngày qua, 50 ngày trở lại khác nhau. Nếu CCI thấp nhất nằm trên mức tiếp theo như -90, thì -90 trở thành mức nhập cảnh mới. Và như vậy, mức nhập cảnh có thể chuyển đổi giữa -145 / -90 / -70 / -50 / -4 / 0 / +25 / +50 / +70 một cách năng động. Một tín hiệu nhập cảnh dài được kích hoạt khi CCI giảm xuống dưới mức tương ứng.
Ngoài ra, một lệnh dừng lỗ được sử dụng để khóa lợi nhuận, với mức dừng tăng lên cùng với giá.
So với các mức nhập khẩu cố định, thiết kế năng động như vậy cho phép thời gian nhập khẩu được tối ưu hóa. Theo đuổi các mục nhập bảo thủ hơn trong các xu hướng giảm mạnh làm giảm rủi ro, trong khi các mục nhập thấp hơn trong các thị trường giới hạn phạm vi cho phép nắm bắt nhiều cơ hội hơn. Điều này làm tăng khả năng thích nghi của chiến lược.
CCI chính nó là một chỉ số rõ ràng và đáng tin cậy để xác định mức mua quá mức / bán quá mức. Lý thuyết của việc đánh giá sự đảo ngược xu hướng dựa trên CCI đã được chứng minh. Kết hợp với thiết kế bước vào năng động, lợi thế tổng thể của chiến lược này là đáng kể.
Khả năng tìm ra các điểm đảo ngược xu hướng có một số thuộc tính chậm trễ. Thời gian vào có thể không chính xác trong các đợt tăng giá đột ngột hoặc sụp đổ. Ngoài ra, cơ chế thích nghi có thể không hoàn toàn phù hợp với môi trường thị trường hiện tại, dẫn đến các mục nhập không tối ưu. Cuối cùng, biến động cao trên thị trường hàng hóa có thể gây ra tổn thất lớn nếu các thông số dừng lỗ không được đặt đúng cách.
Chủ yếu là CCI, thiết kế cấp độ đầu tiên và các tham số dừng lỗ có thể được cải thiện.
Chiến lược này kết hợp logic sử dụng CCI để phát hiện các khu vực mua quá mức / bán quá mức và thiết kế cấp nhập khẩu thích nghi năng động để nắm bắt sự đảo ngược xu hướng. So với các thông số cố định, các mức nhập khẩu năng động cải thiện đáng kể khả năng thích nghi. Mô hình nắm bắt đảo ngược nhập khẩu này với stop loss sau có thể nắm bắt các cơ hội với động lực mạnh và cắt giảm lỗ trong thời gian. Với các thông số được cấu hình đúng cách, chiến lược này thể hiện khả năng tồn tại và độ bền. Những cải tiến hơn nữa có thể được thực hiện bằng cách tiếp tục tối ưu hóa các thông số CCI và các quy tắc cấp nhập khẩu để đạt được sự ổn định và lợi nhuận cao hơn.
/*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)")