Hệ thống chéo trung bình động

Tác giả:ChaoZhang, Ngày: 2024-01-03 16:22:18
Tags:

img

Tổng quan

Đây là một chiến lược theo xu hướng dựa trên tín hiệu chéo trung bình động. Khi trung bình động nhanh vượt qua trên trung bình động chậm từ dưới, một tín hiệu mua được tạo ra. Khi trung bình động nhanh vượt qua dưới trung bình động chậm từ trên, một tín hiệu bán được tạo ra.

Chiến lược logic

Chiến lược này sử dụng hai đường trung bình động, đường trung bình động đơn giản 20 giai đoạn và đường trung bình động đơn giản 30 giai đoạn. Khi MA 20 giai đoạn vượt trên MA 30 giai đoạn, một tín hiệu mua được tạo ra. Khi MA 20 giai đoạn vượt dưới MA 30 giai đoạn, một tín hiệu bán được kích hoạt.

Các đường trung bình động tự nó phục vụ như các chỉ số xu hướng, mô tả hướng xu hướng thị trường hiệu quả. Nguyên tắc chéo cho phép chiến lược nắm bắt các điểm đảo ngược xu hướng kịp thời và tạo ra các tín hiệu giao dịch. Các khoảng thời gian 20 ngày và 30 ngày được thiết lập thích hợp để phản ánh xu hướng thị trường mà không quá nhạy cảm với tiếng ồn.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Lý thuyết đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu;
  2. Giao dịch theo xu hướng tránh các vị trí ngược xu hướng và tổn thất không cần thiết;
  3. Các đường trung bình động có tác dụng lọc để loại bỏ tiếng ồn thị trường và tránh các tín hiệu sai;
  4. Các thiết lập tham số là hợp lý để không gây ra quá nhiều độ nhạy.

Phân tích rủi ro

Những rủi ro chính của chiến lược này bao gồm:

  1. Các lệnh dừng lỗ thường xuyên có thể được kích hoạt trong quá trình củng cố thị trường khi giao thoa trung bình động xảy ra thường xuyên;
  2. Mất một số lợi nhuận do bản chất chậm của đường trung bình động trong thời gian xu hướng mạnh;
  3. Các thiết lập tham số không phù hợp có thể ảnh hưởng đến sự ổn định.

Giải pháp:

  1. Điều chỉnh thời gian trung bình động, sử dụng trung bình động tam giác vv để làm mịn đường cong và giảm tần suất chéo;
  2. Sử dụng các chỉ số khác để xác định xu hướng, tránh giao dịch trong quá trình hợp nhất;
  3. Tối ưu hóa các thông số để tìm ra sự kết hợp tốt nhất.

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

Các khía cạnh chính để tối ưu hóa chiến lược:

  1. Kiểm tra các loại trung bình động khác nhau, chẳng hạn như trung bình động cân nhắc, trung bình động tam giác vv;
  2. Thêm các chỉ số kỹ thuật khác để tránh tín hiệu trong quá trình hợp nhất;
  3. Kết hợp các kỹ thuật phân tích khác như sóng Elliott, lý thuyết kênh để xác định xu hướng;
  4. Sử dụng các mô hình học máy để tối ưu hóa các thông số một cách năng động;
  5. Sử dụng các công cụ số lượng và áp dụng các kỹ thuật dừng lỗ / lợi nhuận để tinh chỉnh quản lý tiền.

Kết luận

Hệ thống chéo trung bình động là một chiến lược theo xu hướng đơn giản và hiệu quả. Logic là rõ ràng và dễ hiểu, rất phù hợp cho người mới bắt đầu học. Nó tạo ra các tín hiệu giao dịch dựa trên chéo trung bình động và lợi nhuận từ giao dịch dọc theo xu hướng. Chiến lược có thể được tối ưu hóa theo nhiều cách để trở nên ổn định và hiệu quả hơn.


/*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)

Thêm nữa