La stratégie d'intersection EMA BreakHigh est une stratégie de trading basée sur la rupture de prix et le croisement de la moyenne mobile exponentielle (EMA). La stratégie utilise le prix le plus élevé dans une période spécifiée comme signal d'achat et l'EMA comme signal de vente. Lorsque le prix de clôture dépasse le prix le plus élevé dans la période spécifiée, la stratégie génère un signal d'achat. Lorsque le prix de clôture tombe en dessous de l'EMA, la stratégie génère un signal de vente. La stratégie définit également un prix stop-loss pour contrôler le risque.
Le principe de base de la stratégie de croisement de la EMA BreakHigh est de capturer les tendances du marché en utilisant la rupture des prix et la croisée de la EMA. Lorsque le prix dépasse le prix le plus élevé dans une période spécifiée, cela indique que le marché peut entrer dans une tendance haussière, de sorte que la stratégie génère un signal d'achat. En même temps, la EMA sert d'indicateur de suivi de tendance. Lorsque le prix tombe en dessous de la EMA, cela indique que la tendance haussière peut se terminer, de sorte que la stratégie génère un signal de vente.
La stratégie utilise les étapes suivantes pour mettre en œuvre le trading:
Par les étapes ci-dessus, la stratégie peut tirer profit de la tendance à la hausse du marché tout en utilisant le stop-loss pour contrôler le risque à la baisse.
La stratégie crossover EMA BreakHigh présente les avantages suivants:
Bien que la stratégie de croisement des EMA BreakHigh présente certains avantages, elle comporte également les risques suivants:
Pour atténuer ces risques, les mesures suivantes peuvent être envisagées:
Pour améliorer encore les performances de la stratégie crossover BreakHigh EMA, les orientations d'optimisation suivantes peuvent être envisagées:
Grâce aux mesures d'optimisation susmentionnées, la stabilité, l'adaptabilité et la rentabilité de la stratégie Crossover BreakHigh EMA peuvent être améliorées, ce qui lui permet d'atteindre de bonnes performances dans un plus grand nombre d'environnements de marché.
La stratégie BreakHigh EMA Crossover est une stratégie simple et efficace de suivi des tendances qui capture les tendances du marché en utilisant la rupture de prix et le croisement EMA tout en utilisant le stop-loss pour contrôler le risque à la baisse. La logique de la stratégie est claire, les paramètres sont flexibles et facile à comprendre et à mettre en œuvre. Bien que la stratégie comporte certains risques, tels que le risque de volatilité du marché, le risque d'inversion de tendance et le risque de paramétrage, ces risques peuvent être atténués grâce à des mesures appropriées de contrôle des risques, telles que l'ajustement des paramètres, la combinaison avec d'autres indicateurs et la définition d'un stop-loss raisonnable. En outre, la stratégie dispose d'un espace d'optimisation supplémentaire, tel que l'ajustement dynamique des paramètres, l'introduction d'un mécanisme de long-short-loss, l'optimisation du stop-loss et du take-profit, et la combinaison avec l'analyse fondamentale
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version = 5 strategy(title="BreakHigh Strategy", overlay=true) Period = input.int(34, "Number of previous bars(34,52 Recommend)") showbg = input(defval = false,title = "Show BackGround Color") showema = input(defval = true ,title = "Show Line") MarkBuySig = input(defval = true ,title = "Show Buy/Sell Signal") Risk_Per_Trade = input(2.5, '% of Risk Per Trade') / 100 // Risk% Per Trade Switch SLDAY = input(title='Lowest price of the previous number of bars', defval=9) Buysig = input(defval=true, title='Start Strategy') UseSl = input(defval=false, title='Use Stoploss Price') Compound = input(defval = false ,title = "Compound Profit") xtf = input.timeframe(title='** Fix chart to which time frame ? **)', defval='D') //BUY float buyLine = na buyLine := ta.highest(high,Period)[1] plot(showema ? buyLine : na, linewidth=1, style=plot.style_linebr, color=color.new(color.green, 0)) //SELL output = ta.ema(close, Period) show = request.security(syminfo.tickerid, xtf, output) FastL = plot(showema ? show : na, color=color.new(color.white, 0), linewidth=2, title='Slow EMA') //Buy-Sell Signal Green = close > buyLine // Buy Red = close < show // Sell buycond = Green and Green[1] == 0 sellcond = Red and Red[1] == 0 bullish = ta.barssince(buycond) < ta.barssince(sellcond) bearish = ta.barssince(sellcond) < ta.barssince(buycond) buy = bearish[1] and buycond sell = bullish[1] and sellcond plotshape(MarkBuySig ? buy : na, style=shape.labelup, text='Buy Next Bar', textcolor=color.new(color.black, 0), location=location.belowbar, color=color.new(color.green, 0)) plotshape(MarkBuySig ? sell : na, style=shape.labeldown, text='Sell Next Bar', textcolor=color.new(color.black, 0), location=location.abovebar, color=color.new(color.red, 0)) bgcolor(showbg ? bullish ? color.new(color.green,90) : color.new(color.red,90) : na ) // === BACKTEST RANGE === // use_date_range = input(true) FromYear = input.int(defval=2012, title='From Year', minval=1950) FromMonth = input.int(defval=1, title='From Month', minval=1) FromDay = input.int(defval=1, title='From Day', minval=1) ToYear = input.int(defval=9999, title='To Year', minval=1950) ToMonth = input.int(defval=1, title='To Month', minval=1) ToDay = input.int(defval=1, title='To Day', minval=1) in_date_range = use_date_range ? time > timestamp(FromYear, FromMonth, FromDay, 00, 00) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59) : true //****************************************************************************// ////////////////////////////////////////////// // define strategy entry / exit // ////////////////////////////////////////////// //****************************************************************************// // LONG CONDITIONS Select_Long_Condition_1 = close > buyLine // Buy when Have Signal Open_Long_Condition = Select_Long_Condition_1 and strategy.opentrades == 0 //****************************************************************************// // STOP LOSS Price float longSL = na longSL := Open_Long_Condition ? ta.lowest(low, SLDAY)[1] : longSL[1] //****************************************************************************// // Cal StopLoss Long_Entry_Price = close Diff_OPEN_to_SL = math.abs(Long_Entry_Price - longSL) // Exit CONDITIONS Exit_Long_Condition = close < show // Sell when Have Signal //****************************************************************************// // POSITION SIZE CAP strategy.initial_capital = 50000 float portSize = Compound ? strategy.netprofit + strategy.initial_capital : strategy.initial_capital float LossAmoutUnit = portSize * Risk_Per_Trade //50 float PercentSL = ( Diff_OPEN_to_SL / Long_Entry_Price ) * 100 float PositionSize = LossAmoutUnit / Diff_OPEN_to_SL //****************************************************************************// // ENTRY/EXIT if Buysig if Open_Long_Condition and in_date_range strategy.entry('LONG', strategy.long, qty=PositionSize) if Exit_Long_Condition and in_date_range strategy.close('LONG') if close < longSL and UseSl strategy.close('LONG') //****************************************************************************// // PLOT STOP LOSS longPlotSL = strategy.opentrades > 0 and strategy.position_size > 0 ? longSL : na // label.new(bar_index, high, text=str.tostring(longPlotSL),color=color.white, textcolor=color.black) plot(longPlotSL, title="", linewidth=2, style=plot.style_linebr, color=color.new(color.red, 0)) //****************************************************************************//