RSI 필터 전략으로 오프셋 이치모쿠 클라우드가 없습니다.

저자:차오장, 날짜: 2023-11-07 15:31:06
태그:

img

전반적인 설명

이 전략은 트렌드 식별을 위해 이치모쿠 클라우드 지표와 신호 필터링을 위해 RSI 지표를 활용하는 트렌드 추적 전략입니다. 이 전략은 트렌드 변화를 적시에 파악하고 거래 위험을 제어하기 위해 RSI로 가짜 브레이크를 필터합니다.

전략 논리

이 전략은 주로 트렌드 방향을 결정하기 위해 이치모쿠 클라우드 지표에 의존한다. 이치모쿠 클라우드는 변환선, 기본선, 선도 스펜 1, 선도 스펜 2, 후퇴 스펜으로 구성된다. 이 전략은 오프셋이 아닌 이치모쿠 클라우드를 사용합니다. 즉 변환선과 기본선과 같은 선은 관측 오프셋으로 인한 후퇴 트렌드 식별을 피하기 위해 미래 수치를 채택합니다.

이 전략은 먼저 가격이 클라우드 라인을 통과하는지 확인합니다. 낙후 스펜이 클라우드 위에 넘어가면 상승 추세가 확인되며, 낙후 스펜이 클라우드 아래에 넘어가면 하락 추세가 확인됩니다. 트렌드가 시작되면 전략은 지속적인 트렌드 방향을 결정하기 위해 클라우드와 가격의 관계를 추적합니다. 낙후 스펜이 클라우드 위에있을 때 상승 추세는 손상되지 않습니다.

트렌드 식별 외에도, 전략은 전환선과 기본선이 황금 십자가와 죽음의 십자가를 가지고있을 때 구매 및 판매 신호를 생성합니다. 이러한 거래 신호는 트렌드 방향과 일치 할 때만 받아들여집니다. 예를 들어, 전환선과 기본선 사이의 황금 십자가는 상승 추세 동안만 고려됩니다.

마지막으로, RSI 지표는 거래 신호를 필터링하는 데 사용됩니다. 과잉 판매 수준 이하의 RSI를 가진 구매 신호만 받아 들여지고 과잉 구매 수준 이상의 RSI를 가진 판매 신호만 받아 들여집니다. 이것은 어느 정도 잘못된 브레이크오프를 필터링하는 데 도움이됩니다.

이점 분석

  • 이치모쿠 클라우드 (Non-offset Ichimoku Cloud) 는 역전 기회를 놓치지 않고 트렌드 변화를 적시에 파악할 수 있습니다.

  • 여러 조건이 함께 작용하여 잘못된 브레이크오웃 신호를 효과적으로 필터링합니다

  • RSI는 과잉 구매 및 과잉 판매 상황에서 바람직하지 않은 시장 진출을 피합니다.

  • 전략은 미래 데이터를 염두에 두고 최적화되어 있으며 실시간 거래에서도 좋은 결과를 얻을 수 있습니다.

위험 분석

  • 미래 데이터를 사용하여 오류를 일으킬 수 있으며 라이브 거래 전에 코드 최적화를 필요로

  • 이치모쿠 클라우드는 매개 변수에 민감하고 다른 제품들에 대한 매개 변수 조정이 필요합니다.

  • 단일 제품 거래에서 더 나은 결과. 여러 제품과 시장 간 상관관계를 고려해야합니다.

  • 많은 트렌드 식별 규칙은 검증을 위해 적절한 백트 테스트 기간을 요구합니다.

매개 변수는 최적화되어 최상의 조합을 찾을 수 있습니다. 특정 제품을 거래하거나 라이브 트레이딩에서 위험을 제어하기 위해 포지션 크기를 줄일 수 있습니다. 또한 거래 당 손실을 제한하기 위해 스톱 로스 전략을 도입 할 수 있습니다.

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 다양한 거래 제품에 대한 최적의 설정을 찾기 위해 Ichimoku Cloud 매개 변수를 최적화

  2. 거래당 손실을 수용 가능한 수준으로 제한하기 위해 스톱 로스 전략을 추가합니다.

  3. 전체 리스크 노출을 정확하게 관리하기 위한 포지션 사이징 전략을 도입

  4. 포괄적인 신호 검증을 위해 변동성과 볼륨과 같은 더 많은 기술적 지표를 추가합니다.

  5. 더 나은 실행을 위해 확인 또는 풀백 항목과 같은 입력 기술을 최적화

  6. 제품 특성에 따라 최적의 볼링거 밴드 룩백 기간을 결정하기 위해 앞으로의 최적화를 수행합니다.

결론

요약하자면, 이것은 상당히 강력한 트렌드 다음 전략입니다. 트렌드 식별을 위해 이치모쿠 클라우드를 채택하고 RSI에 의해 필터링 된 트레이드 신호에 대한 변환선 / 기본선 교차를 채택합니다. 매개 변수 조정, 스톱 로스, 포지션 사이징 등을 통해 최적화 할 수있는 공간이 여전히 많습니다. 논리는 명확하고 이해하기 쉽습니다. 트렌드와 위험을 모두 고려합니다. 이것은 라이브 트레이딩에서 검증 할 가치가있는 전략입니다.


/*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")
// ==============================================================================


더 많은