Chiến lược giao cắt vàng trung bình động RSI MACD


Ngày tạo: 2024-01-05 16:11:23 sửa đổi lần cuối: 2024-01-05 16:11:23
sao chép: 0 Số nhấp chuột: 649
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt vàng trung bình động RSI MACD

Tổng quan

Chiến lược này là một chiến lược kết hợp sử dụng RSI, MACD và đường trung bình di chuyển. Nó kết hợp các tín hiệu mua quá mức của RSI, độ nhạy cảm của MACD và hiệu quả của chỉ số của đường trung bình di chuyển để xác định thời điểm ra thị trường.

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

Chiến lược này dựa trên bốn điều kiện sau:

  1. Cột MACD lớn hơn tham số nhập đa đầu được thiết lập;
  2. RSI lớn hơn 50 cho thấy đang mua quá mức;
  3. Các EMA ngắn hạn được xếp trên các EMA dài hạn để tạo thành các đường giao thoa vàng.
  4. Giá đóng cửa trên EMA dài và cao hơn EMA dài cộng với mức dừng lỗ ATR.

Chiến lược sẽ dừng lỗ khi hai điều kiện ra sân sau được thực hiện:

  1. Cột MACD nhỏ hơn tham số dừng lỗ được đặt;
  2. EMA ngắn hạn vượt qua EMA dài hạn.

Do đó, chiến lược này có thể dừng lỗ khi thu hồi lợi nhuận và tránh thiệt hại lớn.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là sự kết hợp của các chỉ số, sử dụng lợi thế của từng chỉ số, cụ thể là:

  1. Việc sử dụng RSI tránh được tổn thất chi phí giao dịch do mở nhiều lần vị trí trong bối cảnh xung đột.
  2. Tính nhạy cảm của MACD đảm bảo nắm bắt được các điểm biến động của thị trường.
  3. Đường trung bình di chuyển lọc ra tiếng ồn thị trường ngắn và hoạt động như một chỉ số.

Rủi ro và giải pháp

Chiến lược này có hai rủi ro chính:

  1. Rủi ro rút lui lớn hơn. Rủi ro lớn nhất của các chiến lược theo xu hướng như trung bình di chuyển là sự rút lui lớn hơn do sự đảo ngược của thị trường.

  2. Các tham số tối ưu hóa rất khó. Thiết lập và tối ưu hóa các tham số của chiến lược kết hợp nhiều chỉ số rất khó. Các phương pháp tối ưu hóa tham số như tiến trình bước, thuật toán di truyền có thể được sử dụng để xác định tham số tối ưu nhất.

Tối ưu hóa tư duy

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Thêm các điều kiện bổ sung để lọc thêm các tín hiệu giả. Ví dụ: kết hợp với chỉ số khối lượng giao dịch, chỉ số biến động, v.v.

  2. Kiểm tra sự khác biệt trong thiết lập các tham số của các giống khác nhau. Điều chỉnh tham số để phù hợp với nhiều giống hơn.

  3. Tối ưu hóa các thiết lập tham số trung bình di chuyển. Kiểm tra sự khác biệt giữa các tham số với các độ dài khác nhau.

  4. Các nghiên cứu sử dụng các trung bình di chuyển thích ứng. Các tham số khác nhau được chuyển đổi theo môi trường thị trường.

Tóm tắt

Chiến lược này nói chung là một chiến lược theo dõi xu hướng và trung bình di chuyển tối ưu hóa điển hình. Nó hấp thụ các ưu điểm của một số chỉ số chính như MACD, RSI, và có tính độc đáo trong việc xác định thời gian ra thị trường và dừng lỗ. Tiếp theo, có thể cải thiện từ nhiều khía cạnh như tối ưu hóa tham số, kiểm soát rủi ro, để tham số chiến lược trở nên mạnh mẽ hơn, phù hợp với nhiều loại khác nhau, để có được sự ổn định cao hơn.

Mã nguồn chiến lược
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)

// Inputs
src = input(close, title="RSI Source")

// RSI Settings
lengthRSI = input.int(14, minval=1)

// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")

// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)

// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")

// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")

atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")

// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)

// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)

// Calculate ATR
atr = ta.atr(atrLength)

// Variables
var bool canEnterLong = na

// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr

// Entries and Exits
if hist < exitLevel and emaShort < emaLong
    canEnterLong := true
    strategy.close("Long")
    
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
    strategy.entry("Long", strategy.long)
    canEnterLong := false
    lastEntryPrice := close
if lastEntryPrice < close
    lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)

// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
    last_buy = strategy.opentrades[0]
    if (close < stopLossLevel)
        strategy.close("Long", comment="Stop Loss Triggered")
    if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
        strategy.close("Long", comment="Take Profit Triggered")