ハル移動平均オシレーター取引戦略
概要
この戦略は,ハル移動平均指数に基づくショートライン取引戦略である. この戦略は,ハル移動平均の金叉死叉を活用して,買入シグナルを形成し,トレンドフォロー戦略に属している.
戦略原則
この戦略は主にハル移動平均指数に基づいている.ハル移動平均は2つの移動平均で構成されている.まずは価格の中間移動平均nmaを計算し,周期はhullperiodである.それから価格の急速移動平均n2maを計算し,周期はnmaの半分である.n2maの上を通るときに買入信号を発し,nma下を通るときに売り信号を発する.
策略は,偽信号の一部をフィルターするために,ハル線 ((Hull_Line) も導入した.ハル線は,nmaとn2maの間の差値の計算による線形回帰の結果である.価格がハル線から離れる場合,策略は,買付信号をスキップする.
具体的には,戦略は以下の通りです.
-
nma,周期hullperiodを計算する
-
n2maを計算し,周期はnma周期の半分である
-
n2maとnmaの差を計算する
-
diffをsqrt ((hullperiod) とする周期の移動平均で,Hull線Hull_Lineが得られる
-
価格がハルラインを横切ったときに買取信号を発信します.
-
価格がハルラインを下回ったときにセールシグナルを発信する
-
価格がハルラインから離れている場合は,信号をスキップします.
-
特定の比率のポジションで入場し,オフのストップ方式でストップ
優位分析
この戦略の利点は以下の通りです.
-
Hullの移動平均は,トレンドを素早く捉え,
-
偽信号をフィルターするハル線を用いて信号の質を向上させる
-
撤収と損失の比率は良好で,短線操作に適しています.
-
パラメータの調整が柔軟で,異なる市場環境に対応できる
-
逆転止損により,リスクを制御する.
-
季節性と組み合わせて,特定の期間のシステムリスクを回避する
リスク分析
この戦略にはいくつかのリスクがあります.
-
トレンドトラッキングは24時間取引にはなりません.
-
市場が逆転すると,大きな損失が生じる.
-
移動平均は遅れており,ターニングポイントを把握できていません.
-
短線取引が多く,取引費用が高くなる
-
パラメータ設定が不適切で,震動市場の収益が低下する可能性があります.
上記のリスクに対して,以下のような対策を講じます.
-
マチンゲルストップ戦略による単一損失の管理
-
パラメータを最適化し,異なる市場環境のパラメータの強さをテストする
-
傾向を判断する指標と組み合わせて,逆転の追尾を避ける
-
持仓時間を増やし,取引頻度を減らす
最適化の方向
この戦略は,以下の点で最適化できます.
-
動量指標を組み合わせて,トレンドの起点を特定し,より良い配列の入場
-
傾向の方向と強さを判断する機械学習モデルを追加
-
適応パラメータ設定を使用して,リアルタイム市場に応じてパラメータを調整する
-
複数の時間周期を配置するHullシステム,異なる周期を配置する異なるポジション
-
取引量エネルギー指標と組み合わせて,不足する偽の突破を回避する
-
波動率に基づくポジション管理モジュールを追加し,波動率に応じてポジションを動的に調整します.
要約する
ハル移動平均振動取引戦略は,全体として非常に実用的なショートライン追跡戦略である.ハル移動平均システムを使用してトレンドの方向を判断し,順位を達成する目的である.単一の移動平均システムと比較して,より高い信号品質とパラメーターの柔軟性がある.この戦略の優点は,トレンドの転換を迅速に捉え,利回りが低いことにある.この戦略の劣点は,トレンドの逆転に対応できないことにある.
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Hull Moving Average Swing Trader by SEASIDE420
strategy("Hull Moving Average Swing Trader", shorttitle="HMA_Swing_Trader", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0)
hullperiod = input(title="HullMA Period", type=input.integer, defval=210, minval=1)- 1
