
Chiến lược giao dịch dựa trên giao dịch giữa giá phá vỡ và đường trung bình di chuyển của chỉ số (EMA). Chiến lược này sử dụng giá cao nhất trong một chu kỳ nhất định làm tín hiệu mua, EMA làm tín hiệu bán. Chiến lược sẽ tạo ra tín hiệu mua khi giá đóng cửa phá vỡ giá cao nhất trong một chu kỳ nhất định; chiến lược sẽ tạo ra tín hiệu bán khi giá đóng cửa phá vỡ EMA. Chiến lược này cũng đặt giá dừng lỗ để kiểm soát rủi ro.
Nguyên tắc cốt lõi của chiến lược EMA vượt qua giá cao nhất là sử dụng giá vượt qua và EMA vượt qua để nắm bắt xu hướng thị trường. Khi giá vượt qua giá cao nhất trong chu kỳ được chỉ định, nó cho thấy thị trường có thể đi vào xu hướng tăng, do đó chiến lược sẽ tạo ra tín hiệu mua. Đồng thời, EMA là một chỉ số theo dõi xu hướng, khi giá giảm xuống EMA, cho thấy xu hướng tăng có thể kết thúc, do đó chiến lược sẽ tạo ra tín hiệu bán.
Chiến lược này sử dụng các bước sau để thực hiện giao dịch:
Bằng cách thực hiện các bước trên, chiến lược này có thể lợi nhuận trong xu hướng tăng của thị trường, đồng thời sử dụng lệnh dừng để kiểm soát rủi ro giảm.
Chiến lược giao chéo vượt qua mức giá cao nhất của EMA có những lợi thế sau:
Mặc dù có một số lợi thế của chiến lược giao dịch vượt qua EMA cao nhất, nhưng nó cũng có những rủi ro sau:
Để 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:
Để nâng cao hơn nữa hiệu suất của chiến lược giao dịch EMA vượt qua giá cao nhất, 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, có thể nâng cao tính ổn định, khả năng thích ứng và lợi nhuận của các chiến lược giao thoa EMA giá cao nhất, cho phép chúng hoạt động tốt trong nhiều môi trường thị trường hơn.
Chiến lược phá vỡ giá EMA là một chiến lược theo dõi xu hướng đơn giản và hiệu quả, sử dụng giá phá vỡ và EMA để nắm bắt xu hướng thị trường, đồng thời sử dụng dừng để kiểm soát rủi ro đi xuống. Lập luận của chiến lược là rõ ràng, các tham số linh hoạt, dễ hiểu và thực hiện. Mặc dù chiến lược này có một số rủi ro, chẳng hạn như rủi ro biến động thị trường, rủi ro biến đổi xu hướng và rủi ro đặt tham số, nhưng những rủi ro này có thể được giảm thiểu bằng 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 tham số, kết hợp các chỉ số khác và thiết lập dừng hợp lý.
/*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))
//****************************************************************************//