Chiến lược giao dịch theo xu hướng đa kỳ dựa trên EMA và Stochastic RSI


Ngày tạo: 2024-03-08 17:32:38 sửa đổi lần cuối: 2024-03-08 17:32:38
sao chép: 3 Số nhấp chuột: 772
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch theo xu hướng đa kỳ dựa trên EMA và Stochastic RSI

Tổng quan về chiến lược

Chiến lược này được gọi là “Chiến lược giao dịch theo dõi xu hướng đa chu kỳ dựa trên EMA và RSI ngẫu nhiên”, sử dụng chỉ số di chuyển trung bình (EMA) và chỉ số RSI ngẫu nhiên của hai chu kỳ khác nhau để nắm bắt xu hướng trung và dài hạn của thị trường. Ý tưởng cốt lõi của chiến lược là đánh giá xu hướng theo hướng giao dịch của EMA, đồng thời kết hợp RSI ngẫu nhiên làm tín hiệu cảnh báo xác nhận xu hướng và đảo ngược để tạo vị thế khi xu hướng hình thành và đóng cửa xu hướng cuối cùng.

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

  1. Tính toán EMA nhanh và EMA chậm. Các tham số mặc định của EMA nhanh là 12, tham số mặc định của EMA chậm là 25, trong ứng dụng thực tế có thể được điều chỉnh theo đặc điểm thị trường và tần suất giao dịch.

  2. Đánh giá xu hướng không gian:

  • Khi EMA nhanh vượt qua EMA chậm, tạo ra tín hiệu xem nhiều
  • Khi EMA nhanh đi qua EMA chậm, tạo ra một tín hiệu không nhìn thấy
  1. Xác nhận xu hướng: Sau khi có tín hiệu xem quá / nhìn xuống, cần 2 đường K liên tiếp xuất hiện để xác nhận xu hướng hình thành. Điều này giúp lọc các tín hiệu giả.

  2. Sử dụng RSI ngẫu nhiên như một phán đoán hỗ trợ:

  • Khi ngẫu nhiên RSI % K vượt qua % D và % K dưới 20, nó tạo ra một tín hiệu bán tháo, gợi ý một sự đảo ngược có thể tăng lên
  • Khi RSI %K ngẫu nhiên đi qua %D và %K ở trên 80, nó tạo ra một tín hiệu mua quá mức, gợi ý một sự đảo ngược giảm giá có thể xảy ra
  1. Chiến lược giao dịch:
  • Khi EMA tạo ra tín hiệu xem nhiều và RSI ngẫu nhiên không nằm trong khu vực mua quá mức, hãy mở nhiều vị trí
  • Khi EMA tạo ra tín hiệu đi ngang và RSI ngẫu nhiên không nằm trong vùng bán quá mức, hãy mở vị trí trống

Lợi thế chiến lược

  1. Sử dụng hai chu kỳ EMA khác nhau cùng một lúc, có thể cân bằng tốt hơn độ nhạy và độ tin cậy của việc nắm bắt xu hướng. Phân tích cho thấy sự kết hợp của EMA chu kỳ 1225 tốt hơn trong việc nắm bắt xu hướng trung hạn và dài hạn.

  2. Cơ chế xác nhận xu hướng có thể lọc hiệu quả hầu hết các tín hiệu giả và tăng tỷ lệ chiến lược.

  3. RSI ngẫu nhiên được sử dụng như một phán đoán phụ trợ, giúp xác định cường độ của xu hướng trong giai đoạn đầu của xu hướng và cảnh báo trước khả năng đảo ngược xu hướng trong giai đoạn sau của xu hướng.

  4. Chiến lược logic đơn giản, ít tham số, dễ hiểu và thực hiện, và phù hợp với nhiều thị trường và giống.

Phân tích rủi ro

  1. EMA là chỉ số chậm trễ, có thể có điểm trượt lớn trong giai đoạn đầu của xu hướng đảo ngược.

  2. Chiến lược theo xu hướng thường được sử dụng trong các thị trường chấn động. Chiến lược này không có sự phán đoán cụ thể đối với các thị trường chấn động.

  3. RSI ngẫu nhiên có thể bị lệch khi thị trường biến động mạnh, ảnh hưởng đến chất lượng phán đoán.

  4. Các tham số cố định có thể không phù hợp với tất cả các điều kiện thị trường và cần được điều chỉnh theo các đặc điểm của thị trường.

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

  1. Tham gia các chỉ số biến động như ATR, điều chỉnh các tham số EMA theo biến động của tỷ lệ biến động để phù hợp với nhịp độ thị trường khác nhau.

  2. Tăng khả năng đánh giá thị trường chấn động, ví dụ như kết hợp với hướng mở cửa của vòng Brin, để tránh giao dịch thường xuyên trong thị trường chấn động.

  3. Việc tích hợp nhiều yếu tố phụ trợ hơn trên cơ sở RSI ngẫu nhiên, chẳng hạn như sự thay đổi khối lượng giao dịch, làm tăng độ tin cậy của tín hiệu.

  4. Xem xét sự liên quan của thị trường, giới thiệu nhiều loại tín hiệu liên kết, tăng cường khả năng chống rủi ro của hệ thống.

Tóm tắt

Chiến lược này tận dụng tối đa lợi thế của EMA và RSI ngẫu nhiên để tạo thành một chiến lược giao dịch trung hạn dài hạn dựa trên theo dõi xu hướng và đảo ngược động lực. Bằng cách bắt xu hướng ngang nhau, xác nhận cường độ xu hướng và đảo ngược cảnh báo ngẫu nhiên, cơ chế xác nhận xu hướng nâng cao chất lượng tín hiệu, ba điều này kết hợp hữu cơ để tạo thành một khung chiến lược giao dịch định lượng đơn giản và hiệu quả.

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

//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)

// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')

// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)

// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)

// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D

// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)

// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA

if buy
    countBuy += 1
    countBuy

if buy
    countSell := 0
    countSell

if sell
    countSell += 1
    countSell

if sell
    countBuy := 0
    countBuy

buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]

barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)

// Strategy backtest
if (buysignal)
    strategy.entry("Buy", strategy.long)

if (sellsignal)
    strategy.entry("Sell", strategy.short)

// Plot Bull/Bear

plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)

bull = countBuy > 1
bear = countSell > 1

barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)

// Set Alerts

alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')

// Stoch RSI code

smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)

rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')

// Alerts

crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)

crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)

maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')

maValue = if maTypeChoice == 'EMA'
    ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
    ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
    ta.sma(maSrc, maLen)
else
    0

crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'

crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)

aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)

bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)

bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)

alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')