
この戦略の核心思想は,ハル平均線と実際の波幅 ((ATR) を組み合わせて市場のトレンド方向を識別し,トレンド方向が確認された後に入場することである.具体的には,一定の周期内のハル平均線と前期のハル平均線の間の差値を計算し,差値が上昇すると看板傾向と判断し,差値が低下すると看板傾向と判断する.同時に,ATR指標の指標判断を組み合わせて,トレンド方向が確認されたと同時に波幅が拡大するときに入場を選択する.
この戦略は主にハル平均線とATRの2種類の指標に基づいています.
ハル平均線は,アメリカの先物取引業者アラン・ハル (Alan Hull) が開発したトレンド追跡型の指標である.ハル平均線は,移動平均線に似ていますが,ハル平均線は,価格変化のトレンドをより迅速に捉えるために,より高い感度を持っています.戦略には,調整可能なパラメータであるhullLengthが,ハル平均線の周期長さを制御するために設定されており,現在の周期と前の周期のハル平均線の間の差値を計算して,現在の価格トレンドの方向を判断します.
ATRは,Average True Range,つまり実際の波幅である.それは,毎日の価格の変動の幅を反映している.波動が大きくなったら,実際の波幅は上昇し,波動が小さくなったら,実際の波幅は低下する.戦略は,atrLength,atrSmoothingなどのパラメータを設定し,ATRの計算方法を制御する.そして,入場指標の1つとしてグラフに描画する.
具体的には,戦略の論理は次のとおりです.
この戦略の利点は以下の通りです
この戦略にはいくつかのリスクがあります.
対応方法:
この戦略の最適化には,以下のような部分から多くの余地があります.
この戦略は,ハル平均線のトレンド追跡能力とATRの熱指数判断能力を統合して,トレンドを確認しながら,波動が大きい積極的な時間点の入場を選択し,いくつかの無効な信号をフィルターすることができます.指標パラメータの最適化とリスク管理手段の使用は,戦略の効果をさらに強化することができます.全体的に,この戦略は,トレンド追跡と熱判断の複数の要素を組み合わせて,パラメータの調整と最適化に応じて,より良い効果を得ることができます.
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Hull cross and ATR
strategy("Hull cross and ATR", shorttitle="H&ATR", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0)
keh=input(title="Hull Length",defval=50)
length = input(title="ATR Length", defval=50, minval=1)
smoothing = input(title="ATR Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
p=input(ohlc4,title="Price data")
n2ma=2*wma(p,round(keh/2))
nma=wma(p,keh)
diff=n2ma-nma
sqn=round(sqrt(keh))
n2ma1=2*wma(p[1],round(keh/2))
nma1=wma(p[1],keh)
diff1=n2ma1-nma1
sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
ma_function(source, length) =>
if smoothing == "RMA"
rma(p, length)
else
if smoothing == "SMA"
sma(p, length)
else
if smoothing == "EMA"
ema(p, length)
else
wma(p, length)
plot(ma_function(tr(true), length), title = "ATR", color=black, transp=50)
closelong = n1<n2
if (closelong)
strategy.close("buy")
closeshort = n1>n2
if (closeshort)
strategy.close("sell")
if (ma_function(tr(true), length)<p and p>p[length] and n1>n2)
strategy.entry("buy", strategy.long, comment="BUY")
if (ma_function(tr(true), length)>p and p<p[length] and n1<n2)
strategy.entry("sell", strategy.short, comment="SELL")