この戦略は,異なるパラメータを持つ2つのストカスティックオシレーターを使用して,牛/熊条件を決定する.これは典型的な移動平均クロスオーバーシステムである.より速いオシレーターは短期的なトレンドとエントリー信号を判断し,遅いものは全体的なトレンド方向性を確認する.信号は組み合わせから生成される.
速 %K は短期的なトレンド方向を示します.%K がスムーズライン SM1 を横断すると入口信号が生成されます.
スロー %K は全体的なトレンド条件を反映します.高速振動器が逆転信号を出したとき,トレンドの有効性についてスロー振動器を確認します.
SM1 の上の%K の高速クロスオーバーは上昇信号を示します.50 の下の%K の遅さは上昇傾向であり,ロング条件を満たします.
SM1を下回る%Kの高速クロスオーバーは下落シグナルを示します.50を下回る%Kの遅さは下落傾向であり,ショート条件を満たします.
利益とストップロスのポイントを固定した割合で設定します
双重ストカスティックフィルターは 騒音をフィルターし 精度を向上させます 速くゆっくりと組み合わせることで 閉じ込められるリスクが減ります
SM1パラメータが小さいので,短期的な機会を捉えるのに %K が敏感になります.
長いサイクルは全体的なトレンドを判断し,短いサイクルは逆転を記録します. 双重の長/短戦略はほとんどの市場環境に適しています.
固定利益とストップ・ロスのポイントにより リスクは大きな変動なく 制御できます
インディケーター間の差異は,見逃した取引や間違った信号を引き起こす可能性があります.
固定利益採取とストップ・ロスは 市場への適応に柔軟性がない.
ストカスト的パラメータは 繰り返し最適化が必要で 不適切な設定は失敗につながる
短期取引による高い取引頻度は取引コストを増加させる.
信号の質を確保するために他の指標やフィルターを追加します.
最適な設定を見つけるために異なるパラメータの組み合わせをテストします
波動性対策を導入し,収益とストップ損失のレベルをダイナミックにする.
重要な出来事や不合理な価格変動を避けるために 時間のフィルターを使用します
資本の効率を向上させるために ポジションサイズなどの資本管理戦略を最適化します
この戦略は,高速および遅いストキャストスティックオシレーターを二方向システムに統合する.さらなるパラメータ最適化およびトレンドおよび変動指標などのフィルターを追加することで改善することができます.適切なリスク制御により,この戦略は比較的安定した過剰収益を達成することができます.
/*backtest start: 2023-08-17 00:00:00 end: 2023-09-16 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Double Stochastic", overlay=true) //-----------------------Stochastics------------------------// c= security(syminfo.tickerid,timeframe.period , close) h= security(syminfo.tickerid, timeframe.period, high) l= security(syminfo.tickerid, timeframe.period, low) c1= security(syminfo.tickerid, timeframe.period, close) h2= security(syminfo.tickerid, timeframe.period, high) l1= security(syminfo.tickerid, timeframe.period, low) K1 = input(5, title="K", minval=1, title="Leading K") SM1 = input(2, title="Smooth", minval=1, title="Leading Smooth ") k = ema(stoch(c, h, l, K1), SM1) K2 = input(97, title="K", minval=1, title="Lagging K") D2 = input(3, title="D", minval=1, title="Lagging D") SM2 = input(1, title="Smooth", minval=1, title="Lagging Smooth") k1 = ema(stoch(c1, h2, l1, K2), SM2) // buy ((k[2] < 40 and k > 40) and bars_up > 0 and k1 > 50) // sell (k[2] > 60 and k < 60) and bars_down > 0 and k1 < 50 //-----------------------Mechanics------------------------// buy = k1 > 50 and k < 30 and k > k[1] ? 1 : 0 sell = k1 < 50 and k > 70 and k < k[1] ? 1 : 0 buy_val = valuewhen(buy == 1, close, 1) sell_val = valuewhen(sell == 1, close, 1) buy_close = buy_val * input(1.20, minval=0.1) sell_close = sell_val / input(1.20, minval=0.1) //------------------------Buy/Sell-------------------------// longCondition = buy == 1 if (longCondition) strategy.entry("My Long Entry Id", strategy.long) close_long = close >= buy_close if (close_long) strategy.close("My Long Entry Id") sellCondition = sell == 1 if (sellCondition) strategy.entry("My Short Entry Id", strategy.short) close_short = close <= sell_close if (close_short) strategy.close("My Short Entry Id")