Version 4.1.3: Schalter für Preis-Textboxen ergänzt und Filter-Option umbenannt
- Neuer Toggle „Preis-Textboxen an Blues-Linien anzeigen“ (Standard: an) - Telgos 2-Bar-Prime Filter klarer beschrieben („Ein Hoch/Tief kommt noch für Filter aktiv“) inkl. Tooltip
This commit is contained in:
10
README.md
10
README.md
@@ -19,18 +19,10 @@ Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Re
|
|||||||
|
|
||||||
## 📌 Aktuelle Version
|
## 📌 Aktuelle Version
|
||||||
|
|
||||||
➡️ **[Croc Vibes v4.0.0](./indicators/croc_vibes.pine)** ✅
|
➡️ **[Croc Vibes v4.1.2](./indicators/croc_vibes.pine)** ✅
|
||||||
|
|
||||||
👉 Details zu allen Änderungen siehe [CHANGELOG.md](./docs/CHANGELOG.md)
|
👉 Details zu allen Änderungen siehe [CHANGELOG.md](./docs/CHANGELOG.md)
|
||||||
|
|
||||||
# ✨ Neues Feature: Telgos 2-Bar-Prime
|
|
||||||
|
|
||||||
**Telgos 2-Bar-Prime** ist ein spezieller Alarmfilter für **Croc Vibes**:
|
|
||||||
|
|
||||||
- **Bedingung 1:** „Ein Hoch kommt noch“ (Blues Long) ist aktiv
|
|
||||||
- **Bedingung 2:** Mindestens ein definierter Auslöser (*Pearl Long, Ulti Rally, Stephan Setup, BGRL, Rotes Kreuz bei grüner Wolke*)
|
|
||||||
muss auf der **aktuellen Kerze (0)** oder der **vorherigen Kerze (−1)** aufgetreten sein
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Community-Hilfsskript
|
## Community-Hilfsskript
|
||||||
|
@@ -1,5 +1,19 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [4.1.2] – 2025-09-06
|
||||||
|
### Added
|
||||||
|
- **Toggle für Preis-Textboxen**
|
||||||
|
- Neue Option im Menü: „Preis-Textboxen an Blues-Linien anzeigen“
|
||||||
|
- Standard: aktiviert
|
||||||
|
- Kann deaktiviert werden, wenn ein „cleanes“ Chart ohne Preisangaben bevorzugt wird
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **Telgos 2-Bar-Prime: Filter-Option **
|
||||||
|
- Neuer Klartext: „Ein Hoch/Tief kommt noch für Filter aktiv“
|
||||||
|
- Mit Tooltip-Erklärung
|
||||||
|
- Standard: aktiviert
|
||||||
|
- Deaktivieren = lockerer Modus (Auslöser reicht, wenn er in den letzten beiden Kerzen vorkam)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## [4.1.1] – 2025-09-06
|
## [4.1.1] – 2025-09-06
|
||||||
|
@@ -1,15 +1,12 @@
|
|||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
// Croc Vibes by Telgos – Version 4.1.1
|
// Croc Vibes by Telgos – Version 4.1.2
|
||||||
// Lizenz: Mozilla Public License 2.0 – https://mozilla.org/MPL/2.0/
|
// Lizenz: Mozilla Public License 2.0 – https://mozilla.org/MPL/2.0/
|
||||||
// Danksagung (Basis/Ideen): amper04, ray_duke, husky, Audidriver13
|
// Danksagung (Basis/Ideen): amper04, ray_duke, husky, Audidriver13
|
||||||
// =================================================================================================
|
// =================================================================================================
|
||||||
|
|
||||||
//@version=6
|
//@version=6
|
||||||
indicator("Croc Vibes by Telgos", overlay=true, max_labels_count=500, max_lines_count=500)
|
indicator("Croc Vibes by Telgos", overlay=true, max_labels_count=500, max_lines_count=500)
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Eingaben: Chart-Signale =========
|
||||||
// Eingaben: Chart-Signale
|
|
||||||
// -------------------------------------
|
|
||||||
wolke_Line_pink = input.source(title="Wolke Linie Pink", defval=close, group="Chart-Signale")
|
wolke_Line_pink = input.source(title="Wolke Linie Pink", defval=close, group="Chart-Signale")
|
||||||
cloud_punkt_long = input.source(title="Cloud Punkt Long", defval=close, group="Chart-Signale")
|
cloud_punkt_long = input.source(title="Cloud Punkt Long", defval=close, group="Chart-Signale")
|
||||||
red_devil_long = input.source(title="Red Devil Long", defval=close, group="Chart-Signale")
|
red_devil_long = input.source(title="Red Devil Long", defval=close, group="Chart-Signale")
|
||||||
@@ -23,9 +20,7 @@ lollipop_long = input.source(title="Lollipop long", defval=close, group
|
|||||||
aw_rocket_long = input.source(title="AW-Rocket long", defval=close, group="Chart-Signale")
|
aw_rocket_long = input.source(title="AW-Rocket long", defval=close, group="Chart-Signale")
|
||||||
bgrl_signal = input.source(title="Black Green Rocket Long", defval=close, group="Chart-Signale")
|
bgrl_signal = input.source(title="Black Green Rocket Long", defval=close, group="Chart-Signale")
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Eingaben: Lochstreifen / MSI =========
|
||||||
// Eingaben: Lochstreifen / MSI
|
|
||||||
// -------------------------------------
|
|
||||||
kerze_g = input.source(title="Kerzenfarbe (1) Gruen", defval=close, group="Lochstreifen")
|
kerze_g = input.source(title="Kerzenfarbe (1) Gruen", defval=close, group="Lochstreifen")
|
||||||
kerze_s = input.source(title="Kerzenfarbe (2) Schwarz", defval=close, group="Lochstreifen")
|
kerze_s = input.source(title="Kerzenfarbe (2) Schwarz", defval=close, group="Lochstreifen")
|
||||||
kerze_r = input.source(title="Kerzenfarbe (3) Rot", defval=close, group="Lochstreifen")
|
kerze_r = input.source(title="Kerzenfarbe (3) Rot", defval=close, group="Lochstreifen")
|
||||||
@@ -42,17 +37,13 @@ welle_g = input.source(title="Welle (1) grün", defval=close, group="Loch
|
|||||||
welle_gg = input.source(title="Welle (2) dunkelgrün", defval=close, group="Lochstreifen")
|
welle_gg = input.source(title="Welle (2) dunkelgrün", defval=close, group="Lochstreifen")
|
||||||
welle_r = input.source(title="Welle (4) Rot", defval=close, group="Lochstreifen")
|
welle_r = input.source(title="Welle (4) Rot", defval=close, group="Lochstreifen")
|
||||||
welle_rr = input.source(title="Welle (6) dunkelRot", defval=close, group="Lochstreifen")
|
welle_rr = input.source(title="Welle (6) dunkelRot", defval=close, group="Lochstreifen")
|
||||||
|
|
||||||
src1 = input.source(close, "Day OverBought 1", group="MSI")
|
src1 = input.source(close, "Day OverBought 1", group="MSI")
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Darstellung =========
|
||||||
// Darstellung
|
|
||||||
// -------------------------------------
|
|
||||||
label_offset_mult = input.float(1.5, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung")
|
label_offset_mult = input.float(1.5, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung")
|
||||||
|
show_price_labels = input.bool(true, "Preis-Textboxen an Blues-Linien anzeigen", group="Darstellung")
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Helper =========
|
||||||
// Helper / Ableitungen
|
|
||||||
// -------------------------------------
|
|
||||||
asBool(src) => nz(src) > 0
|
asBool(src) => nz(src) > 0
|
||||||
atr = ta.atr(16)
|
atr = ta.atr(16)
|
||||||
|
|
||||||
@@ -88,6 +79,7 @@ cz_r = asBool(kerze_r)
|
|||||||
baerische_welle = wl_rr or wl_r
|
baerische_welle = wl_rr or wl_r
|
||||||
bullische_welle = wl_gg or wl_g
|
bullische_welle = wl_gg or wl_g
|
||||||
|
|
||||||
|
// ========= Kernsignale =========
|
||||||
allRed = st_r and cz_r and wk_r and tr_r and set_r and baerische_welle
|
allRed = st_r and cz_r and wk_r and tr_r and set_r and baerische_welle
|
||||||
kerzeSG_l = st_r and (cz_s or cz_g) and wk_r and tr_r and set_r and baerische_welle
|
kerzeSG_l = st_r and (cz_s or cz_g) and wk_r and tr_r and set_r and baerische_welle
|
||||||
isPearlLong = kerzeSG_l and allRed[1] and allRed[2]
|
isPearlLong = kerzeSG_l and allRed[1] and allRed[2]
|
||||||
@@ -105,6 +97,7 @@ ulti_rally = hgr_long and (Kerze_in_wolke_gr > 0) and st_r and cz_r and set_r an
|
|||||||
is_bgrl = bgrl
|
is_bgrl = bgrl
|
||||||
is_rotes_plus = r_plus and wk_g
|
is_rotes_plus = r_plus and wk_g
|
||||||
|
|
||||||
|
// ========= Blues-Zonenpflege =========
|
||||||
g_active = wk_g
|
g_active = wk_g
|
||||||
r_active = wk_r
|
r_active = wk_r
|
||||||
|
|
||||||
@@ -113,9 +106,6 @@ f_rise(sig) =>
|
|||||||
cond_prev = na(sig[1]) or (sig[1] <= 0)
|
cond_prev = na(sig[1]) or (sig[1] <= 0)
|
||||||
cond_now and cond_prev
|
cond_now and cond_prev
|
||||||
|
|
||||||
// -------------------------------------
|
|
||||||
// Zonenpflege für grüne/rote Wolke (Blues-Logik)
|
|
||||||
// -------------------------------------
|
|
||||||
var int g_zoneStart = na
|
var int g_zoneStart = na
|
||||||
var float g_zoneHigh = na
|
var float g_zoneHigh = na
|
||||||
g_switch = barstate.isfirst ? true : (g_active != g_active[1])
|
g_switch = barstate.isfirst ? true : (g_active != g_active[1])
|
||||||
@@ -229,9 +219,7 @@ if end_short
|
|||||||
short_pending_active := false
|
short_pending_active := false
|
||||||
short_refLow := na
|
short_refLow := na
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Alerts: Standard =========
|
||||||
// Standard-Alertbedingungen
|
|
||||||
// -------------------------------------
|
|
||||||
alertcondition(isPearlLong, title="Pearl Long", message="Pearl Diver erkannt – {{ticker}} {{interval}}")
|
alertcondition(isPearlLong, title="Pearl Long", message="Pearl Diver erkannt – {{ticker}} {{interval}}")
|
||||||
alertcondition(isPearlShort, title="Pearl Short", message="Oyster Farmer erkannt – {{ticker}} {{interval}}")
|
alertcondition(isPearlShort, title="Pearl Short", message="Oyster Farmer erkannt – {{ticker}} {{interval}}")
|
||||||
alertcondition(ulti_rally, title="Ulti Rally", message="Ulti Rally erkannt – {{ticker}} {{interval}}")
|
alertcondition(ulti_rally, title="Ulti Rally", message="Ulti Rally erkannt – {{ticker}} {{interval}}")
|
||||||
@@ -248,11 +236,8 @@ alertcondition(ev_short_done, title="Blues: Ein Tief kommt noch (Erfüllt)",
|
|||||||
alertcondition(ev_long_break, title="Blues: Ein Hoch kommt noch (Wolkenbruch)", message="Blues Long INVALID (Cloud Break) – {{ticker}} {{interval}}")
|
alertcondition(ev_long_break, title="Blues: Ein Hoch kommt noch (Wolkenbruch)", message="Blues Long INVALID (Cloud Break) – {{ticker}} {{interval}}")
|
||||||
alertcondition(ev_short_break, title="Blues: Ein Tief kommt noch (Wolkenbruch)", message="Blues Short INVALID (Cloud Break) – {{ticker}} {{interval}}")
|
alertcondition(ev_short_break, title="Blues: Ein Tief kommt noch (Wolkenbruch)", message="Blues Short INVALID (Cloud Break) – {{ticker}} {{interval}}")
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Alert-Kombinator (UND/ODER) =========
|
||||||
// Alert-Kombinator (UND/ODER)
|
|
||||||
// -------------------------------------
|
|
||||||
grp = "ALERT-COMBO"
|
grp = "ALERT-COMBO"
|
||||||
|
|
||||||
optNone = "— (keins) —"
|
optNone = "— (keins) —"
|
||||||
optPearlLong = "Pearl Long"
|
optPearlLong = "Pearl Long"
|
||||||
optPearlShort = "Pearl Short"
|
optPearlShort = "Pearl Short"
|
||||||
@@ -315,62 +300,55 @@ comboCond = hasSelection ? (useOr ? anySel : allSel) : false
|
|||||||
|
|
||||||
alertcondition(comboCond, title="ALERT-COMBO (aus Eingaben)", message="ALERT-COMBO erfüllt – {{ticker}} {{interval}}")
|
alertcondition(comboCond, title="ALERT-COMBO (aus Eingaben)", message="ALERT-COMBO erfüllt – {{ticker}} {{interval}}")
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Telgos 2-Bar-Prime =========
|
||||||
// Telgos 2-Bar-Prime (Kerze 0 oder -1)
|
|
||||||
// -------------------------------------
|
|
||||||
grpTHP = "Telgos-Filter"
|
grpTHP = "Telgos-Filter"
|
||||||
require_since_start = input.bool(true, "2-Bar-Prime: Auslöser seit Blues-Start", group=grpTHP)
|
require_since_start = input.bool(true, "Ein Hoch/Tief kommt noch für Filter aktiv", group=grpTHP, tooltip="Wenn aktiviert: Nur Auslöser berücksichtigen, die seit Beginn des aktuellen 'Ein Hoch/Tief kommt noch' aufgetreten sind")
|
||||||
|
|
||||||
// Auslösermenge für 2-Bar-Prime
|
|
||||||
ausloeser_signal = isPearlLong or ulti_rally or stephan_setup or is_bgrl or is_rotes_plus
|
ausloeser_signal = isPearlLong or ulti_rally or stephan_setup or is_bgrl or is_rotes_plus
|
||||||
|
|
||||||
// Kerzenfenster: nur aktuelle Kerze (0) oder vorherige Kerze (-1)
|
|
||||||
trigger_now_or_prev = ausloeser_signal or (bar_index > 0 ? ausloeser_signal[1] : false)
|
trigger_now_or_prev = ausloeser_signal or (bar_index > 0 ? ausloeser_signal[1] : false)
|
||||||
|
|
||||||
// Optional: Der Auslöser muss seit Beginn der aktuellen Blues-Phase aufgetreten sein
|
|
||||||
since_start = ta.barssince(ev_long_start)
|
since_start = ta.barssince(ev_long_start)
|
||||||
since_trigger = ta.barssince(ausloeser_signal)
|
since_trigger = ta.barssince(ausloeser_signal)
|
||||||
cond_since_start = not na(since_start) and not na(since_trigger) and since_trigger <= since_start
|
cond_since_start = not na(since_start) and not na(since_trigger) and since_trigger <= since_start
|
||||||
|
|
||||||
// Finale Bedingung
|
|
||||||
telgos_2bar_prime_cond = long_pending_active and trigger_now_or_prev and (not require_since_start or cond_since_start)
|
telgos_2bar_prime_cond = long_pending_active and trigger_now_or_prev and (not require_since_start or cond_since_start)
|
||||||
|
|
||||||
// Ein eigener Alarmtitel/-text
|
|
||||||
alertcondition(telgos_2bar_prime_cond, title="Telgos 2-Bar-Prime", message="Telgos 2-Bar-Prime – {{ticker}} {{interval}}")
|
alertcondition(telgos_2bar_prime_cond, title="Telgos 2-Bar-Prime", message="Telgos 2-Bar-Prime – {{ticker}} {{interval}}")
|
||||||
|
|
||||||
// Preis-Textbox links vom Linienstart, exakt auf Linienhöhe (robust, kein Kreuz)
|
// ========= Preis-Textboxen an blauen Linien (Toggle) =========
|
||||||
var label priceLblLong = na
|
var label priceLblLong = na
|
||||||
var label priceLblShort = na
|
var label priceLblShort = na
|
||||||
|
|
||||||
// LONG – Text links vom Startpunkt der Long-Linie
|
if show_price_labels and long_pending_active and not na(longPendingLine)
|
||||||
if long_pending_active and not na(longPendingLine)
|
|
||||||
int lx1 = line.get_x1(longPendingLine)
|
int lx1 = line.get_x1(longPendingLine)
|
||||||
float ly1 = line.get_y1(longPendingLine)
|
float ly1 = line.get_y1(longPendingLine)
|
||||||
string tL = str.tostring(ly1, format.mintick)
|
string tL = str.tostring(ly1, format.mintick)
|
||||||
if na(priceLblLong)
|
if na(priceLblLong)
|
||||||
priceLblLong := label.new(lx1, ly1, tL, xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_right, textcolor=color.blue, color=color.new(color.white, 100), size=size.normal)
|
priceLblLong := label.new(lx1, ly1, tL, xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_right, textcolor=color.blue, color=color.new(color.white, 100), size=size.normal)
|
||||||
else
|
else
|
||||||
label.set_x(priceLblLong, lx1), label.set_y(priceLblLong, ly1), label.set_text(priceLblLong, tL)
|
label.set_x(priceLblLong, lx1)
|
||||||
|
label.set_y(priceLblLong, ly1)
|
||||||
|
label.set_text(priceLblLong, tL)
|
||||||
else
|
else
|
||||||
if not na(priceLblLong)
|
if not na(priceLblLong)
|
||||||
label.delete(priceLblLong), priceLblLong := na
|
label.delete(priceLblLong)
|
||||||
|
priceLblLong := na
|
||||||
|
|
||||||
// SHORT – Text links vom Startpunkt der Short-Linie
|
if show_price_labels and short_pending_active and not na(shortPendingLine)
|
||||||
if short_pending_active and not na(shortPendingLine)
|
|
||||||
int sx1 = line.get_x1(shortPendingLine)
|
int sx1 = line.get_x1(shortPendingLine)
|
||||||
float sy1 = line.get_y1(shortPendingLine)
|
float sy1 = line.get_y1(shortPendingLine)
|
||||||
string tS = str.tostring(sy1, format.mintick)
|
string tS = str.tostring(sy1, format.mintick)
|
||||||
if na(priceLblShort)
|
if na(priceLblShort)
|
||||||
priceLblShort := label.new(sx1, sy1, tS, xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_right, textcolor=color.blue, color=color.new(color.white, 100), size=size.normal)
|
priceLblShort := label.new(sx1, sy1, tS, xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_right, textcolor=color.blue, color=color.new(color.white, 100), size=size.normal)
|
||||||
else
|
else
|
||||||
label.set_x(priceLblShort, sx1), label.set_y(priceLblShort, sy1), label.set_text(priceLblShort, tS)
|
label.set_x(priceLblShort, sx1)
|
||||||
|
label.set_y(priceLblShort, sy1)
|
||||||
|
label.set_text(priceLblShort, tS)
|
||||||
else
|
else
|
||||||
if not na(priceLblShort)
|
if not na(priceLblShort)
|
||||||
label.delete(priceLblShort), priceLblShort := na
|
label.delete(priceLblShort)
|
||||||
|
priceLblShort := na
|
||||||
|
|
||||||
// -------------------------------------
|
// ========= Dezente Labels / Shapes =========
|
||||||
// Labels / Shapes (dezente Visualisierung)
|
|
||||||
// -------------------------------------
|
|
||||||
if isPearlLong
|
if isPearlLong
|
||||||
label.new(bar_index, low - atr * label_offset_mult, text="Pearl Diver", style=label.style_label_up, color=color.purple, textcolor=color.white, size=size.small)
|
label.new(bar_index, low - atr * label_offset_mult, text="Pearl Diver", style=label.style_label_up, color=color.purple, textcolor=color.white, size=size.small)
|
||||||
if isPearlShort
|
if isPearlShort
|
||||||
|
Reference in New Issue
Block a user