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

作者: リン・ハーンチャオチャン,日付: 2024-01-29 14:58:15
タグ:

img

概要

この戦略は,ATRを計算し,ATRフィルタを設定することで,非重要なピボットポイントを除去し,本当に重要なポイントのみで取引することで,伝統的なピボットポイント逆転戦略を最適化します.

戦略の論理

基本的な論理は,重要なピークと低ピークのピボットポイントを特定することです.重要なピークのピボットを計算するための重要なステップは:

  1. ATR を計算し,ATR フィルター因子 atr_mult を設定する.
  2. 左側にある一定の数のバーを横切る (左Barsによって設定される),ピークピボットが左側にある任意の高値 + ATR*atr_multよりも高くなった場合,ピボットは無効である.
  3. 右側にある一定の数のバーを横切る (rightBarsによって設定される),ピークピボットは右側の任意の高値 + 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)

もっと