Chiến lược vượt EMA BreakHigh là một chiến lược giao dịch dựa trên sự đột phá giá và vượt EMA (Exponential Moving Average). Chiến lược sử dụng giá cao nhất trong một khoảng thời gian nhất định như tín hiệu mua và EMA như tín hiệu bán. Khi giá đóng vượt quá mức giá cao nhất trong khoảng thời gian nhất định, chiến lược tạo ra tín hiệu mua. Khi giá đóng giảm xuống dưới EMA, chiến lược tạo ra tín hiệu bán. Chiến lược cũng thiết lập giá dừng lỗ để kiểm soát rủi ro. Ngoài ra, chiến lược cung cấp nhiều tham số cho người dùng tùy chỉnh để thích nghi với các phong cách giao dịch và điều kiện thị trường khác nhau.
Nguyên tắc cốt lõi của Chiến lược vượt EMA BreakHigh là nắm bắt xu hướng thị trường bằng cách sử dụng giá vượt qua và EMA vượt qua. Khi giá vượt qua mức giá cao nhất trong một khoảng thời gian nhất định, nó chỉ ra rằng thị trường có thể bước vào xu hướng tăng, vì vậy chiến lược tạo ra tín hiệu mua. Đồng thời, EMA phục vụ như một chỉ số theo xu hướng. Khi giá giảm xuống dưới EMA, nó chỉ ra rằng xu hướng tăng có thể kết thúc, vì vậy chiến lược tạo ra tín hiệu bán.
Chiến lược sử dụng các bước sau để thực hiện giao dịch:
Thông qua các bước trên, chiến lược có thể hưởng lợi từ xu hướng tăng trên thị trường trong khi sử dụng dừng lỗ để kiểm soát rủi ro giảm.
Chiến lược Crossover EMA BreakHigh có những lợi thế sau:
Mặc dù Chiến lược Crossover EMA BreakHigh có một số lợi thế, nhưng nó cũng có những rủi ro sau đây:
Để giảm thiểu những rủi ro này, các biện pháp sau đây có thể được xem xét:
Để tiếp tục cải thiện hiệu suất của Chiến lược Crossover EMA BreakHigh, các hướng tối ưu hóa sau đây có thể được xem xét:
Thông qua các biện pháp tối ưu hóa trên, sự ổn định, khả năng thích nghi và lợi nhuận của Chiến lược Crossover BreakHigh EMA có thể được cải thiện, cho phép nó đạt được hiệu suất tốt trong nhiều môi trường thị trường hơn.
Chiến lược BreakHigh EMA Crossover là một chiến lược theo xu hướng đơn giản và hiệu quả nắm bắt xu hướng thị trường bằng cách sử dụng price breakout và EMA crossover trong khi sử dụng stop-loss để kiểm soát rủi ro giảm giá. Logic chiến lược rõ ràng, các tham số linh hoạt và dễ hiểu và thực hiện. Mặc dù chiến lược có một số rủi ro nhất định, chẳng hạn như rủi ro biến động thị trường, rủi ro đảo ngược xu hướng và rủi ro thiết lập tham số, những rủi ro này có thể được giảm thiểu thông qua các biện pháp kiểm soát rủi ro thích hợp, chẳng hạn như điều chỉnh các tham số, kết hợp với các chỉ số khác và thiết lập stop-loss hợp lý. Ngoài ra, chiến lược có không gian tối ưu hóa hơn nữa, chẳng hạn như điều chỉnh tham số năng động, giới thiệu cơ chế lỗ ngắn dài, tối ưu hóa stop- và take- lợi nhuận, và kết hợp với phân tích cơ bản, v.v., để cải thiện hiệu suất và khả năng thích nghi của chiến lược. Chiến lược BreakHigh EMA Crossover là một chiến lược tối ưu hóa định lượng và cố gắng tối ưu hóa tổng thể.
/*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)) //****************************************************************************//