EMA1 - EMA2 em termos de comprimento) * 100. Linha Lorenziana = EMA3 + CI.
A estratégia calcula a linha de Lorenz tanto no quadro de tempo atual quanto em um quadro de tempo superior para fornecer uma perspectiva de mercado multidimensional. Os sinais de negociação são baseados em cruzamento de preços com a linha de Lorenz e são confirmados através de um mecanismo de lookback. Um sinal de compra é desencadeado quando o preço cruza acima da linha de Lorenz e o preço mais baixo dentro do período de lookback está abaixo da linha de Lorenz; o sinal de venda funciona da maneira oposta.
A estratégia também introduz um mecanismo de preço-alvo, que determina pontos de saída com base em percentagens-alvo definidas pelo utilizador.
Análise de quadros de tempo múltiplos: Combinando linhas lorenzianas de quadros de tempo atuais e mais longos, a estratégia capta tendências de mercado mais abrangentes, reduzindo os falsos sinais.
Identificação dinâmica de tendências: o método de classificação lorenziana adapta-se rapidamente às alterações do mercado, proporcionando capacidades sensíveis de identificação de tendências.
Mecanismo de confirmação de sinal: o uso de um período de retrocesso para confirmar os sinais de negociação reduz efetivamente a probabilidade de operações erradas.
Optimização de preço alvo: estabelecendo porcentagens alvo, a estratégia pode maximizar os lucros em condições favoráveis de mercado.
Gerenciamento de riscos: a introdução de mecanismos dinâmicos de stop-loss controla eficazmente o risco para cada negociação.
Visualização e Estatísticas: A estratégia fornece gráficos intuitivos e estatísticas comerciais, facilitando a análise e otimização do desempenho da estratégia.
Flexibilidade: múltiplos parâmetros ajustáveis permitem aos traders otimizar a estratégia de acordo com diferentes condições de mercado e preferências pessoais.
Sensibilidade dos parâmetros: o desempenho da estratégia depende muito da escolha dos parâmetros de entrada.
Dependência das condições do mercado: em mercados instáveis, a estratégia pode gerar sinais falsos frequentes, resultando em perdas consecutivas.
Risco de deslizamento: em mercados em rápida flutuação, os preços reais de execução podem diferir significativamente dos preços de sinal.
Risco de otimização excessiva: o ajustamento excessivo dos parâmetros para se adequarem aos dados históricos pode conduzir a uma otimização excessiva, afetando o desempenho futuro das negociações em tempo real.
Falhas técnicas: a dependência de cálculos de indicadores técnicos complexos significa que falhas do sistema ou erros de dados podem levar a decisões de negociação incorretas.
Para mitigar estes riscos, recomenda- se:
Ajuste dinâmico dos parâmetros: Implementar um mecanismo de ajuste adaptativo dos parâmetros para ajustar automaticamente o comprimento e o limiar da EMA com base na volatilidade do mercado.
Filtros adicionais: introduzir indicadores técnicos ou fundamentais adicionais como filtros para melhorar a qualidade do sinal.
Integração de aprendizado de máquina: Utilize algoritmos de aprendizado de máquina para otimizar os processos de seleção de parâmetros e geração de sinal.
Análise de correlação entre vários ativos: considerar dados de vários ativos relacionados para fornecer uma perspectiva de mercado mais abrangente.
Integração de eventos de notícias: Adicione a funcionalidade de análise de eventos de notícias para ajustar o comportamento da estratégia durante os lançamentos de dados econômicos importantes.
Ajuste de volatilidade: Ajuste dinâmico das percentagens-alvo e dos níveis de stop-loss com base na volatilidade do mercado.
Gestão de riscos reforçada: aplicar estratégias mais sofisticadas de gestão de posições e controlo de riscos, tais como o dimensionamento das posições com base na volatilidade.
Estas orientações de otimização visam melhorar a adaptabilidade e a estabilidade da estratégia, permitindo-lhe manter um bom desempenho em várias condições de mercado.
A Classificação Lorenziana Multi-Timeframe Target Strategy é um sistema de negociação abrangente que combina métodos avançados de análise técnica com mecanismos inteligentes de gerenciamento de riscos. Através da análise de vários prazos, identificação de tendências dinâmicas e otimização de preços alvo, essa estratégia tem o potencial de alcançar um desempenho comercial consistente em várias condições de mercado. No entanto, também enfrenta desafios como sensibilidade de parâmetros e dependência do mercado. Através da otimização contínua e gerenciamento de riscos, os comerciantes podem aproveitar plenamente as vantagens da estratégia, enquanto controlam efetivamente os riscos potenciais.
/*backtest start: 2023-07-31 00:00:00 end: 2024-07-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Lorenzian Classification Strategy with Target and Multi-Timeframe", overlay=true) // Input parameters length = input.int(5, "Lorenzian Length", minval=1) threshold = input.float(1.0, "Threshold", step=0.1) lookback = input.int(3, "Lookback Candles", minval=1, maxval=20) targetPercentage = input.float(1.5, "Target Percentage (%)", step=0.1) // Target percentage for exit higherTimeframe = input.timeframe("D", "Higher Timeframe") // Higher timeframe for multi-timeframe analysis // Lorenzian Classification calculation for current timeframe ema1 = ta.ema(hlc3, length) ema2 = ta.ema(ema1, length) ema3 = ta.ema(ema2, length) d = ema1 - ema2 ci = d / (0.015 * ta.ema(math.abs(d), length)) * 100 lorenzian = ema3 + ci // Lorenzian Classification calculation for higher timeframe hlc3_htf = request.security(syminfo.tickerid, higherTimeframe, (high + low + close)/3 ) ema1_htf = ta.ema(hlc3_htf, length) ema2_htf = ta.ema(ema1_htf, length) ema3_htf = ta.ema(ema2_htf, length) d_htf = ema1_htf - ema2_htf ci_htf = d_htf / (0.015 * ta.ema(math.abs(d_htf), length)) * 100 lorenzian_htf = ema3_htf + ci_htf // Signal generation crossUp = ta.crossover(close, lorenzian) crossDown = ta.crossunder(close, lorenzian) // Determine color based on price position relative to the line lineColor = close > ema3 ? color.green : color.red lineColorH = close > ema3_htf ? color.blue : color.red // Plot the line with dynamic color plot(ema3, color=lineColor, title="EMA3", linewidth=2) plot(ema3_htf, color=lineColorH, title="EMA3 HTF", linewidth=2) // Function to check for opposite movement oppositeMove(isLong) => if isLong lowest = ta.lowest(low, lookback) lowest < lorenzian[lookback] else highest = ta.highest(high, lookback) highest > lorenzian[lookback] // Generate buy and sell signals buySignal = crossUp and oppositeMove(true) sellSignal = crossDown and oppositeMove(false) // Calculate and manage target price var float targetPrice = na var float plotTargetPrice = na var float entryPrice = na // Variables to track trade outcomes var int targetMet = 0 var int targetNotMet = 0 var int totalTrades = 0 if (buySignal) strategy.entry("Buy", strategy.long) entryPrice := close targetPrice := entryPrice * (1 + targetPercentage/100) plotTargetPrice := targetPrice totalTrades := totalTrades + 1 if (sellSignal) strategy.entry("Sell", strategy.short) entryPrice := close targetPrice := entryPrice * (1 - targetPercentage/100) plotTargetPrice := targetPrice totalTrades := totalTrades + 1 // Check if target price is met to exit if (not na(targetPrice)) if (strategy.position_size > 0 and high >= targetPrice) // Long position exit condition strategy.close("Buy") targetPrice := na entryPrice := na targetMet := targetMet + 1 else if (strategy.position_size > 0 and low < entryPrice * (1 - targetPercentage/100)) // Stop loss for long strategy.close("Buy") targetPrice := na entryPrice := na targetNotMet := targetNotMet + 1 if (strategy.position_size < 0 and low <= targetPrice) // Short position exit condition strategy.close("Sell") targetPrice := na entryPrice := na targetMet := targetMet + 1 else if (strategy.position_size < 0 and high > entryPrice * (1 + targetPercentage/100)) // Stop loss for short strategy.close("Sell") targetPrice := na entryPrice := na targetNotMet := targetNotMet + 1 // Reset plotTargetPrice when position is closed if (strategy.position_size == 0) plotTargetPrice := na // Plot signals and target price plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.purple, style=shape.triangledown, size=size.small) plot(plotTargetPrice, color=color.yellow, title="Target Price", style=plot.style_circles, linewidth=2) // Add alerts alertcondition(buySignal, title="Buy Signal", message="Lorenzian Buy Signal") alertcondition(sellSignal, title="Sell Signal", message="Lorenzian Sell Signal") // Calculate success percentage successPercentage = totalTrades > 0 ? (targetMet / totalTrades) * 100 : 0 // Create a table to display trade outcomes var table tradeStats = table.new(position.top_right, 2, 3, border_width=1) table.cell(tradeStats, 0, 0, "Targets Met", bgcolor=color.new(color.green, 30)) table.cell(tradeStats, 1, 0, "Targets Missed", bgcolor=color.new(color.red, 30)) table.cell(tradeStats, 0, 1, str.tostring(targetMet), bgcolor=color.new(color.green, 30)) table.cell(tradeStats, 1, 1, str.tostring(targetNotMet), bgcolor=color.new(color.red, 30)) table.cell(tradeStats, 0, 2, "Success Rate", bgcolor=color.new(color.blue, 30)) table.cell(tradeStats, 1, 2, str.tostring(successPercentage, "#.##") + "%", bgcolor=color.new(color.blue, 30))