Chiến lược giao cắt đường trung bình giá


Ngày tạo: 2023-11-27 16:52:19 sửa đổi lần cuối: 2023-11-27 16:52:19
sao chép: 1 Số nhấp chuột: 677
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt đường trung bình giá

Tổng quan

Chiến lược này về cơ bản là một chiến lược chéo đường bằng cách tính toán đường trung bình di chuyển của giá và thiết lập một đường trung bình di chuyển ngắn hạn nhất định, làm nhiều khi đường trung bình di chuyển ngắn hạn đi qua đường trung bình di chuyển dài hạn từ phía dưới; làm trống khi đường trung bình di chuyển ngắn hạn đi qua đường trung bình di chuyển dài hạn từ phía trên xuống.

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

Ý tưởng cốt lõi của chiến lược chéo đường trung bình giá là: đường trung bình di chuyển của giá có thể phản ánh hiệu quả xu hướng thay đổi giá. Chiến lược tạo ra tín hiệu giao dịch bằng cách thiết lập đường trung bình di chuyển của hai chu kỳ khác nhau và một số logic giao dịch để đánh giá sự thay đổi trong xu hướng thị trường.

Chiến lược này tính toán một đường trung bình dài hơn và một đường trung bình ngắn hơn. Đường dài chủ yếu đánh giá xu hướng lớn, đường ngắn được sử dụng để nắm bắt các biến động ngắn trong quá trình xu hướng lớn. Tín hiệu giao dịch của chiến lược chủ yếu đến từ giao thoa của đường ngắn với đường dài: đi qua đường dài trên đường ngắn làm tín hiệu đa và đi qua đường dài dưới đường ngắn làm tín hiệu trống. Ngoài ra, chiến lược cũng xử lý các tín hiệu thêm để tránh các tín hiệu giả.

Cụ thể, chiến lược này sử dụng 7 loại moving average khác nhau, bao gồm SMA, EMA, VWMA, người dùng có thể chọn loại moving average. Độ dài của moving average cũng có thể được cài đặt linh hoạt. Ngoài ra, chiến lược cũng cung cấp một số giới hạn thời gian giao dịch và cơ chế quản lý vị trí.

Phân tích lợi thế

Một số lợi thế chính của chiến lược giá trung bình là:

  1. Chiến lược logic rõ ràng, đơn giản, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu học.

  2. Các nguyên tắc chiến lược là vững chắc, dựa trên các quy tắc giao dịch đồng nhất được chứng minh đầy đủ, đã trải qua kiểm tra thực tiễn thị trường.

  3. Các tham số chiến lược có thể được điều chỉnh một cách linh hoạt, người dùng có thể chọn các tham số phù hợp dựa trên phán đoán và sở thích của họ về thị trường.

  4. Chiến lược này có một cơ chế kiểm soát rủi ro để giảm thời gian nắm giữ đơn lỗ và ngăn chặn việc mở vị trí ngược không cần thiết.

  5. Chiến lược có nhiều loại trung bình di chuyển, người dùng có thể chọn loại trung bình di chuyển phù hợp nhất với loại giao dịch của mình.

  6. Chiến lược hỗ trợ mở logic giao dịch trong một khoảng thời gian giao dịch cụ thể, tránh biến động bất thường của thị trường kỳ nghỉ chính.

Phân tích rủi ro

Mặc dù có nhiều ưu điểm của chiến lược giao dịch giá trung bình, nhưng cũng có một số rủi ro trong giao dịch thực tế, chủ yếu được thể hiện trong hai khía cạnh sau:

  1. Do sự chậm trễ của hầu hết các đường trung bình di chuyển, tín hiệu giao thoa có thể xuất hiện sau khi hoàn thành đợt đảo ngược giá, dễ bị mắc kẹt.

  2. Nếu các tham số được thiết lập không đúng cách, các tín hiệu chéo có thể quá thường xuyên, khiến giao dịch hoạt động quá cao và tạo ra chi phí giao dịch cao hơn.

Các rủi ro trên có thể được kiểm soát và đối phó bằng cách:

  1. Kiểm soát rủi ro mất mát đơn lẻ bằng cách đặt mức độ dừng lỗ vừa phải.

  2. Tăng các điều kiện lọc, giảm tần suất giao dịch, ngăn chặn giao dịch quá mức. Ví dụ: thiết lập kênh giá hoặc điều kiện độ dao động của giá.

  3. Tối ưu hóa các tham số của đường trung bình di chuyển, chọn các tham số phù hợp nhất với các loại giao dịch và chu kỳ của mình. Thử nghiệm sự ổn định của chiến lược trong các điều kiện thị trường khác nhau.

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

Chiến lược giá trung bình có thể được tối ưu hóa hơn nữa, chủ yếu từ các khía cạnh sau:

  1. Tăng cơ chế bảo vệ trong tình huống quá căng thẳng. Ví dụ: tạm dừng giao dịch khi giá dao động mạnh, tránh thời gian bất thường của thị trường.

  2. Thêm nhiều điều kiện lọc và kết hợp các tín hiệu giao dịch, cải thiện chất lượng và ổn định của tín hiệu. Ví dụ: kết hợp với các chỉ số kỹ thuật khác để xác định xu hướng mạnh mẽ.

  3. Hệ thống tham số động. Các tham số quan trọng như chiều dài đường trung bình di chuyển và chuyển đổi giao dịch được điều chỉnh tự động theo điều kiện thị trường và đặc điểm của giống thay vì sử dụng các giá trị cố định.

  4. Sử dụng tín hiệu chéo đường trung bình này trong các chiến lược cao cấp, chẳng hạn như đánh giá tổng hợp đa giống. Kết hợp với các thông tin khác, để tối ưu hóa chiến lược sâu.

Những đề xuất trên có thể làm cho chiến lược này có thể áp dụng rộng rãi hơn, hiệu quả giao dịch tốt hơn, tổng hợp tốt hơn rủi ro và lợi nhuận.

Tóm tắt

Trong bài viết này, chúng tôi đã phân tích chi tiết các chiến lược CrossMA đơn giản và đồng tuyến cross của Noro. Chúng tôi đã phân tích tư duy, cấu trúc nguyên tắc, ưu điểm chính và hướng cải tiến có thể của chiến lược. Chiến lược nói chung là logic rõ ràng, đơn giản thực tế, điều chỉnh tham số linh hoạt, có thể thích ứng với nhiều môi trường giao dịch. Chúng tôi cũng đã phân tích các vấn đề và rủi ro trong chiến lược và đưa ra các khuyến nghị xử lý cụ thể.

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

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//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 = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

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

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")