Hull Moving Average スウィング トレーディング 戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月7日 15:24:31
タグ:

概要

この戦略は,ハル移動平均指標に基づく短期取引戦略である.この戦略は,トレンドフォロー戦略に属する取引信号を生成するために,ハル移動平均線の黄金十字と死十字を使用する.

戦略の論理

この戦略は主にハル移動平均指標に基づいている.ハル移動平均線は2つの移動平均線で構成されている.まずは,ハル周期を持つ価格の中間移動平均線nmaを計算する.その後,nmasの半分の周期を持つ高速移動平均線n2maを計算する.n2maがnmaを超えると,購入信号が生成される.n2maがnmaを下回ると,販売信号が生成される.

いくつかの誤った信号をフィルタリングするために,戦略はまたハルライン (Hull_Line) を導入する.ハルラインは,nma と n2ma の差の線形回帰結果である.価格とハルラインの間に離散があるとき,戦略は取引信号をスキップする.

具体的には,戦略規則は以下のとおりです.

  1. nma を計算し,その期間を hullperiod とする.

  2. nma 期間の半分で n2ma を計算する.

  3. n2ma と nma の差を計算する

  4. Hull_Line を取得します. Hull_Line は,Hull_Line を取得します.

  5. 価格がハルラインを超えると,購入信号が生成されます.

  6. 価格がハルラインを下回ると,売り信号が生成されます.

  7. 価格とハルラインの間の差がある場合,信号をスキップ

  8. ポジションの一定の割合で入力し,出口ストップ損失を採用します

利点分析

この戦略の利点は以下の通りです.

  1. Hull Moving Average をベースに,トレンドを迅速に把握し,トレンドをフォローすることができます.

  2. 偽信号をフィルタリングし,信号品質を改善するためにハルラインを使用

  3. 短期取引に適したリスク・リターン・比率と利用率

  4. 柔軟なパラメータ調整,異なる市場環境に適応可能

  5. 逆転ストップ損失を採用し,時間の損失を停止し,リスクを制御することができます

  6. 特定の期間におけるシステムリスクを避けるために季節性性を組み合わせる

リスク分析

この戦略にはいくつかのリスクもあります:

  1. トレンドをフォローする戦略で,一日中取引できない

  2. 傾向が逆転すると損失が大きい

  3. 移動平均値の遅延,ターニングポイントをタイムリーに把握できない

  4. 高い取引頻度は,より高い取引コストにつながります

  5. 適正でないパラメータ設定は,範囲限定市場での収益性の低下につながる可能性があります

これらのリスクを制御するには,次の措置を講じることができます.

  1. 単一の損失を制御するためにマルティンゲールストップ損失戦略を採用する

  2. パラメータを最適化し,異なる市場環境でテストの強度

  3. トレンドを判断する指標を組み合わせ,逆転時にトレンドを追いかけるのを避ける

  4. 取引頻度を下げるために保持時間を増加させる

オプティマイゼーションの方向性

この戦略は,次の側面でも最適化できます.

  1. より良いエントリーのためにトレンドの出発点を特定するためにモメント指標を組み合わせる

  2. 傾向の方向と強さを判断するのに役立つ機械学習モデルを追加する

  3. 適応性のあるパラメータ設定を採用し,リアルタイム市場動態に基づくパラメータを調整する.

  4. 異なる時間枠のための異なる位置サイズで,複数タイムフレームハルシステムを設定する

  5. 容量指標を組み合わせて,不十分な動力を持つ偽ブレイクを避ける

  6. 動向性に基づくポジションサイズを動的に調整するために,動向性に基づくポジションサイズモデルを追加する

概要

Hull Moving Average Swing Trading Strategyは,全体的に効率的な短期間のトレンドフォロー戦略である.トレンドフォローの目的でトレンド方向を決定するために,Hull Moving Averageシステムを使用する.単一の移動平均システムと比較して,より高い信号品質とパラメータ柔軟性を持っている.この戦略の利点は,比較的小さな引き下げでトレンド変化を迅速に把握することにある.弱点はトレンド逆転に対処できないことである.リスクを制御し,より多くの市場環境で戦略を堅牢にするために,パラメータ最適化,ストップ損失戦略,補助モデルを追加などを使用することができます.


/*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)
price = input(open, type=input.source, title="Price data")
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2020, title="From Year", minval=2017)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() => true
n2ma = 2 * wma(price, round(hullperiod / 2))
nma = wma(price, hullperiod)
diff = n2ma - nma
sqn = round(sqrt(hullperiod))
n2ma1 = 2 * wma(price[1], round(hullperiod / 2))
nma1 = wma(price[1], hullperiod)
diff1 = n2ma1 - nma1
n1 = wma(diff, sqn)
n2 = wma(diff1, sqn)
Hull_Line = n1 / n1 * n2
Hull_retracted = if n1 > n2
    Hull_retracted = Hull_Line - 2
else
    Hull_retracted = Hull_Line + 2
c1 = Hull_retracted + n1 - price
c2 = Hull_retracted - n2 + price
c4 = n1 > n2 ? color.green : color.red
c2p = plot(c2, color=color.black, linewidth=1)
c3p = plot(price, color=color.black, linewidth=1)
fill(c3p, c2p, color=c4, transp=75)
//plot(cross(c1, c2) ? c1 : na, style=plot.style_circles, color=c4, linewidth=4)
if price < c2
    strategy.close("BUY", when=window())
if price > c2
    strategy.close("SELL", when=window())
if price > c2 and price[1] > c1
    strategy.entry("BUY", strategy.long, when=window())
if price < c1 and price[1] < c2
    strategy.entry("SELL", strategy.short, when=window())  //        /L'-, 
//                               ,'-.      `   ````                 /  L '-, 
//     .                    _,--dMMMM\        `   ` ` '`..         /       '-, 
//     :             _,--,  )MMMMMMMMM),.      `     ,<>          /_      '-,' 
//     ;     ___,--. \MM(    `-'   )M//MM\          ,',.;      .-'* ;     .' 
//     |     \MMMMMM) \MM\       ,dM//MMM/     ___ < ,; `.      )`--'    / 
//     |      \MM()M   MMM)__   /MM(/MP'  ___, \  \ `  `. `.   /__,    ,' 
//     |       MMMM/   MMMMMM( /MMMMP'__, \     | /      `. `-,_\     / 
//     |       MM     /MMM---' `--'_ \     |-'  |/         `./ .\----.___ 
//     |      /MM'   `--' __,-  \""   |-'  |_,               `.__) . .F. )-. 
//     |     `--'       \   \    |-'  |_,     _,-/            J . . . J-'-. `-., 
//     |         __  \`. |   |   |         \    / _           |. . . . \   `-.  F 
//     |   ___  /  \  | `|   '      __  \   |  /-'            F . . . . \     '` 
//     |   \  \ \  /  |        __  /  \  |  |,-'        __,- J . . . . . \ 
//     |    | /  |/     __,-  \  ) \  /  |_,-     __,--'     |. .__.----,' 
//     |    |/    ___     \    |'.  |/      __,--'           `.-;;;;;;;;;\ 
//     |     ___  \  \     |   |  `   __,--'                  /;;;;;;;;;;;;. 
//     |     \  \  |-'\    '    __,--'                       /;;;;;;;;;;;;;;\ 
// \   |      | /  |      __,--'                             `--;;/     \;-'\ 
//  \  |      |/    __,--'                                   /  /         \  \ 
//   \ |      __,--'                                        /  /           \  \ 
//    \|__,--'                                          _,-;M-K,           ,;-;\ 
//                                                     <;;;;;;;;           '-;;;; 
//                                                                                  :D


もっと