Chiến lược lọc RSI không lệch của Ichimoku Cloud


Ngày tạo: 2023-11-07 15:31:06 sửa đổi lần cuối: 2023-11-07 15:31:06
sao chép: 0 Số nhấp chuột: 795
1
tập trung vào
1617
Người theo dõi

Chiến lược lọc RSI không lệch của Ichimoku Cloud

Tổng quan

Đây là một chiến lược theo dõi xu hướng sử dụng các chỉ số đám mây cân bằng để đánh giá xu hướng và kết hợp với các chỉ số RSI để lọc. Chiến lược này bỏ qua các sai lệch quan sát, có thể bắt kịp các thay đổi xu hướng và lọc các đột phá giả mạo thông qua các chỉ số RSI để kiểm soát rủi ro giao dịch.

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

Chiến lược này chủ yếu dựa trên các chỉ số của đám mây Ichimoku để đánh giá xu hướng. Mây cân bằng một lần đầu tiên bao gồm đường chuyển đổi Cogo, đường chuẩn, đường dẫn 1, đường dẫn 2 và đường chậm trễ. Chiến lược sử dụng đám mây cân bằng một lần đầu tiên không bị lệch, tức là các đoạn đường chuyển đổi, đường chuẩn và các đoạn khác sử dụng giá trị tương lai, để tránh bị trì hoãn trong việc đánh giá xu hướng do sự lệch quan sát.

Chiến lược đầu tiên đánh giá liệu giá có vượt qua đường mây hay không, nếu đường trì hoãn vượt qua đường mây, nó được coi là bắt đầu xu hướng tăng; nếu đi qua đường mây, nó được coi là bắt đầu xu hướng giảm. Sau khi xu hướng bắt đầu, chiến lược tiếp tục theo dõi mối quan hệ của giá với đường mây để đánh giá hướng xu hướng tiếp tục. Khi đường trì hoãn duy trì trên đường mây, nó được coi là xu hướng tăng; ngược lại, nó được coi là xu hướng giảm.

Ngoài việc đánh giá xu hướng, chiến lược cũng sẽ tạo ra tín hiệu mua khi vàng giao thoa với đường chuyển đổi và đường chuẩn, và tạo ra tín hiệu bán khi giao thoa chết. Các tín hiệu giao dịch này sẽ chỉ được áp dụng khi phù hợp với hướng xu hướng. Ví dụ: chỉ trong xu hướng tăng, giao thoa vàng trên đường chuyển đổi xuyên qua đường chuẩn sẽ được tiếp nhận.

Cuối cùng, chiến lược cũng giới thiệu các chỉ số RSI để lọc tín hiệu. Chỉ khi RSI thấp hơn vùng bán tháo, tín hiệu mua sẽ được nhận; chỉ khi RSI cao hơn vùng mua, tín hiệu bán sẽ được nhận. Điều này có thể lọc các tín hiệu sai dẫn đến phá vỡ giả.

Phân tích lợi thế

  • Sử dụng chỉ số đám mây cân bằng một mắt không bị lệch, có thể đánh giá sự thay đổi xu hướng kịp thời, không bỏ lỡ thời gian đảo ngược
  • Xác định tổng hợp nhiều điều kiện, có thể lọc hiệu quả các tín hiệu sai từ đột phá giả mạo
  • Việc đưa ra chỉ số RSI có thể tránh được tình trạng thâm nhập không mong muốn trong trường hợp quá mua quá bán
  • Chiến lược được tối ưu hóa để tính đến dữ liệu trong tương lai và có thể đạt được hiệu quả tốt hơn trong thực tế

Phân tích rủi ro

  • Cân nhắc dữ liệu trong tương lai sẽ dẫn đến lỗi, cần tối ưu hóa mã để sử dụng trên ổ cứng
  • Chỉ số đám mây cân bằng một mắt nhạy cảm với các tham số, các giống khác nhau cần điều chỉnh tham số để đạt được hiệu quả tối ưu
  • Các giao dịch đơn lẻ sẽ hiệu quả hơn, các giao dịch đa dạng cần xem xét mối quan hệ giữa các loại
  • Có nhiều quy tắc đánh giá xu hướng, cần đủ thời gian để kiểm chứng hiệu quả

