
この戦略は,レンコのグラフを模倣した非重画量化取引システムで,レンコのブロックの動作を標準時間グラフで模擬することで,従来のレンコ戦略の重画問題を解決しています.この戦略は,固定サイズの価格ブロックを使用して,市場ノイズをフィルタリングし,意味のある価格変化のみに注目し,歴史的信号が変わらずに保ちます.この戦略は,トレンド追跡とトレンド反転取引に特に適用され,ブロックの方向の変化を複数ステップで比較して取引決定を行います.
主な特徴:
この戦略の核心原理は,標準時間図でレンコブロックの機能を実現し,従来のレンコ図で再描画の問題も解決することである.具体的には以下の原理で動作する.
参数配置と初期化:
brickSizeブロックの大きさを定義し,新しいブロックが形成されるまでに価格がどれくらい移動しなければならないかを決定します.renkoPriceレンコ・ブロックの最終取引価格を保存するprevRenkoPriceレンコ・ブロックの価格レベルを記録するbrickDirブロックの方向を追跡します.newBrickブルの標識は,新しい塊が形成されているかどうかを示します.brickStart: 現在のブロックの開始の柱のインデックスを保存します.レンコブロックの認識を重写しない:
タイムグラフ上のレンコの可視化:
多段階のトレンド転換:
この戦略は,コードを深く分析した結果,以下のような顕著な利点が示されています.
塗り替えの問題解決:
騒音フィルタリングと明確なトレンド認識:
複数のステップのシグナル認証:
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")