
Die Strategie ist ein auf Renko-Charts basierendes, simuliertes, nicht-übergezeichnetes, quantitatives Handelssystem, das das Problem der Übergezeichnetheit in der traditionellen Renko-Strategie löst, indem es das Verhalten der Renko-Blöcke auf einem Standardzeit-Chart simuliert. Die Strategie verwendet ein fester Preisblock, um Marktlärm zu filtern und sich nur auf bedeutende Preisänderungen zu konzentrieren, während sichergestellt wird, dass die historischen Signale unverändert bleiben. Die Strategie eignet sich insbesondere für Trend-Tracking und Trendwende-Trading, bei denen Handelsentscheidungen über mehrere Schritte getroffen werden, die die Richtungsänderungen der Blöcke vergleichen.
Hauptmerkmale:
Das Kernprinzip dieser Strategie ist, die Funktionalität von Renko-Blöcken auf einem Standardzeitdiagramm zu realisieren und gleichzeitig die Umrissprobleme in einem traditionellen Renko-Diagramm zu lösen. Die spezifischen Funktionsprinzipien lauten:
Parameterkonfiguration und Initialisierung:
brickSizeDefinition der Blockgröße, die bestimmt, wie viel der Preis bewegen muss, um neue Blöcke zu bildenrenkoPriceDie letzten Renko-Blöcke wurden bei der Schließung der Börse gespeichert.prevRenkoPriceDer Preis für den Renko-Block liegt auf dem Niveau des Vorjahres.brickDirDie Richtung des Blocks wird folgendermaßen verfolgt:newBrickDie Bulle zeigt an, ob neue Blöcke entstehen.brickStart: Speichert den Index der Spalte, in der der aktuelle Block beginntIdentifizierung von Renko-Blöcken ohne Übermalung:
Renko-Visualisierung im Zeitplan:
Mehrstufige Trendwende:
Nach einer eingehenden Analyse des Codes zeigte sich, dass diese Strategie folgende wesentliche Vorteile aufweist:
Die Lösung der Umrissfrage:
Geräuschfilterung mit klaren Trends:
Mehrstufige Signalprüfung:
brickDir[brickSize]GegenwärtigbrickDirund historische PreisniveausBasis für Transaktionen visualisieren:
Flexibilität und Anpassbarkeit:
Obwohl die Strategie das Problem der Neuaufstellung gelöst hat, bestehen noch folgende Risikofaktoren:
Gefahr von Signalverzögerungen:
Die Größe der Blöcke wählt die Risiken:
Gefahr einer Trendumkehr:
Rückzug Risiken:
Berechnung der Ressourcenrisiken:
Auf der Grundlage der Code-Analyse wurden folgende wichtige Optimierungsmöglichkeiten für die Strategie identifiziert:
Optimierung der dynamischen Blockgröße:
Hinzufügen von Transaktionsfiltern:
Verbesserte Stop-Loss- und Gewinnmechanismen:
strategy.exit()Befehl, den Stop-Loss auf Basis der ATR- oder Blockgröße einzustellenOptimierung der Mehrschritt-Verifizierung:
brickSizeDie Multiplikatoren vergleichen historische BlöckeVerbesserte Sichtbarkeit und Alarmierung:
label.new()Undalert()Funktionen, die die Benutzererfahrung verbessernDie mehrstufige Renko-Simulation-Strategie löst erfolgreich das Problem der Übertragung in der traditionellen Renko-Strategie und ermöglicht es den Händlern, die Renko-Logik auf dem Standardzeit-Chart anzuwenden, während die Stabilität der historischen Signale erhalten wird. Die Strategie identifiziert Trendwechsel durch mehrstufige Verifizierungsmechanismen, verbessert die Signalqualität und zeigt die Marktstruktur visuell in einer grafischen Weise.
Die wichtigsten Vorteile der Strategie bestehen in der Lösung von Umrissen, der Filterung von Marktrauschen, der mehrschichtigen Signalprüfung und der intuitiven Grafikdarstellung. Es bestehen jedoch weiterhin Risiken wie Signalverzögerungen, Blockgrößen und Falschsignale. In Zukunft können weitere Optimierungen durch die Implementierung von dynamischen Blockgrößen, die Erhöhung der Handelsfilter, die Verbesserung der Stop-Loss-Mechanismen, die Optimierung der Verifizierungsschritte und die Erweiterung des Visualisierungssystems vorgenommen werden.
Diese Methode, die die Vorteile der Renko-Charts kombiniert und deren Nachteile vermeidet, eignet sich besonders für Trendfollowing- und Trendumkehr-Handelsstrategien und bietet Händlern ein zuverlässiges technisches Analyse-Tool, das eine stabile Real-Time-Performance bietet, während die Rückmessgenauigkeit beibehalten wird.
//@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")