Có thể tìm ra sự kết hợp tham số tốt nhất thông qua tối ưu hóa tham số. Trong thực tế, bạn có thể cân nhắc chỉ giao dịch một loại cụ thể hoặc giảm số lượng người mở vị trí để kiểm soát rủi ro. Bạn cũng có thể đưa ra chiến lược dừng lỗ để hạn chế tổn thất đơn lẻ.

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

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

  1. Tối ưu hóa các tham số đám mây cân bằng để tìm các tham số tốt nhất cho các loại giao dịch khác nhau

  2. Tăng các chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ trong phạm vi khả thi

  3. Tăng chiến lược quản lý vị trí để quản lý lỗ hổng rủi ro tổng thể bằng cách điều chỉnh chính xác quy mô vị trí

  4. Tiếp tục đưa ra nhiều chỉ số để đánh giá tổng hợp, chẳng hạn như chỉ số tỷ lệ biến động, khối lượng giao dịch, v.v., để cải thiện độ chính xác của tín hiệu

  5. Tối ưu hóa lựa chọn thời gian nhập cảnh, có thể sử dụng các phương thức như xác nhận đột phá hoặc quay trở lại nhập cảnh

  6. Tối ưu hóa chuyển động, lựa chọn các tham số chu kỳ bùn tốt nhất dựa trên các đặc điểm của các giống khác nhau

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ững chắc hơn. Nó sử dụng các chỉ số đám mây cân bằng để xác định xu hướng xu hướng, sau đó kết hợp với đường chuyển đổi và đường chuẩn để phát tín hiệu giao dịch, và cuối cùng thông qua các chỉ số RSI để phá vỡ giả.

