
Ini adalah strategi pelacakan tren adaptif berdasarkan volatilitas dan kombinasi Williams Percent Range. Strategi ini menyesuaikan sensitivitas penilaian tren dengan menghitung rentang fluktuasi harga dan penghitung khusus, sehingga dapat beradaptasi dengan lebih baik dalam berbagai lingkungan pasar. Inti dari strategi ini adalah menyesuaikan parameter Williams secara dinamis dengan mengamati amplitudo fluktuasi harga, sehingga dapat menangkap titik-titik pergeseran tren pasar dengan lebih akurat.
Strategi pertama kali menghitung rentang pergerakan harga dalam satu periode (Range) dan rata-rata bergerak (AvgRange). Dengan membandingkan hubungan perubahan harga secara real-time dengan rentang pergerakan rata-rata, didirikan dua counter (TrueCount dan TrueCount2) untuk mencatat frekuensi terjadinya fluktuasi yang signifikan.
Ini adalah strategi inovatif yang menggabungkan analisis volatilitas dan pelacakan tren, meningkatkan stabilitas dan keandalan strategi melalui mekanisme adaptasi. Meskipun ada beberapa risiko yang melekat, strategi ini diharapkan untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar dengan pengaturan parameter yang masuk akal dan penerapan arah optimasi.
/*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")