Chiến lược dừng lỗ theo dõi trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2024-02-05 13:45:51
Tags:

img

Tổng quan

Chiến lược này tạo ra tín hiệu mua khi trung bình di chuyển nhanh vượt qua trung bình di chuyển chậm. Đồng thời, nó tính giá dừng lỗ sau dựa trên phạm vi trung bình thực sự để thiết lập tín hiệu bán. Chiến lược này có thể theo dõi hiệu quả xu hướng thị trường và cắt giảm lỗ một cách kịp thời khi lấy lợi nhuận.

Nguyên tắc

  1. Trung bình di chuyển nhanh (EMA): Trung bình di chuyển theo cấp số nhân 12 ngày phản ứng nhanh với những thay đổi giá.
  2. Trung bình di chuyển chậm (SMA): Trung bình di chuyển đơn giản 45 ngày mô tả xu hướng trung hạn đến dài hạn.
  3. Các tín hiệu mua được tạo ra khi MA nhanh vượt qua MA chậm.
  4. Khoảng cách trung bình thực sự 15 ngày (ATR) được tính như điểm chuẩn cho lệnh dừng lỗ.
  5. Thiết lập phạm vi stop loss theo dõi dựa trên ATR (ví dụ: 6 x ATR) và cập nhật giá stop trong thời gian thực.
  6. Các tín hiệu bán được tạo ra khi giá giảm xuống dưới giá dừng lỗ.

Chiến lược này kết hợp các lợi thế của việc theo dõi xu hướng và quản lý dừng lỗ. Nó có thể theo dõi xu hướng trung bình đến dài hạn và kiểm soát lỗ giao dịch duy nhất thông qua dừng lỗ.

Phân tích lợi thế

  1. Các combo MA xác định hiệu quả xu hướng và tăng độ tin cậy tín hiệu.
  2. Động lực dừng lỗ theo dõi kịp thời dừng lỗ để tránh thiệt hại quỹ.
  3. Giá dừng lỗ dựa trên ATR làm cho giá dừng hợp lý và ngăn ngừa quá nhạy cảm.
  4. Khái niệm chiến lược đơn giản và các thông số linh hoạt.

Phân tích rủi ro

  1. M.A. có sự chậm trễ có thể bỏ lỡ những cơ hội ngắn hạn.
  2. Lượng lỗ dừng quá mức làm suy yếu lợi nhuận.
  3. Việc dừng lỗ quá mức làm tăng tần suất giao dịch và phí hoa hồng.
  4. Sự biến động thay đổi có thể ảnh hưởng đến sự ổn định của tham số ATR.

Các thông số có thể được tối ưu hóa để cân bằng phạm vi dừng lỗ. Các chỉ số khác cũng có thể được kết hợp để cải thiện thời gian nhập.

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

  1. Kiểm tra thêm các kết hợp tham số để tìm MAs tối ưu.
  2. Điều chỉnh nhân ATR theo các đặc điểm cụ thể của cổ phiếu.
  3. Thêm các điều kiện lọc như chỉ số khối lượng để tránh giao dịch không cần thiết.
  4. Thu thập thêm dữ liệu lịch sử để kiểm tra sự ổn định của các tham số.

Kết luận

Chiến lược này kết hợp thành công khả năng theo dõi xu hướng của MA và khả năng dừng lỗ theo dõi động của ATR. Các tham số có thể được tối ưu hóa để thích nghi với các cổ phiếu khác nhau. Nó tạo ra ranh giới mua và bán rõ ràng, làm cho logic đơn giản và rõ ràng.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//created by XPloRR 24-02-2018

strategy("XPloRR MA-Buy ATR-MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100)

testStartYear = input(2005, "Start Year")
testStartMonth = input(1, "Start Month")
testStartDay = input(1, "Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2050, "Stop Year")
testStopMonth = input(12, "Stop Month")
testStopDay = input(31, "Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriodBackground = input(title="Background", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

emaPeriod = input(12, "Exponential MA")
smaPeriod = input(45, "Simple MA")
stopPeriod = input(12, "Stop EMA")
delta = input(6, "Trailing Stop #ATR")

testPeriod() => true

emaval=ema(close,emaPeriod)
smaval=sma(close,smaPeriod)
stopval=ema(close,stopPeriod)
atr=sma((high-low),15)

plot(emaval, color=blue,linewidth=1)
plot(smaval, color=orange,linewidth=1)
plot(stopval, color=lime,linewidth=1)

long=crossover(emaval,smaval) 
short=crossunder(emaval,smaval)

//buy-sell signal
stop=0
inlong=0
if testPeriod()
    if (long and (not inlong[1]))
        strategy.entry("buy",strategy.long)
        inlong:=1
        stop:=emaval-delta*atr
    else
        stop:=iff((nz(emaval)>(nz(stop[1])+delta*atr))and(inlong[1]),emaval-delta*atr,nz(stop[1]))
        inlong:=nz(inlong[1])
        if ((stopval<stop) and (inlong[1]))
            strategy.close("buy")
            inlong:=0
            stop:=0
else
    inlong:=0
    stop:=0
plot(stop,color=green,linewidth=1)


Thêm nữa