KST インディケーターを用いたトレンドフォロー戦略
この記事では,KST指標を用いた定量的なトレンドフォロー戦略を詳細に説明します.KSTラインと信号ラインのクロスオーバーを計算することによって取引シグナルを生成します.
I. 戦略の論理
信号生成の主なステップは次のとおりです.
異なる期間の複数のROC指標の値を計算する.
ROC値に移動平均値を個別に適用し,その合計を KST線を導き出す.
信号線を得るために移動平均を用いて KST線をさらに滑らかにします
購入信号は,KST線が信号線の上を横切ると生成され,販売信号では逆です.
適切な位置サイズを選択できます.
複数の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)