Stratégie de déplacement du volume sur plusieurs périodes


Date de création: 2023-11-03 16:35:15 Dernière modification: 2023-11-03 16:35:15
Copier: 0 Nombre de clics: 621
1
Suivre
1617
Abonnés

Stratégie de déplacement du volume sur plusieurs périodes

Aperçu

La stratégie est basée sur la rupture de la quantité de mouvement pour générer un signal de négociation. L’idée principale est d’observer les mouvements des prix au cours d’une période donnée et de juger de la variation de la tendance des prix en fonction de la rupture de la quantité de mouvement.

Principe de stratégie

Cette stratégie permet de juger de la fluctuation des prix en calculant les hauts et les bas du cours d’une période donnée, appelés hauts pivots et bas pivots.

En particulier, la stratégie calcule le plus haut prix de la ligne K de la racine N du passé comme un pivot high, et le plus bas prix de la ligne K de la racine M du passé comme un pivot low. Un signal de coupe est généré lorsque le plus haut de la ligne K actuelle dépasse le pivot high; un signal de coupe est généré lorsque le plus bas de la ligne K actuelle tombe sous le pivot low.

Après avoir effectué une survente et une réduction de prix, la stratégie utilise l’ATR pour définir un arrêt et un arrêt par étapes dans la journée. De plus, la stratégie peut également liquider toutes les positions dans une période de temps spécifique (par exemple, 14h55).

Cette stratégie utilise simplement et efficacement les ruptures de prix dans une certaine période pour capturer les tendances, ce qui est très approprié pour les transactions de courte durée dans la journée.

Avantages stratégiques

  • Les signaux sont plus fiables en exploitant les mouvements de prix pour capturer les changements de tendance.
  • Il suffit d’une base de données de ligne K pour être simple.
  • Arrêt raisonnable, arrêt progressif dans la journée, contrôle efficace des risques
  • Convient pour les courts trajets de jour, pour éviter les risques de nuit
  • Moins de paramètres et plus facile à optimiser

Risques stratégiques et solutions

  • Il y a un certain retard et une possibilité de manquer le début d’une tendance

Le moment d’entrée peut être déterminé par un ajustement de la période ou une combinaison d’autres indicateurs.

  • Il y a plus de faux signaux quand la tendance n’est pas claire

Les paramètres peuvent être ajustés ou des conditions de filtrage peuvent être ajoutées, telles que les indicateurs de tendance, le volume de transactions, etc.

  • Les transactions sur courte durée nécessitent des coûts de capital plus élevés

Vous pouvez ajuster la taille de votre position ou prolonger la durée de votre position de manière appropriée

  • Les résultats peuvent varier en fonction des paramètres d’optimisation et des conditions du marché.

Les paramètres doivent être ajustés en fonction des différentes conditions du marché ou optimisés automatiquement par des méthodes telles que l’apprentissage automatique.

Orientation de l’optimisation de la stratégie

  • Essayez d’autres données de prix, comme le prix typique, le prix moyen, etc.

  • Conditions de filtrage telles que l’augmentation du volume ou de la volatilité

  • Essayez différentes combinaisons de paramètres

  • Déterminer la direction de la tendance en combinant les indicateurs de tendance

  • Optimiser automatiquement les paramètres à l’aide de l’apprentissage automatique

  • L’extension à plusieurs périodes de temps, pour passer à l’heure du match

Résumer

L’idée générale de la stratégie est claire et concise, elle capture les tendances à court terme en exploitant efficacement les ruptures mobiles des prix, elle permet d’obtenir des facteurs de profit plus élevés. La stratégie a moins de paramètres, elle est facile à tester et à optimiser, elle convient aux opérations sur les courts-circuits de la journée. Bien qu’il y ait un certain niveau de retard et de faux signaux, elle peut être améliorée par des méthodes telles que l’ajustement des paramètres, l’ajout de conditions de filtrage, etc., avec une grande marge d’optimisation.

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