
Chiến lược giao dịch chéo chỉ số động lượng (Momentum Indicator Crossover Strategy) là một phương pháp giao dịch kết hợp các tín hiệu của chỉ số di chuyển trung bình (Exponential Moving Average, EMA) và chỉ số tương đối yếu (Relative Strength Index, RSI). Chiến lược này nhằm sử dụng sự giao nhau của hai đường EMA để tạo ra tín hiệu mua và bán, để giao dịch trong thị trường tài chính.
Cốt lõi của chiến lược này là hệ thống chéo dòng nhanh và chậm của EMA. Chiến lược này xác định ba dòng EMA với các tham số khác nhau:ema1、ema2Vàema3Trong số đó,ema1Nó là một xu hướng ngắn hạn.ema2Nó là một trong những xu hướng trung hạn.ema3Hình tượng trưng cho xu hướng dài hạn. Khi xu hướng ngắn hạn vượt qua xu hướng trung hạn, nó tạo ra tín hiệu mua; Khi xu hướng ngắn hạn vượt qua xu hướng trung hạn, nó tạo ra tín hiệu bán.
Để lọc các tín hiệu chẩn đoán sai, chính sách cũng xác định hai điều kiện bổ sung:bodybar1 > bodybar2Vàclose > entrybar(Thông báo mua hàng) hoặcclose < entrybarĐiều này đảm bảo rằng mối quan hệ chiều dài thực tế của hai đường K gần nhất phù hợp với hướng của tín hiệu và giá sẽ phá vỡ điểm nhập cảnh để tránh nhập cảnh lặp lại.
Ngoài ra, chiến lược kết hợp với chỉ số RSI evalue, khu vực RSI cao được sử dụng để xác định tín hiệu mua quá mức và khu vực RSI thấp được sử dụng để xác định tín hiệu bán quá mức. Điều này giúp tránh các tín hiệu sai trong thị trường giá quá nóng và quá lạnh.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có những rủi ro sau:
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Chiến lược chéo chỉ số động lực tích hợp các lợi thế của EMA và RSI để tạo ra tín hiệu giao dịch dựa trên các chỉ số chéo. Chiến lược này đơn giản và thực tế, phù hợp cho người mới bắt đầu sử dụng, cũng có thể mở rộng và tối ưu hóa để nâng cao hiệu quả chiến lược theo nhu cầu thực tế.
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('EMA Crossover Strategy', shorttitle='EMA Crossover', overlay=true)
// Define input for position size as a percentage of equity
position_size_pct = input(1, title='Position Size (%)') / 100
//Input EMA
len1 = input.int(25, minval=1, title='EMA 1')
src1 = input(close, title='Source')
ema1 = ta.ema(src1, len1)
len2 = input.int(100, minval=1, title='EMA 2')
src2 = input(close, title='Source')
ema2 = ta.ema(src2, len2)
len3 = input.int(200, minval=1, title='EMA 3')
src3 = input(close, title='Source')
ema3 = ta.ema(src3, len3)
//End of format
//Format RSI
lenrsi = input(14, title='RSI length')
outrsi = ta.rsi(close,lenrsi)
//plot(outrsi, title='RSI', color=color.new(color.blue, 0), linewidth=1)
//hline(70, 'Overbought', color=color.red)
//hline(30, 'Oversold', color=color.green)
//End of format
bodybar1 = math.abs(close - open)
bodybar2 = math.abs(close[1] - open[1])
// Plot the EMAs
plot(ema1, color=color.new(color.blue, 0), title='EMA 1')
plot(ema2, color=color.new(color.red, 0), title='EMA 2')
//plot(ema3, color=color.new(#ffffff, 0), title='EMA 3')
// EMA Crossover conditions
emaCrossoverUp = ta.crossover(ema1, ema2)
emaCrossoverDown = ta.crossunder(ema1, ema2)
var entrybar = close // Initialize entrybar with the current close
// Calculate crossovers outside of the if statements
emaCrossoverUpOccured = ta.crossover(close, ema1) and ema1 > ema2 and bodybar1 > bodybar2 and close > entrybar
emaCrossoverDownOccured = ta.crossunder(close, ema1) and ema1 < ema2 and bodybar1 > bodybar2 and close < entrybar
plotshape(series=emaCrossoverUpOccured, location=location.abovebar, color=color.new(color.green, 0), style=shape.triangleup, title='New Buy Order', size=size.tiny)
plotshape(series=emaCrossoverDownOccured, location=location.belowbar, color=color.new(color.red, 0), style=shape.triangledown, title='New Sell Order', size=size.tiny)
// Define trading logic with custom position size and RSI conditions
if emaCrossoverUp or emaCrossoverUpOccured
strategy.entry('Buy', strategy.long)
entrybar := close // Update entrybar when entering a new buy position
entrybar
if emaCrossoverDown or emaCrossoverDownOccured
strategy.entry('Sell', strategy.short)
entrybar := close // Update entrybar when entering a new sell position
entrybar