マルチタイムフレームピボットリバーサル戦略とパーセンテージダイナミックストッププロフィットおよびストップロスシステム

MTF Pivot TP SL
作成日: 2025-02-08 15:04:47 最終変更日: 2025-02-08 15:04:47
コピー: 1 クリック数: 412
1
フォロー
1617
フォロワー

マルチタイムフレームピボットリバーサル戦略とパーセンテージダイナミックストッププロフィットおよびストップロスシステム

概要

この戦略は,マルチタイムサイクルの分析に基づく高度な取引システムで,より高いタイムサイクルの上で重要な枢軸ポイントの位置を特定することによって,市場の反転の機会を捕捉します.この戦略は,ダイナミックなパーセントのストップ・ロスの仕組みを組み合わせて,リスクを効果的に制御しながら,安定した収益を追求します.このシステムは,取引間隔制御と時間範囲のテスト機能も含んでいます.

戦略原則

戦略の中核となるロジックは、次の主要な要素に基づいています。

  1. より高い時間周期 (デフォルトは60分) で枢軸点分析を使用して,leftBarsとrightBarsのパラメータで枢軸形成条件を定義する.
  2. 各取引のリスクとリターン目標を,動的に計算されたパーセンテージストップ・ロスの位置によって管理する.
  3. 多時間周期分析により,市場構造の判断がより確実になり,偽信号が減少する.
  4. 取引間隔制御メカニズム (デフォルトで1440分) は,過剰取引を避け,信号品質を向上させる.
  5. 時間帯テスト機能は,特定の歴史区間での戦略検証を可能にします.

戦略的優位性

  1. 多時間周期分析により,市場全体的な見方を得ることができ,偽のブレイクを減らすことができます.
  2. ダイナミックパーセンテージストップ・ストップ・ロスは,異なる市場環境に適応し,戦略の安定性を高めます.
  3. 取引間隔制御は,過剰取引を防止し,取引コストを削減するのに有効である.
  4. タイムスケープテスト機能は,戦略の最適化と過去のパフォーマンスの分析を容易にする.
  5. コード構造は明確で,維持し,修正しやすい.

戦略リスク

  1. 固定パーセンテージのストップは,波動の激しい市場では柔軟性がないかもしれません.
  2. 長い取引間隔は,有効な信号の一部を逃す可能性があります.
  3. 枢軸の認識が遅れているため,入場タイミングが理想的でない可能性があります.
  4. 横盤市場では偽信号が多く発生する可能性があります.

戦略最適化の方向性

  1. 自動波動率指標を導入し,ストップ・ストップ・損失パーセントを動的に調整する.
  2. 市場環境のフィルターを追加し,トレンドの強さに応じて戦略のパラメータを調整します.
  3. 交通量分析を統合して入口信号の信頼性を高めます.
  4. 市場変動に基づくダイナミックな取引間隔調整を実現する.
  5. 移動式止損メカニズムへの加入は,非常に有益です.

要約する

この戦略は,複数のタイムサイクル分析と動的リスク管理によって,完全な取引システムフレームワークを提供している.いくつかの最適化が必要な場所があるが,全体的な設計理念は合理的で,良い実用性がある.提案された最適化方向によって,戦略は,異なる市場環境でより安定したパフォーマンスを期待している.

ストラテジーソースコード
/*backtest
start: 2025-01-01 00:00:00
end: 2025-01-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Pivot Reversal Strategy with MTF TP & SL in Percent and Test Range", overlay=true)

// Входные параметры
higher_tf = input.timeframe("60", title="Higher Timeframe for Breakout Check")  // Таймфрейм для анализа пробоя
leftBars = input(4, title="Left Bars")
rightBars = input(2, title="Right Bars")
TP_percent = input.float(1.0, title="Take Profit (%)", minval=0.1, step=0.1)   // Тейк-профит в процентах
SL_percent = input.float(0.5, title="Stop Loss (%)", minval=0.1, step=0.1)    // Стоп-лосс в процентах
trade_interval = input.int(1440, title="Minimum Time Between Trades (Minutes)") // Интервал между сделками

// Диапазон тестирования (используем UNIX timestamps)
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")  // Стартовая дата для тестирования
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")    // Конечная дата для тестирования

// Проверка, попадает ли текущая свеча в указанный диапазон времени
in_test_range = true

// Определение пивотов на более крупном таймфрейме
higher_tf_high = request.security(syminfo.tickerid, higher_tf, ta.pivothigh(leftBars, rightBars))
higher_tf_low = request.security(syminfo.tickerid, higher_tf, ta.pivotlow(leftBars, rightBars))

// Последнее время открытия сделки
var float last_trade_time = na

// Логика для лонга
swh_cond = not na(higher_tf_high)
hprice = 0.0
hprice := swh_cond ? higher_tf_high : hprice[1]
le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

if le and in_test_range and (na(last_trade_time) or (time - last_trade_time >= trade_interval * 60 * 1000))
    tp_price_long = hprice * (1 + TP_percent / 100)  // Тейк-профит в процентах
    sl_price_long = hprice * (1 - SL_percent / 100)  // Стоп-лосс в процентах
    strategy.entry("PivRevLE", strategy.long, stop=hprice + syminfo.mintick)
    strategy.exit("TP_SL_Long", from_entry="PivRevLE", 
                  limit=tp_price_long, 
                  stop=sl_price_long)
    last_trade_time := time

// Логика для шорта
swl_cond = not na(higher_tf_low)
lprice = 0.0
lprice := swl_cond ? higher_tf_low : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

if se and in_test_range and (na(last_trade_time) or (time - last_trade_time >= trade_interval * 60 * 1000))
    tp_price_short = lprice * (1 - TP_percent / 100)  // Тейк-профит в процентах
    sl_price_short = lprice * (1 + SL_percent / 100)  // Стоп-лосс в процентах
    strategy.entry("PivRevSE", strategy.short, stop=lprice - syminfo.mintick)
    strategy.exit("TP_SL_Short", from_entry="PivRevSE", 
                  limit=tp_price_short, 
                  stop=sl_price_short)
    last_trade_time := time

// Для наглядности отображаем уровни на графике
plot(le and in_test_range ? hprice * (1 + TP_percent / 100) : na, color=color.green, title="Long Take Profit")
plot(le and in_test_range ? hprice * (1 - SL_percent / 100) : na, color=color.red, title="Long Stop Loss")
plot(se and in_test_range ? lprice * (1 - TP_percent / 100) : na, color=color.green, title="Short Take Profit")
plot(se and in_test_range ? lprice * (1 + SL_percent / 100) : na, color=color.red, title="Short Stop Loss")