Chiến lược đảo ngược theo xu hướng dựa trên MACD và RSI


Ngày tạo: 2023-12-18 17:53:38 sửa đổi lần cuối: 2023-12-18 17:53:38
sao chép: 0 Số nhấp chuột: 660
1
tập trung vào
1621
Người theo dõi

Chiến lược đảo ngược theo xu hướng dựa trên MACD và RSI

Tổng quan

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.

Nguyên tắc chiến lược

  1. Tính MACDdiffs và EMA.
   fastMA = ema(close, fast)  
   slowMA = ema(close, slow)
   macd = fastMA - slowMA
   signal = sma(macd, 9)
   ema = ema(close, input(200))
  1. Tạo tín hiệu mua: MACD chênh lệch ((macd-signal) trên trục 0 và giá đóng cửa cao hơn đường trung bình EMA.
   delta = macd - signal 
   buy_entry= close>ema and delta > 0
  1. Tạo tín hiệu bán: MACD bị phá vỡ dưới 0 và giá đóng cửa thấp hơn đường trung bình EMA.
   sell_entry = close<ema and delta<0 
  1. Khi RSI đi vào khu vực mua quá mức, hãy thực hiện giao dịch ngược.
   if (rsi > 70 or rsi < 30)
       reversal := true

Phân tích lợi thế

  1. Kết hợp theo dõi xu hướng và giao dịch đảo ngược, bạn có thể theo dõi xu hướng chính và kiếm lợi nhuận tại các điểm đảo ngược.
  2. Sử dụng MACD để đánh giá xu hướng chính, tránh phá vỡ giả.
  3. EMA đã lọc một số tiếng ồn.
  4. Chỉ số RSI đánh giá điểm đảo ngược, tăng cường chiến lược lợi nhuận.

Phân tích rủi ro

  1. Trong một thị trường có xu hướng lớn, các giao dịch đảo ngược có thể dẫn đến tổn thất.
  2. Các tham số không được thiết lập đúng sẽ làm tăng tần suất giao dịch và chi phí điểm trượt.
  3. Các tín hiệu quay ngược có thể bị chậm trễ và bỏ lỡ thời gian tốt nhất để vào.

Giải pháp:

  1. Tối ưu hóa các tham số, tìm ra sự kết hợp tham số tốt nhất.
  2. Điều chỉnh thích hợp RSI của giao dịch đảo ngược.
  3. Hãy cân nhắc thêm vào Stop Loss để kiểm soát lỗ.

Hướng tối ưu hóa

  1. Kiểm tra tham số đường trung bình EMA của các độ dài khác nhau.
  2. Tối ưu hóa các tham số MACD để tìm ra sự kết hợp tham số tối ưu.
  3. Kiểm tra các ngưỡng RSI đảo ngược khác nhau.
  4. Xem xét kết hợp các chỉ số khác.

Tóm tắt

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.

Mã nguồn chiến lược
/*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