モメンタムダブルスライディングウィンドウTSIインジケーター


作成日: 2024-01-08 11:20:35 最終変更日: 2024-01-08 11:20:35
コピー: 1 クリック数: 654
1
フォロー
1617
フォロワー

モメンタムダブルスライディングウィンドウTSIインジケーター

戦略概要

戦略は動力双滑り窓TSI指標戦略この戦略の核心的な考え方は,価格の変動を平らにするための二重EMAのスライドウィンドウを使用し,トレンドの方向の変化と組み合わせて,市場での買取り力を反映する動態指標であるTSI指標を構成し,それを取引信号として買出決定を作成することです.

2. 戦略の原則

この策略は,価格変化を計算するために,2つのスライドウィンドウの2つの指数移動平均を使用します. 外層ウィンドウはより長く,内層ウィンドウはより短い. 価格データ内の部分的なランダム性をダブルスライドで削除します.

まず,価格の単位の変化を計算します.

pc = change(price)

価格の動きをダブルスライドする.

double_smoothed_pc = double_smooth(pc, long, short)

価格変動の絶対値を再計算し,同じように二重スライドウィンドウを使用して二重平滑します.

double_smoothed_abs_pc = double_smooth(abs(pc), long, short)

最後に,平滑後の価格変動を平滑後の価格変動の絶対値で割ると,買取力と販売力を反映したTSI指標が得られます.

tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)

異なる長さの長いウィンドウ期間を設定することにより,短期市場のノイズを一定程度にフィルタリングすることができ,TSI指標が中長期のトレンドにおける買取力をよりよく反映できるようにする.TSI指標上の移動平均を横断すると買取信号が生じ,TSI指標の下の移動平均を横断すると売り信号が生じます.

3 戦略的優位性

  1. 二重滑動ウィンドウを使用し,短期市場のノイズを効果的にフィルターし,指標の反応をより正確にします.
  2. 価格変動の計算も二重平滑化され,TSI指標はより安定し,信頼性が向上しました.
  3. 価格変動と価格変動の絶対値の比率を用いて,自動標準化,より比較性
  4. 価格変動の方向と強さを総合的に考慮し,取引決定の質指標として
  5. 異なるパラメータを設定し,必要に応じて指標の感度を調整できます

4 戦略的リスク

  1. 市場が長期にわたって揺れ動くと,TSI指数は誤った信号を発する可能性があります.
  2. パラメータの不適切な設定は,指標と信号の質に影響を与える
  3. 双滑り窓があるにもかかわらず,指標は短期市場のノイズに対してある種の感受性を持っています.
  4. 指示器と信号が遅れている場合

ウィンドウ期パラメータを調整し,シグナル平均の長さを適切に短縮することで最適化することができる.市場が揺れ動いたとき,リスクを制御するために一時的に取引を停止することができる.

5 改善する方向

  1. 異なる長短ウィンドウ期パラメータの組み合わせをテストし,最適なパラメータを探します.
  2. 線形加重移動平均のような他の種類の移動平均を試してみましょう.
  3. スライドウィンドウを3つまたは複数構築し,指標の滑らかさを増加させる
  4. 他の補助指標と組み合わせて 買い物場所の最適化
  5. ストップ・ロース戦略を設定し,単一損失を厳格に管理する

VI. 結論

本策は,価格変動による二重平滑計算により,買い売り力を反映したTSI動量指標を計算し,二重滑り窓フィルターノイズ,価格変化の変化も二重平滑化され,指標はより安定して信頼性がある.標準化比率を採用し,比較性がある.指標は,価格変化の方向と強さを統合し,高品質の信号として;パラメータ調整により指標の感度を自由に制御できる.パラメータ最適化とリスクがコントロールされる場合,非常に実用的な量化取引策の選択である.

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

//@version=2
strategy("True Strength Indicator BTCUSD 2H", shorttitle="TSI BTCUSD 2H",initial_capital=1000, commission_value=0.2, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity)

//BASED ON True Strength Indicator MTF
resCustom = input(title="Timeframe",  defval="120" )
long = input(title="Long Length",  defval=25)
short = input(title="Short Length",  defval=13)
signal = input(title="Signal Length",  defval=13)

length = input(title="Период",  defval=300)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"

price = request.security(syminfo.tickerid,resCustom,close)


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)
tsi2=ema(tsi_value, signal)
plot(tsi_value, color=lime,linewidth=2)
plot(tsi2, color=red,linewidth=2)

hline(30, title="Zero")
hline(50, title="Zero",linewidth=2)
hline(70, title="Zero")

buy = crossover(tsi_value, tsi2)
sell = crossunder(tsi_value, tsi2)

if(buy)
    strategy.entry("BUY", strategy.long, when = window())
if(sell)
    strategy.entry("SELL", strategy.short, when = window()) 

//greentsi =tsi_value
//redtsi = tsi2

//bgcolor( greentsi>redtsi and rsiserie > 50 ? lime : na, transp=90)
//bgcolor( greentsi<redtsi and rsiserie < 50 ? red : na, transp=90)

//yellow1= redtsi > greentsi and rsiserie > 50 
//yellow2 = redtsi < greentsi and rsiserie < 50 
//bgcolor( yellow1 ? yellow : na, transp=80)
//bgcolor( yellow2  ? yellow : na, transp=50)

//bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70)
//bgcolor( yellow2  and yellow2[2] ? yellow : na, transp=70)

//bgcolor( rsiserie > 70 ? lime : na, transp=60)
//bgcolor( rsiserie < 30  ? red : na, transp=60)