
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.
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.
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:
Chiến lược này có những rủi ro:
Phản ứng:
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
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.
/*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)