この戦略の主な考え方は,ハル移動平均値と平均真の範囲 (ATR) を組み合わせて市場のトレンド方向を特定し,トレンド方向が確認された後にポジションを入力することです.具体的には,特定の期間のハル移動平均値と前期間の差を計算します.差が上昇すると上昇傾向を示します.差が減少すると下落傾向を示します.同時に,ATRインデックスは振幅を決定するために使用されます.トレンド方向が確認され,振幅が拡大し続けるとポジションを入力します.
この戦略は主に2種類の指標をベースにしています.Hull移動平均値とATRです.
ハル移動平均は,アメリカの先物トレーダーアラン・ハルによって開発されたトレンドフォローする指標である.ハル移動平均は,移動平均と同様に,より高い感度を持ち,価格の変化とトレンドをより早く把握することができる.この戦略は,ハル移動平均の期間を制御するために調整可能なパラメータ hullLength を設定する.現在の期間のハルMAと前の期間の違いを計算することによって,現在の価格傾向方向を決定する.
ATRは,平均の真の範囲を表します. 日々の価格変動の幅を反映しています. 不安定性が増加すると,ATRは上昇します. 不安定性が減少すると,ATRは下がります. 戦略はATR計算を制御するためにatrLengthとatrSmoothingのようなパラメータを設定します. そしてATRはエントリのための1つの参照としてチャートにプロットされています.
具体的には 戦略の論理は
この戦略の利点は
この戦略のリスクは
解決策:
改善の余地があります
この戦略は,ハルMAのトレンドフォロー能力と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")