
이 전략은 렌코 차트를 모방한 재배치되지 않은 양적 거래 시스템으로, 표준 시간 차트에 렌코 블록의 행동을 모방하여 전통적인 렌코 전략의 재배치 문제를 해결합니다. 이 전략은 고정 크기의 가격 블록을 사용하여 시장 소음을 필터링하고, 의미있는 가격 변화에만 집중하며, 역사적 신호를 변경하지 않도록합니다. 이 전략은 특히 트렌드 추적 및 트렌드 역전 거래에 적합하며, 블록의 방향 변화를 여러 단계로 비교하여 거래 결정을 내립니다.
주요 특징:
이 전략의 핵심 원칙은 표준 시간표에서 렌코 블록의 기능을 구현하는 동시에 전통적인 렌코 차트에서 다시 그리는 문제를 해결하는 것입니다. 구체적인 작동 원리는 다음과 같습니다:
매개 변수 구성 및 초기화:
brickSize덩어리 크기를 정의하고, 가격이 얼마나 움직여야 새로운 덩어리가 형성되는지를 결정합니다.renkoPrice이 글은 RENKO 블록의 마지막 종결값을 저장하는 것입니다.prevRenkoPrice다음의 레코 블록의 가격 수준을 저장합니다.brickDir: 블록의 방향을 추적하라 ((1= 상승, -1= 하락)newBrick펄 로그: 새로운 덩어리가 형성되는지 표시하는 덩어리brickStart: 현재 블록의 시작을 저장하는 기둥 인덱스렌코 블록을 재배치하지 않는 식별:
시간 차트 상의 렌코 시각화:
다단계 추세 전환 판단:
코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 보여준다:
다시 그리는 문제 해결:
노이즈 필터링과 명확한 트렌드 식별:
다단계 신호 확인:
brickDir[brickSize]현재와brickDir그리고 역사적인 가격 수준 관계거래 기반을 시각화:
유연성과 사용자 정의:
이 전략은 재배치 문제를 해결했지만, 다음과 같은 위험 요소들이 여전히 존재합니다.
신호 지연 위험:
덩어리 크기와 선택의 위험:
트렌드 반전, 가짜 신호 위험:
탈퇴 위험:
리소스 리스크 계산:
코드 분석을 바탕으로 이 전략의 몇 가지 주요 최적화 방향은 다음과 같습니다.
동적 블록 크기를 최적화:
트랜잭션 필터 추가:
제약 및 수익 제도의 개선:
strategy.exit()명령어, ATR 또는 블록 크기에 기반한 스톱포인트 설정다단계 검증을 최적화:
brickSize역사의 조각들을 비교하기 위한 배수가시화 및 알림 시스템 개선:
label.new()그리고alert()사용자 경험을 향상시키는 기능다단계 비 재배치 렌코 시뮬레이션 트렌드 역전화 거래 전략은 전통적인 렌코 전략의 재배치 문제를 성공적으로 해결하여 거래자가 표준 시간 차트에 렌코 논리를 적용할 수 있게 하면서도 역사적 신호의 안정성을 유지할 수 있습니다. 이 전략은 다단계 검증 메커니즘을 통해 트렌드 역전을 인식하여 신호 품질을 향상시키고 시장 구조를 그래픽 방식으로 직관적으로 보여줍니다.
전략의 주요 장점은 재배치 문제를 해결하고, 시장 소음을 필터링하고, 다단계 신호 검증 및 직관적인 그래픽 표현에 있다. 그러나, 신호 지연, 블록 크기 선택 및 가짜 신호 등의 위험은 여전히 존재한다. 향후에는 동적 블록 크기를 구현하고, 거래 필터를 추가하고, 손실 차단 장치를 개선하고, 검증 단계를 최적화하고, 시각 시스템을 강화하여 더욱 최적화할 수 있다.
이 방식은 렌코 차트의 장점을 결합하고 단점을 피하며, 트렌드 추적 및 트렌드 역전 거래 전략에 특히 적합하며, 트레이더에게 신뢰할 수있는 기술 분석 도구를 제공하며, 재측정 정확성을 유지하면서 안정적인 실적 실적을 제공합니다.
//@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")