重要なピボットポイント反転戦略


作成日: 2024-01-29 14:58:15 最終変更日: 2024-01-29 14:58:15
コピー: 1 クリック数: 682
1
フォロー
1617
フォロワー

重要なピボットポイント反転戦略

概要

この戦略は,ATRを計算してATRフィルタリングファクターを設定することで,意味のない支柱をフィルタリングし,本当に重要な支柱のみを取引する伝統的な支柱逆転戦略に基づいて最適化されています.

戦略原則

この戦略の核心的な論理は,重要な高点支柱と低点支柱を計算することである.高点支柱を計算する主なステップは,

  1. ATRを計算し,ATRフィルタファクターatr_mult を設定する.
  2. 左側のK線を一定数のK線を横切る (leftBarsで設定),高点支点が左側のK線のいずれかの高点より高い場合+ATR*atr_multでは,その支点は無効である.
  3. 右側に一定の数のK線を横切る (rightBarsで設定),高点支点が右側のK線のいずれかの高点より高い場合 + ATR*atr_multでは,その支点は無効である.
  4. 高点支柱が上述の検査を経てまだ有効である場合は,その高点を重要な高点支柱として返します.

低点支点を計算する論理はこれと似ています.

重要な支柱点を取得した後,価格が重要な高点支柱点を破るとき,空白する. 価格が重要な低点支柱点を破るとき,多めにする.

優位分析

この戦略の主な利点は

  1. ATRとatr_multのフィルタリングパラメータにより,意味のない小さな波動をフィルタリングして,本当に重要な支点のみを取引し,意味のない取引を避けることができます.
  2. ATRパラメータは動的に調整され,大幅波動する市場において取引範囲を自動的に調整し,過度な取引を避ける.
  3. 支柱の逆転戦略は勝率や利益率も高い.

リスク分析

この戦略の主なリスクは

  1. ATRパラメータの設定を間違えた場合,有効な取引機会が過濾される可能性があります.ATRが大きすぎると,有効な支点も過濾される可能性があります.
  2. 点逆転戦略自体は,閉じ込められるリスクが残っており,そのリスクをコントロールするために,止損を設定する必要があります.
  3. 逆転策略は取引コストに敏感であり,合理的なストップ・ロズとストップ・ストップの設定が必要である.

上記のリスクを制御するために,以下の方法で最適化できます.

  1. ATRパラメータを最適化して,十分な取引機会を確保する.
  2. 合理的なストップ・ストップ比率を設定する.
  3. 取引コストの影響を軽減するために,ポジション開設数を適切に調整してください.

最適化の方向

この戦略は,以下の方向からさらに最適化できます.

  1. 他の指標と組み合わせて市場のトレンドの状態を判断し,トレンドの状況で反転取引が起こらないようにする.MACD,KDJなどの指標を追加することを考慮することができる.

  2. 機械学習アルゴリズムを追加し,パラメータを自動的に最適化します. 遺伝的アルゴリズム,ランダムフォレストなどの方法を用いて最適なパラメータの組み合わせを見つけることができます.

  3. 定量データを追加して訓練し,最適のATR範囲を見つけます. 歴史データを追加すると,パラメータ選択の正確性が向上します.

  4. 他の戦略の組み合わせで使用することを考えることができる.例えば,トレンド追跡戦略の組み合わせ,整合で反転,トレンドで順位.

要約する

この重要な支点逆転戦略は,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)