Hull TSI と CCI の移動平均傾向追跡戦略

作者: リン・ハーンチャオチャン, 日付: 2023年11月28日 15:53:03
タグ:

img

概要

この戦略は,相対強度指数 (TSI),コモディティチャネル指数 (CCI),ハル移動平均 (Hull MA) を統合して,トレンド追跡取引戦略を形成する.これは,時間またはそれ以上の時間枠で任意の取引種で長期追跡取引を行うことができます.

戦略原則

この戦略は,主にTSIとCCI指標を用いて,市場の傾向の方向と過買い/過売り状況を判断し,ハルMAを用いて,価格の中間傾向を決定し,これら3つの指標は,ポジション開設の基本条件として組み合わせられています.

具体的には,TSIの高速線がスローラインを越えると,CCI指標が+20&n1を超えると,ロングになります.TSIの高速線がスローラインを下ると,CCI指標が-20&n1を下ると,ショートになります.Hull MAは中間トレンドをフィルタリングするために使用され,価格はHull MAを下回るときのみロングになり,価格はHull MAを下回るときにショートになります.

異なる周期における指標で確認することで,中長期の傾向を追跡するために誤ったブレイクを効果的にフィルタリングすることができます.

利点分析

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

  1. 長期的傾向の方向性を判断するための TSI を使用することは,短期的な市場騒音による干渉を避けるため,より信頼性があります.

  2. CCI指標の追加により,過剰購入/過剰売却の現象が確認され,いくつかの誤った信号がフィルタリングされます.

  3. Hull MAの判断により,入口ポイントがより正確になり,利益の確率が大きく向上します.

  4. 異なるパラメータを持つ指標を統合することで,信号の信頼性が向上し,干渉の可能性が減少します.

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

リスク分析

この戦略は比較的安定しているが,いくつかのリスクは依然として存在している.

  1. 市場が急激な逆転を経験し,損をすぐに止めることができないため,比較的大きな損失を引き起こす可能性があります.

  2. TSI Diff と CCI インジケーターの両方が誤った信号と遅延を有し,いくつかのエントリーポイントが欠けている場合がある.

  3. パラメータの設定が正しくない場合,取引頻度が過剰に高くなり,信号品質が低下する可能性があります.

対策:

  1. 単一の損失を制御するために,ストップ損失を適切に調整する.

  2. 信号の正確性を向上させるため,他の指標で確認する.

  3. 戦略の安定性を確保するために 市場に応じてパラメータを調整します

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

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

  1. 最適なマッチを見つけるために,パラメータインジケーターの異なる組み合わせを試す.

  2. マシン学習アルゴリズムを導入し,パラメータの適応最適化を実現する.

  3. 安定した利益のために資本管理モジュールを増やすこと

  4. 戦略の勝利率を増やすためにより多くのフィルターを組み込む.

これらが将来の最適化の焦点となるでしょう

概要

この戦略は,TSI,CCI,Hull MA指標を総合的に活用して,比較的安定的かつ効率的なトレンド追跡戦略を形成する.信号品質を改善するために,多サイクル指標の利点を成功裏に活用する.次のステップは,パラメータ最適化,フィルター強化,その他の手段を通じて戦略の安定性と収益性をさらに向上させることである.


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

もっと