
Chiến lược giao chéo EMA và RSI kết hợp hai chỉ số kỹ thuật của chỉ số chuyển động trung bình (EMA) và chỉ số tương đối mạnh (RSI) để xác định tín hiệu mua hoặc bán tiềm năng. Khi EMA và RSI giao chéo, thị trường có thể thay đổi. Ví dụ: khi EMA có chu kỳ ngắn đi qua EMA có chu kỳ dài hơn và RSI đi qua một mức giá nhất định, điều này cho thấy có thể có xu hướng tăng, được gọi là giao chéo quan sát. Ngược lại, khi EMA có chu kỳ ngắn đi qua EMA có chu kỳ dài hơn và RSI đi qua một mức giá nhất định, điều này cho thấy có thể có xu hướng giảm, được gọi là giao chéo giảm.
Chiến lược giao chéo EMA và RSI là một chiến lược theo dõi xu hướng đơn giản và dễ sử dụng, có thể đánh giá toàn diện về xu hướng thị trường bằng cách kết hợp hai chiều của xu hướng và động lực. Đồng thời, chiến lược này sử dụng một số điều kiện lọc và phương pháp dừng lỗ động để cải thiện chất lượng tín hiệu và khả năng kiểm soát rủi ro. Tuy nhiên, chiến lược này cũng có một số hạn chế, chẳng hạn như các chỉ số bị trì trệ, giao dịch thường xuyên. Do đó, trong ứng dụng thực tế, chiến lược cần được tối ưu hóa và cải tiến thêm dựa trên đặc điểm thị trường cụ thể và sở thích rủi ro cá nhân.
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pritom980
//@version=5
strategy("EMA RSI Cross", overlay=true, margin_long=100, margin_short=100)
// add RSI
rsi_period = input.int(7,"RSI Period")
rsi_val = ta.rsi(close[1],rsi_period)
plot(rsi_val, color=color.blue, linewidth=2, title="RSI")
buyRsiFlag = rsi_val < 20
sellRsiFlag = rsi_val > 80
// add EMA
ema = ta.ema(close, 50)
plot(ema, color=color.red, linewidth=2, title="EMA")
// check buy
// buy when the price is below ema
buyFlag = ema > close ? true : false
// sell when the price is above ema
sellFlag = ema < close ? true : false
bgcolor(buyFlag and buyRsiFlag ? color.green : na )
bgcolor(sellFlag and sellRsiFlag ? color.red : na )
// Check if current candle's body is bigger than previous candle's body and of opposite color
is_body_bigger_long = math.abs(close - open) > math.abs(close[1] - open[1]) and close > open != close[1] > open[1]
greenCandle = close > close[1]
redCandle = close < close[1]
// Mark the candle
bgcolor(is_body_bigger_long and greenCandle and buyFlag ? color.blue : na, transp=70)
// ENTRY ---------------------
// Input for ATR period
atr_length = input(14, title="ATR Length")
// Calculate ATR
atr_value = ta.atr(atr_length)
// Calculate stop loss and take profit levels
candleBody = math.abs(close-open)
slDist = atr_value + candleBody
stop_loss_long = close - slDist
take_profit_long = close + (1.2 * slDist)
stop_loss_short = high + slDist
take_profit_short = high - (1.2 * slDist)
// Entry and exit conditions
if (buyFlag and buyRsiFlag and strategy.opentrades >= 0 and greenCandle)
strategy.entry("Long", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long)
// Entry and exit conditions
if (sellFlag and sellRsiFlag and strategy.opentrades <= 0 and redCandle)
strategy.entry("Short", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)