
Il s’agit d’une stratégie de suivi de tendance auto-adaptative basée sur la volatilité combinée à la Williams Percent Range (WPI). La stratégie ajuste la sensibilité des jugements de tendance en calculant la gamme des fluctuations des prix et des compteurs personnalisés, ce qui permet une meilleure adaptabilité dans différents environnements de marché. Le cœur de la stratégie est d’ajuster dynamiquement les paramètres de l’indicateur Williams en observant l’ampleur des fluctuations des prix, afin de capturer plus précisément les points de conversion des tendances du marché.
La stratégie calcule d’abord la fourchette de fluctuation des prix (Range) et sa moyenne mobile (AvgRange) au cours d’une période. Elle établit deux compteurs (TrueCount et TrueCount2) pour enregistrer la fréquence des fluctuations significatives en comparant les variations de prix en temps réel avec la fourchette de fluctuation moyenne. Ces compteurs sont utilisés pour ajuster dynamiquement les paramètres de calcul de l’indicateur William, ce qui permet à la stratégie d’ajuster automatiquement sa sensibilité en fonction de l’état de fluctuation du marché.
Il s’agit d’une stratégie innovante combinant l’analyse de la volatilité et le suivi des tendances, qui améliore la stabilité et la fiabilité de la stratégie grâce à un mécanisme d’adaptation. Bien qu’il existe des risques inhérents, la stratégie est susceptible de maintenir une performance stable dans une variété d’environnements de marché grâce à une mise en œuvre de paramètres raisonnables et de directions d’optimisation. La conception du cadre de la stratégie permet une expansion et une optimisation supplémentaires et présente un bon potentiel de développement.
/*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")