
Эта стратегия является непереписывающейся количественной торговой системой, основанной на имитации графиков Ренко, которая решает проблему переписывания в традиционной стратегии Ренко, моделируя поведение блоков Ренко на стандартном графике времени. Эта стратегия использует фиксированные размерные ценовые блоки для фильтрации рыночного шума, обращая внимание только на значимые ценовые изменения, при этом обеспечивая неизменность исторических сигналов. Эта стратегия особенно подходит для отслеживания тенденций и торговли обратными тенденциями, для принятия торговых решений с помощью многоступенчатого сравнения изменений в направлении блоков.
Основные особенности:
Основным принципом стратегии является реализация функций блока Ренко на стандартном графике времени, а также решение проблемы перепланировки в традиционном графике Ренко. Конкретные принципы работы следующие:
Конфигурация и инициализация параметров:
brickSize: определение размера блока, определяющее, насколько цены должны двигаться, чтобы образоваться новый блокrenkoPriceНаконец-то, мы получили доступ к информации о том, что мы собираемся продать Renko в ближайшее время.prevRenkoPriceНа данный момент, на данный момент, на данный момент, на данный момент, на данный момент:brickDir: Следить за направлением блока ((1 = повышение, -1 = снижение)newBrickЗнак Бура, указывающий на то, что новые глыбы формируютсяbrickStartИндекс столбца, в котором начался текущий блок:Идентификация блока Renko без переписывания:
Визуализация Ренко на графике времени:
Многоступенчатое изменение тенденции:
После глубокого анализа кода, эта стратегия показала следующие значительные преимущества:
Решение проблемы перекрашивания:
Фильтрация шума и четкое распознавание тенденций:
Многоступенчатая проверка сигнала:
brickDir[brickSize]В настоящее времяbrickDirи исторические ценовые уровниВизуализация основы сделки:
Гибкость и настройка:
Несмотря на то, что эта стратегия помогла решить проблему перепланировки, существуют следующие факторы риска:
Риск задержки сигнала:
Размер блока, выбор риска:
Риск обратного тренда:
Риск отступления:
Расчет риска ресурсов:
Основываясь на анализе кода, можно выделить несколько ключевых направлений оптимизации стратегии:
Оптимизация динамического размера блока:
Добавление фильтров транзакций:
Улучшение механизмов сдерживания убытков и прибыли:
strategy.exit()Команда, которая устанавливает остановку на основе ATR или размера блокаОптимизация механизма многоступенчатой проверки:
brickSizeПо сравнению с историческими блокамиУлучшение системы визуализации и оповещения:
label.new()иalert()Функции, улучшающие пользовательский опытМногоступенчатая непереписывающаяся стратегия реконверсии трендов имитации Renko успешно решает проблему переписывания в традиционной стратегии Renko, позволяя трейдеру применять логику Renko на стандартном графике времени, сохраняя при этом стабильность исторического сигнала. Эта стратегия использует многоступенчатый механизм проверки, чтобы идентифицировать обратный тренд, улучшить качество сигнала и визуально показать структуру рынка графическим способом.
Основные преимущества стратегии заключаются в решении проблем перепланировки, фильтрации рыночного шума, многоуровневой проверки сигнала и интуитивное графическое отображение. Однако, по-прежнему существуют риски, такие как задержка сигнала, выбор размера блока и ложные сигналы. В будущем может быть дополнительно оптимизировано реализация динамического размера блока, увеличение фильтрации сделок, улучшение механизма остановки убытков, оптимизация шагов проверки и усиление системы визуализации.
Этот метод, сочетающий в себе преимущества графиков Ренко и избегающий их недостатков, особенно подходит для стратегий торговли с отслеживанием тенденций и обратными тенденциями, предоставляя трейдерам надежный инструмент технического анализа, способный обеспечить стабильную реальную производительность при сохранении точности отсчета.
//@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")