この戦略は,トレンドフォロー戦略に属する,アラン・ハルによって発明されたハル移動平均指標に基づいています.ハルMAは,移動平均値の遅れを軽減し,価格変化により迅速に対応できます.この戦略は,トレンド方向を決定するためにハルMAを使用し,取引信号を生成するための追加のフィルターを使用します.
短期間および長期間のハルMAsを計算します. 特定の貿易方向のための短い期間,全体的な傾向のための長い期間.
短期間Hull MAsが交差すると,トレンド逆転を決定します.長期間トレンド方向でフィルターします.
ハルMMA条件を通じた価格ブレイクを追加して,成功したブレイクを確保します.
価格変動率フィルターを追加して,望ましくないブレイクアウトを回避する.
ストップ・ロスを設定し リスクをコントロールするために 利益を取ります
単純な移動平均値と比較して,この戦略の利点は以下の通りである.
Hull MAは価格変動に迅速に対応し, 傾向転換を迅速に把握できる.
ダブル・ハルMMA構造は,長期と短期間のトレンドを決定することができます.
価格ブレイクと変動率フィルターは,偽ブレイクを避けるのに役立ちます.
ダイナミックストップ・ロストと 利益の引き継ぎ 利益のロックとリスクの制御
この戦略のリスク:
パラメータの設定が正しくない場合 価格トレンドの転換が見逃される可能性があります
誤った全体的なトレンド判断は,逆トレンド取引を引き起こす可能性があります.
ストップロスの設定が幅が大きすぎると大きな損失が生じます.
取引が頻繁すぎると 取引コストとリスクが増加します
効率化には以下の要素が挙げられます.
感度とスムーズさをバランスさせるため Hull MA 期間を最適化する.
入口と出口パラメータを最適化して 最適値を見つけます
適応性を向上させるため,異なる機器でパラメータの強さをテストする.
差異リスクを回避するために,ボリュームを組み込む.
安定性を高める条件を追加します
全体的に見ると,この戦略は,トレンドをタイムリーにフォローするハル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)