Stratégie de rupture du pivot intradien

Auteur:ChaoZhang est là., Date: 2023-11-03 16h35 et 15h
Les étiquettes:

img

Résumé

Cette stratégie génère des signaux de trading basés sur les écarts de prix au cours d'une période de temps spécifique.

La logique de la stratégie

La stratégie calcule le plus haut et le plus bas des prix dans un certain laps de temps, connu sous le nom de pivot high et pivot low, pour mesurer les mouvements des prix.

Plus précisément, il calcule le plus haut des N bares passées comme le plus haut pivot et le plus bas des M bares passées comme le plus bas pivot.

Après l'entrée, la stratégie utilise l'ATR pour le stop loss et le stop loss intrajournalier.

La stratégie capte efficacement les tendances en utilisant des écarts de prix simples au cours de certaines périodes, ce qui la rend idéale pour le trading intradien.

Les avantages

  • Capture fiable des variations de tendance à l'aide des écarts de prix
  • Mise en œuvre simple avec des données OHLC de base
  • Risque de gestion raisonnable de la perte par arrêt et de la perte par arrêt intrajournalier
  • Éviter les risques au jour le jour adaptés à la négociation intradienne
  • Peu de paramètres faciles à optimiser

Risques et atténuations

  • Décalage potentiel, risque de manquer le début de la tendance

    Ajuster le délai ou combiner d'autres indicateurs pour l'entrée

  • Plus de faux signaux lorsque la tendance est floue

    Ajustez les paramètres, ajoutez des filtres comme les indicateurs, le volume, etc.

  • Coûts en capital plus élevés pour les opérations actives au cours de la journée

    Ajustez la taille de la position, prolongez la période de détention

  • Confiance dans l'optimisation des paramètres

    Adapter les paramètres à l'évolution des conditions du marché en utilisant l'apprentissage automatique, etc.

Des possibilités d'amélioration

  • Testez d'autres données sur les prix comme le prix typique, le prix médian, etc.

  • Ajouter des filtres comme le volume, la volatilité

  • Essayez différentes combinaisons de paramètres

  • Incorporer des indicateurs de tendance pour déterminer la direction

  • Optimiser automatiquement les paramètres en utilisant l'apprentissage automatique

  • Élargir à plusieurs délais pour une meilleure entrée

Conclusion

La stratégie a une logique claire et concise, capitalisant efficacement sur les écarts de prix pour capturer les tendances à court terme avec de bons facteurs de profit. Avec peu de paramètres réglables faciles à tester et à optimiser, elle est bien adaptée au trading intradien.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//   ____________        _________           _____________
//  |____________|      ||________|          ||__________|
//       ||             ||        ||         ||
//       ||             ||________||         ||
//       ||     H E     ||________   U L L   ||       H A R T I S T
//       ||             ||        ||         ||
//       ||             ||________||         ||__________
//       ||             ||________|          ||__________|
  
//@version=5
// strategy("PIVOT STRATEGY [5MIN TF]",overlay=true ,commission_type = strategy.cash, commission_value = 30 , slippage = 2, default_qty_value = 60, currency = currency.NONE, pyramiding = 0)
leftbars = input(defval = 10)
rightbars = input(defval = 15)

// ═══════════════════════════ //
// ——————————> INPUTS <——————— //
// ═══════════════════════════ //

EMA1 = input.int(title='PRICE CROSS EMA', defval = 150, minval = 10 ,maxval = 400)
factor1 = input.float(title='_ATR LONG',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL LONG")
factor2 = input.float(title='_ATR SHORT',defval = 3.2 , minval = 1 , maxval = 5 , step = 0.1, tooltip = "ATR TRAIL SHORT")
risk = input.float(title='RISK',defval = 200 , minval = 1 , maxval = 5000 , step = 50, tooltip = "RISK PER TRADE")

var initialCapital = strategy.equity
t = time(timeframe.period, '0935-1400:1234567')
time_cond = true

// ══════════════════════════════════ //
// ———————————> EMA DATA <——————————— //
// ══════════════════════════════════ //
ema1 = ta.ema(close, EMA1)

plot(ema1, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema1')

// ══════════════════════════════════ //
// ————————> TRAIL DATA <———————————— //
// ══════════════════════════════════ //
// *******Calculate LONG TRAIL data*****
ATR_LO = ta.atr(14)*factor1

// *******Calculate SHORT TRAIL data*****
ATR_SH = ta.atr(14)*factor2

longStop = close - ATR_LO
shortStop = close + ATR_SH

// Plot atr data
//plot(longStop, color=color.new(color.green, 0), style=plot.style_linebr, title='Long Trailing Stop')
//plot(shortStop , color=color.new(color.red, 0), style=plot.style_linebr, title='Short Trailing Stop')

// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> PIVOT DATA <———————————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //

ph = ta.pivothigh(close,leftbars, rightbars)
pl = ta.pivotlow(close,leftbars, rightbars)

pvt_condition1 = not na(ph)

upper_price = 0.0
upper_price := pvt_condition1 ? ph : upper_price[1]

pvt_condition2 = not na(pl)

lower_price = 0.0
lower_price := pvt_condition2 ? pl : lower_price[1]

// Signals
long  = ta.crossover(high, upper_price + syminfo.mintick)
short = ta.crossunder(low, lower_price - syminfo.mintick)

plot(upper_price, color= close > ema1  ? color.green : na, style=plot.style_line, title='PH')

plot(lower_price,  color= close <  ema1  ? color.red : na, style=plot.style_line, title='PL')


// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******

if ( long and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
    strategy.entry(id= "Long" ,direction = strategy.long, comment = "B")
    
//plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')

if strategy.position_size > 0 
    strategy.exit("long tsl", "Long" , stop = longStop ,comment='S')
 

// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( short and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
    strategy.entry(id = "Short" ,direction = strategy.short,  comment = "S") 

if strategy.position_size < 0
    strategy.exit("short tsl", "Short" ,  stop = shortStop ,comment='B')

// ════════════════════════════════════════════════//
// ————————> CLOSE ALL POSITIONS BY 3PM <————————— //
// ════════════════════════════════════════════════//
strategy.close_all(when = hour == 14 and minute == 55)

// ════════════════════════════════════════//
// ————————> MAX INTRADAY LOSS  <————————— //
// ════════════════════════════════════════//
// strategy.risk.max_intraday_loss(type = strategy.cash, value = risk)



Plus de