Stratégie de retournement de pivot multi-périodes et système de stop-profit et stop-loss dynamique en pourcentage

MTF Pivot TP SL
Date de création: 2025-02-08 15:04:47 Dernière modification: 2025-02-08 15:04:47
Copier: 1 Nombre de clics: 412
1
Suivre
1617
Abonnés

Stratégie de retournement de pivot multi-périodes et système de stop-profit et stop-loss dynamique en pourcentage

Aperçu

La stratégie est un système de trading avancé basé sur l’analyse de plusieurs périodes de temps, qui capture les opportunités de retournement du marché en identifiant les points pivots clés sur des périodes de temps plus élevées. La stratégie combine un mécanisme de stop-loss en pourcentage dynamique pour contrôler efficacement les risques tout en recherchant des gains stables. Le système comprend également des fonctions de contrôle de l’intervalle de négociation et de test de la fourchette de temps, ce qui le rend plus adapté aux environnements de trading réels.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. L’analyse des points cardinaux est utilisée sur une période de temps plus longue (de 60 minutes par défaut) pour définir les conditions de formation des axes cardinaux via les paramètres leftBars et rightBars.
  2. Gérer le risque et les objectifs de rendement de chaque transaction en calculant dynamiquement le pourcentage des positions de stop-loss.
  3. L’analyse des cycles de temps multiples fournit des jugements plus fiables de la structure du marché et réduit les faux signaux.
  4. Le mécanisme de contrôle de l’intervalle de transaction (par défaut 1440 minutes) évite les transactions excessives et améliore la qualité du signal.
  5. La fonctionnalité de test des intervalles de temps permet la vérification de la stratégie à des intervalles historiques spécifiques.

Avantages stratégiques

  1. L’analyse multi-périodes offre une vision plus complète du marché et réduit les faux-breechers.
  2. Le pourcentage dynamique de stop loss s’adapte à différents environnements de marché et améliore la stabilité de la stratégie.
  3. Le contrôle de l’intervalle de transaction est efficace pour prévenir les transactions excessives et réduire les coûts de transaction.
  4. La fonctionnalité de test de la période permet l’optimisation de la stratégie et l’analyse de la performance historique.
  5. La structure du code est claire, facile à entretenir et à modifier.

Risque stratégique

  1. Dans les marchés très volatils, le stop loss à pourcentage fixe peut ne pas être assez flexible.
  2. Les échanges à intervalles plus longs risquent de manquer certains signaux valides.
  3. Le retard dans l’identification des pôles peut entraîner des délais d’entrée insuffisants.
  4. Il est possible qu’il y ait trop de faux signaux sur le marché horizontal.

Orientation de l’optimisation de la stratégie

  1. L’introduction d’un indicateur de volatilité adaptatif pour ajuster dynamiquement le pourcentage de stop-loss.
  2. Ajout d’un filtre d’environnement de marché pour ajuster les paramètres de stratégie en fonction de l’intensité de la tendance.
  3. L’intégration de l’analyse de trafic améliore la fiabilité du signal d’entrée.
  4. Il est possible d’effectuer des ajustements dynamiques des échanges basés sur les fluctuations du marché.
  5. Il est intéressant d’ajouter la protection de Stop Loss Mobile.

Résumer

La stratégie fournit un cadre de système de négociation complet grâce à une analyse des cycles de temps multiples et à une gestion dynamique des risques. Bien qu’il y ait des endroits qui nécessitent une optimisation, l’idée de conception globale est raisonnable et présente une bonne utilité. Grâce à l’orientation de l’optimisation proposée, la stratégie devrait être plus stable dans différents environnements de marché.

Code source de la stratégie
/*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")