La stratégie utilise le prix le plus élevé d’une période donnée comme signal d’achat et l’EMA comme signal de vente. La stratégie génère un signal d’achat lorsque le prix de clôture dépasse le prix le plus élevé d’une période donnée. La stratégie génère un signal de vente lorsque le prix de clôture dépasse l’EMA.
Le principe central de la stratégie de croisement EMA de rupture des prix est d’utiliser la rupture des prix et la rupture des EMA pour capturer la tendance du marché. Lorsque le prix dépasse le prix le plus élevé de la période donnée, cela indique que le marché est susceptible d’entrer dans une tendance à la hausse, donc la stratégie génère un signal d’achat.
La stratégie utilise les étapes suivantes pour réaliser une transaction:
Grâce aux étapes ci-dessus, la stratégie peut tirer profit de la tendance haussière du marché tout en utilisant le stop loss pour contrôler le risque baissier.
Les avantages d’une stratégie croisée de rupture des prix les plus élevés de l’EMA sont les suivants:
Bien qu’il y ait des avantages à une stratégie de croisement de l’EMA à la hausse, elle comporte les risques suivants:
Pour atténuer ces risques, les mesures suivantes peuvent être envisagées:
Afin d’améliorer encore la performance de la stratégie de croisement EMA de rupture des prix les plus élevés, les orientations d’optimisation suivantes peuvent être envisagées:
Les mesures d’optimisation ci-dessus peuvent améliorer la stabilité, l’adaptabilité et la rentabilité des stratégies croisées EMA à prix le plus élevé, leur permettant de bien performer dans un plus grand nombre de contextes de marché.
La stratégie de rupture de crête EMA est une stratégie de suivi de tendance simple et efficace, qui capture les tendances du marché en utilisant des ruptures de prix et des ruptures d’EMA, tout en utilisant des arrêts pour contrôler le risque de baisse. La logique de la stratégie est claire, les paramètres sont flexibles et faciles à comprendre et à mettre en œuvre. Bien que la stratégie présente certains risques, tels que le risque de fluctuation du marché, le risque de renversement de tendance et le risque de paramétrage, ces risques peuvent être atténués par des mesures de contrôle du risque appropriées, telles que l’ajustement des paramètres, la combinaison d’autres indicateurs et la mise en place d’un arrêt raisonnable.
/*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))
//****************************************************************************//