Chiến lược trung bình động động


Ngày tạo: 2023-11-23 11:39:24 sửa đổi lần cuối: 2023-11-23 11:39:24
sao chép: 0 Số nhấp chuột: 657
1
tập trung vào
1621
Người theo dõi

Chiến lược trung bình động động

Tổng quan

Chiến lược này được gọi là chiến lược đường trung bình chuyển động động động. Ý tưởng chính là sử dụng hướng của đường trung bình chuyển động và mối quan hệ của giá để đánh giá xu hướng, đi vào trong khu vực theo hướng xu hướng và đóng cửa khi không có xu hướng.

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

Chiến lược này sử dụng giá nguồn của mỗi chu kỳ length để tính toán đường trung bình di chuyển, giá nguồn có thể chọn OHLC4, HLC3, giá đóng cửa, v.v.

Cụ thể, công thức tính toán của đường ngắn là: shortline = sma * ((100 + shortlevel) / 100), trong đó shortlevel là một số dương có thể được thiết lập bởi người dùng, đại diện cho tỷ lệ của đường trung bình di chuyển từ đường ngắn. Longline tương tự, công thức tính toán là: longline = sma * ((100 + longlevel) / 100), longlevel là một số âm có thể được thiết lập bởi người dùng, đại diện cho tỷ lệ của đường trung bình di chuyển từ đường dài.

Do đó, đường ngắn luôn luôn lớn hơn đường trung bình di chuyển và đường dài luôn luôn nhỏ hơn đường trung bình di chuyển. Khi giá lên đường ngắn, biểu thị vào xu hướng tăng, khi đó nếu needlong cho phép làm nhiều, nó sẽ đặt hàng nhiều hơn ở mức giá đường dài; khi giá xuống đường dài, biểu thị vào xu hướng giảm, khi đó nếu needshort cho phép làm trống, nó sẽ làm trống ở mức giá đường ngắn.

Bất kể là mua hay bán, khi giá quay trở lại đường trung bình di chuyển, nó đại diện cho sự kết thúc của xu hướng, tại thời điểm này tất cả các vị trí trước đó sẽ bị xóa.

Do đó, theo mối quan hệ động của đường dài và đường ngắn với đường trung bình di chuyển để đánh giá hướng xu hướng và theo đó vào và ra khỏi trò chơi.

Lợi thế chiến lược

Ưu điểm lớn nhất của chiến lược này là có thể nắm bắt các hướng xu hướng chính một cách linh hoạt hơn bằng cách thiết lập các điểm mua và bán bằng cách chuyển động các đường dài và ngắn. Chiến lược này cao cấp và thông minh hơn so với chiến lược đơn giản là kích hoạt các điểm mua và bán ở mức cố định.

Thứ hai, đường trung bình di chuyển tự nó cũng có tác dụng ức chế, tránh được sự rung động tần số cao. Ngoài ra, việc xuất hiện kịp thời khi xu hướng kết thúc dựa trên mức độ đường trung bình di chuyển cũng rất quan trọng.

Rủi ro chiến lược

Rủi ro lớn nhất của chiến lược này là đường trung bình di chuyển có hiệu suất khác nhau trong các giai đoạn khác nhau. Trong trường hợp bình thường, đường trung bình di chuyển là đủ để đại diện cho xu hướng, nhưng trong một số trường hợp cực đoan, đường trung bình di chuyển có thể bị phá vỡ trong thời gian ngắn, gây ra sai lệch hoặc lệch đầu.

Một khía cạnh khác của rủi ro là đường trung bình di chuyển tự nó rất chậm. Đối với một số biến động giá ngắn và mạnh, đường trung bình di chuyển khó theo dõi và có thể bỏ lỡ điểm vào hoặc điểm ra. Cần giảm chu kỳ để tăng tốc độ phản ứng của đường trung bình di chuyển.

Tối ưu hóa chiến lược

Chiến lược này có thể được tiếp tục cải thiện ở những khía cạnh sau:

  1. Thêm logic dừng lỗ. Đường trung bình di chuyển có sự chậm trễ khi đánh giá xu hướng và không thể tránh được hoàn toàn, do đó, thêm dừng động một cách thích hợp có thể làm giảm rủi ro hơn nữa.
  2. Các tham số tối ưu hóa đường trung bình dài ngắn. Hiện tại, tỷ lệ giữa đường trung bình dài và đường trung bình di chuyển là giá trị cố định, có thể thử nghiệm các tập dữ liệu khác nhau để tìm ra tham số tối ưu nhất.
  3. Tăng khả năng đánh giá cường độ của xu hướng. Ngoài vị trí đường trung bình dài và ngắn, bạn cũng có thể đánh giá cường độ của xu hướng thông qua một số thuật toán, tránh tín hiệu sai trong xu hướng yếu.
  4. Bạn có thể thử áp dụng đường trung bình di chuyển cho các giống giao dịch khác để xác minh xuyên giống.

Tóm tắt

Phương pháp này đánh giá xu hướng bằng cách thiết lập các điểm mua và bán động. Phương pháp này dựa trên các tín hiệu giao dịch động trên đường trung bình di động, có thể nắm bắt xu hướng giá một cách linh hoạt và thông minh hơn so với các điểm kích hoạt tĩnh. Đồng thời cũng giải quyết vấn đề thiếu tính kịp thời của đường trung bình di động.

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

//Noro
//2018

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

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
src = input(ohlc4, title = "Source")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
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")

//SMAs
sma = sma(src, per) 
//sma = lowest(low, per)
shortline = sma * ((100 + shortlevel) / 100)
longline = sma * ((100 + longlevel) / 100)
plot(shortline, linewidth = 2, color = red, title = "Short line")
plot(sma, linewidth = 2, color = blue, title = "SMA line")
plot(longline, linewidth = 2, color = lime, title = "Long line")

//plot(round(buy * 100000000), linewidth = 2, color = lime)
//plot(round(sell * 100000000), linewidth = 2, color = red)

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0 and needlong
    strategy.entry("L", strategy.long, lot, limit = longline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size == 0 and needshort
    strategy.entry("S", strategy.short, lot, limit = shortline, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size > 0 
    strategy.entry("Close", strategy.short, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if (not na(close[per])) and size < 0 
    strategy.entry("Close", strategy.long, 0, limit = sma, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()