Chiến lược giao dịch định lượng dựa trên đường trung bình động nhanh và đường trung bình động chậm


Ngày tạo: 2024-01-24 14:49:29 sửa đổi lần cuối: 2024-01-24 14:49:29
sao chép: 0 Số nhấp chuột: 484
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng dựa trên đường trung bình động nhanh và đường trung bình động chậm

Tổng quan

Chiến lược phá vỡ đường trung bình di chuyển kép (Dual Moving Average Breakout Strategy) là một chiến lược giao dịch định lượng dựa trên đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm. Nó sử dụng đường trung bình di chuyển chỉ số (EMA) của hai chu kỳ khác nhau làm tín hiệu giao dịch.

Nguyên tắc chiến lược

Lý luận cốt lõi của chiến lược này là sử dụng đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để tạo ra tín hiệu giao dịch. Trong chiến lược, chu kỳ đường trung bình di chuyển nhanh được định nghĩa là 12 ngày và chu kỳ đường trung bình di chuyển chậm là 26 ngày.

  1. Tính toán chỉ số trung bình di chuyển AP của mảng giá với chu kỳ 2 ngày
  2. Tính trung bình di chuyển nhanh dựa trên AP Fast, chu kỳ 12 ngày
  3. Tính trung bình di chuyển chậm dựa trên AP Slow, chu kỳ 26 ngày
  4. So sánh đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm:
    1. Tín hiệu đa đầu khi Fast trên Slow
    2. Tín hiệu không đầu khi Fast đi qua Slow
  5. Các tín hiệu giao dịch cụ thể được đánh giá dựa trên mối quan hệ giữa giá và đường trung bình di chuyển:
    1. Tín hiệu đa đầu: Fast>Slow && AP>Fast
    2. Tín hiệu đầu trống: Fast

Xác định xu hướng thị trường và tạo ra tín hiệu giao dịch thông qua giao dịch giữa đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm là một chiến lược trung bình di chuyển kép điển hình.

Phân tích lợi thế

Chiến lược phá vỡ đường trung bình hai động có những lợi thế sau:

  1. Logic của chiến lược đơn giản, rõ ràng, dễ hiểu và dễ thực hiện
  2. Điều chỉnh chu kỳ trung bình di chuyển để thích ứng với các môi trường thị trường khác nhau
  3. Bạn có thể làm nhiều thời gian đồng thời để có được lợi nhuận cao hơn
  4. Các tín hiệu giao dịch chính xác hơn có thể được kết hợp với giá và mối quan hệ đường trung bình di chuyển
  5. Đường trung bình di động có độ trễ, có thể loại bỏ tiếng ồn thị trường một cách hiệu quả

Phân tích rủi ro

Tuy nhiên, chiến lược phá vỡ đường trung bình di động đôi cũng có một số rủi ro:

  1. Những tín hiệu sai sẽ xuất hiện nhiều hơn khi thị trường đang trong thời kỳ biến động.
  2. Chiến lược hai đường trung bình di chuyển dễ tạo ra đường cong phù hợp, bỏ qua sự thay đổi cấu trúc thị trường
  3. Dựa vào chỉ số kỹ thuật dễ bị phá vỡ giả và có nguy cơ mất mát

Giải pháp:

  1. Tối ưu hóa chu kỳ của đường trung bình di chuyển để phù hợp hơn với tình trạng thị trường hiện tại
  2. Kết hợp với các chỉ số khác như tín hiệu xác nhận khối lượng giao dịch, tránh phá vỡ giả
  3. Sử dụng chiến lược theo dõi xu hướng, kiểm soát tỷ lệ lợi nhuận và giảm rủi ro

Hướng tối ưu hóa

Chiến lược phá vỡ đường trung bình di động đôi có thể được tối ưu hóa từ:

  1. Tìm một sự kết hợp chu kỳ trung bình di động phù hợp hơn để thích ứng với sự thay đổi của thị trường
  2. Lưu trữ các thông tin liên quan đến các giao dịch
  3. Kết hợp các chỉ số cấu trúc thị trường, xác định xu hướng và điều chỉnh các tham số chu kỳ trung bình
  4. Sử dụng đường trung bình động có thể tự động điều chỉnh chu kỳ theo thay đổi thị trường
  5. Kết hợp với chiến lược dừng lỗ, bạn có thể kiểm soát rủi ro hiệu quả, bảo vệ tiền

Tóm tắt

Chiến lược đột phá đường trung bình di động kép là một chiến lược giao dịch định lượng đơn giản và thực tế. Nó có lợi thế như logic chiến lược đơn giản, dễ thực hiện, nhưng cũng có một số vấn đề thích nghi với thị trường. Chúng ta có thể làm cho nó trở thành một hệ thống giao dịch có lợi nhuận ổn định bằng các phương pháp tối ưu hóa tham số, lọc tín hiệu, kiểm soát rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CDC Action Zone V.2", overlay=true)

// CDC ActionZone V2 29 Sep 2016
// CDC ActionZone is based on a simple 2MA and is most suitable for use with medium volatility market
// 11 Nov 2016 : Ported to Trading View with minor UI enhancement
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
src = input(title="Data Array",type=input.source,defval=ohlc4)
prd1=input(title="Short MA period", type=input.integer,defval=12)
prd2=input(title="Long MA period",type=input.integer,defval=26)
AP = ema(src,2)
Fast = ema(AP,prd1)
Slow = ema(AP,prd2)


Bullish = Fast>Slow
Bearish = Fast<Slow

Green = Bullish and AP>Fast
Red = Bearish and AP<Fast
Yellow = Bullish and AP<Fast
Blue = Bearish and AP>Fast

Buy = Bullish and Bearish[1]
Sell = Bearish and Bullish[1]


alertcondition(Buy,"Buy Signal","Buy")
alertcondition(Sell,"Sell Signal","Sell")


//Plot

l1=plot(Fast,"Fast", linewidth=1,color=color.red)
l2=plot(Slow,"Slow", linewidth=2,color=color.blue)
bcolor = Green ? color.lime : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
fill(l1,l2,bcolor)

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

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


if LSB == "Long only" and Buy and window()
    strategy.entry("L",true)
if LSB == "Long only" and Sell and window()
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Buy and window()
    strategy.entry("L",true)
if LSB == "Both" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Buy and window()
    strategy.close("S",qty_percent=100,comment="TP Short")