TSI指標とハル移動平均に基づく定量戦略


作成日: 2023-12-18 16:56:22 最終変更日: 2023-12-18 16:56:22
コピー: 0 クリック数: 793
1
フォロー
1621
フォロワー

TSI指標とハル移動平均に基づく定量戦略

概要

この戦略は,TSI指数とHull移動平均に基づく量化取引戦略のと名付けられており,主な考えは,TSI指数とHull移動平均を組み合わせて,株式,仮想通貨または外貨のトレンドを認識し,トレンドが始まるときに取引シグナルを生成することである.

戦略原則

この戦略は,価格の傾向と動力を判断するためにTSI指数を使用する.TSI指数は,価格の変化率に基づいた二重平移平均である.TSI値は,それ自身の移動平均を横切るときに買い信号を生じ,下を通るときに売り信号を生じます.

この戦略はまた,Hull移動平均を用いて価格の傾向を判断する.Hull移動平均は,重重の移動平均を二重に構築することで,市場騒音を効果的にフィルターする.快線でゆっくりとした線を横断すると上昇傾向と判断し,横断すると下降傾向と判断する.

TSI指標が信号を発信すると同時に,Hull移動平均も同じ方向のトレンドを確認した場合,対応する取引信号が生成されます. さらに,戦略はK線実体方向をチェックしてトレンドを確認します.指標信号,Hull信号,K線実体方向が一致した場合のみ,取引信号を発信します.

優位分析

この戦略は,トレンド,動力,平均の複数の指標を組み合わせて,市場トレンドの始まりを効果的に識別し,大量の偽信号を生成するのを防ぐことができます. 二重平滑移動平均は,一部のノイズもフィルターすることができます.

単一の指標と比較して,この策略は複数の指標を組み合わせてフィルター信号を出し,信号の質を大幅に向上させることができる.複数の確認条件も,策略が信号を生成する際に非常に高い確実性を持つようにする.

リスク分析

この戦略は,トレンドの開始を効果的に識別できるが,市場が揺れ動いているときに一定の誤信号と過剰取引が生じる.また,パラメータの不適切な設定は,不必要な平仓につながる可能性がある.

リスクを軽減するために,ハル移動平均周期またはTSIパラメータを適切に調整することも,損失を制御するためにストップを添加することもできます.最適化過程で信音比が最適なパラメータを得るための注意が必要です.

最適化の方向

この戦略は以下の点で最適化できます.

  1. ハル移動平均のパラメータを最適化し,偽信号をフィルタリングして曲線を平滑化
  2. TSIのパラメータを最適化し,感度と安定性をバランスする
  3. 損失をコントロールするストップ・ストラトジー
  4. 信号の長さを短時間のノイズをフィルタリングするために調整する
  5. 異なる種類の戦略と時間周期をテストする
  6. 他の指標と組み合わせた信号検証

要約する

この戦略は,TSI指標とHull移動平均を組み合わせて,市場トレンドを特定した後,取引信号を生成する.戦略は,高いタイミングと信号品質を有している.パラメータの最適化と戦略の組み合わせにより,収益性を大幅に高め,リスクを軽減することができます.この戦略は,中長期トレンドを特定するのに適しており,特にデジタル通貨と外貨市場では,広範なアプリケーションの見通しを持っています.

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

//@version=2
strategy("TSI/HullMA/VWMA strategy", shorttitle="TSI/HullMA/VWMA", overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=420, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0)
TP = input(defval=200.00, title="TargetPoint in $", type=float, step=1)
SL = input(defval=-2000.00, title="StopLoss in $", type=float, step=1)
signal = input(title="Signal Length",  defval=6)
keh=input(title="HullMA cross",defval=2)
a=input(title="VWMA",defval=2)
long=35,short=35,linebuy=4,linesell=-4,ot=1,p=ohlc4[0]
double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(p)
rvwma=vwma(p,round(a))
rvwma2=vwma(p,round(a*2))
n2ma=2*wma(p,round(keh/2))
nma=wma(p,keh)
diff=n2ma-nma
sqn=round(sqrt(keh))
n2ma1=2*wma(p[1],round(keh/2))
nma1=wma(p[1],keh)
diff1=n2ma1-nma1
sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
hullbuy=n1>n2 and n1>n2[1] and rvwma>rvwma2
hullsell=n1<n2 and n1<n2[1] and rvwma<rvwma2
candlebuy=ohlc4[0]>ohlc4[1] and ohlc4[0]>ohlc4[2] and ohlc4[0]>ohlc4[3]
candlesell=ohlc4[0]<ohlc4[1] and ohlc4[0]<ohlc4[2] and ohlc4[0]<ohlc4[3]
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
strategy.entry("buy", true, na, when = tsi_value>ema(tsi_value, signal) and candlebuy and hullbuy)
strategy.entry("sell", false, na, when = tsi_value<ema(tsi_value, signal) and candlesell and hullsell)
strategy.close_all(when = strategy.openprofit>TP or strategy.openprofit<SL)