
A estratégia é um sistema de negociação quantitativa sem reposicionamento baseado em uma simulação de gráficos de Renko, que resolve o problema de reposicionamento na estratégia tradicional de Renko. A estratégia usa blocos de preço de tamanho fixo para filtrar o ruído do mercado, observando apenas mudanças significativas de preços e garantindo que os sinais históricos permaneçam inalterados.
Principais características:
O princípio central da estratégia é implementar o recurso de blocos de Renko em gráficos de tempo padrão, resolvendo o problema de redesenho em gráficos de Renko tradicionais. Os princípios de trabalho específicos são os seguintes:
Configuração e inicialização de parâmetros:
brickSizeDefinir o tamanho do bloco e determinar o quanto o preço deve mover-se para que um novo bloco seja formadorenkoPriceO preço final do bloco Renko é armazenado.prevRenkoPriceO preço do bloco de Renko é o mesmo que o do bloco anterior.brickDirSeguir a direção do bloco: 1 = subida, -1 = descidanewBrickLogotipo de Bull, indicando a formação de novos blocosbrickStart: armazenar o índice de coluna no início do bloco atualIdentificação de blocos de Renko sem re-mapeamento:
Visualização de Renko em um gráfico de tempo:
Reversão de tendência em várias etapas:
Ao analisar o código em profundidade, a estratégia mostra as seguintes vantagens significativas:
Resolvendo o problema do redesenho:
Filtragem de ruído com identificação de tendências clara:
Verificação de sinal em vários passos:
brickDir[brickSize]Com a atualbrickDirRelações históricas de preços e níveisBase de transação visível:
Flexibilidade e personalização:
Embora a estratégia tenha resolvido o problema do redesenho, os seguintes fatores de risco permanecem:
Risco de atraso de sinal:
O tamanho do bloco escolhe o risco:
Risco de falsos sinais de reversão de tendência:
Risco de retirada:
Risco de recursos de cálculo:
Com base na análise do código, aqui estão algumas das principais melhorias da estratégia:
Otimização do tamanho do bloco dinâmico:
Adição de filtros de transação:
Melhorar os mecanismos de prevenção e recuperação de perdas:
strategy.exit()Ordem para definir um ponto de parada baseado no tamanho do ATR ou blocoOtimização do mecanismo de verificação em vários passos:
brickSizeMultiplicação para comparar blocos históricosMelhorias no sistema de visualização e notificação:
label.new()ealert()Funções que melhoram a experiência do usuárioA estratégia de negociação de reversão de tendências de simulação de Renko em vários passos resolve com sucesso o problema de reversão na estratégia tradicional de Renko, permitindo que os comerciantes apliquem a lógica de Renko no gráfico de tempo padrão, mantendo a estabilidade do sinal histórico. A estratégia identifica a reversão de tendências por meio de mecanismos de verificação em vários passos, aumenta a qualidade do sinal e mostra a estrutura do mercado visualmente por meio de gráficos.
As principais vantagens da estratégia consistem em resolver o problema do redesenho, filtrar o ruído do mercado, a verificação de sinais em vários níveis e a representação gráfica intuitiva. No entanto, ainda existem riscos como o atraso do sinal, a escolha do tamanho do bloco e os falsos sinais. O futuro pode ser ainda mais otimizado através da implementação do tamanho do bloco dinâmico, o aumento do filtro de negociação, a melhoria do mecanismo de stop loss, a otimização dos passos de verificação e o aumento do sistema de visualização.
Esta abordagem, que combina as vantagens dos gráficos de Renko e evita as suas desvantagens, é especialmente adequada para estratégias de negociação de seguimento de tendências e de reversão de tendências, fornecendo aos comerciantes uma ferramenta de análise técnica confiável, capaz de fornecer um desempenho realista estável, enquanto mantém a precisão de retrocesso.
//@version=5
strategy("Non-Repainting Renko Emulation Strategy [PineIndicators]", overlay=true, calc_on_every_tick=false, max_boxes_count = 500, max_labels_count = 500, max_lines_count = 500, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.01, slippage = 2)
// Parameter: Brick-Größe (z.B. 10 Punkte)
brickSize = input.float(3.0, "Brick Size", step=0.1)
// Persistente Variablen
var float renkoPrice = na // Aktueller Renko-Level (Schlusswert des letzten Bricks)
var float prevRenkoPrice = na // Vorheriger Renko-Level (für Box-Berechnung)
var int brickDir = 0 // 1 = Aufwärts, -1 = Abwärts
var bool newBrick = false // Signalisiert, dass ein neuer Brick abgeschlossen wurde
var int brickStart = bar_index // Beginn des aktuellen Bricks (x-Achse)
// Berechnungen nur auf abgeschlossenen Candles
if barstate.isconfirmed
newBrick := false
// Initialisierung: Beim ersten Candle setzen wir den Renko-Level
if na(renkoPrice)
renkoPrice := close
brickStart := bar_index
// Berechne die Differenz zum letzten Renko-Level
diff = close - renkoPrice
// Prüfen, ob der Unterschied mindestens der Brick-Größe entspricht
if math.abs(diff) >= brickSize
// Anzahl kompletter Bricks (kann > 1 sein)
numBricks = math.floor(math.abs(diff) / brickSize)
prevRenkoPrice := renkoPrice
// Aktualisieren des Renko-Levels
renkoPrice := renkoPrice + numBricks * brickSize * math.sign(diff)
// Brick-Richtung (konvertiere math.sign-Ergebnis in int)
brickDir := int(math.sign(diff))
newBrick := true
// Bestimme die obere und untere Grenze des abgeschlossenen Bricks:
lowLevel = brickDir == 1 ? prevRenkoPrice : renkoPrice
highLevel = brickDir == 1 ? renkoPrice : prevRenkoPrice
// Setze den Start für den nächsten Brick
brickStart := bar_index
// Handelslogik: Einstieg/Ausstieg nur, wenn ein neuer Brick abgeschlossen wurde
if barstate.isconfirmed and newBrick
// Bei Aufwärts-Brick: Long-Signal
if brickDir[brickSize] < brickDir and renkoPrice[brickSize] < renkoPrice[brickSize*2] and renkoPrice < renkoPrice[brickSize] and renkoPrice[brickSize*2] < renkoPrice[brickSize*3] and strategy.position_size <= 0
// Bestehende Short-Position schließen, falls vorhanden
strategy.entry("Long", strategy.long)
// Bei Abwärts-Brick: Short-Signal
else if brickDir[brickSize] > brickDir and renkoPrice[brickSize] > renkoPrice[brickSize*2] and renkoPrice > renkoPrice[brickSize] and renkoPrice[brickSize*2] > renkoPrice[brickSize*3] and strategy.position_size >= 0
// Bestehende Long-Position schließen, falls vorhanden
strategy.entry("Short", strategy.short)
if barstate.isconfirmed and newBrick
if brickDir[brickSize] < brickDir
strategy.close("Short")
else if brickDir[brickSize] > brickDir
strategy.close("Long")