Chiến lược chéo trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2023-09-18 17:35:37
Tags:

Tổng quan

Chiến lược chéo trung bình động là một chiến lược theo xu hướng dựa trên chéo trung bình động như các tín hiệu giao dịch. Nó sử dụng chéo giá với trung bình động và chéo giữa hai trung bình động như tín hiệu mua và bán để theo đuổi lợi nhuận.

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

Các nguyên tắc chính của chiến lược này là:

  1. Tính toán hai đường trung bình động, một nhanh và một chậm, có thể chọn SMA hoặc EMA.

  2. Đi dài khi đường nhanh vượt qua đường chậm, gần vị trí khi đường nhanh vượt qua đường chậm.

  3. Có thể chọn price breakout hoặc moving average crossover như tín hiệu giao dịch.

  4. Có thể thiết lập thời gian thực hiện chiến lược.

  5. Chỉ có thể mua dài trong thị trường tăng và chỉ có thể mua ngắn trong thị trường giảm.

  6. Tối ưu hóa các thông số trung bình động thông qua backtesting cho các khoảng thời gian khác nhau.

Chiến lược sử dụng xu hướng sau khả năng của đường trung bình động. Khi MA ngắn hạn vượt qua MA dài hạn, nó cho thấy xu hướng tăng, nên đi dài. ngược lại, xu hướng giảm, nên giảm vị trí.

Phân tích lợi thế

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

  1. Nguyên tắc đơn giản, dễ thực hiện, tín hiệu giao dịch rõ ràng.

  2. Có thể theo dõi các xu hướng hiệu quả và nắm bắt kịp thời các cơ hội giao dịch.

  3. Có thể kết hợp các tham số MA khác nhau cho các môi trường thị trường khác nhau.

  4. Có thể chọn chỉ dài hoặc chỉ ngắn để tránh các hoạt động ngược không chắc chắn.

  5. Có thể thiết lập chiến lược chạy thời gian để tránh một số giai đoạn.

  6. Có thể liên tục cải thiện chiến lược thông qua tối ưu hóa tham số.

Phân tích rủi ro

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

  1. Thường bị tín hiệu sai, tránh giao dịch quá thường xuyên.

  2. Hiệu suất phụ thuộc vào các thông số MA, lựa chọn không đúng có thể dẫn đến tổn thất.

  3. Có một sự chậm trễ nhất định, tránh nhập cảnh sớm và xuất cảnh muộn.

  4. Không phù hợp với môi trường thị trường giới hạn phạm vi.

  5. MA chéo có một số ngẫu nhiên, không thể hoàn toàn tránh mất mát.

Các rủi ro có thể được giảm thiểu thông qua xác nhận khối lượng, tối ưu hóa tham số hoặc sử dụng với các chỉ số khác.

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

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

  1. Thêm bộ lọc độ dốc như % ((Line - ShortMa) /ShortMa) / ((Line - LongMa) /LongMa).

  2. Tối ưu hóa thời gian trung bình động, thử các kết hợp khác nhau.

  3. Thêm các chỉ số như MACD hoặc RSI để xác nhận nhiều lần.

  4. Thiết lập stop loss để hạn chế lỗ giao dịch duy nhất.

  5. Phân biệt giữa xu hướng và thị trường dao động cho sử dụng có điều kiện.

  6. Kiểm tra các thời gian giữ khác nhau để tìm ra kế hoạch tối ưu.

Tóm lại

Chiến lược chéo trung bình động là một chiến lược theo xu hướng đơn giản và thực tế. Những lợi thế là dễ thực hiện và theo dõi xu hướng hiệu quả. Những nhược điểm là chậm trễ và dễ bị tín hiệu sai. Chiến lược có thể được cải thiện thông qua tối ưu hóa tham số và lọc chỉ số để đạt được hiệu suất tốt hơn trong các thị trường xu hướng mạnh.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
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