KST指標に基づくトレンド追跡戦略

作者: リン・ハーンチャオチャン, 日付: 2023-09-15 12:05:21
タグ:

KST インディケーターを用いたトレンドフォロー戦略

この記事では,KST指標を用いた定量的なトレンドフォロー戦略を詳細に説明します.KSTラインと信号ラインのクロスオーバーを計算することによって取引シグナルを生成します.

I. 戦略の論理

信号生成の主なステップは次のとおりです.

  1. 異なる期間の複数のROC指標の値を計算する.

  2. ROC値に移動平均値を個別に適用し,その合計を KST線を導き出す.

  3. 信号線を得るために移動平均を用いて KST線をさらに滑らかにします

  4. 購入信号は,KST線が信号線の上を横切ると生成され,販売信号では逆です.

  5. 適切な位置サイズを選択できます.

複数のROC値の和を取ることで,KST線は短期的および長期的価格動向の両方を反映する.信号線との交差はトレンド方向を決定することができる.

戦略の利点

最大の利点は,時間枠のトレンド情報を組み込む包括的な指標計算です.

もう一つの利点は,明確な信号線でシンプルで直感的な指標の使用です.

最後に,調整可能な位置サイズ化により,全体的なリスク露出を制御できます.

III.潜在的な弱点

しかし,いくつかの問題があります.

まず,指標そのものは価格変動に反応する際に 遅れている.

第二に,KSTだけに頼るということは,逆転に易くなります.

また,過剰なフィットメントを避けるために広範な最適化が必要です.

IV.要約

この記事では,KSTクロスオーバーシグナルを用いた定量的なトレンドフォロー戦略を説明しています.これは,取引シグナルのための指標を通じて価格傾向を反映していますが,指標の遅延と適切なパラメータ調整を管理する必要があります.全体的に,それは単純なトレンド追跡アプローチを提供します.


/*backtest
start: 2023-08-15 00:00:00
end: 2023-09-14 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// strategy(title="KST Alert", shorttitle="KST Alert", format=format.price, precision=4)
roclen1 = input.int(10, minval=1, title = "ROC Length #1")
roclen2 = input.int(15, minval=1, title = "ROC Length #2")
roclen3 = input.int(20, minval=1, title = "ROC Length #3")
roclen4 = input.int(30, minval=1, title = "ROC Length #4")
smalen1 = input.int(10, minval=1, title = "SMA Length #1")
smalen2 = input.int(10, minval=1, title = "SMA Length #2")
smalen3 = input.int(10, minval=1, title = "SMA Length #3")
smalen4 = input.int(15, minval=1, title = "SMA Length #4")
siglen = input.int(9, minval=1, title = "Signal Line Length")
smaroc(roclen, smalen) => ta.sma(ta.roc(close, roclen), smalen)
kst = smaroc(roclen1, smalen1) + 2 * smaroc(roclen2, smalen2) + 3 * smaroc(roclen3, smalen3) + 4 * smaroc(roclen4, smalen4)
sig = ta.sma(kst, siglen)
plot(kst, color=#009688, title="KST")
plot(sig, color=#F44336, title="Signal")
hline(0, title="Zero", color = #787B86)
eL1=ta.crossover(kst,sig)
eS1=ta.crossunder(kst,sig)
ch = 0
t = year(time('D'))
ch := ta.change(t) != 0 ? 1 : 0
T1 = time(timeframe.period, "0915-1520")
session_open = na(t) ? false : true
newDay = ta.change(time("15m")) != 0
strategy.entry("Long1", strategy.long, when = eL1)
strategy.entry("Short1", strategy.short, when = eS1)


もっと