ハル移動平均に基づくトレンドフォロー戦略


作成日: 2023-09-19 16:40:00 最終変更日: 2023-09-19 16:40:00
コピー: 1 クリック数: 638
1
フォロー
1617
フォロワー

概要

この策略は,アラン・ハルによって提出されたハル移動平均指標に基づいています.これはトレンド追跡策略の1つである.この指標は,移動平均の遅延効果を効果的に軽減し,価格の変化により敏感に反応します.この策略は,ハル移動平均を使用してトレンドの方向を判断し,追加のフィルタリング条件と組み合わせて取引信号を発信します.

戦略原則

  1. 短期周期と長期周期の2組のハル移動平均を計算する.短期周期は特定の取引方向を判断し,長期周期は大きなトレンド方向を判断する.

  2. 短周期のHull MA上での穿越時,トレンドの転換が起こる判断. 大トレンド方向のフィルタリングノイズ取引と組み合わせる.

  3. Hull MAの条件を突破して,突破を成功させるために価格を上昇させる.

  4. 価格変動率の条件を追加し,望ましくない突破を回避する.

  5. ストップ・ローズとストップ・コンディションを設定し,リスクをコントロールする.

優位分析

この戦略は,通常の移動平均と比較して以下の利点があります.

  1. Hull MAは価格の変化に迅速に反応し,トレンドの転換を間に合うように捉える.

  2. 二重ハルMA構造は,大小2つの時間次元における傾向を判断することができる.

  3. 価格の突破と変動率条件は,偽の突破を有効にフィルタリングできます.

  4. ダイナミックストップ・ストップ・ストップは,利益をロックし,リスクをコントロールする.

リスク分析

この戦略には以下のリスクもあります.

  1. パラメータを正しく設定しない場合,価格トレンドの逆転を逃す可能性があります.

  2. 大潮の判断の誤りは逆の取引につながるかもしれない.

  3. ストップ・ロスの設定を過大に広げると,大きな損失を招く可能性があります.

  4. 取引の頻度が高くなり,取引コストや滑り場のリスクが増加する.

最適化の方向

ウェブのコンテンツを活用して,

  1. ハルMAサイクルを最適化し,感度と滑らかさをバランスする.

  2. EntryとExitのパラメータを最適化して,最適な値を見つけます.

  3. 異なる品種のパラメータの強さをテストし,戦略の適応性を向上させる.

  4. 結合量能の指標として,偏差から生じるリスクを回避する.

  5. 戦略の安定性を高める条件を追加する.

要約する

この戦略全体として,Hull MAの迅速な対応を活用して,トレンドのタイムリーな追跡を実現し,リスクを制御した前提で,強力な収益性を有する.しかし,パラメータの最適化に注意し,避け難いいくつかのシステミックなリスクを防ぎます.

ストラテジーソースコード
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//SeaSide420
strategy("SS420FX", overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=720, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0)
q=input(title="HullMA Short",defval=14)
z=input(title="HullMA Long",defval=14)
dt = input(defval=0.0010, title="Decision Threshold", type=float, step=0.0001)
SL = input(defval=-50000.00, title="Stop Loss in $", type=float, step=1)
TP = input(defval=100000.00, title="Target Point in $", type=float, step=1)
ot=1
n2ma=2*wma(close,round(q/2))
nma=wma(close,q)
diff=n2ma-nma
sqn=round(sqrt(q))
n2ma1=2*wma(close[1],round(q/2))
nma1=wma(close[1], q)
diff1=n2ma1-nma1
sqn1=round(sqrt(q))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
z2ma=2*wma(close[11],round(z/2))
zma=wma(close[11],z)
ziff=n2ma-nma
zqn=round(sqrt(z))
z2ma1=2*wma(close[12],round(z/2))
zma1=wma(close[12], z)
ziff1=n2ma1-nma1
zqn1=round(sqrt(z))
z1=wma(diff,sqn)
z2=wma(diff1,sqn)
z1e=z1>z2?green:black
z2e=z1>z2?black:red
z3e=z1>z2?green:red
n1e=plot(z1, title="HMA1", color=z1e, linewidth=2, offset=2)
n2e=plot(z2, title="HMA2", color=z2e, linewidth=2, offset=2)
fill(n1e, n2e, color=z3e, transp=80)
confidence=(security(syminfo.tickerid, 'D', close)-security(syminfo.tickerid, 'D', close[1]))/security(syminfo.tickerid, 'D', close[1])
closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP
if (closelong)
    strategy.close("Long")
closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP
if (closeshort)
    strategy.close("Short")
longCondition = n1>n2 and z1>z2 and strategy.opentrades<ot and confidence>dt and close>n1
if (longCondition)
    strategy.entry("Long",strategy.long)
shortCondition = n1<n2 and z1<z2 and strategy.opentrades<ot and confidence<dt and close<n1 
if (shortCondition)
    strategy.entry("Short",strategy.short)