diff --git a/README.md b/README.md index a2eaa77..ab3e895 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ ---- - ![Croc Vibes Banner](./docs/img/croc_vibes_banner.png) --- @@ -14,7 +12,7 @@ **Croc Vibes** ist ein *temporäres Community-Hilfsskript*, insbesondere für **Anfänger**. Dieses Projekt **verfolgt keine wirtschaftlichen Interessen** – es ist ein **Beitrag von Telgos für die Community**. -Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Respository eingestellt. +Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Repository eingestellt. ![Communitycroc](./docs/img/e_community.png) @@ -22,11 +20,11 @@ Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Re ## 📌 Aktuelle Version -➡️ **[Croc Vibes v3.8.0 (Kombi-Version)](./indicators/croc_vibes_3.8.0.pine)** +➡️ **[Croc Vibes v3.9.0 (Kombi-Version)](./indicators/croc_vibes_3.9.0.pine)** -- Enthält die Blues-Integration (Start/Aktiv/Erfüllt/Wolkenbruch) -- Neue **Alert-Combo** (bis zu 5 Signale, UND/ODER, Auto-ODER bei beiden Blues) -- Screener/Backtest-Plots für aktive Blues +- Neu: **Input „Grünes Plus“** als `input.source` +- **Stephan-Setup** erweitert: „Grünes Plus“ ist **ODER**-verknüpft mit den bisherigen Zusatzbedingungen +- Beinhaltet weiterhin: **Blues-Integration**, **Alert‑Combo**, **Screener/Backtest‑Plots** 👉 Details zu allen Änderungen siehe [CHANGELOG.md](./docs/CHANGELOG.md) @@ -35,33 +33,27 @@ Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Re ## Community-Hilfsskript **Croc Vibes** ist ein *temporäres Community-Hilfsskript*. -Es wurde entwickelt, weil der Croc 3.0 nur eine begrenzte Anzahl an Labels ausgibt und wir Anfänger (bin auch erst seit Juli aktiv dabei) von ein paar zusätzlichen Labels profitieren. - -Da der Croc ständig weiterentwickelt wird, hoffen wir, dass in künftigen Versionen mehr Labels direkt enthalten sind und Croc Vibes nicht mehr benötigt wird. 🚀 +Es wurde entwickelt, weil der Croc 3.0 nur eine begrenzte Anzahl an Labels ausgibt und wir Anfänger von zusätzlichen Labels profitieren. --- ## Komponenten -Dieses Projekt besteht aus den folgenden Skripten: - | Script | Rolle | Pine | Status | |----------------|--------------------|------|--------| | Croc Vibes | Hauptindikator | v5 | keine Weiterentwicklung | | Blues Add-on | Blaue-Punkt-Addon | v6 | **deprecated** (ab v3.8.0 integriert) | -| Vibes + Blues | Kombi-Version | v6 | **Basis für Updates – v3.8.0** ✅ | +| Vibes + Blues | Kombi-Version | v6 | **Basis für Updates – v3.9.0** ✅ | * **[Croc Vibes (Hauptindikator)](./docs/Croc_Vibes_Beschreibung.md)** * **[Blues Add-on](./docs/Blues_Addon_Beschreibung.md)** *(deprecated)* * **[Vibes + Blues (Kombi-Version)](./docs/Vibes_Blues_Beschreibung.md)** ### Warum eine Kombi-Version? -TradingView erlaubt - je nach Lizenz - nur eine begrenzte Anzahl an gleichzeitig aktiven Indikatoren. +TradingView erlaubt – je nach Lizenz – nur eine begrenzte Anzahl an gleichzeitig aktiven Indikatoren. Damit Anwender nicht zwei Slots für Croc Vibes und das Blues Add-on opfern müssen, gibt es zusätzlich eine **Kombi-Version (Vibes + Blues)**. Diese bildet auch die **Basis für Weiterentwicklungen und Fehlerkorrekturen**. -> **Neu in v3.8.0:** Blues-Logik vollständig integriert (Start/Aktiv/Erfüllt/Wolkenbruch), konfigurierbare **Alert‑Combo** (bis zu 5 Signale, UND/ODER; Auto‑ODER bei beiden Blues), sowie **Screener‑Plots** für aktive Blues. - --- ## Installation @@ -69,7 +61,7 @@ Diese bildet auch die **Basis für Weiterentwicklungen und Fehlerkorrekturen**. 1. Öffne den gewünschten Indikator-Code im Ordner `indicators/`. 2. Kopiere den gesamten Code aus der Datei. 3. Öffne den **Pine-Editor** in deinem TradingView-Chart. -4. Füge den Code ein und klicke auf **"Zum Chart hinzufügen"**. +4. Füge den Code ein und klicke auf **„Zum Chart hinzufügen“**. 👉 Details und Stolpersteine siehe [Installation.md](./docs/Installation.md). @@ -78,10 +70,9 @@ Diese bildet auch die **Basis für Weiterentwicklungen und Fehlerkorrekturen**. ## FAQ 👉 Häufige Fragen findest du in der [FAQ.md](./docs/FAQ.md). -- Warum muss ich meine Variablen nach einem Update neu zuordnen? -- Warum kann Croc Vibes nicht im Pinescreener verwendet werden? +- Wie ordne ich die **input.source**-Signale korrekt zu (inkl. „Grünes Plus“)? - Wie funktioniert die **Alert‑Combo**? -- Wie ordne ich die **input.source**-Signale korrekt zu? +- Warum kann Croc Vibes nicht im Pinescreener verwendet werden? --- @@ -98,8 +89,6 @@ Dieses Video zeigt **nur Schritt 2 der Installation** – die **Zuweisung der in 📺 [Direkt im Browser ansehen](https://share.telgos.de/api/public/dl/6eo9V2cC?inline=true) ⬇️ [Download über Share-Link](https://share.telgos.de/share/6eo9V2cC) -*(Das Video liegt extern, damit das Repository schlank bleibt.)* - --- ## Hinweis zur Nutzung diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 9c56725..73117b0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [3.9.0] – 2025-09-01 +### Added +- **Input „Grünes Plus“** (`gruenes_plus`) als `input.source` +- **Stephan-Setup**: „Grünes Plus“ als zusätzliche **ODER**-verknüpfte Zusatzbedingung + +### Changed +- README & Doku auf v3.9.0 aktualisiert (Aktuelle Version, Komponenten-Tabelle, FAQ-Hinweis) + +### Fixed +- Kleinere Formulierungen in README vereinheitlicht + ## [3.8.0] – 2025-08-24 ### Added - Blues-Integration im Hauptindikator (Start, Aktiv, Erfüllt, Wolkenbruch) inkl. Alerts diff --git a/indicators/croc_vibes_3.9.0.pine b/indicators/croc_vibes_3.9.0.pine new file mode 100644 index 0000000..03d30f5 --- /dev/null +++ b/indicators/croc_vibes_3.9.0.pine @@ -0,0 +1,318 @@ +// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ + +// CrocVibes by Telgos +// Danke für die Grundlagen und Basisversion: amper04, ray_duke, husky, Audidriver13│ + + +//@version=6 +indicator("Croc Vibes V3.9.0 by Telgos", overlay=true, max_labels_count=500, max_lines_count=500) + +wolke_Line_rot = input.source(title="Wolke Linie Pink", defval=close, group="Chart-Signale") +blauer_punkt_long = input.source(title="Blauer Punkt Long", defval=close, group="Chart-Signale") +blauer_punkt_short = input.source(title="Blauer Punkt Short", defval=close, group="Chart-Signale") +hellgruener_punkt_long = input.source(title="Hellgruener 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") +bb_kombi_long = input.source(title="BB Kombi long", defval=close, group="Chart-Signale") +lollipop_long = input.source(title="Lollipop 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") +rotes_plus = input.source(title="Rotes Plus", defval=close, group="Chart-Signale") +gruenes_plus = input.source(title="Grünes Plus", defval=close, group="Chart-Signale") + +status_g = input.source(title="Status (1) Grün", defval=close, group="Lochstreifen") +status_r = input.source(title="Status (2) Rot", 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") +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_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_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_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_rr = input.source(title="Welle (6) dunkelRot", 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_r = input.source(title="Kerzenfarbe (3) Rot", defval=close, group="Lochstreifen") + +src1 = input.source(close, "Day OverBought 1", group="MSI") + +label_offset_mult = input.float(3.0, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung") + +asBool(src) => nz(src) > 0 +atr = ta.atr(16) + +b_long = asBool(blauer_punkt_long) +b_short = asBool(blauer_punkt_short) +hgr_long = asBool(hellgruener_punkt_long) +cp_long = asBool(cloud_punkt_long) +rd_long = asBool(red_devil_long) +bb_long = asBool(bb_kombi_long) +lolli_long = asBool(lollipop_long) +awr_long = asBool(aw_rocket_long) +bgrl = asBool(bgrl_signal) +r_plus = asBool(rotes_plus) +g_plus = asBool(gruenes_plus) + +st_g = asBool(status_g) +st_r = asBool(status_r) +wk_g = asBool(wolke_g) +wk_r = asBool(wolke_r) +tr_s = asBool(trend_s) +tr_r = asBool(trend_r) +tr_g = asBool(trend_g) +set_r = asBool(setter_r) +set_g = asBool(setter_g) +wl_g = asBool(welle_g) +wl_gg = asBool(welle_gg) +wl_r = asBool(welle_r) +wl_rr = asBool(welle_rr) +cz_g = asBool(kerze_g) +cz_s = asBool(kerze_s) +cz_r = asBool(kerze_r) + +baerische_welle = wl_rr or wl_r +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 +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 +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] + +stephan_zusatzbedingung_erfuellt = cp_long or rd_long or lolli_long or bb_long or awr_long or bgrl or g_plus +stephan_setup = not na(src1) and wk_g and tr_s and set_r and stephan_zusatzbedingung_erfuellt + +Kerze_in_wolke_gr = close - wolke_Line_rot +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_rotes_plus = r_plus and wk_g + +g_active = wk_g +r_active = wk_r + +f_rise(sig) => + cond_now = (not na(sig)) and (sig > 0) + cond_prev = na(sig[1]) or (sig[1] <= 0) + cond_now and cond_prev + +var int g_zoneStart = na +var float g_zoneHigh = na +g_switch = barstate.isfirst ? true : (g_active != g_active[1]) +if bar_index == 0 or g_switch + g_zoneStart := bar_index + g_zoneHigh := na +g_inZone = g_active and bar_index >= g_zoneStart +g_zoneHigh_prev = g_zoneHigh +if g_inZone + if na(g_zoneHigh) or high > g_zoneHigh + g_zoneHigh := high + +var int r_zoneStart = na +var float r_zoneLow = na +r_switch = barstate.isfirst ? true : (r_active != r_active[1]) +if bar_index == 0 or r_switch + r_zoneStart := bar_index + r_zoneLow := na +r_inZone = r_active and bar_index >= r_zoneStart +r_zoneLow_prev = r_zoneLow +if r_inZone + if na(r_zoneLow) or low < r_zoneLow + r_zoneLow := low + +long_blue_now = g_inZone and f_rise(blauer_punkt_short) +short_blue_now = r_inZone and f_rise(blauer_punkt_long) +long_start_ok = long_blue_now and not na(g_zoneHigh_prev) +short_start_ok = short_blue_now and not na(r_zoneLow_prev) + +var bool long_pending_active = false +var float long_refHigh = na +var label startLblLong = na +var line longPendingLine = na + +var bool short_pending_active = false +var float short_refLow = na +var label startLblShort = na +var line shortPendingLine = na + +var bool ev_long_start = false +var bool ev_short_start = false +var bool ev_long_done = false +var bool ev_short_done = false +var bool ev_long_break = false +var bool ev_short_break = false +ev_long_start := false +ev_short_start := false +ev_long_done := false +ev_short_done := false +ev_long_break := false +ev_short_break := false + +if long_start_ok and not long_pending_active + long_pending_active := true + long_refHigh := g_zoneHigh_prev + ev_long_start := true + if high < long_refHigh + if not na(startLblLong) + label.delete(startLblLong) + startLblLong := label.new(bar_index, high + atr * label_offset_mult, "Ein Hoch kommt noch", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_down, color=color.blue, textcolor=color.white, size=size.small) + if not na(longPendingLine) + line.delete(longPendingLine) + longPendingLine := line.new(bar_index, long_refHigh, bar_index + 1, long_refHigh, xloc=xloc.bar_index, extend=extend.right, color=color.blue, width=2) + +if short_start_ok and not short_pending_active + short_pending_active := true + short_refLow := r_zoneLow_prev + ev_short_start := true + if low > short_refLow + if not na(startLblShort) + label.delete(startLblShort) + startLblShort := label.new(bar_index, low - atr * label_offset_mult, "Ein Tief kommt noch", xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_up, color=color.blue, textcolor=color.white, size=size.small) + if not na(shortPendingLine) + line.delete(shortPendingLine) + shortPendingLine := line.new(bar_index, short_refLow, bar_index + 1, short_refLow, xloc=xloc.bar_index, extend=extend.right, color=color.blue, width=2) + +long_fulfilled_now = long_pending_active and high >= long_refHigh +short_fulfilled_now = short_pending_active and low <= short_refLow +long_cloud_break = long_pending_active and not g_active +short_cloud_break = short_pending_active and not r_active + +if long_fulfilled_now + ev_long_done := true +if short_fulfilled_now + ev_short_done := true +if long_cloud_break + ev_long_break := true +if short_cloud_break + ev_short_break := true + +end_long = long_pending_active and (long_fulfilled_now or long_cloud_break) +end_short = short_pending_active and (short_fulfilled_now or short_cloud_break) + +if end_long + if not na(startLblLong) + label.delete(startLblLong) + startLblLong := na + if not na(longPendingLine) + line.delete(longPendingLine) + longPendingLine := na + long_pending_active := false + long_refHigh := na + +if end_short + if not na(startLblShort) + label.delete(startLblShort) + startLblShort := na + if not na(shortPendingLine) + line.delete(shortPendingLine) + shortPendingLine := na + short_pending_active := false + short_refLow := na + +alertcondition(isPearlLong, title="Pearl Long", message="Pearl Diver 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(stephan_setup,title="Stephan Setup", message="Stephan Setup erkannt – {{ticker}} {{interval}}") +alertcondition(is_bgrl, title="BGRL", message="Black Green Rocket Long erkannt – {{ticker}} {{interval}}") +alertcondition(is_rotes_plus,title="Rotes Kreuz bei grüner Wolke", message="Rotes Kreuz erkannt – {{ticker}} {{interval}}") + +alertcondition(long_pending_active, title="Blues: Ein Hoch kommt noch (aktiv)", message="Blues Long aktiv – {{ticker}} {{interval}}") +alertcondition(short_pending_active, title="Blues: Ein Tief kommt noch (aktiv)", message="Blues Short aktiv – {{ticker}} {{interval}}") +alertcondition(ev_long_start, title="Blues: Ein Hoch kommt noch (Start)", message="Blues Long START – {{ticker}} {{interval}}") +alertcondition(ev_short_start, title="Blues: Ein Tief kommt noch (Start)", message="Blues Short START – {{ticker}} {{interval}}") +alertcondition(ev_long_done, title="Blues: Ein Hoch kommt noch (Erfüllt)", message="Blues Long FULFILLED – {{ticker}} {{interval}}") +alertcondition(ev_short_done, title="Blues: Ein Tief kommt noch (Erfüllt)", message="Blues Short FULFILLED – {{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}}") + +grp = "ALERT-COMBO" + +optNone = "— (keins) —" +optPearlLong = "Pearl Long" +optPearlShort = "Pearl Short" +optUlti = "Ulti Rally" +optStephan = "Stephan Setup" +optBGRL = "BGRL" +optRotesPlus = "Rotes Kreuz (grüne Wolke)" +optBlueLActive = "Blues: Ein Hoch kommt noch (aktiv)" +optBlueSActive = "Blues: Ein Tief kommt noch (aktiv)" + +sel1 = input.string(optNone, "Signal-Auswahl 1", options=["— (keins) —","Pearl Long","Pearl Short","Ulti Rally","Stephan Setup","BGRL","Rotes Kreuz (grüne Wolke)","Blues: Ein Hoch kommt noch (aktiv)","Blues: Ein Tief kommt noch (aktiv)"], group=grp) +sel2 = input.string(optNone, "Signal-Auswahl 2", options=["— (keins) —","Pearl Long","Pearl Short","Ulti Rally","Stephan Setup","BGRL","Rotes Kreuz (grüne Wolke)","Blues: Ein Hoch kommt noch (aktiv)","Blues: Ein Tief kommt noch (aktiv)"], group=grp) +sel3 = input.string(optNone, "Signal-Auswahl 3", options=["— (keins) —","Pearl Long","Pearl Short","Ulti Rally","Stephan Setup","BGRL","Rotes Kreuz (grüne Wolke)","Blues: Ein Hoch kommt noch (aktiv)","Blues: Ein Tief kommt noch (aktiv)"], group=grp) +sel4 = input.string(optNone, "Signal-Auswahl 4", options=["— (keins) —","Pearl Long","Pearl Short","Ulti Rally","Stephan Setup","BGRL","Rotes Kreuz (grüne Wolke)","Blues: Ein Hoch kommt noch (aktiv)","Blues: Ein Tief kommt noch (aktiv)"], group=grp) +sel5 = input.string(optNone, "Signal-Auswahl 5", options=["— (keins) —","Pearl Long","Pearl Short","Ulti Rally","Stephan Setup","BGRL","Rotes Kreuz (grüne Wolke)","Blues: Ein Hoch kommt noch (aktiv)","Blues: Ein Tief kommt noch (aktiv)"], group=grp) +noCombine = input.bool(false, "Signale nicht kombinieren", group=grp, tooltip="Aus: Alle ausgewählten Signale müssen gleichzeitig zutreffen (UND). Ein: Irgendeins reicht (ODER).") + +f_pick(name) => + bool res = false + if name == optPearlLong + res := isPearlLong + else if name == optPearlShort + res := isPearlShort + else if name == optUlti + res := ulti_rally + else if name == optStephan + res := stephan_setup + else if name == optBGRL + res := is_bgrl + else if name == optRotesPlus + res := is_rotes_plus + else if name == optBlueLActive + res := long_pending_active + else if name == optBlueSActive + res := short_pending_active + res + +c1 = f_pick(sel1) +c2 = f_pick(sel2) +c3 = f_pick(sel3) +c4 = f_pick(sel4) +c5 = f_pick(sel5) + +s1 = sel1 != optNone +s2 = sel2 != optNone +s3 = sel3 != optNone +s4 = sel4 != optNone +s5 = sel5 != optNone + +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 ) +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) +pickedBlueS = (sel1 == optBlueSActive) or (sel2 == optBlueSActive) or (sel3 == optBlueSActive) or (sel4 == optBlueSActive) or (sel5 == optBlueSActive) +bothBluesSelected = pickedBlueL and pickedBlueS + +useOr = noCombine or bothBluesSelected +comboCond = hasSelection ? (useOr ? anySel : allSel) : false + +alertcondition(comboCond, title="ALERT-COMBO (aus Eingaben)", message="ALERT-COMBO erfüllt – {{ticker}} {{interval}}") + +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) +if isPearlShort + label.new(bar_index, high + atr * label_offset_mult, text="Oyster Farmer", style=label.style_label_down, color=color.purple, textcolor=color.white, size=size.small) +if ulti_rally + label.new(bar_index, low - atr * label_offset_mult, text="Ulti", style=label.style_label_up, color=color.aqua, textcolor=color.white, size=size.small) +if stephan_setup + label.new(bar_index, low - atr * label_offset_mult, text="Stephan", style=label.style_label_up, color=color.teal, textcolor=color.white, size=size.small) +if is_bgrl + label.new(bar_index, low - atr * label_offset_mult, text="BGRL", style=label.style_label_up, color=color.gray, textcolor=color.white, size=size.small) +if is_rotes_plus + label.new(bar_index, high + atr * label_offset_mult, text="Rotes Kreuz", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small) + +plotshape(isPearlLong, title="Pearl Long", location=location.abovebar, color=color.new(color.purple, 100), style=shape.labelup, size=size.tiny) +plotshape(isPearlShort, title="Pearl Short", location=location.belowbar, color=color.new(color.purple, 100), style=shape.labeldown, size=size.tiny) +plotshape(ulti_rally, title="Ulti Rally", location=location.abovebar, color=color.new(color.aqua, 100), style=shape.diamond, size=size.tiny) +plotshape(stephan_setup, title="Stephan Setup", location=location.abovebar, color=color.new(color.teal, 100), style=shape.labelup, size=size.tiny) +plotshape(is_bgrl, title="BGRL", location=location.abovebar, color=color.new(color.gray, 100), style=shape.triangleup, size=size.tiny) +plotshape(is_rotes_plus, title="Rotes Kreuz", location=location.belowbar, color=color.new(color.red, 100), style=shape.labeldown, size=size.tiny) + +plotshape(long_pending_active, title="Ein Hoch kommt noch", location=location.abovebar, color=color.new(color.blue, 100), style=shape.circle, size=size.tiny) +plotshape(short_pending_active, title="Ein Tief kommt noch", location=location.belowbar, color=color.new(color.blue, 100), style=shape.circle, size=size.tiny)