Ichimoku Kinko Hyo + Shift Trend Superposition Estratégia Quantitativa


Data de criação: 2024-02-20 16:46:56 última modificação: 2024-02-20 16:46:56
cópia: 0 Cliques: 768
1
focar em
1617
Seguidores

Ichimoku Kinko Hyo + Shift Trend Superposition Estratégia Quantitativa

Visão geral

A estratégia é uma combinação de equilíbrio e superposição de movimentos para detectar tendências potenciais no preço das ações e determinar quando comprar e vender. A estratégia determina a direção da tendência e emite um sinal de negociação através do cálculo da linha de equilíbrio inicial, em combinação com a superposição de movimentos, enquanto o indicador RSI é usado para filtrar e controlar o risco de negociação.

Princípio da estratégia

A estratégia consiste em três partes principais:

  1. Indicador de equilíbrio a primeira vista: o indicador de equilíbrio a primeira vista consiste principalmente em duas linhas de ponto de viragem ((Tenkan-Sen) e ponto de referência ((Kijun-sen), formando uma forma de coluna de equilíbrio a primeira vista. A linha de ponto de viragem representa a tendência de curto prazo do preço e a linha de ponto de referência representa a tendência de médio prazo do preço.

  2. Indicador de sobreposição de movimentos: O indicador de sobreposição de movimentos determina a direção da tendência calculando a faixa de intervalo de valor relativo dispersos e a faixa de fluxo relativo. Um sinal de negociação é gerado quando os preços entram na faixa da faixa da região externa na faixa da região central.

  3. Indicador de RSI: O indicador de RSI é usado para determinar se o preço está sobrecarregado ou sobrevendido, estabelecendo uma linha de sobrevenda e um intervalo de sobrevenda, combinando sinais de negociação com um indicador de sobreposição de movimento para determinar os sinais de compra e venda.

Concretamente, a estratégia monitora se a linha de ponto de viragem e a linha de ponto de referência estão com um forco de ouro (que atravessa a linha de ponto de referência na linha de ponto de viragem) e um forco de morte (que atravessa a linha de ponto de referência abaixo da linha de ponto de viragem) para determinar quando comprar e vender. Ao mesmo tempo, a combinação do indicador de sobreposição de movimentos determina a direção da tendência geral. Quando os dois indicadores emitem sinais simultaneamente, o indicador RSI emite um sinal de negociação se não houver um excesso de sobrevenda.

Vantagens estratégicas

Esta estratégia, combinada com o uso de diferentes indicadores para determinar a direção da tendência e o momento da negociação, pode melhorar a precisão do julgamento, aproveitando as vantagens complementares entre os indicadores, evitando a probabilidade de erro no julgamento de um único indicador. As vantagens específicas são as seguintes:

  1. Usando a linha de ponto de viragem e a linha de ponto de referência como um indicador de equilíbrio de primeira vista, pode refletir simultaneamente a tendência de curto prazo e a tendência de médio prazo, com maior precisão do que um único indicador de MA.

  2. Os indicadores de sobreposição de movimentos são precisos e confiáveis para determinar a direção da tendência geral, complementando os indicadores de equilíbrio de primeira vista.

  3. O indicador RSI define condições de filtragem que são eficazes para filtrar brechas falsas e evitar riscos de negociação.

  4. A estratégia é fácil de entender e de implementar, e aplica-se a transações quantitativas.

Risco estratégico

Embora a estratégia use vários indicadores para o julgamento em conjunto, o que pode reduzir o risco de erros de julgamento, os principais riscos são:

  1. Risco de configuração de parâmetros. A configuração incorreta de parâmetros de indicadores como linha de ponto de viragem, linha de ponto de referência, etc., pode levar a erros de sinal de negociação. Os parâmetros precisam ser otimizados para se adaptar a diferentes variedades.

  2. Risco de reversão de tendência. Em situações de retração, pode haver falsos sinais. Mais indicadores precisam ser combinados para determinar os sinais de reversão de tendência.

  3. O risco é que as condições de filtragem do RSI sejam muito rigorosas. Pode-se excluir mais oportunidades de negociação. Os parâmetros do RSI podem ser adequadamente relaxados.

Resolução:

  1. Otimizar os parâmetros para diferentes variedades com mais dados históricos, garantindo que as configurações de parâmetros sejam razoáveis.

  2. Incluir um mecanismo de stop loss na estratégia. Sair da posição quando o preço quebra a linha de stop loss na direção oposta.

  3. Optimizar os parâmetros do RSI, liberar adequadamente as condições de filtragem e obter mais oportunidades de negociação, garantindo o controle do risco.

Direção de otimização da estratégia

A estratégia também tem outras direções que podem ser melhoradas:

  1. Adicionar algoritmos de aprendizagem de máquina para que os parâmetros da estratégia se ajustem dinamicamente às mudanças do mercado, aumentando a adaptabilidade da estratégia.

  2. Embalar os componentes da estratégia em módulos para gerenciamento modular, facilitando a substituição rápida de componentes ou testes individuais para otimizar componentes, aumentando a eficiência do desenvolvimento.

  3. Adicionar módulos de integração de dados, obter dados de mercado de mais fontes de dados, formar conjuntos de treinamento de alta qualidade e melhorar a aprendizagem de máquina.

  4. Desenvolver ferramentas de feedback para um feedback abrangente da estratégia, registrar vários indicadores de avaliação, auxiliar o ajuste de parâmetros de otimização e a escolha do modelo.

  5. Utilize a plataforma de computação em nuvem para implantar sistemas de estratégias, aproveite recursos de computação flexíveis para fazer o feedback em paralelo rápido, acelerar a repetição de ajustes de parâmetros e reduzir os custos de desenvolvimento de estratégias.

Resumir

A estratégia utiliza um indicador de equilíbrio e um indicador de sobreposição de movimentos para complementar a tendência de preços e o tempo de negociação. Ao mesmo tempo, o indicador RSI é usado para filtrar e controlar o risco de negociação. Esta forma de estratégia de combinação de vários indicadores pode melhorar a precisão do julgamento e obter melhores efeitos estratégicos.

Código-fonte da estratégia
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 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.EUR, initial_capital = 2000, 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.15)
// ==============================================================================

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

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(27, 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")
// ==============================================================================


//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © colinmck


RSI_Period = input(10, title='RSI Length')
SF = input(5, title='RSI Smoothing')
QQE = input(2.438, title='Fast QQE Factor')
ThreshHold = input(10, title="Thresh-hold")

src = close
Wilders_Period = RSI_Period * 3 - 1

Rsi = rsi(src, RSI_Period)
RsiMa = ema(Rsi, SF)
AtrRsi = abs(RsiMa[1] - RsiMa)
MaAtrRsi = ema(AtrRsi, Wilders_Period)
dar = ema(MaAtrRsi, Wilders_Period) * QQE

longband = 0.0
shortband = 0.0
trend = 0

DeltaFastAtrRsi = dar
RSIndex = RsiMa
newshortband = RSIndex + DeltaFastAtrRsi
newlongband = RSIndex - DeltaFastAtrRsi
longband := RSIndex[1] > longband[1] and RSIndex > longband[1] ? max(longband[1], newlongband) : newlongband
shortband := RSIndex[1] < shortband[1] and RSIndex < shortband[1] ? min(shortband[1], newshortband) : newshortband
cross_1 = cross(longband[1], RSIndex)
trend := cross(RSIndex, shortband[1]) ? 1 : cross_1 ? -1 : nz(trend[1], 1)
FastAtrRsiTL = trend == 1 ? longband : shortband

// Find all the QQE Crosses

QQExlong = 0
QQExlong := nz(QQExlong[1])
QQExshort = 0
QQExshort := nz(QQExshort[1])
QQExlong := FastAtrRsiTL < RSIndex ? QQExlong + 1 : 0
QQExshort := FastAtrRsiTL > RSIndex ? QQExshort + 1 : 0

//Conditions

qqeLong = QQExlong == 1 ? FastAtrRsiTL[1] - 50 : na
qqeShort = QQExshort == 1 ? FastAtrRsiTL[1] - 50 : na

// Plotting

plotshape(qqeLong, title="QQE long", text="Long", textcolor=color.white, style=shape.labelup, location=location.belowbar, color=color.green, transp=0, size=size.tiny)
plotshape(qqeShort, title="QQE short", text="Short", textcolor=color.white, style=shape.labeldown, location=location.abovebar, color=color.red, transp=0, size=size.tiny)

// Alerts

alertcondition(qqeLong, title="Long", message="Long")
alertcondition(qqeShort, title="Short", message="Short")