
L’idée principale de la stratégie est de déterminer le moment d’entrée en combinant la résistance au support et la rupture du volume de transaction, et d’utiliser l’indicateur ATR pour réaliser un ajustement dynamique du prix de suivi de la perte après la prise de bénéfices, afin d’obtenir plus de bénéfices potentiels.
Cette stratégie est principalement composée de plusieurs éléments logiques:
Utilisez les fonctions ta.pivothigh et ta.pivotlow pour calculer le prix le plus élevé de la ligne L_Bars à la racine K et le prix le plus bas de la ligne R_Bars à la racine K, en tant que ligne de résistance et de support.
Faire plus lorsque le prix de clôture franchit la résistance et que le volume dépasse la limite de volumeRange; Faire plus lorsque le prix de clôture franchit la ligne de support et que le volume dépasse la limite de volumeRange.
Après avoir fait un plus, utilisez close-ATR_LO comme arrêt long; après avoir fait un short, utilisez close+ATR_SH comme arrêt court, pour réaliser un arrêt de suivi d’ajustement dynamique.
Pendant les heures de négociation ((0915-1445), il n’est plus possible d’ouvrir de nouveaux ordres après que le premier signal de négociation a été fait chaque jour et que les bénéfices ou les pertes ont atteint le niveau de risque.
La théorie de la résistance aux supports, combinée à l’indicateur de la quantité de trafic, permet une meilleure précision du temps d’entrée.
L’indicateur ATR permet de suivre les stop-loss et d’ajuster les positions de stop-loss de manière flexible en fonction de la volatilité du marché, ce qui réduit la possibilité de récupération des bénéfices après avoir réalisé des bénéfices.
Le contrôle approprié du nombre de transactions par jour et du risque de transaction unique aide à maîtriser les tendances et à éviter les pertes excessives.
La résistance au support peut être défaillante et ne pas fournir un signal d’entrée efficace.
L’indicateur ATR est trop élevé, ce qui peut entraîner des arrêts trop éloignés et augmenter le risque de pertes.
Si l’indicateur de transaction est trop petit, il peut entraîner des opportunités manquées. S’il est trop grand, il peut entraîner des signaux erronés.
La solution est simple:
Adaptation des paramètres de résistance au support en fonction des caractéristiques de chaque variété
Optimisation du coefficient ATR et des paramètres de réduction du volume de transactions
Le temps d’entrée combiné à d’autres indicateurs
Combiné à d’autres indicateurs pour déterminer le moment de l’entrée, comme la moyenne mobile
Optimisation des paramètres ATR et de dégagement
Optimisation des paramètres dynamiques avec des algorithmes d’apprentissage automatique
Étendre à d’autres variétés et rechercher des paramètres réguliers
La stratégie intègre plusieurs outils d’analyse et, grâce à l’utilisation de la résistance, du volume de négociation et de la méthode de stop loss, elle est plus efficace lors de la phase de retracement. Cependant, le marché réel peut faire face à plus d’incertitudes et nécessiter une optimisation des paramètres et l’introduction d’autres indicateurs de jugement pour améliorer encore la performance du marché réel.
/*backtest
start: 2024-01-03 00:00:00
end: 2024-01-10 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// ____________ _________ _____________
// |____________| ||________| ||__________|
// || ____ || || || ______ ________ _____ ________
// || | || || ||________|| | || || || || | || /\\ | // |______| || || |______|
// || |===|| |=== ||__________ | || || || || |===|| /__\\ |=== || || \\ ||
// || | || ||___ || || |___|| ||___ ||___ || | || / \\ | \\ || || ___|| ||
// || ||________|| ||__________
// || ||________| ||__________|
//@version=5
strategy("SUPPORT RESISTANCE STRATEGY [5MIN TF]",overlay=true )
L_Bars = input.int(defval = 10, minval = 1 , maxval = 50, step =1)
R_Bars = input.int(defval = 15, minval = 1 , maxval = 50, step =1)
volumeRange = input.int(20, title='Volume Break [threshold]', minval = 1)
// ═══════════════════════════ //
// ——————————> INPUT <——————— //
// ═══════════════════════════ //
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, '0915-1445:1234567')
time_cond = not na(t)
// ══════════════════════════════════ //
// ———————————> 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
long_trail = close - ATR_LO
short_trail = 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')
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
// ————————————————————————————————————————————————————————> RESISTANCE/SUPPORT LEVELS DATA <————————————————————————————————————————————————————————————————————————————————————————————— //
// ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ //
Resistance_pi = fixnan(ta.pivothigh(L_Bars, R_Bars)[1])
Support_pi = fixnan(ta.pivotlow(L_Bars, R_Bars)[1])
r1 = plot(Resistance_pi, color=ta.change(Resistance_pi) ? na : color.red, offset=-(R_Bars + 1),linewidth=2, title='RESISTANCE')
s1 = plot(Support_pi, color=ta.change(Support_pi) ? na : color.green, offset=-(R_Bars + 1),linewidth=2, title='SUPPORT')
//Volume
vol_1 = ta.ema(volume, 5)
vol_2 = ta.ema(volume, 10)
osc_vol = 100 * (vol_1 - vol_2) / vol_2
// ══════════════════════════════════//
// ————————> LONG POSITIONS <————————//
// ══════════════════════════════════//
//******barinstate.isconfirmed used to avoid repaint in real time*******
if ( ta.crossover(close, Resistance_pi) and osc_vol > volumeRange and not(open - low > close - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close >= ema1 )
strategy.entry(id= "Long" ,direction = strategy.long, comment = "BUY")
plot(long_trail , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop')
if strategy.position_size > 0
strategy.exit("long tsl", "Long" , stop = long_trail ,comment='SELL')
// ═════════════════════════════════════//
// ————————> SHORT POSITIONS <————————— //
// ═════════════════════════════════════//
if ( ta.crossunder(close, Support_pi) and osc_vol > volumeRange and not(open - close < high - open) and strategy.opentrades==0 and barstate.isconfirmed and time_cond and close <= ema1 )
strategy.entry(id = "Short" ,direction = strategy.short, comment = "SELL")
if strategy.position_size < 0
strategy.exit("short tsl", "Short" , stop = short_trail ,comment='BUY')
// ════════════════════════════════════════════════//
// ————————> 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)