
Chiến lược này sử dụng tổng hợp ba chỉ số MACD, EMA và RSI để theo dõi xu hướng và giao dịch đảo ngược. Nó tạo ra tín hiệu mua khi MACD đi lên qua đường tín hiệu và giá đóng cửa cao hơn đường trung bình EMA; tạo ra tín hiệu bán khi MACD đi xuống và giá đóng cửa thấp hơn đường trung bình EMA, để nắm bắt xu hướng; đồng thời, giao dịch đảo ngược khi RSI đạt đến vùng mua quá bán.
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
ema = ema(close, input(200))
delta = macd - signal
buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0
if (rsi > 70 or rsi < 30)
reversal := true
Giải pháp:
Chiến lược này sử dụng các chỉ số MACD, EMA và RSI để thực hiện sự kết hợp hữu cơ giữa theo dõi xu hướng và đảo ngược giao dịch. MACD đánh giá hướng xu hướng chính, tiếng ồn sóng EMA, chỉ số RSI nắm bắt điểm đảo ngược. Sự kết hợp đa chỉ số này có thể đánh giá chính xác hơn về xu hướng thị trường, đồng thời giảm giao dịch sai và tăng tỷ lệ lợi nhuận. Tất nhiên, việc tối ưu hóa tham số và quản lý dừng lỗ cần được cải thiện hơn nữa để giảm tổn thất không cần thiết và làm cho chiến lược ổn định hơn.
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 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/
// © mbuthiacharles4
//Good with trending markets
//@version=4
strategy("CHARL MACD EMA RSI")
fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
ema = ema(close, input(200))
rsi = rsi(close, input(14))
//when delta > 0 and close above ema buy
delta = macd - signal
buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0
var bought = false
var sold = false
var reversal = false
if (buy_entry and bought == false and rsi <= 70)
strategy.entry("Buy",true , when=buy_entry)
bought := true
strategy.close("Buy",when= delta<0 or rsi > 70)
if (delta<0 and bought==true)
bought := false
//handle sells
if (sell_entry and sold == false and rsi >= 30)
strategy.entry("Sell",false , when=sell_entry)
sold := true
strategy.close("Sell",when= delta>0 or rsi < 30)
if (delta>0 and sold==true)
sold := false
if (rsi > 70 or rsi < 30)
reversal := true
placing = rsi > 70 ? high :low
label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny)
if (reversal == true)
if (rsi < 70 and sold == false and delta < 0)
strategy.entry("Sell",false , when= delta < 0)
sold := true
reversal := false
else if (rsi > 30 and bought == false and delta > 0)
strategy.entry("Buy",true , when= delta > 0)
bought := true
reversal := false