4 Commits

Author SHA1 Message Date
227ec7a73b Merge branch 'main' of ssh://git-telgos/Telgos/Croc_Vibes 2025-09-06 12:15:30 +02:00
8b4a556d41 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
2025-09-06 12:10:24 +02:00
d6adfe1ba6 docs/FAQ.md aktualisiert 2025-09-06 06:51:51 +00:00
b1be0e3cc2 Preis-Textboxen an blauen Linien hinzugefügt
Zeigt den exakten Preis der aktiven Blues-Linie (Long/Short) direkt links am Startpunkt der Linie an.
Verbessert die Lesbarkeit und verhindert Überschneidungen mit der Linie.
2025-09-06 08:48:58 +02:00
4 changed files with 118 additions and 80 deletions

View File

@@ -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

View File

@@ -1,5 +1,30 @@
# 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
### Added
- **Preis-Textboxen an blauen Linien**
- Zeigt den exakten Preis der aktiven Blues-Linie (Long/Short) im Chart an
- Darstellung: Groß & blau, Position links am Startpunkt der Linie
- Verhindert Überschneidung mit der Linie → bessere Lesbarkeit
---
## [4.1.0] 2025-09-05 ## [4.1.0] 2025-09-05
### Added ### Added
- **Telgos 2-Bar-Prime**: Neuer Spezial-Alarmfilter - **Telgos 2-Bar-Prime**: Neuer Spezial-Alarmfilter

View File

@@ -4,6 +4,20 @@ Dieses Projekt richtet sich **insbesondere an Anfänger** und erleichtert die Nu
Denn die immer wiederkehrenden Fragen kosten viel zu viel *unwiederbringliche Lebenszeit*. 😉 Denn die immer wiederkehrenden Fragen kosten viel zu viel *unwiederbringliche Lebenszeit*. 😉
---
### ❓ Warum kommen nach Börsenschluss keine Alarme mehr?
In **TradingView** basieren Alarme immer auf neuen Kursdaten.
Nach Börsenschluss liefert der Datenanbieter jedoch keine Ticks mehr dadurch entstehen keine neuen Kerzen und somit auch keine neuen Alarmauslöser.
🔎 **Wichtig zu wissen:**
- Das ist **kein Fehler im Script**, sondern Teil des TradingView-Designs.
- Alarme werden nur ausgelöst, wenn neue Kerzen oder Tick-Daten eintreffen.
- Nach Börsenschluss bleibt der Kurs stehen → keine neuen Signale.
- Sobald der Markt wieder öffnet, laufen deine Alarme automatisch weiter.
--- ---
### Wie richte ich den Telgos 2-Bar-Prime Alarmfilter ein? ### Wie richte ich den Telgos 2-Bar-Prime Alarmfilter ein?

View File