Mã nguồn chiến lược
/*backtest
start: 2022-10-31 00:00:00
end: 2023-02-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © KryptoNight

//@version=4
// comment/uncomment Study/Strategy to easily switch modes
// study("Ichimoku Kinko Hyo Cloud - no offset - no repaint - RSI filter - alerts", shorttitle="IchiCloud + RSI - alerts", overlay=true)
// ============================================================================== Strategy mode - uncomment to activate
strategy("Ichimoku Kinko Hyo Cloud - no offset - no repaint - RSI filter - strategy", shorttitle="IchiCloud + RSI - Strategy Tester Mode", overlay=true, pyramiding = 0,
  currency = currency.USD, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100,
  calc_on_every_tick = true, calc_on_order_fills = true, commission_type = strategy.commission.percent, commission_value = 0.075)
// ==============================================================================

// ------------------------------------------------------------------------------

ichiCloud_offset   = input(false, title="Standard Ichimoku Cloud")                  // with the visual offset
ichiCloud_noOffset = input(true,  title="Ichimoku Cloud - no offset - no repaint")  // without the visual offset

conversion_prd = input(9, minval=1, title="Conversion Line Period - Tenkan-Sen")
baseline_prd   = input(26, minval=1, title="Base Line Period - Kijun-Sen")
baselineA_prd  = input(52, minval=1, title="Base Line Period - Kijun-Sen (auxiliary)")
leadingSpan_2prd = input(52, minval=1, title="Lagging Span 2 Periods - Senkou Span B")
displacement = input(26, minval=0, title="Displacement: (-) Chikou Span; (+) Senkou Span A")
extra_bars = input(1, minval=0, title="Displacement: additional bars")
laggingSpan_src = input(close, title="Lagging Span price source - Chikou-Span")

donchian(len) => avg(lowest(len), highest(len))
displ = displacement-extra_bars
// ------------------------------------------------------------------------------
// OFFSET:
conversion = donchian(conversion_prd)   // Conversion Line - Tenkan-Sen (9 Period)
baseline  = donchian(baseline_prd)      // Base Line - Kijun-Sen (26 Period)
baselineA = donchian(baselineA_prd)     // Base Line Period - Kijun-Sen (auxiliary)
leadingSpanA = avg(conversion, baseline)
leadingSpanB = donchian(leadingSpan_2prd)
laggingSpan = laggingSpan_src

// Color - bullish, bearish
col_cloud = leadingSpanA>=leadingSpanB ? color.green : color.red

// Cloud Lines
spanA = plot(ichiCloud_offset? leadingSpanA : na, offset=displ, title="Offset: Lead Line 1 - Senkou Span A cloud", color=color.green)
spanB = plot(ichiCloud_offset? leadingSpanB : na, offset=displ, title="Offset: Lead Line 2 - Senkou Span B cloud", color=color.red)
fill(spanA, spanB, color=col_cloud, transp=80, title="Offset: Ichimoku Cloud - Leading Span 1 & 2 based coloring")

// Other Lines
conversion_p = plot(ichiCloud_offset? conversion : na, title="Offset: Conversion Line - Tenkan-Sen", color=#0496ff)
standard_p = plot(ichiCloud_offset? baseline : na, title="Offset: Base Line - Kijun-Sen", color=#991515)
standardA_p = plot(ichiCloud_offset? baselineA : na, title="Offset: Base Line - Kijun-Sen (auxiliary)", color=color.teal)
lagging_Span_p = plot(ichiCloud_offset? laggingSpan : na, offset=-displ, title="Offset: Chikou Span (Lagging Span)", color=#459915)

// ------------------------------------------------------------------------------
// NO OFFSET:
conversion_noOffset = conversion[displ] // Conversion Line - Tenkan-Sen (9 Period)
baseline_noOffset  = baseline[displ]    // Base Line - Kijun-Sen (26 Period)
baselineA_noOffset = baselineA[displ]   // Base Line Period - Kijun-Sen (auxiliary)
leadingSpanA_noOffset = leadingSpanA[displ*2]
leadingSpanB_noOffset = leadingSpanB[displ*2]
laggingSpan_noOffset = laggingSpan[0]

// Color - bullish, bearish
col_cloud_noOffset = leadingSpanA_noOffset>=leadingSpanB_noOffset ? color.green : color.red

// Cloud Lines
spanA_noOffset = plot(ichiCloud_noOffset? leadingSpanA_noOffset : na, title="No offset: Lead Line 1 - Senkou Span A cloud", color=color.green, transp=0)
spanB_noOffset = plot(ichiCloud_noOffset? leadingSpanB_noOffset : na, title="No offset: Lead Line 2 - Senkou Span B cloud", color=color.red, transp=0)
fill(spanA_noOffset, spanB_noOffset, color=col_cloud_noOffset, transp=80, title="No offset: Ichimoku Cloud - Leading Span 1 & 2 based coloring")

// Other Lines
conversion_p_noOffset = plot(ichiCloud_noOffset? conversion_noOffset : na, title="No offset: Conversion Line - Tenkan-Sen", color=#0496ff, transp=0)
baseline_p_noOffset = plot(ichiCloud_noOffset? baseline_noOffset : na, title="No offset: Base Line - Kijun-Sen", color=#991515, transp=0)
baselineA_p_noOffset = plot(ichiCloud_noOffset? baselineA_noOffset : na, title="No offset: Base Line - Kijun-Sen (auxiliary)", color=color.teal, transp=0)
laggingSpan_p_noOffset = plot(ichiCloud_noOffset? laggingSpan_noOffset : na, title="No offset: Chikou Span (Lagging Span)", color=#459915, transp=0)

// ==============================================================================
// Conditions & Alerts (based on the lines without offset)

maxC = max(leadingSpanA_noOffset,leadingSpanB_noOffset)
minC = min(leadingSpanA_noOffset,leadingSpanB_noOffset)

// Trend start signals: crosses between Chikou Span (Lagging Span) and the Cloud (Senkou Span A, Senkou Span B)
uptrend_start   = crossover(laggingSpan_noOffset,maxC)
downtrend_start = crossunder(laggingSpan_noOffset,minC)

// Trends
uptrend   = laggingSpan_noOffset>maxC // Above Cloud
downtrend = laggingSpan_noOffset<minC // Below Cloud

// No trend: choppy trading - the price is in transition
notrend = maxC>=laggingSpan_noOffset and laggingSpan_noOffset>=minC

// Confirmations
uptrend_confirm   = crossover(leadingSpanA_noOffset,leadingSpanB_noOffset)
downtrend_confirm = crossunder(leadingSpanA_noOffset,leadingSpanB_noOffset)

// Signals - crosses between Conversion Line (Tenkan-Sen) and Base Line (Kijun-Sen)
bullish_signal = crossover(conversion_noOffset,baseline_noOffset)
bearish_signal = crossunder(conversion_noOffset,baseline_noOffset)

// Various alerts
alertcondition(uptrend_start,   title="Uptrend Started",   message="Uptrend Started")
alertcondition(downtrend_start, title="Downtrend Started", message="Downtrend Started")

alertcondition(uptrend_confirm,   title="Uptrend Confirmed",   message="Uptrend Confirmed")
alertcondition(downtrend_confirm, title="Downtrend Confirmed", message="Downtrend Confirmed")

alertcondition(bullish_signal, title="Buy Signal",  message="Buy Signal")
alertcondition(bearish_signal, title="Sell Signal", message="Sell Signal")

rsi_OBlevel = input(50, title="RSI Filter: Overbought level (0 = off)")
rsi_OSlevel = input(100,title="RSI Filter: Oversold level (100 = off)")
rsi_len = input(14,title="RSI Length")
rsi_src = input(close,title="RSI Price source")
rsi = rsi(rsi_src,rsi_len)

// Strategy -------------------------------
long_signal  = bullish_signal and uptrend   and rsi<=rsi_OSlevel // breakout filtered by the rsi
exit_long    = bearish_signal and uptrend
short_signal = bearish_signal and downtrend and rsi>=rsi_OBlevel // breakout filtered by the rsi
exit_short   = bullish_signal and downtrend

// Strategy alerts
alertcondition(long_signal, title="Long Signal - Uptrend",      message="Long Signal - Uptrend")
alertcondition(exit_long,   title="Long Exit Signal - Uptrend", message="Long Exit Signal - Uptrend")

alertcondition(short_signal, title="Long Signal - Downtrend",       message="Long Signal - Downtrend")
alertcondition(exit_short,   title="Short Exit Signal - Downtrend", message="Short Exit Signal - Downtrend")

// Plot areas for trend and transition
color_trend = uptrend? #00FF00 : downtrend? #FF0000 : notrend? color.new(#FFFFFF, 50) : na
fill(spanA_noOffset, spanB_noOffset, color=color_trend, transp=90, title="No offset: Ichimoku Cloud - Lagging Span & Cloud based coloring")

plotshape(ichiCloud_noOffset?uptrend_start:na, title="No offset: Uptrend Started", color=color.green, style=shape.circle, location=location.belowbar, size=size.tiny, text="Up")
plotshape(ichiCloud_noOffset?downtrend_start:na, title="No offset: Downtrend Started", color=color.red, style=shape.circle,location=location.abovebar, size=size.tiny, text="Down")

plotshape(ichiCloud_noOffset?uptrend_confirm:na, title="No offset: Uptrend Confirmed", color=color.green, style=shape.circle, location=location.belowbar, size=size.small, text="Confirm Up")
plotshape(ichiCloud_noOffset?downtrend_confirm:na, title="No offset: Downtrend Confirmed", color=color.red, style=shape.circle, location=location.abovebar, size=size.small, text="Confirm Down")

plotshape(ichiCloud_noOffset?long_signal:na, title="No offset: Long Signal", color=#00FF00, style=shape.triangleup, location=location.belowbar, size=size.small, text="Long")
plotshape(ichiCloud_noOffset?exit_long:na, title="No offset: Exit Long Signal", color=color.fuchsia, style=shape.triangledown, location=location.abovebar, size=size.small, text="Exit long")

plotshape(ichiCloud_noOffset?short_signal:na, title="No offset: Short Signal", color=#FF0000, style=shape.triangledown, location=location.abovebar, size=size.small, text="Short")
plotshape(ichiCloud_noOffset?exit_short:na, title="No offset: Exit Short Signal", color=color.fuchsia, style=shape.triangleup, location=location.belowbar, size=size.small, text="Exit short")

// ============================================================================== Strategy Component - uncomment to activate
if (long_signal)
    strategy.entry("Long",strategy.long)
if (exit_long)
    strategy.close("Long")
if (short_signal)
    strategy.entry("Short",strategy.short)
if (exit_short)
    strategy.close("Short")
// ==============================================================================