Stratégie de négociation de rupture contradictoire

Auteur:ChaoZhang est là., Date: le 25 octobre 2023 12:09:40
Les étiquettes:

img

Résumé

La stratégie de trading de rupture contrariaire est une stratégie qui prend des signaux contraires basés sur des hausses ou des baisses de prix consécutives pour aller long lorsque la condition courte est remplie ou aller court lorsque la condition longue est remplie.

La logique de la stratégie

La stratégie est principalement mise en œuvre à travers les éléments suivants:

  1. Définir les périodes consécutives de hausse et de baisse des prix, c'est-à-dire les périodes consécutives de hausse et de baisse des prix.

  2. Calculer la hausse et la baisse du prix actuel par rapport au prix de la période précédente. Calculer la durée des périodes de hausse ou de baisse consécutives actuelles basées sur la hausse et la baisse.

  3. Définir la plage de temps de backtesting pour limiter la stratégie à fonctionner uniquement dans le temps de backtesting à travers time_cond.

  4. Configurez l'heure de négociation quotidienne pour limiter les signaux de négociation à être émis uniquement dans le délai imparti via timetobuy.

  5. Lorsque le cycle ascendant consécutif atteint la longueur définie, émettre un signal long via strategy.long. Lorsque le cycle descendant consécutif atteint la longueur définie, émettre un signal court via strategy.short.

  6. Les prix de stop loss et de take profit peuvent être définis. Fixer des stops à court terme pour les positions longues et des stops à long terme pour les positions courtes. Fixer des profits à long terme pour les positions longues et des profits à court terme pour les positions courtes.

  7. Les messages de signaux commerciaux peuvent être réglés pendant l'envoi.

  8. Émettre des signaux longs ou courts lorsque les conditions sont remplies en fonction des paramètres et des niveaux de prix ci-dessus.

Analyse des avantages

Cette stratégie de rupture contraire présente les avantages suivants:

  1. Capture les points d'inversion des prix. L'opération contraire peut obtenir de bons profits. Les opérations dans la direction opposée lorsque le prix forme une tendance peuvent profiter des inversions de prix.

  2. Paramètres configurables flexibles. Les paramètres tels que les périodes consécutives peuvent être ajustés, les niveaux de stop loss et de take profit peuvent être définis, le délai de négociation peut être limité. Les paramètres peuvent être optimisés en fonction des conditions du marché.

  3. Le fait d'établir un stop loss et un take profit à l'avance aide à contrôler les risques de trading après un long ou un short.

  4. Les messages commerciaux facilitent le trading automatisé.

  5. L'ajout de paramètres d'intervalle de temps de backtesting permet d'observer facilement la performance de la stratégie dans différentes conditions de marché.

Analyse des risques

La stratégie comporte également des risques à prendre en compte:

  1. Évitez les événements d'actualité importants. Les tendances des prix sont imprévisibles lors des annonces majeures, provoquant des signaux et des pertes longs et courts simultanés. Les principales versions économiques doivent être évitées.

  2. Moins efficace lorsque les retours ne sont pas clairs, moins efficace lorsque les tendances sont ambiguës, le trading inverse doit être utilisé avec prudence.

  3. L'optimisation doit éviter une dépendance excessive aux données de backtesting, qui ne représentent pas les tendances futures. Les paramètres doivent être ajustés de manière appropriée lors de la négociation en direct.

  4. Une fréquence de négociation élevée présente des risques de surtrading.

  5. Les stratégies de stop loss et de take profit peuvent être optimisées pour réduire les risques.

Directions d'optimisation

La stratégie peut être encore optimisée dans les aspects suivants:

  1. Ajouter la détection des tendances pour éviter les renversements aléatoires sur les marchés non en tendance, en utilisant la volatilité, les canaux, etc. pour évaluer les tendances et capturer les renversements.

  2. Optimiser les arrêts et les prises pour les ajuster en fonction de la volatilité du marché, en utilisant des méthodes basées sur le pourcentage, ATR ou autres méthodes adaptatives.

  3. Ajoutez une analyse du volume pour éviter les faux signaux provenant uniquement des tendances des prix.

  4. Diversification du portefeuille sur plusieurs produits pour réduire le risque d'un seul actif.

  5. Optimisation des paramètres et apprentissage automatique: collectez plus de données historiques et utilisez l'apprentissage automatique pour optimiser automatiquement les paramètres pour des stratégies plus robustes.

Conclusion

La stratégie de rupture contrariaire fournit un bon signal de trading en capturant les renversements de prix par le biais d'opérations contrariaires. Les avantages incluent une configuration flexible, un contrôle des risques et une aptitude au trading automatisé.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-10-24 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)






Plus de