Chiến lược giao dịch dao động


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

Chiến lược giao dịch dao động

Tổng quan

Đây là một chiến lược giao dịch đảo ngược dựa trên nhiều chỉ số kỹ thuật. Nó kết hợp các chỉ số như CCI, chỉ số động lực, RSI để xác định các cơ hội giao dịch tiềm năng và trống. Chiến lược này sẽ phát ra tín hiệu giao dịch khi chỉ số hiển thị tín hiệu mua quá mức và giá bị điều chỉnh.

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

Các tín hiệu giao dịch của chiến lược này xuất phát từ một chỉ số tùy chỉnh của Edri Polar Buy/Sell, trong đó tính đến sự giao thoa của CCI, chỉ số động lực và RSI.

Điều kiện tín hiệu đa đầu:

  1. Các chỉ số điểm mua bán tại Edri cung cấp tín hiệu mua, tức là CCI trên trục 0 hoặc động lực trên trục 0 và RSI thấp hơn đường bán quá.
  2. Giá bị kéo xuống hoặc dưới 100 chu kỳ EMA.

Điều kiện tín hiệu không đầu:

  1. Các chỉ số điểm mua bán tại Edri cung cấp tín hiệu bán, tức là CCI đi ngang 0 hoặc chỉ số động lực đi ngang 0 và RSI cao hơn đường mua quá mức.
  2. Giá kéo xuống hoặc cao hơn 100 chu kỳ EMA.

Chiến lược này cũng có thể được cấu hình để tìm các điều kiện lệch thông thường, tức là RSI có sự khác biệt rõ rệt với giá để tạo ra tín hiệu giao dịch.

Khi đáp ứng tín hiệu giao dịch, điểm dừng lỗ của chiến lược là giá nhập cảnh + 2 ATR và điểm dừng là giá nhập cảnh + 4 ATR. Điều này có thể thiết lập phạm vi dừng lỗ hợp lý tùy thuộc vào mức độ biến động của thị trường.

Phân tích lợi thế

  1. Xác định tổng hợp nhiều chỉ số sẽ giúp tránh các tín hiệu sai lệch của chỉ số đơn lẻ.
  2. Phương pháp giao dịch đảo ngược, có lợi cho việc nắm bắt cơ hội giao dịch ngắn trong tình huống chấn động.
  3. ATR Stop Loss Stop Mode, có thể điều chỉnh vị trí dựa trên sự biến động của thị trường.
  4. Bạn có thể tìm các điều kiện sai lệch, tránh mở vị trí trong trường hợp không quá mua quá bán.

Phân tích rủi ro

  1. Thiết lập tham số chỉ số không đúng có thể dẫn đến việc bỏ lỡ cơ hội giao dịch hoặc tạo ra quá nhiều tín hiệu sai.
  2. Mô hình giao dịch đảo ngược có thể bị dừng liên tục trong một xu hướng.
  3. ATR có tính chậm trễ, không thể cập nhật điểm dừng lỗ kịp thời trong các trường hợp thay đổi nhanh chóng.

Giải pháp:

  1. Các tham số chỉ số được kiểm tra và tối ưu hóa nhiều lần để tìm ra sự kết hợp tham số tốt nhất.
  2. Có thể xem xét tạm dừng sử dụng chiến lược này khi xu hướng mạnh hơn.
  3. Kết hợp với các phương pháp dừng khác, chẳng hạn như dừng di chuyển hoặc chống lại dừng.

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

  1. Kiểm tra các kết hợp các tham số khác nhau, chẳng hạn như CCI và chu kỳ chỉ số động lực, tham số RSI, nhân ATR, v.v.
  2. Thêm các điều kiện lọc phụ khác, chẳng hạn như mô hình giá cả, thay đổi khối lượng giao dịch.
  3. Điều chỉnh cách quản lý vị trí, chẳng hạn như đặt tỷ lệ vị trí theo giá trị ATR.
  4. Thiết lập các mẫu tham số cho các giống và chu kỳ khác nhau.
  5. Xem xét việc tạm ngưng giao dịch đảo ngược khi có xu hướng, kết hợp với cơ chế theo dõi xu hướng.

Tóm tắt

Chiến lược này được áp dụng chủ yếu cho các tình huống xung đột, để có được lợi nhuận ổn định hơn bằng cách nắm bắt sự đảo ngược ngắn giữa các đường. Nó giúp nhận ra sự kéo dài ngắn hạn của giá và tạo ra tín hiệu giao dịch dựa trên nhiều chỉ số. Bằng cách tối ưu hóa các tham số hợp lý và quản lý rủi ro, lợi thế của chiến lược có thể được sử dụng hiệu quả.

Mã nguồn chiến lược
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-02 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/
// © MagicStrategies

//@version=5
strategy("Reversal Indicator Strategy", overlay = true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'], tooltip='CCI or Momentum will be the final source of the Entry signal if selected.')
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(true, title='Find Regular Bullish/Bearish Divergence', tooltip='If checked, it will only consider an overbought or oversold condition that has a regular bullish or bearish divergence formed inside that level.')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level', tooltip='Adjusting the level to extremely high may filter out some signals especially when the option to find divergence is checked.')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level', tooltip='Adjusting this level extremely low may filter out some signals especially when the option to find divergence is checked.')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(false, 'Plot Mean Reversion Bands on the chart', tooltip='This function doesn\'t affect the entry of signal but it suggests buying when the price is at the lower band, and then sell it on the next bounce at the higher bands.')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.8, title='Outer Bands Multiplier', tooltip='Multiplier for both upper and lower bands')


// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Entry Conditions
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)


// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na


// Plotting
plotshape(longEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(shortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

plot(upperBand, title='Upper Band', color=color.new(color.fuchsia, 0), linewidth=1)
plot(meanReversion, title='Mean', color=color.new(color.gray, 0), linewidth=1)
plot(lowerBand, title='Lower Band', color=color.new(color.blue, 0), linewidth=1)

// Entry signal alerts
alertcondition(longEntryCondition, title='BUY Signal', message='Buy Entry Signal')
alertcondition(shortEntryCondition, title='SELL Signal', message='Sell Entry Signal')
alertcondition(longEntryCondition or shortEntryCondition, title='BUY or SELL Signal', message='Entry Signal')

ema100 = ta.ema(close, 100)
plot(ema100, color=color.red)

// Define trading signals based on the original indicator's entry conditions
// Buy if long condition is met and price has pulled back to or below the 100 EMA
longCondition  = longEntryCondition and close <= ema100
// Sell if short condition is met and price has pulled back to or above the 100 EMA
shortCondition = shortEntryCondition and close >= ema100

// Strategy Entries
if longCondition
    strategy.entry("Buy", strategy.long)
if shortCondition
    strategy.entry("Sell", strategy.short)