Se trata de una estrategia de seguimiento de tendencias adaptativa basada en la volatilidad combinada con el Williams Percent Range. La estrategia ajusta la sensibilidad de los juicios de tendencias mediante el cálculo del rango de fluctuación de los precios y un contador personalizado, lo que permite una mejor adaptabilidad en diferentes entornos de mercado. El núcleo de la estrategia es ajustar dinámicamente los parámetros del índice Williams observando la amplitud de las fluctuaciones de los precios para capturar con mayor precisión los puntos de cambio de las tendencias del mercado.
La estrategia primero calcula el rango de fluctuación de los precios (Range) y su promedio móvil (AvgRange) en un ciclo. Se establecen dos contadores (TrueCount y TrueCount2) para registrar la frecuencia de ocurrencia de fluctuaciones significativas mediante la comparación de la relación entre el cambio de precios en tiempo real y el rango de fluctuación promedio. Estos contadores se utilizan para ajustar dinámicamente los parámetros de cálculo del índice de William, lo que permite a la estrategia ajustar automáticamente su sensibilidad según el estado de fluctuación del mercado.
Se trata de una estrategia innovadora que combina el análisis de la volatilidad y el seguimiento de las tendencias, lo que mejora la estabilidad y la fiabilidad de la estrategia a través de un mecanismo de adaptación. Si bien existen algunos riesgos inherentes, la estrategia se espera que mantenga un rendimiento estable en una variedad de entornos de mercado a través de la implementación de una configuración de parámetros razonable y una dirección de optimización. El diseño del marco de la estrategia permite una mayor expansión y optimización, con un buen potencial de desarrollo.
/*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")