Chiến lược này kết hợp các chỉ số MACD, EMA và RSI để thực hiện giao dịch theo xu hướng và đảo ngược. Nó tạo ra tín hiệu mua khi MACD tăng qua đường tín hiệu và giá đóng trên EMA; và bán tín hiệu khi MACD giảm dưới đường tín hiệu và giá đóng dưới EMA để nắm bắt xu hướng. Trong khi đó, nó giao dịch đảo ngược khi RSI đạt mức mua quá mức hoặc bán quá mức.
Tính toán sự khác biệt MACD và EMA.
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
ema = ema(close, input(200))
Tạo tín hiệu mua: MACD diff (macd - tín hiệu) đi trên 0 và giá đóng là trên EMA.
delta = macd - signal
buy_entry= close>ema and delta > 0
Tạo tín hiệu bán: MACD diff đi dưới 0 và giá đóng là dưới EMA.
sell_entry = close<ema and delta<0
Sự đảo ngược giao dịch khi RSI đạt mức mua quá mức hoặc bán quá mức.
if (rsi > 70 or rsi < 30)
reversal := true
Giải pháp:
Chiến lược này kết hợp MACD, EMA và RSI để thực hiện một cách hữu cơ theo xu hướng và đảo ngược giao dịch. MACD đánh giá hướng xu hướng, EMA lọc tiếng ồn và RSI nắm bắt các điểm đảo ngược. Sự kết hợp đa chỉ số như vậy có thể xác định tốt hơn các chuyển động của thị trường, cải thiện lợi nhuận trong khi giảm tín hiệu sai. Tối ưu hóa tham số và quản lý dừng lỗ có thể được cải thiện hơn nữa để giảm tổn thất không cần thiết. Nhìn chung, đây là một khuôn khổ chiến lược vững chắc với tiềm năng lợi nhuận ổn định.
/*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