Ini adalah strategi mengikuti tren adaptif yang menggabungkan indikator volatilitas dan Williams Percent Range. Strategi ini menyesuaikan sensitivitas penentuan tren dengan menghitung rentang harga dan penghitung khusus, mencapai kemampuan beradaptasi yang lebih baik dalam kondisi pasar yang berbeda. Mekanisme inti melibatkan penyesuaian dinamis parameter indikator Williams berdasarkan volatilitas harga untuk lebih akurat menangkap titik transisi tren pasar.
Strategi ini dimulai dengan menghitung kisaran harga dan rata-rata bergerak (AvgRange) dalam suatu periode. Dengan membandingkan perubahan harga real-time dengan kisaran volatilitas rata-rata, ia menetapkan dua penghitung (TrueCount dan TrueCount2) untuk mencatat frekuensi volatilitas yang signifikan. Penghitung ini digunakan untuk menyesuaikan secara dinamis parameter perhitungan indikator Williams, yang memungkinkan strategi untuk menyesuaikan sensitivitasnya secara otomatis berdasarkan kondisi volatilitas pasar. Sinyal beli atau jual dihasilkan ketika nilai indikator Williams yang disesuaikan melewati ambang batas yang telah ditetapkan.
Strategi inovatif ini menggabungkan analisis volatilitas dan mengikuti tren, meningkatkan stabilitas dan keandalan strategi melalui mekanisme adaptif. Sementara risiko yang melekat ada, strategi dapat mempertahankan kinerja yang stabil di berbagai kondisi pasar melalui pengaturan parameter yang tepat dan implementasi optimasi. Kerangka strategi memungkinkan ekspansi dan optimasi lebih lanjut, menunjukkan potensi pengembangan 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")