
Chiến lược này sử dụng đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để xây dựng tín hiệu giao dịch, để xác định và theo dõi xu hướng. Nó tạo ra tín hiệu mua khi đường nhanh đi qua đường chậm; nó tạo ra tín hiệu bán khi đường nhanh đi qua đường chậm.
Chiến lược này sử dụng hai chu kỳ khác nhau của Exponential Moving Average như là cơ sở cho các quyết định giao dịch. Các tham số di chuyển nhanh trung bình được thiết lập là 30 ngày, được sử dụng để nắm bắt các biến động giá trong thời gian ngắn hơn; tham số di chuyển chậm trung bình được thiết lập là 100 ngày, được sử dụng để xác định hướng của xu hướng đường dài trong giá cả.
Khi đường nhanh từ dưới đi qua đường chậm, thị trường bước vào xu hướng tăng, tạo ra tín hiệu mua; khi đường nhanh từ trên đi qua đường chậm, thị trường bước vào xu hướng giảm, tạo ra tín hiệu bán.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược này dựa trên hệ thống quyết định giao dịch xây dựng hai đường trung bình, đánh giá xu hướng thị trường thông qua mối quan hệ giá của đường trung bình nhanh và đường trung bình chậm, tạo tín hiệu đơn giản và rõ ràng. Chiến lược này lọc một phần tiếng ồn, có thể thuận lợi, phù hợp với giao dịch xu hướng đường dài trung bình.
/*backtest
start: 2023-01-21 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("EMA Strategy v2", shorttitle = "EMA Strategy v2", overlay=true, pyramiding = 3,default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
// === Inputs ===
// short ma
maFastSource = input(defval = close, title = "Fast MA Source")
maFastLength = input(defval = 30, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource = input(defval = close, title = "Slow MA Source")
maSlowLength = input(defval = 100, title = "Slow MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop = input(defval = true, title = "Use Initial Stop Loss?")
slPoints = input(defval = 0, title = "Initial Stop Loss Points", minval = 1)
useTS = input(defval = true, title = "Use Trailing Stop?")
tslPoints = input(defval = 0, title = "Trail Points", minval = 1)
useTSO = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset = input(defval = 0, title = "Trail Offset Points", minval = 1)
// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)
plot(fastMA, color=blue)
plot(slowMA, color=purple)
goLong() => crossover(fastMA, slowMA)
killLong() => crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong())
// Shorting if using
goShort() => crossunder (fastMA, slowMA)
killShort() => crossover(fastMA, slowMA)
//strategy.entry("Sell", strategy.short, when = goShort())
//strategy.close("Sell", when = killShort())
if (useStop)
strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08 )
strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.58)