Xu hướng dựa trên MACD và RSI sau chiến lược đảo ngược

Tác giả:ChaoZhang, Ngày: 2023-12-18 17:53:38
Tags:

img

Tổng quan

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.

Chiến lược logic

  1. 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))
    
  2. 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 
    
  3. 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
    
  4. 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
    

Phân tích lợi thế

  1. Kết hợp giao dịch theo xu hướng và đảo ngược để kiếm lợi từ cả xu hướng và đảo ngược.
  2. Sử dụng MACD để đánh giá hướng xu hướng và tránh các sự đột phá sai.
  3. Chế độ lọc tiếng ồn bằng EMA.
  4. Tăng lợi nhuận với RSI cho các giao dịch đảo ngược.

Phân tích rủi ro

  1. Các giao dịch đảo ngược có thể gây ra tổn thất trong các thị trường có xu hướng mạnh.
  2. Điều chỉnh tham số không đúng có thể làm tăng tần suất giao dịch và chi phí trượt.
  3. Các tín hiệu đảo ngược có thể có một chút chậm trễ, bỏ lỡ giá nhập cảnh tốt nhất.

Giải pháp:

  1. Tối ưu hóa các thông số để tìm kết hợp tốt nhất.
  2. Điều chỉnh ngưỡng RSI đảo ngược đúng cách.
  3. Xem xét thêm stop loss vào các lỗ kiểm soát.

Hướng dẫn tối ưu hóa

  1. Kiểm tra chiều dài EMA.
  2. Tối ưu hóa các thông số MACD.
  3. Kiểm tra các ngưỡng đảo ngược RSI khác nhau.
  4. Hãy xem xét kết hợp với các chỉ số khác.

Tóm lại

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



Thêm nữa