Stratégie de négociation de rupture à court terme de renversement

Auteur:ChaoZhang est là., Date: 2023-11-21 17h03:32
Les étiquettes:

img

Résumé

Cette stratégie vise à saisir les opportunités de trading d'inversion à court terme. Elle ouvrira une position courte après N barres ascendantes consécutives et fermera une position après M barres descendantes consécutives.

La logique

  1. Paramètres d'entrée: nombre de barres ascendantes consécutives N, barres descendantes consécutives M
  2. Définition:
    • ups compte le nombre de barres supérieures, prix>prix[1] puis +1, sinon réinitialisé à 0
    • dns compte le nombre de barres vers le bas, prix
  3. Entrée: courte lorsque ups≥N; position étroite lorsque dns≥M
  4. Exit: stop loss/take profit fixe ou fin de période

Les avantages

  1. Capturez les opportunités de négociation de renversement, adaptées à la négociation à court terme
  2. Réglage du calendrier flexible pour répondre aux différents plans de négociation
  3. L'exposition au risque est calculée sur la base de l'exposition au risque.

Les risques

  1. L'inversion à court terme peut échouer et s'inverser à nouveau, entraînant une perte
  2. Paramètres N, M raisonnables nécessaires, trop grands ou trop petits défavorables
  3. Un temps d'arrêt inapproprié peut ne pas permettre d'arrêter la perte en temps opportun

Directions d'optimisation

  1. Combiner avec l'indicateur de tendance pour éviter les transactions contre tendance
  2. Réglage dynamique des paramètres N, M
  3. Optimiser le mécanisme de stop loss

Conclusion

La stratégie capture les opportunités de trading à court terme à travers des modèles statistiques de ligne K. Un ajustement raisonnable des paramètres et des mesures de contrôle des risques sont cruciaux pour des bénéfices stables.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

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

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.short)

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 = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// 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")
message_takeprofit = input("", title="Take Profit message")
message_stoploss = input("", title="Stop Loss message")

// Strategy Execution
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (dns >= consecutiveBarsDown) 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_takeprofit)
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_stoploss)






Plus de