Hệ thống giao cắt trung bình động


Ngày tạo: 2024-01-03 16:22:18 sửa đổi lần cuối: 2024-01-03 16:22:18
sao chép: 1 Số nhấp chuột: 574
1
tập trung vào
1621
Người theo dõi

Hệ thống giao cắt trung bình động

Tổng quan

Chiến lược này là một chiến lược giao dịch trượt nhiều, dựa trên đường trung bình di chuyển để tạo ra tín hiệu giao dịch. Khi đường trung bình di chuyển nhanh đi qua đường trung bình di chuyển chậm từ phía dưới, tạo ra tín hiệu mua; Khi đường trung bình di chuyển nhanh đi qua đường trung bình di chuyển chậm từ phía trên xuống, tạo ra tín hiệu bán.

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

Chiến lược này sử dụng hai đường trung bình di chuyển, đường trung bình di chuyển đơn giản 20 ngày và đường trung bình di chuyển đơn giản 30 ngày. Một tín hiệu mua được tạo ra khi đường trung bình di chuyển 20 ngày đi qua đường trung bình di chuyển 30 ngày từ phía dưới; một tín hiệu bán được tạo ra khi đường trung bình di chuyển 20 ngày đi qua đường trung bình di chuyển 30 ngày từ phía trên xuống.

Đường trung bình di chuyển tự nó là một chỉ số xu hướng, có thể mô tả hiệu quả hướng xu hướng thị trường. Nguyên tắc giao chéo cho phép chiến lược này có thể bắt kịp thời điểm biến đổi xu hướng, tạo ra tín hiệu giao dịch. Hai chu kỳ dài 20 và 30 ngày được thiết lập đúng cách, có thể phản ánh xu hướng thị trường, nhưng không quá nhạy cảm để tạo ra tín hiệu sai.

Phân tích lợi thế

Những lợi thế của chiến lược này được thể hiện qua các khía cạnh sau:

  1. Lập luận chiến lược đơn giản, rõ ràng, dễ hiểu và thực hiện, phù hợp với người mới bắt đầu;
  2. Giao dịch theo xu hướng thuận lợi, tránh xây dựng cơ sở để giảm tổn thất không cần thiết;
  3. Các đường trung bình di chuyển tự nó có tác dụng lọc, loại bỏ tiếng ồn hành trình và tránh các tín hiệu sai;
  4. Cài đặt tham số chu kỳ hợp lý, không quá nhạy cảm và ảnh hưởng đến sự ổn định của chiến lược.

Phân tích rủi ro

Chiến lược này có những rủi ro:

  1. Trong thời gian bất ổn, các đường trung bình di chuyển sẽ giao nhau thường xuyên và có thể tạo ra nhiều lệnh dừng lỗ.
  2. Trong khi đó, các trung bình di chuyển có thể bị tụt hậu và có thể bỏ lỡ một phần lợi nhuận.
  3. Các tham số được đặt không đúng lúc sẽ ảnh hưởng đến sự ổn định của chiến lược.

Phản ứng:

  1. Điều chỉnh chu kỳ trung bình di chuyển, sử dụng các kỹ thuật như trung bình di chuyển hình tam giác để làm mịn đường cong, giảm tần suất giao nhau;
  2. Các chỉ số khác sẽ giúp bạn đánh giá xu hướng và tránh giao dịch trong tình trạng chấn động.
  3. Tối ưu hóa tham số, tìm kiếm sự kết hợp tham số tốt nhất.

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

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

  1. Thử các loại trung bình di chuyển khác nhau, chẳng hạn như trung bình di chuyển trọng số, trung bình di chuyển hình tam giác.
  2. Thêm các chỉ số kỹ thuật khác để tránh tạo ra tín hiệu giao dịch trong thị trường bất ổn;
  3. Xác định xu hướng thị trường kết hợp các phương pháp phân tích kỹ thuật như lý thuyết sóng, lý thuyết kênh;
  4. Sử dụng mô hình học máy để tối ưu hóa các tham số trong thời gian thực;
  5. Kết hợp các công cụ định lượng, áp dụng chiến lược dừng lỗ để tối ưu hóa quản lý tiền.

Tóm tắt

Hệ thống chéo trung bình di chuyển là một chiến lược theo dõi xu hướng đơn giản và hiệu quả, nguyên tắc rõ ràng, dễ hiểu, rất phù hợp cho người mới bắt đầu học. Chiến lược này chủ yếu dựa vào tín hiệu giao dịch hình thành ngã tư của moving average, thu lợi nhuận thông qua giao dịch chuyển động. Có thể tối ưu hóa từ nhiều khía cạnh, làm cho chiến lược ổn định và hiệu quả hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time =true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)