TSI と CCI に基づくホール移動平均トレンドフォロー戦略


作成日: 2023-11-28 15:53:03 最終変更日: 2023-11-28 15:53:03
コピー: 0 クリック数: 765
1
フォロー
1621
フォロワー

TSI と CCI に基づくホール移動平均トレンドフォロー戦略

概要

この戦略は,相対強度指数 (TSI),商品経路指数 (CCI) とホール移動平均 (Hull MA) の3つの指標を融合させ,トレンド追跡型の取引戦略を形成する.これは,1時間またはそれ以上の時間枠で任意の取引品種の長線を追跡する取引を行うことができる.

戦略原則

この戦略は,TSIとCCIの2つの指標に基づいて市場の傾向と過剰買いと過剰売り状況を判断し,ハルMAは価格の中期傾向を判断し,三者とも合わさってポジションの基本条件である.

具体的には,TSIの快線でスローラインを突破し,CCIの指数で+20&&n1が上昇すると,多めに;TSIの快線の下でスローラインを突破し,CCIの指数で-20&&n1が下落すると,空っぽに.ハルMAは期間のトレンドをフィルターするために使用され,価格がハルMAより低い場合にのみ多めに,価格がハルMAより高い場合に空っぽにします.

この方法により,異なる周期指標の確認により,偽ブレイクを効果的にフィルターし,中長線トレンドを追跡できます.

優位分析

これは比較的安定的で効率的なトレンド追跡戦略で,以下の利点があります.

  1. 短期市場の騒音から遠ざかって,TSIを使って長期トレンドの方向性をより確実に判断する.

  2. CCIの導入により,過剰買いと過剰売りが確認され,偽の信号がフィルターされる.

  3. Hull MAの判断により,エントリーポイントがより正確になり,収益の確率が大幅に向上しました.

  4. 異なるパラメータ指標の統合により,信号の信頼性が向上し,干渉の確率が低下する.

  5. 戦略パラメータの設定は柔軟で,異なる市場サイクルに適応して最適化できます.

リスク分析

この戦略の安定性にも関わらず,注意すべきリスクがあります.

  1. 金融危機の危機が急激に逆転し,急激に悪化し,大きな損失を招く可能性があること.

  2. TSIDiffとCCIの指標は,偽信号と遅延が発生し,部分的な入場点を逃す可能性があります.

  3. パラメータの設定を間違えた場合,取引頻度が高くなり,信号の質が低下する可能性があります.

対策として

  1. ストップポイントを適切に調整し,単発損失を制御する.

  2. 信号の正確性を向上させるための,他の指標と組み合わせた確認を,必要に応じて実施する.

  3. 市場調整のパラメータに従って,戦略の安定性を保証する.

最適化の方向

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

  1. 異なるパラメータの指標の組み合わせを試して,最適なマッチングの指標を見つけます.

  2. 機械学習のアルゴリズムを組み込み,パラメータを自律的に最適化します.

  3. 資金管理モジュールを追加し,収益を安定化させる.

  4. フィルターを増やして,戦略の勝利率を上げます.

未来に最適化が優先されるでしょう.

要約する

この戦略は,TSI,CCI,Hull MAの3つの指標を統合して,より安定的かつ効率的なトレンド追跡戦略を形成する.それは,複数の時間帯の指標の優位性をうまく利用し,信号の質を向上させる.次のステップは,パラメータ最適化,フィルター強化などの手段によって戦略の安定性と収益性をさらに強化する.

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

//@version=4

strategy(title="TSI CCI Hull", shorttitle="TSICCIHULL", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= false, calc_on_every_tick=true, pyramiding=0)
long = input(title="Long Length", type=input.integer, defval=50)
short = input(title="Short Length", type=input.integer, defval=50)
signal = input(title="Signal Length", type=input.integer, defval=25)
price=input(title="Source",type=input.source,defval=open)
Period=input(25, minval=1)
lineupper = input(title="Upper Line", type=input.integer, defval=100)
linelower = input(title="Lower Line", type=input.integer, defval=-100)
p=price
length= Period
double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(price)
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)
keh = tsi_value*5 > linelower ? color.red : color.lime
teh = ema(tsi_value*5, signal*5) > lineupper ? color.red : color.lime
meh = ema(tsi_value*5, signal*5) > tsi_value*5 ? color.red : color.lime
i1=plot(tsi_value*5, title="TSI Value", color=color.black, linewidth=1,transp=100)
i2=plot(ema(tsi_value*5, signal*5), title="TSI Signal", color=color.black, linewidth=1,transp=100)
fill(i1,i2,color=meh,transp=85)
plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.black, linewidth=10)
plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.white, linewidth=8,transp=0)
plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=meh, linewidth=5)
n2ma = 2 * wma(p, round(length / 2))
nma = wma(p, length)
diff = n2ma - nma
sqn = round(sqrt(length))
n1 = wma(diff, sqn)
cci = (p - n1) / (0.015 * dev(p, length))
c = cci > 0 ? color.lime : color.red
c1 = cci > 20 ? color.lime : color.silver
c2 = cci < -20 ? color.red : color.silver
cc=plot(cci, color=c, title="CCI Line", linewidth=2)
cc2=plot(cci[1], color=color.gray, linewidth=1,transp=100)
fill(cc,cc2,color=c,transp=85)
plot(cross(20, cci) ? 20 : na, style=plot.style_cross,title="CCI cross UP",  color=c1, linewidth=2,transp=100,offset=-2)
plot(cross(-20, cci) ? -20 : na, style=plot.style_cross,title="CCI cross down",  color=c2, linewidth=2,transp=100,offset=-2)

TSI1=ema(tsi_value*5, signal*5)
TSI2=ema(tsi_value*5, signal*5)[2]

hullma_smoothed = wma(2*wma(n1, Period/2)-wma(n1, Period), round(sqrt(Period)))
//plot(hullma_smoothed*200)

longCondition = TSI1>TSI2 and hullma_smoothed<price and cci>0
if (longCondition and cci>cci[1] and cci > 0 and n1>n1[1])
    strategy.entry("Buy Here", strategy.long)

shortCondition = TSI1<TSI2 and hullma_smoothed>price and cci<0
if (shortCondition and cci<cci[1] and cci < 0 and n1<n1[1])
    strategy.entry("Sell Here", strategy.short)