
Es handelt sich um eine selbst angepasste Trendverfolgungsstrategie, die auf Schwankungen basiert und die Williams Percent Range kombiniert. Die Strategie passt die Sensitivität der Trendbeurteilung an, indem sie den Bereich der Preisschwankungen und ein benutzerdefiniertes Zähler berechnet, um eine bessere Anpassung an verschiedene Marktumgebungen zu erreichen.
Die Strategie berechnet zunächst die Preisspanne (Range) und ihren Moving Average (AvgRange) innerhalb einer Periode. Zwei Zähler (TrueCount und TrueCount2) werden eingesetzt, um die Häufigkeit von signifikanten Schwankungen zu erfassen, indem sie die Beziehung zwischen den Preisschwankungen in Echtzeit und der durchschnittlichen Schwankungspanne vergleicht. Diese Zähler werden verwendet, um die Berechnungsparameter des Williams-Index dynamisch anzupassen, so dass die Strategie ihre Sensitivität automatisch an die Marktschwankungen anpassen kann.
Es handelt sich um eine innovative Strategie, die eine Kombination aus Volatilitätsanalyse und Trendverfolgung darstellt und die Stabilität und Zuverlässigkeit der Strategie durch Anpassungsmechanismen erhöht. Obwohl einige inhärente Risiken bestehen, ist die Strategie durch die Implementierung von vernünftigen Parameter-Sets und Optimierungsrichtungen in der Lage, eine stabile Leistung in verschiedenen Marktumgebungen zu halten.
/*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")