この戦略は,トレードシステムに従ってトレンドを構築するためのハル移動平均指標に基づいています.ハル曲線の方向に基づいてロングまたはショートに行くことを決定し,典型的なトレンドを追求する戦略です.
この戦略は,ハル移動平均を主要な技術指標として使用する.ハル移動平均は,2005年にアメリカのトレーダーアラン・ハルによって提案された.遅延を減らすために平方根関数を使用することで移動平均を改善する.
具体的には,ハル移動平均は2つの平均を含んでいる.一つは n 期間の移動平均MA (n),もう一つは n 期間の移動平均MA (n/2) である.この2つの移動平均間の差はハル差差曲線を形成する.ハル差差曲線の移動平均を考慮すると,ハル曲線が得られる.
ハル曲線が上向きに傾いているとき,短い期間の移動平均は,長い期間の1を超越し,長い信号を与えます. ハル曲線が下向きに傾いているとき,短いMAは,長いMAを下向きに横切って,短い信号を与えます.
この戦略は,ハル曲線の周期nを16に設定し,8期MA (n/2=8),16期MA,およびそれらの間の差を計算してハル曲線を得る.その後,ハル曲線の4期MA (n=4の平方根) を取る.ハル曲線が上を横切るときは長くな.ハル曲線が下を横切るときは短くな.
通常の移動平均値と比較して,ハル移動平均値は以下の利点があります.
遅延を軽減します.平方根関数を用いて,ハル曲線は価格の動きをより近く抱きしめ,トレンド逆転をより早く捉えます.
偽クロスを減らす.従来のMAsはより多くの偽クロスを生成する傾向があります.ハル曲線はノイズをフィルタリングし,不必要な取引を避けることができます.
パラメータが少ない.ハル曲線には1つのパラメータのみが必要で,最適化は容易である.ダブルMAシステムは2つのパラメータを最適化する必要がある.
Hull曲線の n 値は,異なる市場のために調整され,異なる楽器に合わせて調整できます.
システム化.ハルシステムは頑丈で,機械的な取引システムの一貫性を遵守し,手動選択を避けます.
移動平均システムに対する利点にもかかわらず,ハルシステムには以下のリスクがあります.
傾向を追求する戦略として,ハードルシステムは急激なトレンド変化時にストップアウトする傾向があります.
過剰取引の可能性 ハル曲線の迅速な反応により取引頻度は増加し,過剰取引につながる可能性があります.
パラメータの過剰最適化. たった"つのパラメータ n を持つことは,過剰最適化による曲線フィッティングリスクにつながる可能性があります.
効果は各ツールの間で異なります.ハルシステムは高い変動性のあるツールのためにあまりうまく機能しません.パラメータはそれに応じて調整する必要があります.
上記の制限に基づいて,ハル移動平均戦略は,以下の側面で改善することができる.
偽のクロスを避けるために追加の指標のフィルターを追加します.MACD,KDなどがトレンドを測定するのに役立ちます.
単一の取引損失を制御するためのストップ損失戦略を追加します.例えば,トレーリングストップまたは収益ストップです.
オーバーオプティマイゼーションを防ぐためにパラメータn選択を最適化する.ウォークフォワード分析はロールアップ最適化に使用することができます.
RNNのような機械学習モデルを使用して パラメータ値を動的に最適化します
機械学習フィッティングを用いて,異なる機器に対してパラメータを個別に最適化する.
取引頻度を下げるためにポジションサイズを最適化します.固定分数的なポジションサイズが役立ちます.
Hull Moving Average戦略は,MAsに対する利点にもかかわらず,過剰最適化や過剰取引などの問題に直面しています.パラメータ最適化,ストップ損失,ポジションサイズ等を通じて戦略を改善することができます. Hullシステムはシンプルで実用的です.より強力な取引システムを構築するためにより多くの指標と技術を組み込むことでさらなる研究と強化に値します.
/*backtest start: 2023-10-25 00:00:00 end: 2023-11-01 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's HullMA Strategy", shorttitle = "HullMA str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") n = input(title = "HullMA period", defval=16) fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //HullMA n2ma=2*wma(close,round(n/2)) nma=wma(close,n) diff=n2ma-nma sqn=round(sqrt(n)) n2ma1=2*wma(close[1],round(n/2)) nma1=wma(close[1],n) diff1=n2ma1-nma1 sqn1=round(sqrt(n)) n1=wma(diff,sqn) n2=wma(diff1,sqn) c=n1>n2?green:red ma=plot(n1,color=c) //Trading lot = 0.0 lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1] if n1 > n2 strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if n1 < n2 strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if true strategy.close_all()