量的な取引戦略,TSI指標とHull移動平均に基づいて

作者: リン・ハーンチャオチャン開催日:2023年12月18日 16:56:22
タグ:

img

概要

この戦略は"TSI指標とハル移動平均に基づく定量取引戦略"と呼ばれる.主なアイデアは,TSI指標とハル移動平均を組み合わせて株式,暗号通貨または外為のトレンドを特定し,トレンドが始まると取引信号を生成することです.

戦略の論理

この戦略は,TSI指標を使用して価格の動向と勢いを決定する.TSI指標は,価格変動率の二重スムーズ移動平均値に基づいている.TSI値が移動平均値を超えると購入信号を生成し,その下を通ると販売信号を生成する.

この戦略は,価格動向を決定するためにハル移動平均値も使用する.ハル移動平均値は,二重重量化された移動平均値で構築され,市場のノイズを効果的にフィルターすることができます.高速線がスローラインの上を横切ると上昇傾向が認識され,下を横切ると下落傾向が認識されます.

TSIインジケーターが信号を生成すると,ハル移動平均が同じ方向のトレンドを確認した場合,対応する取引信号が起動します.また,戦略はトレンドを確認するためにキャンドルスタイクボディの方向もチェックします.インジケーター信号,ハル信号,キャンドルスタイクボディの方向が一貫して並べた場合にのみ信号が生成されます.

利点分析

この戦略は,トレンド,モメンタム,移動平均の指標を組み合わせることで,市場のトレンドの開始を効果的に特定し,過剰な誤った信号を回避することができます.

単一指標戦略と比較して,この戦略は複数の指標を組み合わせてシグナルをフィルターし,シグナルの質を大幅に向上させることができます.複数の確認条件はまた,シグナルが起動すると非常に信頼性があります.

リスク分析

この戦略は,トレンド開始を効果的に特定できるが,市場の統合中にいくつかの誤った信号と過剰取引を生む可能性がある.不適切なパラメータ設定は,不要な出口を引き起こすこともあります.

リスクを軽減するために,船体周期またはTSIパラメータを相応に調整することができる.制御損失にストップも追加することができる.最適化中に,最適なパラメータのための高い信号対ノイズ比を確保するために注意を払う必要があります.

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

戦略は以下の側面で最適化できます.

  1. カーブを滑らかにし,偽信号をフィルタリングするためにハルフ移動平均パラメータを最適化します
  2. センシビリティと安定性をバランスするために TSI パラメータを最適化する
  3. 損失の大きさを制御するためにストップ損失戦略を追加する
  4. 短時間ノイズをフィルタリングするために信号長さを調整
  5. 異なる製品と時間枠での試験
  6. シグナル検証のための他の指標を組み込む

結論

この戦略はTSI指標とハル移動平均を組み合わせ,市場の動向を確認した後,取引信号を生成する.この戦略は高いタイミングと信号品質を有している.パラメータ最適化と戦略の組み合わせを通じて,リスクを低減しながら収益性が大幅に向上することができる.この戦略は,中長期の動向を特定するのに適しており,特に暗号通貨と外為市場で有望な応用見通しがある.


/*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)

もっと