Chiến lược chéo giữa hai mức trung bình động

Tác giả:ChaoZhang, Ngày: 2023-12-01 18:18:16
Tags:

img

Tổng quan

Chiến lược này dựa trên hệ thống theo xu hướng chéo trung bình di chuyển kép. Nó kết hợp trung bình di chuyển đơn giản nhanh (SMA) và trung bình di chuyển cân nhắc chậm (VWMA), và tạo ra tín hiệu giao dịch khi hai đường băng ngang nhau.

Khi SMA nhanh vượt qua trên VWMA chậm, một tín hiệu mua được tạo ra. Khi SMA nhanh vượt qua dưới VWMA chậm, một tín hiệu bán được tạo ra. Chiến lược cũng sử dụng cơ chế dừng lỗ để kiểm soát rủi ro.

Chiến lược logic

Logic cốt lõi của chiến lược này nằm trong hệ thống chéo trung bình động kép. Cụ thể, nó sử dụng các chỉ số kỹ thuật sau:

  1. Trung bình di chuyển đơn giản (SMA): Trung bình toán học của giá đóng trong n ngày qua, phản ánh giá trung bình gần đây.
  2. Trung bình động cân nhắc (VWMA): Trung bình cân nhắc của giá đóng cửa trong n ngày qua, gán trọng lượng cao hơn cho giá gần đây hơn, phản ứng nhanh hơn với sự thay đổi giá.

SMA nhanh có thời gian xem lại ngắn hơn để phản ứng nhanh chóng với những thay đổi giá, trong khi VWMA chậm có thời gian xem lại dài hơn để làm mịn. Khi xu hướng ngắn hạn và dài hạn liên kết theo cùng một hướng, SMA nhanh vượt trên VWMA chậm tạo ra tín hiệu mua, trong khi vượt dưới tạo ra tín hiệu bán.

Chiến lược cũng thiết lập các cơ chế dừng lỗ. Nó cắt giảm lỗ trong thời gian khi giá di chuyển theo hướng không thuận lợi.

Phân tích lợi thế

  1. Phản ứng nhanh chóng trong việc theo dõi các thay đổi xu hướng thị trường
  2. Kiểm soát rút tiền tốt với các cơ chế dừng lỗ hiệu quả
  3. Đơn giản và trực quan, dễ hiểu và thực hiện
  4. Các thông số tối ưu hóa trong các môi trường thị trường khác nhau

Phân tích rủi ro

  1. Chiến lược MA kép có xu hướng cung cấp tín hiệu sai trong thị trường tăng
  2. Điều chỉnh tham số không phù hợp có thể dẫn đến tổn thất
  3. Thỉnh thoảng xảy ra tai nạn có thể gây thiệt hại.

Quản lý rủi ro:

  1. Sử dụng các chỉ số lọc xu hướng để xác nhận
  2. Tối ưu hóa cài đặt tham số
  3. Dùng chiến lược dừng lỗ để kiểm soát một lỗ duy nhất một cách hợp lý

Hướng dẫn tối ưu hóa

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Kết hợp các chỉ số khác như RSI, Bollinger Bands để tăng độ chính xác tín hiệu
  2. Tối ưu hóa độ dài của các đường trung bình động qua các chu kỳ
  3. Kết hợp các chỉ số khối lượng, giao dịch tại các điểm có dòng vốn đáng kể
  4. Điều chỉnh các thông số dựa trên kết quả backtest để tìm ra tối ưu
  5. Sử dụng stop loss động, điều chỉnh stop dựa trên biến động thị trường

Kết luận

Kết luận, đây là một chiến lược theo xu hướng rất thực tế. Nó sử dụng các giao dịch giao dịch trực quan để tạo ra các tín hiệu giao dịch, nắm bắt sự thay đổi xu hướng hiệu quả với sự phối hợp giữa các đường trung bình di chuyển nhanh và chậm. Cơ chế dừng lỗ cũng đảm bảo kiểm soát rủi ro tốt. Với các chỉ số bổ sung và tối ưu hóa tham số, chiến lược có thể đạt được hiệu suất giao dịch tốt hơn.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true, initial_capital=10000, currency='USD')

strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = close, title = "Simple MA Source")
maFastLength   = input(defval = 6, title = "Simple MA Length", minval = 1)
// long ma
maSlowSource   = input(defval = high, title = "VW MA Source")
maSlowLength   = input(defval = 7, title = "VW MA Period", minval = 1)


// === SERIES SETUP ===
// a couple of ma's...
maFast = sma(maFastSource, maFastLength)
maSlow = vwma(maSlowSource, maSlowLength)


// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = color.green, linewidth = 2, style = plot.style_line, transp = 30)
slow = plot(maSlow, title = "Slow MA", color = color.red, linewidth = 2, style = plot.style_line, transp = 30)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === LOGIC ===
enterLong = crossover(maFast, maSlow)
exitLong = crossover(maSlow, maFast)
//enterLong = crossover(maSlow, maFast)
//exitLong = crossover(maFast, maSlow)

// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====
fill(fast, slow, color = maFast > maSlow ? color.green : color.red)

// === MRSI ===
//
//

basis = rsi(close, input(50))

ma1 = ema(basis, input(2))
ma2 = ema(basis, input(27))

oversold = input(32.6)
overbought = input(63)

//plot(ma1, title="RSI EMA1", color=blue)
//plot(ma2, title="RSI EMA2", color=yellow)

obhist = ma1 >= overbought ? ma1 : overbought
oshist = ma1 <= oversold ? ma1 : oversold

//plot(obhist, title="Overbought Highligth", style=columns, color=color.maroon, histbase=overbought)
//plot(oshist, title="Oversold Highligth", style=columns, color=color.yellow, histbase=oversold)

//i1 = hline(oversold, title="Oversold Level", color=white)
//i2 = hline(overbought, title="Overbought Level", color=white)

//fill(i1, i2, color=olive, transp=100)

// === LOGIC ===
enterLongMrsi = crossover(ma1, oversold)
exitLongMrsi = crossover(ma1, overbought)

// Entry //
strategy.entry(id="MRSI Long Entry", long=true, when=window() and enterLongMrsi)
strategy.entry(id="MRSI Short Entry", long=false, when=window() and exitLongMrsi)

//hline(50, title="50 Level", color=white)

Thêm nữa