Đây là một chiến lược theo xu hướng thích nghi kết hợp giữa biến động và chỉ số Williams Percent Range. Chiến lược điều chỉnh độ nhạy xác định xu hướng bằng cách tính phạm vi giá và bộ đếm tùy chỉnh, đạt được khả năng thích nghi tốt hơn trong các điều kiện thị trường khác nhau. Cơ chế cốt lõi liên quan đến việc điều chỉnh năng động các tham số chỉ số Williams dựa trên biến động giá để nắm bắt chính xác hơn các điểm chuyển đổi xu hướng thị trường.
Chiến lược bắt đầu bằng cách tính range giá và moving average (AvgRange) trong một khoảng thời gian. Bằng cách so sánh thay đổi giá thời gian thực với range biến động trung bình, nó thiết lập hai bộ đếm (TrueCount và TrueCount2) để ghi lại tần suất biến động đáng kể. Các bộ đếm này được sử dụng để điều chỉnh động các thông số tính toán chỉ số Williams, cho phép chiến lược tự động điều chỉnh độ nhạy của nó dựa trên điều kiện biến động thị trường. Các tín hiệu mua hoặc bán được tạo ra khi các giá trị chỉ số Williams được điều chỉnh vượt qua ngưỡng đã đặt trước.
Chiến lược sáng tạo này kết hợp phân tích biến động và theo dõi xu hướng, cải thiện tính ổn định và độ tin cậy của chiến lược thông qua các cơ chế thích nghi. Trong khi rủi ro vốn có tồn tại, chiến lược có thể duy trì hiệu suất ổn định trong các điều kiện thị trường khác nhau thông qua cài đặt tham số thích hợp và thực hiện tối ưu hóa. Khung chiến lược cho phép mở rộng và tối ưu hóa hơn nữa, cho thấy tiềm năng phát triển tốt.
/*backtest start: 2024-10-28 00:00:00 end: 2024-11-27 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("ASCTrend", shorttitle="ASCTrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) eternalfg = input(false, title="eternal 確定") eternal = eternalfg ? 1 : 0 ASClength = input.int(title="ASC Length", minval=4, defval=10) RISK = input.int(title="RISK", minval=0, defval=3) // Custom sum function customSum(source, length) => sum = 0.0 for i = 0 to length - 1 sum := sum + source[i] sum x1 = 67 + RISK x2 = 33 - RISK Range = ta.highest(ASClength) - ta.lowest(ASClength) AvgRange = ta.sma(Range, ASClength) CountFg = math.abs(open - close) >= AvgRange * 2.0 ? 1 : 0 TrueCount = customSum(CountFg, ASClength) CountFg2 = math.abs(close[3] - close) >= AvgRange * 4.6 ? 1 : 0 TrueCount2 = customSum(CountFg2, ASClength - 3) wpr3RR = ta.wpr(3 + RISK + RISK) wpr3 = ta.wpr(3) wpr4 = ta.wpr(4) WprAbs = 100 + (TrueCount2 > 0 ? wpr4 : TrueCount > 0 ? wpr3 : wpr3RR) ASC_Trend = 0 ASC_Trend := WprAbs[eternal] < x2[eternal] ? -1 : WprAbs[eternal] > x1[eternal] ? 1 : ASC_Trend[1] if (ta.crossover(ASC_Trend, 0)) strategy.entry("Long", strategy.long) if (ta.crossunder(ASC_Trend, 0)) strategy.entry("Short", strategy.short) plotshape(ta.crossover(ASC_Trend, 0), location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="B", textcolor=color.white) plotshape(ta.crossunder(ASC_Trend, 0), location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="S", textcolor=color.white) alertcondition(ta.crossover(ASC_Trend, 0), title="ASC_Trend UP", message="ASC_Trend UP") alertcondition(ta.crossunder(ASC_Trend, 0), title="ASC_Trend Down", message="ASC_Trend Down")