@@ -1,15 +1,12 @@
// ================================================================================================= // =================================================================================================
// Croc Vibes by Telgos Version 4.1.0 // 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,36 +20,30 @@ 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")
status_r = input.source(title="Status (2) Rot", defval=close, group="Lochstreifen") status_r = input.source(title="Status (2) Rot", defval=close, group="Lochstreifen")
status_g = input.source(title="Status (3) Grün", defval=close, group="Lochstreifen") status_g = input.source(title="Status (3) Grün", defval=close, group="Lochstreifen")
wolke_g = input.source(title="Wolke (1) Grün", defval=close, group="Lochstreifen") wolke_g = input.source(title="Wolke (1) Grün", defval=close, group="Lochstreifen")
wolke_r = input.source(title="Wolke (3) Rot", defval=close, group="Lochstreifen") wolke_r = input.source(title="Wolke (3) Rot", defval=close, group="Lochstreifen")
trend_s = input.source(title="Trend (1) Schwarz", defval=close, group="Lochstreifen") trend_s = input.source(title="Trend (1) Schwarz", defval=close, group="Lochstreifen")
trend_r = input.source(title="Trend (2) Rot", defval=close, group="Lochstreifen") trend_r = input.source(title="Trend (2) Rot", defval=close, group="Lochstreifen")
trend_g = input.source(title="Trend (3) Grün", defval=close, group="Lochstreifen") trend_g = input.source(title="Trend (3) Grün", defval=close, group="Lochstreifen")
setter_r = input.source(title="Setter (Trend 5) Rot", defval=close, group="Lochstreifen") setter_r = input.source(title="Setter (Trend 5) Rot", defval=close, group="Lochstreifen")
setter_g = input.source(title="Setter (Trend 6) grün", defval=close, group="Lochstreifen") setter_g = input.source(title="Setter (Trend 6) grün", defval=close, group="Lochstreifen")
welle_g = input.source(title="Welle (1) grün", defval=close, group="Lochstreifen") welle_g = input.source(title="Welle (1) grün", defval=close, group="Lochstreifen")
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,12 +79,13 @@ 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
allRed = st_r and cz_r and wk_r and tr_r and set_r and baerische_welle // ========= Kernsignale =========
kerzeSG_l = st_r and (cz_s or cz_g) 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
isPearlLong = kerzeSG_l and allRed[1] and allRed[2] 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]
allGreen = st_g and cz_g and wk_g and tr_g and set_g and bullische_welle allGreen = st_g and cz_g and wk_g and tr_g and set_g and bullische_welle
kerzeSG_s = st_g and (cz_s or cz_r) and wk_g and tr_g and set_g and bullische_welle kerzeSG_s = st_g and (cz_s or cz_r) and wk_g and tr_g and set_g and bullische_welle
isPearlShort = kerzeSG_s and allGreen[1] and allGreen[2] isPearlShort = kerzeSG_s and allGreen[1] and allGreen[2]
stephan_zusatzbedingung_erfuellt = cp_long or rd_long or lolli_long or bb_long or awr_long or bgrl or g_plus stephan_zusatzbedingung_erfuellt = cp_long or rd_long or lolli_long or bb_long or awr_long or bgrl or g_plus
@@ -102,9 +94,10 @@ stephan_setup = not na(src1) and wk_g and tr_s and set_r and stephan_zusatzbedin
Kerze_in_wolke_gr = close - wolke_Line_pink Kerze_in_wolke_gr = close - wolke_Line_pink
ulti_rally = hgr_long and (Kerze_in_wolke_gr > 0) and st_r and cz_r and set_r and not baerische_welle ulti_rally = hgr_long and (Kerze_in_wolke_gr > 0) and st_r and cz_r and set_r and not baerische_welle
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,16 +106,13 @@ 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])
if bar_index == 0 or g_switch if bar_index == 0 or g_switch
g_zoneStart := bar_index g_zoneStart := bar_index
g_zoneHigh := na g_zoneHigh := na
g_inZone = g_active and bar_index >= g_zoneStart g_inZone = g_active and bar_index >= g_zoneStart
g_zoneHigh_prev = g_zoneHigh g_zoneHigh_prev = g_zoneHigh
if g_inZone if g_inZone
if na(g_zoneHigh) or high > g_zoneHigh if na(g_zoneHigh) or high > g_zoneHigh
@@ -134,7 +124,7 @@ r_switch = barstate.isfirst ? true : (r_active != r_active[1])
if bar_index == 0 or r_switch if bar_index == 0 or r_switch
r_zoneStart := bar_index r_zoneStart := bar_index
r_zoneLow := na r_zoneLow := na
r_inZone = r_active and bar_index >= r_zoneStart r_inZone = r_active and bar_index >= r_zoneStart
r_zoneLow_prev = r_zoneLow r_zoneLow_prev = r_zoneLow
if r_inZone if r_inZone
if na(r_zoneLow) or low < r_zoneLow if na(r_zoneLow) or low < r_zoneLow
@@ -170,8 +160,8 @@ ev_short_break := false
if long_start_ok and not long_pending_active if long_start_ok and not long_pending_active
long_pending_active := true long_pending_active := true
long_refHigh := g_zoneHigh_prev long_refHigh := g_zoneHigh_prev
ev_long_start := true ev_long_start := true
if high < long_refHigh if high < long_refHigh
if not na(startLblLong) if not na(startLblLong)
label.delete(startLblLong) label.delete(startLblLong)
@@ -182,8 +172,8 @@ if long_start_ok and not long_pending_active
if short_start_ok and not short_pending_active if short_start_ok and not short_pending_active
short_pending_active := true short_pending_active := true
short_refLow := r_zoneLow_prev short_refLow := r_zoneLow_prev
ev_short_start := true ev_short_start := true
if low > short_refLow if low > short_refLow
if not na(startLblShort) if not na(startLblShort)
label.delete(startLblShort) label.delete(startLblShort)
@@ -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,18 +236,15 @@ 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" optUlti = "Ulti Rally"
optUlti = "Ulti Rally" optStephan = "Stephan Setup"
optStephan = "Stephan Setup" optBGRL = "BGRL"
optBGRL = "BGRL" optRotesPlus = "Rotes Kreuz (grüne Wolke)"
optRotesPlus = "Rotes Kreuz (grüne Wolke)"
optBlueLActive = "Blues: Ein Hoch kommt noch (aktiv)" optBlueLActive = "Blues: Ein Hoch kommt noch (aktiv)"
optBlueSActive = "Blues: Ein Tief kommt noch (aktiv)" optBlueSActive = "Blues: Ein Tief kommt noch (aktiv)"
@@ -303,7 +288,7 @@ s4 = sel4 != optNone
s5 = sel5 != optNone s5 = sel5 != optNone
anySel = (s1 ? c1 : false) or (s2 ? c2 : false) or (s3 ? c3 : false) or (s4 ? c4 : false) or (s5 ? c5 : false) anySel = (s1 ? c1 : false) or (s2 ? c2 : false) or (s3 ? c3 : false) or (s4 ? c4 : false) or (s5 ? c5 : false)
allSel = (s1 ? c1 : true ) and (s2 ? c2 : true ) and (s3 ? c3 : true ) and (s4 ? c4 : true ) and (s5 ? c5 : true ) allSel = (s1 ? c1 : true) and (s2 ? c2 : true) and (s3 ? c3 : true) and (s4 ? c4 : true) and (s5 ? c5 : true)
hasSelection = s1 or s2 or s3 or s4 or s5 hasSelection = s1 or s2 or s3 or s4 or s5
pickedBlueL = (sel1 == optBlueLActive) or (sel2 == optBlueLActive) or (sel3 == optBlueLActive) or (sel4 == optBlueLActive) or (sel5 == optBlueLActive) pickedBlueL = (sel1 == optBlueLActive) or (sel2 == optBlueLActive) or (sel3 == optBlueLActive) or (sel4 == optBlueLActive) or (sel5 == optBlueLActive)
@@ -315,33 +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)
since_start = ta.barssince(ev_long_start)
// Optional: Der Auslöser muss seit Beginn der aktuellen Blues-Phase aufgetreten sein
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-Textboxen an blauen Linien (Toggle) =========
// Labels / Shapes (dezente Visualisierung) var label priceLblLong = na
// ------------------------------------- var label priceLblShort = na
if show_price_labels and long_pending_active and not na(longPendingLine)
int lx1 = line.get_x1(longPendingLine)
float ly1 = line.get_y1(longPendingLine)
string tL = str.tostring(ly1, format.mintick)
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)
else
label.set_x(priceLblLong, lx1)
label.set_y(priceLblLong, ly1)
label.set_text(priceLblLong, tL)
else
if not na(priceLblLong)
label.delete(priceLblLong)
priceLblLong := na
if show_price_labels and short_pending_active and not na(shortPendingLine)
int sx1 = line.get_x1(shortPendingLine)
float sy1 = line.get_y1(shortPendingLine)
string tS = str.tostring(sy1, format.mintick)
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)
else
label.set_x(priceLblShort, sx1)
label.set_y(priceLblShort, sy1)
label.set_text(priceLblShort, tS)
else
if not na(priceLblShort)
label.delete(priceLblShort)
priceLblShort := na
// ========= Dezente Labels / Shapes =========
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