Xu hướng sau chiến lược EMA và RSI

Tác giả:ChaoZhang, Ngày: 2023-09-26 15:39:48
Tags:

Tổng quan

Chiến lược này tận dụng tối đa lợi thế của các đường trung bình động và chỉ số sức mạnh tương đối để xác định và theo dõi xu hướng. Nó chỉ cần hai chỉ số để xác định xu hướng và tìm thời gian vào / ra thích hợp. Chiến lược nhằm mục đích nắm bắt xu hướng giá trung hạn đến dài hạn trong khi tránh tiếng ồn thị trường ngắn hạn.

Chiến lược logic

Chiến lược này sử dụng ba EMA với các khoảng thời gian khác nhau, với EMA-A có khoảng thời gian ngắn nhất, EMA-B trung bình và EMA-C dài nhất. Khi EMA-A ngắn hơn vượt qua trên EMA-B dài hơn, nó báo hiệu xu hướng tăng, do đó đi dài. Ngược lại, khi EMA-A vượt qua dưới EMA-B, nó báo hiệu xu hướng giảm, do đó đi ngắn. Để lọc các tín hiệu sai, nó cũng sử dụng EMA-C dài nhất - chỉ xem xét nhập cảnh sau khi giá phá vỡ EMA-C.

Chiến lược này cũng sử dụng chỉ số RSI để xác định điểm thoát. Khi dài, nó đóng vị trí nếu chỉ số RSI vượt trên 70. Khi ngắn, nó thoát nếu chỉ số RSI giảm dưới 30. Điều này khóa lợi nhuận xu hướng và ngăn chặn tổn thất mở rộng hơn nữa.

Phân tích lợi thế

  • Sử dụng sức mạnh của EMA trong xác định xu hướng
  • RSI hỗ trợ thời gian vào và ra
  • Chiến lược đơn giản chỉ với 2 chỉ số
  • Các tham số có thể tùy chỉnh để điều chỉnh phong cách chiến lược
  • Lợi nhuận từ giai đoạn đầu, giữa và cuối của xu hướng

Phân tích rủi ro

  • Sự rút lui trong các xu hướng chính có thể tạo ra các tín hiệu sai
  • Thể bị tổn thương bởi các loại whipsaws ở các thị trường khác nhau
  • Các thông số RSI không chính xác có thể gây ra việc thoát sớm
  • Thời gian EMA cần lựa chọn cẩn thận, quá ngắn có thể nhạy cảm với tiếng ồn, quá dài có thể bỏ lỡ xu hướng

Những rủi ro này có thể được giảm bằng cách tối ưu hóa các thông số RSI, thêm các bộ lọc và kết hợp với phân tích xu hướng.

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

  • Tối ưu hóa các thông số RSI để kiếm lợi nhuận và kiểm soát rủi ro tốt hơn
  • Kiểm tra các kết hợp thời gian EMA khác nhau
  • Thêm khối lượng hoặc các chỉ số xác nhận khác
  • Sử dụng ATR để định kích thước stop loss
  • Xem xét giảm kích thước vị trí giữa xu hướng
  • Tối ưu hóa thời gian nhập cảnh bằng cách phá vỡ, khối lượng, vv
  • Khám phá các cơ chế tái nhập cảnh

Tóm lại

Chiến lược này kết hợp các chỉ số theo xu hướng và dao động để xác định và nắm bắt xu hướng. Với các thông số đơn giản và tối ưu hóa logic, nó có thể được cải thiện đáng kể trong khi giữ sự đơn giản.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 2h
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/
//@author Alorse

//@version=5
// strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01)

// Bollinger Bands
len = input.int(14, minval=1, title='Length', group='RSI')
src = input.source(close, 'Source', group='RSI')
rsi = ta.rsi(src, len)

// Moving Averages
len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages')
out_a = ta.ema(close, len_a)
plot(out_a, title='EMA A', color=color.purple)

len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages')
out_b = ta.ema(close, len_b)
plot(out_b, title='EMA B', color=color.orange)

len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages')
out_c = ta.ema(close, len_c)
plot(out_c, title='EMA B', color=color.green)

// Strategy Conditions
stratGroup = 'Strategy'
showLong = input.bool(true, title='Long entries', group=stratGroup)
showShort = input.bool(false, title='Short entries', group=stratGroup)
closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup)
xBars = input.int(24, title='# bars')

entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open
exitLong = rsi > 70

entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open
exitShort = rsi < 30


bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1]
entry_price = ta.valuewhen(bought, open, 0)
var int nPastBars = 0
if strategy.position_size > 0
    nPastBars := nPastBars + 1
    nPastBars
if strategy.position_size == 0
    nPastBars := 0
    nPastBars
if closeAfterXBars
    exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong
    exitLong
    exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort
    exitShort

// Long Entry
strategy.entry('Long', strategy.long, when=entryLong and showLong)
strategy.close('Long', when=exitLong)

// Short Entry
strategy.entry('Short', strategy.short, when=entryShort and showShort)
strategy.close('Short', when=exitShort)



Thêm nữa