Tài nguyên đang được tải lên... tải...

BreakHigh EMA Crossover chiến lược

Tác giả:ChaoZhang, Ngày: 2024-03-29 14:39:27
Tags:

img

Tổng quan

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 chiến lược

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:

  1. Tính toán giá cao nhất trong khoảng thời gian được chỉ định là giá mua đột phá.
  2. Tính toán EMA như là tín hiệu bán.
  3. Khi giá đóng phá vỡ trên giá mua phá vỡ, nếu không có vị trí hiện tại, chiến lược tạo ra một tín hiệu mua.
  4. Khi giá đóng cửa giảm xuống dưới đường EMA, nếu có một vị trí hiện tại, chiến lược tạo ra một tín hiệu bán.
  5. Đếm giá thấp nhất trong khoảng thời gian được chỉ định là giá dừng lỗ.
  6. Nếu giá giảm xuống dưới giá dừng lỗ, chiến lược sẽ đóng ngay lập tức vị trí.

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.

Ưu điểm chiến lược

Chiến lược Crossover EMA BreakHigh có những lợi thế sau:

  1. Theo dõi xu hướng: Chiến lược sử dụng đột phá giá và chéo EMA để nắm bắt xu hướng thị trường và có thể kiếm lợi từ xu hướng tăng.
  2. Kiểm soát rủi ro: Chiến lược sử dụng giá dừng lỗ để kiểm soát rủi ro giảm, có thể làm giảm hiệu quả mức rút tối đa của chiến lược.
  3. Sự linh hoạt của các tham số: Chiến lược cung cấp nhiều tham số cho người dùng tùy chỉnh, chẳng hạn như thời gian, tỷ lệ rủi ro, có nên sử dụng stop-loss, v.v., có thể được điều chỉnh theo các phong cách giao dịch và điều kiện thị trường khác nhau.
  4. Dễ dàng và hiệu quả: Logic chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện, và có thể đạt được lợi nhuận tốt trong thị trường xu hướng.

Rủi ro chiến lược

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:

  1. Rủi ro biến động thị trường: Trong trường hợp biến động thị trường cao, chiến lược có thể tạo ra nhiều tín hiệu sai hơn, dẫn đến giao dịch và lỗ vốn thường xuyên.
  2. Nguy cơ đảo ngược xu hướng: Khi xu hướng thị trường đảo ngược, chiến lược có thể trì hoãn bán hàng, dẫn đến việc thu lại lợi nhuận hoặc biến lợi nhuận thành lỗ.
  3. Các tham số thiết lập rủi ro: Hiệu suất của chiến lược phụ thuộc vào việc thiết lập các tham số, chẳng hạn như thời gian, tỷ lệ rủi ro, v.v. Nếu các tham số được thiết lập không đúng cách, nó có thể dẫn đến hiệu suất kém của chiến lược.

Để 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:

  1. Điều chỉnh đúng các tham số: Theo các điều kiện thị trường và các công cụ giao dịch khác nhau, điều chỉnh đúng các tham số chiến lược, chẳng hạn như tăng thời gian, giảm tỷ lệ rủi ro, v.v., để giảm tín hiệu sai và giao dịch thường xuyên.
  2. Kết hợp với các chỉ số khác: Kết hợp với các chỉ số kỹ thuật khác, chẳng hạn như RSI, MACD, vv, để xác nhận tính hợp lệ của xu hướng và tín hiệu và cải thiện độ tin cậy của chiến lược.
  3. Đặt giá dừng lỗ hợp lý: Đặt giá dừng lỗ hợp lý, có thể kiểm soát rủi ro giảm và không dừng lỗ quá sớm, dẫn đến cơ hội lợi nhuận bị bỏ lỡ.

Hướng dẫn tối ưu hóa chiến lược

Để 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:

  1. Điều chỉnh tham số động: Theo biến động thị trường và sức mạnh xu hướng, điều chỉnh động các tham số chiến lược, chẳng hạn như tăng thời gian khi biến động cao, tăng tỷ lệ rủi ro khi xu hướng mạnh, v.v., để thích nghi với các điều kiện thị trường khác nhau.
  2. Giới thiệu cơ chế giao dịch dài ngắn: Trên cơ sở giao dịch dài ban đầu, giới thiệu cơ chế giao dịch ngắn để kiếm lợi nhuận từ xu hướng giảm, cải thiện khả năng thích nghi và lợi nhuận của chiến lược.
  3. Tối ưu hóa stop-loss và take-profit: Tối ưu hóa cài đặt stop-loss và take-profit, chẳng hạn như sử dụng trailing stop-loss, partial take-profit, v.v., để kiểm soát tốt hơn rủi ro và khóa lợi nhuận.
  4. Kết hợp với phân tích cơ bản: Kết hợp phân tích cơ bản với phân tích kỹ thuật, chẳng hạn như điều chỉnh vị trí và tham số của chiến lược trước và sau các sự kiện quan trọng như báo cáo lợi nhuận của công ty và phát hành dữ liệu kinh tế, để đối phó với những thay đổi thị trường có thể xảy ra.

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.

Tóm lại

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))



//****************************************************************************//



Thêm nữa