S/R als ZONE statt Linie (RZ/SZ, Indikator v1.37)
User-Wunsch nach einem TradingView-Bild: Resistance Zone und eine untere Zone
als farbige Baender. Neu RZ;lo;hi und SZ;lo;hi, im Indikator als OBJ_RECTANGLE
mit Beschriftung, nach rechts verlaengert.
DIE BREITE IST ECHT: sie ist die Spanne der M30-Pivots, die den Cluster gebildet
haben (sr_levels.zonen(), additiv -- cluster() bleibt unveraendert, weil es den
S/R-Auto-Close speist). Live verifiziert: R;82.786 liegt in RZ;82.776;82.797,
S;82.15 in SZ;82.14;82.16. Einzel-Pivot bekommt 0,10xATR Mindestbreite.
ZWEI ABWEICHUNGEN VOM VORBILD, beide begruendet:
(1) KEIN Fibonacci. Das Bild leitet seine Zone aus 0,618/0,658 ab. Fib ist hier
gemessen und verworfen (04.08.): 54,3/54,5 % Haltequote gegen 55,7/53,8 %
einer Zufallslinie gleicher Distanz, und schlechter als M30-Pivots.
(2) Die untere Zone heisst SUPPORT, nicht "Cumulative Long Liquidation". Echte
Liquidationsdaten hat das Projekt nicht; die HL-Waende sind am 17.08. als
reaktiv gemessen. Bricht die Support-Zone, liegen dort die Long-Stops --
dieselbe Stelle, ehrlich benannt.
Abschaltbar InpShowZonen. Kompiliert ins richtige Terminal (0/0), deployt,
verifiziert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
8d17cf08e0
commit
ca61cf1498
@@ -89,3 +89,24 @@ def halten(neu, alt, px: float, atr: float, is_res: bool,
|
||||
and abs(neu - px) < abs(alt - px) - naeher * atr):
|
||||
return neu # alte Linie veraltet/weit weg → näheres Level
|
||||
return alt # sonst: HALTEN (kein Springen)
|
||||
|
||||
|
||||
def zonen(vals, atr: float, toleranz: float = TOLERANZ_STD) -> list:
|
||||
"""Wie `cluster`, gibt aber je Cluster (mittel, lo, hi) statt nur den Mittelwert.
|
||||
|
||||
⚠⚠ ADDITIV — `cluster()` bleibt unveraendert. Es speist `_draw_levels` und
|
||||
damit den S/R-Auto-Close; jede Aenderung dort waere ein Strategie-Eingriff.
|
||||
Hier geht es nur um die ANZEIGE: eine Zone hat eine Breite, eine Linie nicht.
|
||||
|
||||
Die Breite ist NICHT erfunden — sie ist die Spanne der Pivots, die den
|
||||
Cluster gebildet haben. Ein Cluster aus einem einzigen Pivot hat folglich
|
||||
die Breite 0; der Aufrufer entscheidet, ob er ihm eine Mindestbreite gibt.
|
||||
"""
|
||||
out: list[list[float]] = []
|
||||
for v in sorted(vals):
|
||||
if out and v - out[-1][-1] <= toleranz * atr:
|
||||
out[-1].append(v)
|
||||
else:
|
||||
out.append([v])
|
||||
return [(round(sum(g) / len(g), 3), round(min(g), 3), round(max(g), 3))
|
||||
for g in out]
|
||||
|
||||
Reference in New Issue
Block a user