Ini adalah strategi trend mengikuti adaptif yang menggabungkan turun naik dan penunjuk Julat Peratusan Williams. Strategi menyesuaikan sensitiviti penentuan trend dengan mengira julat harga dan kaunter tersuai, mencapai fleksibiliti yang lebih baik dalam keadaan pasaran yang berbeza. Mekanisme teras melibatkan penyesuaian dinamik parameter indikator Williams berdasarkan turun naik harga untuk menangkap dengan lebih tepat titik peralihan trend pasaran.
Strategi ini bermula dengan mengira julat harga dan purata bergerak (AvgRange) dalam tempoh tertentu. Dengan membandingkan perubahan harga masa nyata dengan julat turun naik purata, ia menubuhkan dua kaunter (TrueCount dan TrueCount2) untuk merekod frekuensi turun naik yang signifikan. Kaunter ini digunakan untuk menyesuaikan parameter pengiraan penunjuk Williams secara dinamik, yang membolehkan strategi menyesuaikan sensitiviti secara automatik berdasarkan keadaan turun naik pasaran. Isyarat beli atau jual dihasilkan apabila nilai penunjuk Williams yang disesuaikan memecahkan ambang yang telah ditetapkan.
Strategi inovatif ini menggabungkan analisis turun naik dan mengikuti trend, meningkatkan kestabilan strategi dan kebolehpercayaan melalui mekanisme penyesuaian. Walaupun terdapat risiko yang melekat, strategi dapat mengekalkan prestasi yang stabil di pelbagai keadaan pasaran melalui tetapan parameter yang betul dan pelaksanaan pengoptimuman. Kerangka strategi membolehkan pengembangan dan pengoptimuman lebih lanjut, menunjukkan potensi pembangunan yang baik.
/*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")