ピボットポイントの反転と終了に基づく取引戦略


作成日: 2024-04-30 15:57:54 最終変更日: 2024-04-30 15:57:54
コピー: 0 クリック数: 753
1
フォロー
1617
フォロワー

ピボットポイントの反転と終了に基づく取引戦略

概要

この戦略は,ピボットポイントを基に市場逆転点を識別し,その基礎で取引する.市場が左側の4K線内にあるピボットポイント高点 (ピボットハイ) が出現したとき,戦略は多めにポジションを開く.市場が左側の4K線内にあるピボットポイント低点 (ピボットロー) が出現したとき,戦略は空白にポジションを開く.戦略の止損は,開設価格の上下最小価格変動単位 (syminfo.mintick) に設定される.戦略の退出条件は,次の2つである: (1) 次の反対方向のピボットポイントが出現したとき,ポジションを平準化する. (2) 浮動損失が30%に達したとき,ポジションを平準化する.

戦略原則

  1. ta.pivothigh () とta.pivotlow () 関数を用いて,左側の4つのK線,右側の2つのK線の範囲内の枢軸点の高点 (swh) と低点 (swl) を計算する.
  2. 枢軸点高点があるときに,最高価格を更新し,現在の最高価格が以前の最高価格より高いことを満たすときに,複数入場条件を打開する.
  3. 多進条件 ((le) が成立すると,枢軸点高点上にある最小変動単位 ((syminfo.mintick) の位置でポジションを開き多進する.
  4. 多行に類似して,枢軸の低点があるとき (swl_cond) は最低価格 (lprice) を更新し,かつ,現在の最低価格が以前の最低価格より低いとき,空白入場条件 (se) を開きます.
  5. 空白入場条件 (se) が成立すると,枢軸点低点下の一最小変動単位 (syminfo.mintick) の位置でポジションを開き空白する.
  6. exitAtNextPivot () 関数では,多頭ポジションを保有する場合は,次の枢軸点の低点の下の最小変化単位で止まります.空頭ポジションを保有する場合は,次の枢軸点の高点上の最小変化単位で止まります.
  7. exitIfProfitLessThanThirtyPercent () 関数では,多頭と空頭ポジションの減率を計算し,損失が30%を超えると平仓する.

戦略的優位性

  1. 枢軸は,市場のサポートとプレッシャーの位置をよく反映し,ある程度の市場認識を持つ一般的な技術分析指標である.
  2. 市場が逆転するチャンスを掴むために,枢軸の突破時に入場する.
  3. 2つの退出条件が設定されている.一つは,次の逆方向の枢軸点に基づく技術的退出であり,もう一つは,損失パーセントに基づく風力制御的退出であり,戦略の撤回を一定程度に制御することができる.

戦略リスク

  1. 枢軸点指数自体にも一定の遅滞とシグナル頻度の問題があり,震動の市で不良なパフォーマンスを示す可能性があります.
  2. 固定的4K線と2K線計算パラメータは,すべての市場状態に適用されない可能性があり,一定の自主性および柔軟性が欠けている.
  3. スタンプポジションは,入場価格より近い距離 ((最小の変動単位)) で,市場が激しく波動するときに捨てられる可能性がある.
  4. 損失の30%で止まる設定は過度に緩やかであり,取り戻しの幅が大きすぎます.

戦略最適化の方向性

  1. 指標の感度とリアルタイム性を高めるために,因子型枢軸点,重量軸点などの他のタイプの枢軸点指標を使用することができます.
  2. 右と右のK線数は,入力パラメータとして,パラメータ最適化によって最適な値を探すことができる.
  3. ストップポジションはATRまたはパーセンテージストップとして最適化され,前者は市場の変動率の変化に自律的に調整され,後者はリスクを制御可能な範囲に制限することができます.
  4. 30%の負債の平仓条件は緊縮して,戦略的撤退を軽減することができる.また,利潤の百分位平仓条件を増加させ,浮動と浮動損失を同時に管理することができる.
  5. 枢軸突破に基づいて,トレンドフィルター,波動率フィルターなどの他のフィルター条件を重ねて信号の質を向上させることができる.

要約する

この戦略は,枢軸指標をベースに二方向の取引システムを構築し,枢軸高点で多行,低点で空行することによって市場の逆転の機会を捕捉する.この戦略は,理論的な基礎と実践的な価値がありますが,枢軸指標そのものの限界のために,この戦略は,実際の動作でいくつかのリスクと挑戦に直面する可能性があります.枢軸指標のタイプ,パラメータ,フィルタリング条件,ストップ損失などの最適化により,この戦略の安定性と収益性をさらに向上させる見込みがあります.

ストラテジーソースコード
/*backtest
start: 2023-04-24 00:00:00
end: 2024-04-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Pivot Reversal Strategy with Pivot Exit", overlay=true)

leftBars = input(4)
rightBars = input(2)

var float dailyEquity = na

// Reset equity to $10,000 at the beginning of each day
isNewDay = ta.change(time("D")) != 0
if (isNewDay)
    dailyEquity := 10000

// Calculate pivot highs and lows
swh = ta.pivothigh(leftBars, rightBars)
swl = ta.pivotlow(leftBars, rightBars)

// Define long entry condition
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])

// Enter long position if long entry condition is met
if (le)
    strategy.entry("PivRevLE", strategy.long, comment="EnterLong", stop=hprice + syminfo.mintick)

// Define short entry condition
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])

// Enter short position if short entry condition is met
if (se)
    strategy.entry("PivRevSE", strategy.short, comment="EnterShort", stop=lprice - syminfo.mintick)

// Exit condition: Exit at the next pivot point
exitAtNextPivot() =>
    if strategy.opentrades > 0
        if strategy.position_size > 0
            // Exiting long position at next pivot low
            if not na(swl)
                strategy.exit("ExitLong", "PivRevLE", stop=swl - syminfo.mintick)
        else
            // Exiting short position at next pivot high
            if not na(swh)
                strategy.exit("ExitShort", "PivRevSE", stop=swh + syminfo.mintick)

// Call exitAtNextPivot function
exitAtNextPivot()

// Exit condition: Exit if profit is less than 30%
exitIfProfitLessThanThirtyPercent() =>
    if strategy.opentrades > 0
        if strategy.position_size > 0
            // Calculate profit percentage for long position
            profit_percentage_long = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
            // Exiting long position if profit is less than 30%
            if profit_percentage_long < -30
                strategy.close("PivRevLE")
        else
            // Calculate profit percentage for short position
            profit_percentage_short = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
            // Exiting short position if profit is less than 30%
            if profit_percentage_short < -30
                strategy.close("PivRevSE")

// Call exitIfProfitLessThanThirtyPercent function
exitIfProfitLessThanThirtyPercent()