Chiến lược giao dịch xu hướng trung bình động

Tác giả:ChaoZhang, Ngày: 2023-10-09 16:00:02
Tags:

Tổng quan

Chiến lược này là một chiến lược giao dịch xu hướng dựa trên đường trung bình động. Nó sử dụng 3 đường trung bình động với các tham số khác nhau để tạo ra tín hiệu giao dịch. Nó đi dài khi giá vượt trên đường trung bình động và đi ngắn khi giá vượt dưới. Chiến lược có 3 đường trung bình động để bước vào dài hoặc ngắn, cho phép nó theo xu hướng.

Chiến lược logic

Chiến lược tính toán đường trung bình động ma với chiều dài len bằng hàm sma. Sau đó nó tính toán 3 đường trung bình động khác longline1, longline2, longline3 được dịch chuyển lần lượt -4%, -5%, -6% dựa trên ma.

Đối với việc tạo tín hiệu dài, nếu vị trí hiện tại là bằng phẳng, nó sẽ dài với 1 lô khi giá vượt qua đường dài1. Nếu đã dài 1 lô, nó sẽ thêm 1 lô khi giá vượt qua đường dài2. Nếu đã dài 2 lô, nó sẽ thêm 1 lô khi giá vượt qua đường dài3.

Đối với việc tạo tín hiệu ngắn, nếu đã dài, nó sẽ thoát khỏi tất cả các vị trí dài khi giá vượt dưới ma.

Việc nhập từng giai đoạn cho phép chiến lược theo xu hướng.

Ưu điểm

  • Sử dụng đường trung bình động để xác định hướng xu hướng lọc ra tiếng ồn thị trường và cho phép lợi nhuận ổn định
  • Các mục dài / ngắn được sắp xếp có thể hưởng lợi nhiều hơn từ xu hướng
  • Sử dụng các đường trung bình di chuyển như các điểm đầu vào nắm bắt tốt hơn xu hướng
  • Thu hút tương đối nhỏ, thu hút tối đa được kiểm soát khoảng 20%

Rủi ro

  • Xu hướng thuần túy sau chiến lược có xu hướng bị chém trong các thị trường giới hạn phạm vi
  • Các tín hiệu chậm lại từ đường trung bình động có thể bỏ lỡ các điểm chuyển hướng xu hướng
  • Các bước đầu tư dài có thể theo đuổi giá cao và tăng rủi ro
  • Không có cơ chế dừng lỗ có thể dẫn đến tổn thất lớn từ các sự kiện đột ngột

Giải pháp rủi ro:

  • Thêm các chỉ số khác để xác định các điểm chuyển hướng xu hướng
  • Đặt các thông số trung bình động một cách hợp lý, không quá dài để tránh tín hiệu quá chậm
  • Giảm các lô nhập khẩu dài theo giai đoạn để tránh theo đuổi giá cao
  • Thêm stop loss di chuyển để giới hạn lỗ

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Thêm các chỉ số khác như MACD để xác định sức mạnh xu hướng

  2. Tối ưu hóa các thông số trung bình động để tìm kết hợp tốt nhất

  3. Điều chỉnh kích thước và tỷ lệ lô nhập khẩu theo giai đoạn để tránh theo đuổi giá cao

  4. Thêm cơ chế dừng mất mát chuyển động dựa trên ATR

  5. Điều chỉnh kích thước vị trí theo cách năng động dựa trên biến động thị trường, giảm kích thước khi biến động cao

  6. Các tham số thử nghiệm trên các sản phẩm khác nhau để tìm ra biểu tượng tối ưu

  7. Phát triển mô-đun thoát để xem xét lợi nhuận ở một số mô hình nhất định

Tóm lại

Nhìn chung, chiến lược giao dịch dựa trên hướng xu hướng được xác định bởi đường trung bình động và lợi nhuận từ xu hướng thông qua các mục nhập từng giai đoạn. Nhưng nó có một số vấn đề chậm trễ và rủi ro theo đuổi giá cao. Chúng ta có thể tối ưu hóa nó bằng cách thêm các chỉ số phụ trợ, tối ưu hóa các tham số, điều chỉnh kích thước vị trí, thêm stop loss, vv, để thích nghi với các điều kiện thị trường khác nhau và đạt được lợi nhuận ổn định.


/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 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.0", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Lenghs")
src = input(ohlc4, title = "MA Source")
longlevel1 = input(-4.0, title = "Long line 1")
longlevel2 = input(-5.0, title = "Long line 2")
longlevel3 = input(-6.0, title = "Long line 3")
needoffset = input(true, title = "Offset")

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

//MA
ma = sma(src, len)
longline1 = round(ma * ((100 + longlevel1) / 100) * mult) / mult
longline2 = round(ma * ((100 + longlevel2) / 100) * mult) / mult
longline3 = round(ma * ((100 + longlevel3) / 100) * mult) / mult

//Lines
offset = needoffset ? 1 : 0
plot(ma, color = color.blue)
plot(longline1, offset = offset, color = color.lime)
plot(longline2, offset = offset, color = color.lime)
plot(longline3, offset = offset, color = color.lime)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2))
if size > 0
    strategy.entry("TP", strategy.short, 0, limit = ma)
    

Thêm nữa