資源の読み込みに... 荷物...

モメント 双動窓 TSI インディケーター

作者: リン・ハーンチャオチャン開催日:2024-01-08 11:20:35
タグ:

img

I. 戦略の概要

この戦略はモメント 双動窓 TSI インディケーター 戦略この戦略の主なアイデアは,価格変動を平滑させるためにEMAの二重スライディングウィンドウを使用し,その後,トレンドの方向の変化を組み合わせ,市場の買い売り力を反映するモメントインジケーター,すなわちTSIインジケーターを構築し,それを買い売り決定のための取引信号として使用することです.

戦略の原則

この戦略は,価格変化を計算するために,ダブルスライディングウィンドウのダブル指数移動平均を使用する.外側のウィンドウ期間は長く,内側のウィンドウ期間は短い.ダブルスライディングにより,価格データのランダム性の一部は削除される.

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

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指標が移動平均値を下回ると販売信号が生成される.

戦略上の利点

  1. 二重スライディングウィンドウを使用することで,より正確な指標反応のために短期間の市場のノイズを効果的にフィルターします
  2. 価格変化も2倍に平ら化され,TSI指標がより安定し,信頼性が向上します
  3. 価格変化と絶対価格変化の比率が使用され,自動的に標準化され,比較がより可能になります.
  4. 取引決定のための品質指標として,価格変動の方向性と規模を包括的に検討する
  5. 異なるパラメータを設定することで,指標の感度が柔軟に調整できます.

IV 戦略リスク

  1. 市場が長期にわたって変動している場合,TSI指標は誤った信号を出す可能性があります.
  2. パラメータの設定が正しくない場合も,指標や信号の品質に影響を与える可能性があります.
  3. 2つのスライディングウィンドウがあるにもかかわらず,指標は依然として短期市場騒音に一定の敏感性を持っています.
  4. 長い窓と短い窓間の差が大きすぎると,指標や信号が遅れる可能性があります.

窓期間パラメータを調整し,シグナル移動平均長さを適切に短縮することで最適化できます.市場が変動すると,リスクを制御するために一時的に取引を停止することができます.

V.最適化の方向性

  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)

もっと