
Strategi ini adalah sistem perdagangan kuantitatif non-overplot yang berbasis pada simulasi grafik Renko, yang memecahkan masalah overplot dalam strategi Renko tradisional dengan mensimulasikan perilaku blok Renko pada grafik waktu standar. Strategi ini menggunakan blok harga berukuran tetap untuk menyaring kebisingan pasar, hanya memperhatikan perubahan harga yang berarti, sambil memastikan sinyal historis tetap tidak berubah.
Fitur Utama:
Prinsip inti dari strategi ini adalah untuk mengimplementasikan fungsi blok Renko pada grafik waktu standar, sekaligus mengatasi masalah perpaduan dalam grafik Renko tradisional. Prinsip kerja spesifiknya adalah sebagai berikut:
Konfigurasi dan inisialisasi parameter:
brickSizeDefinisi ukuran blok, menentukan berapa banyak harga harus bergerak untuk membentuk blok barurenkoPriceRenko Block: Menyimpan harga akhir RenkoprevRenkoPriceHarga Renko Brick: Tingkat Harga SebelumnyabrickDir: melacak arah blok ((1 = naik, -1 = turun)newBrickTanda Bull, menunjukkan apakah ada pembentukan batu barubrickStart: Indeks kolom di mana blok saat ini dimulaiIdentifikasi blok Renko tanpa pemetaan ulang:
Visualisasi Renko pada grafik waktu:
Keputusan Mengembalikan Tren Berkelanjutan:
Setelah menganalisis kode secara mendalam, strategi ini menunjukkan keuntungan yang signifikan:
Menyelesaikan masalah pencitraan ulang:
Filter kebisingan dan identifikasi tren yang jelas:
Verifikasi sinyal multi-langkah:
brickDir[brickSize]dengan saat inibrickDirdan hubungan tingkat harga historisDasar transaksi visual:
Fleksibilitas dan Kustomisasi:
Meskipun strategi ini telah menyelesaikan masalah pencitraan ulang, faktor-faktor risiko berikut masih ada:
Risiko keterlambatan sinyal:
Ukuran blok memilih risiko:
Risiko sinyal palsu yang berbalik:
Risiko penarikan diri:
Menghitung risiko sumber daya:
Berdasarkan analisis kode, berikut adalah beberapa optimasi utama dari strategi ini:
Optimalisasi ukuran blok dinamis:
Menambahkan filter transaksi:
Peningkatan mekanisme penghentian kerugian dan keuntungan:
strategy.exit()Perintah untuk mengatur stop loss berdasarkan ATR atau ukuran blokOptimalkan mekanisme multi-step verifikasi:
brickSizePerkalian untuk membandingkan blok sejarahPeningkatan visibilitas dan sistem peringatan:
label.new()Danalert()Fungsi meningkatkan pengalaman penggunaStrategi perdagangan kuantitatif non-reversal Renko simulasi tren reversal berhasil memecahkan masalah reversal dalam strategi Renko tradisional, memungkinkan pedagang untuk menerapkan logika Renko pada grafik waktu standar, sambil menjaga stabilitas sinyal historis. Strategi ini mengidentifikasi reversal tren melalui mekanisme verifikasi multi-langkah, meningkatkan kualitas sinyal, dan secara visual menunjukkan struktur pasar melalui cara grafis.
Keuntungan utama dari strategi ini adalah mengatasi masalah pemetaan ulang, memfilter kebisingan pasar, verifikasi sinyal multi-tingkat, dan representasi grafis yang intuitif. Namun, risiko seperti penundaan sinyal, pilihan ukuran blok, dan sinyal palsu masih ada. Di masa depan, strategi ini dapat dioptimalkan lebih lanjut dengan menerapkan ukuran blok dinamis, menambahkan filter perdagangan, memperbaiki mekanisme stop loss, mengoptimalkan langkah verifikasi, dan meningkatkan sistem visualisasi.
Metode ini menggabungkan keunggulan Renko chart dan menghindari kekurangannya, sangat cocok untuk strategi perdagangan mengikuti tren dan membalikkan tren, memberikan pedagang alat analisis teknis yang andal yang dapat memberikan kinerja real-time yang stabil sambil tetap mempertahankan akurasi pengukuran.
//@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")