この戦略は,ATRを計算し,ATRフィルタを設定することで,非重要なピボットポイントを除去し,本当に重要なポイントのみで取引することで,伝統的なピボットポイント逆転戦略を最適化します.
基本的な論理は,重要なピークと低ピークのピボットポイントを特定することです.重要なピークのピボットを計算するための重要なステップは:
重要な底辺のピボットの計算の論理は類似しています.
重要なピボットを得てから,価格が重要なピークピボットを突破するとショート,重要な底辺ピボットを突破するとロング.
この戦略の主な利点は以下の通りです.
主なリスクは以下のとおりです.
上記のリスクを制御するために,次の側面から最適化してください:
さらに最適化方向は以下の通りである.
他の指標と組み合わせて市場体制を決定し,トレンド市場での取引逆転を避ける.MACD,KDJなどを考慮してください.
マシン学習アルゴリズムを追加してパラメータを自動最適化します 遺伝子アルゴリズムやランダムフォレストのような方法を使って最適なパラメータセットを見つけることができます
量的なデータを用いて最適ATR範囲を見つける訓練モデル.より多くの歴史的なデータがパラメータ選択の精度を向上させる.
他の戦略と組み合わせることを検討し,異なる戦略タイプの強みを活用します.例えば,トレンドフォロー戦略と組み合わせ,レンジング中に逆転,持続するトレンド中にトレンドフォロー.
この重要なピボット逆転戦略は,ATRを計算しフィルターを設定することによって意味のない小さな変動をフィルタリングする.重要なピボットでの取引逆転のみが戦略の収益性を効果的に向上させることができる.同時に,パラメータ最適化困難も増加させる.最適なパラメータは,ATR範囲,ストップ損失/利益率等を総合的に考慮することによって見つけなければならない.徹底的に最適化されれば,非常に効率的で安定した短期取引戦略になることができる.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("QuantNomad - Significant Pivot Reversal Strategy", shorttitle = "SPPS", overlay=true) // Inputs leftBars = input(4, title = 'PP Left Bars') rightBars = input(2, title = 'PP Right Bars') atr_length = input(14, title = 'ATR Length') atr_mult = input(0.1, title = 'ATR Mult') // Pivot High Significant Function pivotHighSig(left, right) => pp_ok = true atr = atr(atr_length) for i = 1 to left if (high[right] < high[right+i] + atr * atr_mult) pp_ok := false for i = 0 to right-1 if (high[right] < high[i] + atr * atr_mult) pp_ok := false pp_ok ? high[right] : na // Pivot Low Significant Function pivotLowSig(left, right) => pp_ok = true atr = atr(atr_length) for i = 1 to left if (low[right] > low[right+i] - atr * atr_mult) pp_ok := false for i = 0 to right-1 if (low[right] > low[i] - atr * atr_mult) pp_ok := false pp_ok ? low[right] : na swh = pivotHighSig(leftBars, rightBars) swl = pivotLowSig (leftBars, rightBars) swh_cond = not na(swh) hprice = 0.0 hprice := swh_cond ? swh : hprice[1] le = false le := swh_cond ? true : (le[1] and high > hprice ? false : le[1]) if (le) strategy.entry("PivRevLE", strategy.long, comment="PivRevLE", stop=hprice + syminfo.mintick) swl_cond = not na(swl) lprice = 0.0 lprice := swl_cond ? swl : lprice[1] se = false se := swl_cond ? true : (se[1] and low < lprice ? false : se[1]) if (se) strategy.entry("PivRevSE", strategy.short, comment="PivRevSE", stop=lprice - syminfo.mintick)