マルチタイムフレームストーカスティッククロスオーバー戦略は,典型的なトレンドフォロー戦略である.それは異なるタイムフレーム (例えば,日,週,月,など) の標準偏差値を計算し,複数のKとDラインを構築し,これらのラインの平均を移動平均を構築するために取り,高速線がスローラインを越えると長行し,高速線がスローラインを下回ると短行する.複数のタイムフレームに標準偏差ラインを組み合わせることで,この戦略は効果的に市場のノイズをフィルタリングし,支配的なトレンドを捉える.
この戦略の基本的な論理は,複数のタイムフレームで標準偏差を計算し,その後平均を取って取引信号を生成することです.
まず,この戦略は,日,週,月間の時間枠に対応する5つのグループにおける異なるパラメータで標準偏差のK値を計算します.
smoothK = input(55)
SMAsmoothK = input(13)
k = sma(stoch(price, high, low, smoothK), SMAsmoothK)
smoothK1 = input(89)
SMAsmoothK1 = input(8)
k1 = sma(stoch(price, high, low, smoothK1), SMAsmoothK1)
...
smoothK4 = input(377)
SMAsmoothK4 = input(2)
k4 = sma(stoch(price, high, low, smoothK4), SMAsmoothK4)
異なるパラメータを計算します
smoothD = input(34)
d = sma(k, smoothD)
...
smoothD4 = input(233)
d4 = sma(k4, smoothD4)
次に,KとD線の平均を計算し,高速線 Kavgと遅い線 Davg を得ます.
Kavg = avg(k,k1,k2,k3,k4)
Davg = avg(d,d1,d2,d3,d4)
最後に,Kavg が Davg の上を横切ると長くなって,Kavg が Davg の下を横切ると短くなります:
long = crossover(Kavg, Davg)
short = crossunder(Kavg, Davg)
この戦略は,複数の時間枠に標準偏差線を組み合わせることで,より大きな時間枠で市場のノイズをフィルタリングし,支配的なトレンド方向を把握することができます.
解決策:
偽の突破信号を避けるためにフィルターを追加します.
市場変動に基づく適応期間を使用する
トレーリングストップを活用して取引をタイムリー終了します
最適なバランスを確保するために移動平均期を最適化
安定性を高めるためにより多くの指標を組み込む
この戦略は,次の分野においてさらに改善することができる.
信号の質を改善するために,MACD,ボリンジャーバンドなどの他の指標信号を組み込む
逆トレンド取引を避けるために,SMA方向,ADXなどのトレンドフィルターを追加します.
市場変動に基づいて適応期間を利用する
トレーリングストップを戦略パラメータに基づいて実行する
最適なパラメータのために,高速と遅い移動平均期を最適化
短期間のノイズからの誤った信号を避けるために入力フィルターを追加します.
移動平均値のクロスオーバー後の試験突破エントリ
出口を最適化するためにチェンデリア出口のような異なる出口戦略を評価します
マルチタイムフレームストーカスティッククロスオーバー戦略は,ストーカスティック指標のトレンドフォロー能力と移動平均戦略の安定性を組み合わせます.複数の期間の標準偏差K線とD線の平均を取って信号を生成することで,異なるタイムフレームの標準偏差の予測力を効果的に活用し,市場のノイズをフィルタリングし,支配的なトレンドを捕捉します.この戦略にはパラメータチューニングやフィルター,ストップなどのさらなる強化の余地があります.全体として,複数の技術分析ツールの強みを統合し,調査と最適化に値する効率的なトレンドフォロー戦略です.
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-23 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="Slow Stochastic Multi K&D Average Crossover Strategy", overlay=false, pyramiding=0, calc_on_order_fills=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100) price = input(close) /////////////////////////////// smoothK = input(55) SMAsmoothK = input(13) k = sma(stoch(price, high, low, smoothK), SMAsmoothK) smoothD = input(34) d = sma(k, smoothD) /////////////////////////// smoothK1 = input(89) SMAsmoothK1 = input(8) k1 = sma(stoch(price, high, low, smoothK1), SMAsmoothK1) smoothD1 = input(55) d1 = sma(k1, smoothD1) ////////////////////////////////////// smoothK2 = input(144) SMAsmoothK2 = input(5) k2 = sma(stoch(price, high, low, smoothK2), SMAsmoothK2) smoothD2 = input(89) d2 = sma(k2, smoothD2) ///////////////////////////////////// smoothK3 = input(233) SMAsmoothK3 = input(3) k3 = sma(stoch(price, high, low, smoothK3), SMAsmoothK3) smoothD3 = input(144) d3 = sma(k3, smoothD3) //////////////////////////////////////////////// smoothK4 = input(377) SMAsmoothK4 = input(2) k4 = sma(stoch(price, high, low, smoothK4), SMAsmoothK4) smoothD4 = input(233) d4 = sma(k4, smoothD4) ///////////////////////////////////////////////// Kavg = avg(k,k1,k2,k3,k4, k4) plot(Kavg, color=green) Davg = avg(d,d1,d2,d3,d4, d4) plot(Davg, color=red) /////////////////////////////////////// hline(50, color=gray) long = crossover(Kavg, Davg)// and d < 50 short = crossunder(Kavg, Davg)// and d > 50 last_long = long ? time : nz(last_long[1]) last_short = short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) strategy.entry("Long", strategy.long, when=long_signal) strategy.entry("Short", strategy.short, when=short_signal) //len1 = input(3) //closelong = d[1] < k[len1] //closeshort = d[1] > k[len1] //strategy.close("Long", when=closelong) //strategy.close("Short", when=closeshort)