
この戦略は,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)