Chiến lược giao dịch trung bình chuyển động chuyển động đa cấp

Tác giả:ChaoZhang, Ngày: 2023-09-23 15:55:20
Tags:

Tổng quan

Chiến lược giao dịch trung bình chuyển động đa cấp nhập và dừng lỗ ở nhiều cấp bằng cách thiết lập một số đường trung bình chuyển động chuyển động với các tham số khác nhau. Chiến lược đầu tiên tính toán 3 đường dài và 3 đường ngắn. Nó đi dài khi các đường dài nằm dưới các đường ngắn, và đi ngắn khi các đường ngắn nằm dưới các đường dài. Chiến lược cho phép tùy chỉnh các tham số như thời gian trung bình chuyển động, tỷ lệ chuyển động, phạm vi thời gian giao dịch, v.v. Nó phù hợp với giao dịch xu hướng trung bình dài hạn.

Chiến lược logic

  1. Tính toán trung bình di chuyển đơn giản của giá src trong thời gian len như đường cơ sở.

  2. Đặt số lượng đường dài và đường ngắn dựa trên các thông số dài và ngắn.

  3. Các đường dài1 vv được thiết lập bằng cách di chuyển đường cơ sở theo tỷ lệ đường dài1 vv. Các đường ngắn được thiết lập tương tự.

  4. Nhập giao dịch ở nhiều cấp khi giá vượt qua các đường trong thời gian giao dịch.

  5. Dừng lỗ khi giá chạm vào đường cơ sở.

  6. Lập tất cả các vị trí sau giờ kết thúc.

Phân tích lợi thế

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

  1. Nhập nhiều cấp độ cho phép kiếm lợi nhuận ở các giai đoạn khác nhau của xu hướng.

  2. Rất tùy chỉnh với các tham số cho các sản phẩm khác nhau và phong cách giao dịch.

  3. Hệ thống đột phá đáng tin cậy dựa trên đường trung bình động.

  4. Tránh các sự kiện lớn bằng cách thiết lập phạm vi thời gian giao dịch.

  5. Các khoản lỗ bị hạn chế thông qua lệnh dừng lỗ.

Phân tích rủi ro

Một số rủi ro của chiến lược:

  1. Rủi ro cao từ các vị trí kim tự tháp, cần đủ vốn.

  2. Các thông số không đúng có thể dẫn đến giao dịch quá mức.

  3. Thời gian thoát cố định có thể bỏ lỡ lợi nhuận xu hướng muộn.

  4. Không tính đến các vị trí qua đêm và chi phí mang theo.

  5. Không kiểm soát kích thước vị trí.

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. Thêm stop loss theo sau thay vì thời gian thoát cố định.

  2. Xem xét chi phí mang lại cho các vị trí qua đêm.

  3. Thêm stop loss để nắm bắt lợi nhuận muộn.

  4. Định vị kích thước năng động dựa trên phơi nhiễm hiện tại.

  5. Kiểm tra các thông số trên các sản phẩm khác nhau và xây dựng phương pháp tối ưu hóa.

  6. Tối ưu hóa mức dừng lỗ để tránh dừng không cần thiết.

Tóm lại

Chiến lược chuyển động trung bình đa cấp có lợi từ xu hướng thông qua nhập nhập đa cấp dựa trên đường trung bình chuyển động. Thời gian giao dịch và kiểm soát dừng lỗ có rủi ro tốt. Những cải tiến hơn nữa về kiểm soát chi phí mang theo, tối ưu hóa tham số, tối ưu hóa dừng lỗ vv có thể nâng cao chiến lược và đáng nghiên cứu.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
    
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Thêm nữa