
Chiến lược này dựa trên chỉ số CCI, sử dụng tiêu chuẩn các mục thích ứng động để đánh giá thời gian thay đổi xu hướng, đồng thời sử dụng tracking stop loss để khóa lợi nhuận. Tên chiến lược là Khả năng thích ứng với CCI để bắt được đáy của chiến lược giao dịch hàng hóa.
Chỉ số trung tâm là chỉ số CCI, được sử dụng để xác định khu vực bán tháo để gợi ý cơ hội đảo ngược xu hướng. Ngoài ra, độ rộng của khu vực bán tháo CCI cũng có thể khác nhau tùy thuộc vào các chỉ số khác nhau và môi trường thị trường. Do đó, chiến lược này sử dụng cách nhìn xa trông rộng để xác định vị trí của điểm thấp nhất của CCI trong một khoảng thời gian qua và thiết lập mức mua CCI động. Nếu điểm CCI thấp nhất trong 40 ngày qua lớn hơn -90, thì -90 là mức khu vực bán tháo mới; Nếu trong 50 ngày qua CCI thấp nhất lớn hơn -70, thì -70 là mức khu vực bán tháo mới, do đó.
Cụ thể, mức CCI của tín hiệu mua mặc định là -145. Sau đó đánh giá vị trí điểm thấp nhất của CCI trong các ngày khác nhau như 40 ngày, 50 ngày trước, nếu điểm thấp nhất cao hơn mức mặc định tiếp theo, ví dụ như -90, hãy lấy -90 làm mức nhập mới. Nếu điểm thấp hơn -90, lấy -70 làm mức nhập mới, như vậy.
Ngoài ra, chiến lược này cũng sử dụng các lệnh dừng theo dõi để khóa lợi nhuận, mức dừng sẽ di chuyển theo giá.
Thiết kế động như vậy cho phép thời gian của các mục được tối ưu hóa so với các mục cố định. Theo đuổi tiêu chuẩn mục cao hơn trong thị trường giảm mạnh có thể làm giảm rủi ro; và tiêu chuẩn mục thấp hơn trong thị trường được sắp xếp trong khu vực rung động có thể nắm bắt nhiều cơ hội hơn. Thiết kế như vậy tăng khả năng thích ứng của chiến lược.
CCI cũng là một chỉ số rõ ràng và đáng tin cậy để đánh giá quá mua quá bán, dựa trên cách suy nghĩ của CCI về sự đảo ngược xu hướng. Kết hợp với thiết kế các mục động, lợi thế tổng thể của chiến lược này là đáng kể.
Khi giá tăng nhanh hoặc giảm mạnh, Entries có thể không chính xác. Ngoài ra, các cơ chế thích ứng động của Entries cũng không phù hợp hoàn hảo với môi trường thị trường hiện tại, dẫn đến việc Entries không nhất thiết phải là thời điểm tối ưu nhất. Cuối cùng, thị trường hàng hóa tự nó biến động rất nhiều, ngay cả khi thiết lập lỗ dừng, nhưng thiết lập các tham số cụ thể không đúng lúc cũng có thể gây ra tổn thất lớn.
Các tham số CCI có thể được tối ưu hóa chủ yếu từ các tham số CCI chính nó, thiết lập cấp độ Entrie và tham số dừng lỗ. Các tham số tốt hơn để xác định chính xác đối với các tiêu chuẩn cụ thể có thể nâng cao hiệu quả của chiến lược.
Chiến lược này kết hợp sử dụng các chỉ số CCI để đánh giá quá mua quá bán và thiết kế mức độ thích ứng động của Entries để bắt được xu hướng đột phá. So với các tham số cố định, mức độ Entries động làm tăng đáng kể khả năng thích ứng của chiến lược. Dựa trên mô hình bắt ngược của Entries kết hợp với việc theo dõi dừng lỗ, có thể nắm bắt cơ hội có động lực mạnh hơn và dừng lỗ kịp thời.
/*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)")