
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.
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.
Ư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 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.
Chiến lược này có thể được tiếp tục cải thiện ở những khía cạnh sau:
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.
/*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()