Chiến lược trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2024-01-17 17:45:45
Tags:

img

Tổng quan

Chiến lược này sử dụng hai đường trung bình động, cụ thể là 8 giai đoạn và 21 giai đoạn. Nó tạo ra tín hiệu dài khi MA ngắn hơn vượt qua đường dài hơn, và tín hiệu ngắn khi MA ngắn hơn vượt qua đường dài hơn.

Chiến lược cũng kết hợp độ nghiêng của đường trung bình động để lọc ra một số giai đoạn không có xu hướng và chỉ tạo ra tín hiệu khi xu hướng rõ ràng hơn.

Nguyên tắc

Cốt lõi của chiến lược này nằm trong sự chéo chéo giữa các đường trung bình động ngắn hạn và dài hạn. MA ngắn hơn có thể nắm bắt những thay đổi xu hướng nhanh hơn, trong khi MA dài hơn có hiệu ứng lọc tiếng ồn tốt hơn. Việc thiết lập xu hướng tăng được đề xuất khi MA ngắn hơn vượt qua MA dài hơn, dẫn đến tín hiệu dài; Việc thiết lập xu hướng giảm được đề xuất khi MA ngắn hơn vượt qua dưới MA dài hơn, dẫn đến tín hiệu ngắn.

Chỉ khi độ dốc lớn hơn giá trị ngưỡng dương thì tín hiệu dài sẽ được tạo ra. Chỉ khi độ dốc nhỏ hơn giá trị ngưỡng âm thì tín hiệu ngắn sẽ được tạo ra. Điều này giúp lọc ra các khu vực không có xu hướng rõ rệt, dẫn đến tín hiệu giao dịch chất lượng cao hơn.

Cụ thể, logic để tạo tín hiệu giao dịch là:

  1. Tính toán các đường trung bình di chuyển đơn giản 8 giai đoạn và 21 giai đoạn
  2. Phát hiện tín hiệu chéo giữa hai
  3. Tính toán độ nghiêng của đường trung bình động 21 giai đoạn bằng cách sử dụng hàm arctangent atan
  4. Chỉ tạo tín hiệu dài khi độ dốc vượt quá ngưỡng dương tính đã đặt trước
  5. Chỉ tạo ra tín hiệu ngắn khi độ dốc giảm xuống dưới ngưỡng âm được đặt trước

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Ý tưởng chiến lược đơn giản và dễ hiểu/hiển hành
  2. Bao gồm chỉ số độ dốc giúp lọc các giai đoạn không có xu hướng và cải thiện chất lượng tín hiệu
  3. Sử dụng hai đường trung bình di chuyển cho phép cả hai chơi với sức mạnh của họ, cải thiện độ bền
  4. Các thông số có thể được điều chỉnh để phù hợp với các công cụ giao dịch khác nhau
  5. Thực hiện chương trình đơn giản tạo điều kiện tối ưu hóa hơn nữa

Phân tích rủi ro

Một số rủi ro cũng tồn tại với chiến lược này:

  1. Nhiều tín hiệu sai có thể xảy ra trong thời gian biến động thị trường mạnh mẽ
  2. Crossover tự nó có xu hướng tạo ra một số tín hiệu sai
  3. Có một số mức độ chậm trễ, không thể ngay lập tức nắm bắt sự đảo ngược xu hướng

Một số cách tối ưu hóa dựa trên những rủi ro này:

  1. Điều chỉnh các thông số MA để phù hợp với các đặc điểm thị trường
  2. Tối ưu hóa ngưỡng độ dốc để cải thiện độ bền
  3. Thêm các cơ chế dừng lỗ để kiểm soát lỗ đơn
  4. Kết hợp các chỉ số khác để lọc tín hiệu
  5. Sử dụng cài đặt tham số thích nghi để cải thiện độ bền

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

Một số hướng để tối ưu hóa chiến lược:

  1. Sử dụng MAs thích nghi, điều chỉnh các tham số dựa trên biến động
  2. Bao gồm phân tích khối lượng để tránh lỗi trong quá trình hợp nhất
  3. Thêm chỉ số biến động để nâng cao chất lượng và kịp thời
  4. Thêm máy học để tối ưu hóa tham số tự động
  5. Tận dụng học tập sâu để khám phá các mô hình phi tuyến tính phức tạp hơn

Kết luận

Tóm lại, chiến lược MA kép này rất đơn giản và thực tế. Bằng cách nắm bắt các đặc điểm xu hướng khác nhau thông qua hai thông số thời gian và kết hợp chúng để tạo ra tín hiệu giao dịch. Trong khi đó, kết hợp ngưỡng độ dốc cải thiện chất lượng tín hiệu. Chiến lược này có thể phục vụ như một cơ sở cơ bản cho các phần mở rộng, với không gian tối ưu hóa và tiềm năng rộng rãi.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by sixpathssenin
//@version=4
strategy(title="Dual Moving Average",initial_capital=10000,overlay=true)

ma1= sma(close,8)
ma2= sma(close,21)

angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13)

i_lookback   = input(2,     "Angle Period", input.integer, minval = 1)
i_atrPeriod  = input(10,    "ATR Period",   input.integer, minval = 1)
i_angleLevel = input(6,     "Angle Level",  input.integer, minval = 1)
i_maSource   = input(close, "MA Source",    input.source)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)

plot(ma1,color=#FF0000)
plot(ma2,color=#00FF00)

crosso=crossover(ma1,ma2) 
crossu=crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)


if(long)
    strategy.entry("Long",strategy.long)
if(short)
    strategy.entry("short",strategy.short)
    


Thêm nữa