Chiến lược giao dịch Double Moving Average Golden Cross và Death Cross


Ngày tạo: 2023-09-17 22:35:07 sửa đổi lần cuối: 2023-09-17 22:35:07
sao chép: 1 Số nhấp chuột: 626
1
tập trung vào
1617
Người theo dõi

Chiến lược này được hình thành bằng cách tính toán các đường trung bình di chuyển của hai chu kỳ khác nhau và tạo ra các tín hiệu mua và bán dựa trên hai chu kỳ của chúng.

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

Chiến lược này đầu tiên cho phép người dùng chọn loại và độ dài của đường trung bình di chuyển. Các loại bao gồm SMA, EMA, VWMA, v.v., và độ dài quyết định chu kỳ của đường trung bình.

Sau đó, tính hai đường trung bình di chuyển tùy theo người dùng chọn. Nếu đường nhanh đi qua đường chậm từ phía dưới, tạo thành nếp nhăn vàng, sẽ tạo ra tín hiệu mua. Nếu đường nhanh đi qua đường chậm từ phía trên xuống, tạo thành nếp nhăn chết, sẽ tạo ra tín hiệu bán.

Như vậy, khi giá trung bình ngắn hạn cao hơn giá trung bình dài hạn, được coi là thị trường đang có xu hướng tăng, nên mua. Khi giá ngắn hạn thấp hơn giá dài hạn, được coi là thị trường đang có xu hướng giảm, nên bán.

Phân tích lợi thế

  • Các chiến lược được xây dựng dựa trên logic đơn giản, rõ ràng và dễ hiểu.
  • Đường trung bình di chuyển có thể lọc thành công tiếng ồn thị trường và nhận ra xu hướng.
  • Có thể lựa chọn loại và tham số trung bình di chuyển linh hoạt, thích ứng với các giống và chu kỳ khác nhau.
  • Dễ dàng tối ưu hóa thông qua nhiều kết hợp các chỉ số.

Phân tích rủi ro

  • Khi thị trường bị chấn động, có thể có nhiều tín hiệu sai.
  • Lựa chọn tham số không đúng có thể dẫn đến hiệu suất chiến lược kém.
  • Dấu hiệu bị chậm trễ, không thể bắt kịp thời điểm chuyển hướng.
  • Có nguy cơ bị ảnh hưởng bởi các sự kiện bất ngờ.

Có thể kiểm soát rủi ro bằng cách tối ưu hóa các tham số thích hợp, kết hợp các chỉ số khác để tạo tín hiệu, thiết lập chặn dừng lỗ.

Hướng tối ưu hóa

  • Kiểm tra các tham số với các loại và độ dài khác nhau để tìm ra sự kết hợp tham số tối ưu.
  • Thêm các bộ lọc cho các chỉ số khác, chẳng hạn như chỉ số giá cả, chỉ số biến động.
  • Tăng logic dừng lỗ và giảm rút lui.
  • Kết hợp các chỉ số đánh giá xu hướng để tránh môi trường giao dịch không phù hợp.
  • Tối ưu hóa chiến lược quản lý tài chính, như quản lý vị trí, ngân sách rủi ro, v.v.

Tóm tắt

Chiến lược tổng thể của chiến lược đơn giản và rõ ràng, hình thành tín hiệu giao dịch bằng cách tính toán đường hai chiều bằng nhau, có thể điều chỉnh các tham số một cách linh hoạt theo môi trường thị trường, và các chiến lược khác được tối ưu hóa, nhưng cần chú ý đến việc phòng ngừa rủi ro của thị trường xung đột, quản lý quỹ hợp lý. Nhìn chung là một lựa chọn đáng xem xét.

Mã nguồn chiến lược
/*backtest
start: 2023-09-09 00:00:00
end: 2023-09-13 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Tests", shorttitle = "MAs tests", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)


len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0

plot(ma, color = blue, linewidth = 3, transp = 0)

trend = low > ma ? 1 : high < ma ? -1 : trend[1]

longCondition = trend == 1 and trend[1] == -1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
    strategy.entry("Short", strategy.short)