
これは,波動率とウィリアムズパーセントレンジ (ウィリアムズ指数) を組み合わせた自己適応トレンド追跡戦略である.この戦略は,価格変動の範囲とカスタマイズされたカウンターを計算してトレンド判断の感度を調整することで,異なる市場環境でより良い適応性を実現する.戦略の核心は,価格変動の幅を観察して,ウィリアムズ指数のパラメータを動的に調整することで,市場トレンドの転換点をより正確に捕捉することです.
戦略は,まず,周期内の価格変動の範囲 (Range) とその移動平均 (AvgRange) を計算する.リアルタイムでの価格変動と平均変動の範囲の関係を比較して,二つのカウンター (TrueCountとTrueCount2) を設置し,顕著な変動の発生頻度を記録する.これらのカウンターは,ウィリアム指数の計算パラメータを動的に調整するために使用され,市場変動の状態に応じて戦略が自動的にその感受性を調整できるようにする.調整後のウィリアム指数の値が予測された上下値を突破すると,戦略は,相応の買入または売却信号を生成する.
これは,波動率分析とトレンド追跡を組み合わせた革新的な戦略であり,自適應メカニズムによって戦略の安定性と信頼性を高めています. いくつかの固有のリスクがあるものの,合理的なパラメータ設定と最適化方向の実施により,この戦略は,さまざまな市場環境で安定したパフォーマンスを維持すると見込まれています.
/*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")