
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.
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.
Le moment d’entrée peut être déterminé par un ajustement de la période ou une combinaison d’autres indicateurs.
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.
Vous pouvez ajuster la taille de votre position ou prolonger la durée de votre position de manière appropriée
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.
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
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.
/*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)