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


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

Tổng quan

Chiến lược chéo đường trung bình di chuyển là một chiến lược theo dõi xu hướng dựa trên chéo đường trung bình di chuyển làm tín hiệu giao dịch. Chiến lược này sử dụng giá với chéo đường trung bình di chuyển và hai chéo đường trung bình di chuyển làm tín hiệu mua và bán để kiếm 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 di chuyển, nhanh hay chậm, có thể chọn SMA hoặc EMA.

  2. Khi đi qua đường chậm trên đường nhanh, hãy làm nhiều hơn; khi đi qua đường chậm dưới đường nhanh, cân bằng.

  3. Có thể chọn giá phá vỡ đường trung bình hoặc giao nhau giữa các đường trung bình như tín hiệu giao dịch.

  4. Có thể thiết lập khoảng thời gian chiến lược hoạt động.

  5. Chỉ có thể làm nhiều hơn đối với thị trường nhiều đầu, thị trường trống chỉ trống.

  6. Tối ưu hóa các tham số đường trung bình di chuyển để thích ứng với các chu kỳ khác nhau.

Chiến lược này sử dụng tính năng theo dõi xu hướng của đường trung bình di chuyển, khi đường trung bình ngắn hạn đi qua đường trung bình dài hạn, cho thấy hiện đang trong xu hướng tăng và nên làm nhiều hơn; ngược lại, khi đường trung bình ngắn hạn đi qua đường trung bình dài hạn, cho thấy hiện đang trong xu hướng giảm và nên giảm vị thế.

Phân tích lợi thế

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

  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 xu hướng một cách hiệu quả và nắm bắt cơ hội mua bán kịp thời.

  3. Có thể kết hợp các tham số đường trung bình khác nhau, phù hợp với nhiều môi trường thị trường.

  4. Có thể chọn chỉ làm nhiều hoặc chỉ làm trống, tránh hoạt động ngược không chắc chắn.

  5. Có thể thiết lập thời gian hoạt động của chiến lược để tránh một khoảng thời gian nhất định.

  6. Hiệu suất chiến lược có thể được cải thiện liên tụ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 là:

  1. Có thể tạo ra các tín hiệu giả, nên tránh giao dịch quá thường xuyên.

  2. Hiển thị phụ thuộc vào lựa chọn tham số trung bình, lựa chọn không đúng có thể dẫn đến tổn thất.

  3. Có một số chậm trễ, nên ngăn chặn nhập cảnh quá sớm và quá muộn.

  4. Không phù hợp với môi trường thị trường bị chấn động.

  5. Đường ngang có một số tính ngẫu nhiên, không thể hoàn toàn tránh mất mát.

Có thể giảm rủi ro bằng cách xác nhận khối lượng giao dịch, tối ưu hóa tham số hoặc sử dụng kết hợp với các chỉ số khác.

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

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

  1. Thêm /% ((Line - ShortMa) /ShortMa) / ((Line - LongMa) /LongMa) / làm điều kiện lọc độ lệch đường trung bình.

  2. Tối ưu hóa các tham số chu kỳ trung bình di chuyển, thử nghiệm các kết hợp khác nhau.

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

  4. Thiết lập các điều kiện dừng lỗ, hạn chế tổn thất đơn lẻ.

  5. Phân biệt thị trường xu hướng và thị trường tổng hợp, sử dụng điều kiện.

  6. Kiểm tra các vị trí khác nhau trong thời gian ngắn và dài để tìm ra giải pháp tốt nhất.

Tóm tắt

Chiến lược chéo đường trung bình di động là một chiến lược theo dõi xu hướng đơn giản và thực tế. Ưu điểm là dễ thực hiện, có thể theo dõi xu hướng hiệu quả; Nhược điểm là có tính chậm trễ, có thể tạo ra nhiều tín hiệu sai.

Mã nguồn chiến lược
/*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)