diff --git a/README.md b/README.md index ab3e895..0d539c4 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ ⚠️ **Wichtiger Hinweis** ⚠️ -**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**. +**Croc Vibes** ist ein *Community-Hilfsskript*. +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 Repository eingestellt. ![Communitycroc](./docs/img/e_community.png) @@ -20,11 +20,7 @@ Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Re ## 📌 Aktuelle Version -➡️ **[Croc Vibes v3.9.0 (Kombi-Version)](./indicators/croc_vibes_3.9.0.pine)** - -- 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** +➡️ **[Croc Vibes v4.0.0](./indicators/croc_vibes.pine)** ✅ 👉 Details zu allen Änderungen siehe [CHANGELOG.md](./docs/CHANGELOG.md) @@ -32,69 +28,62 @@ 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 von zusätzlichen Labels profitieren. +**Croc Vibes** wurde entwickelt, weil der Croc 3.0 nur eine begrenzte Anzahl an Labels ausgibt. +Gerade Anfänger profitieren von zusätzlichen Labels und klareren Signalzuweisungen. --- -## Komponenten +## Komponenten (ab v4.0.0) -| 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.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. -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**. +Nur noch das zentrale Skript `croc_vibes.pine` wird gepflegt. --- ## Installation -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“**. +1. Lade die Datei [`croc_vibes.pine`](./indicators/croc_vibes.pine). +2. Öffne den **Pine-Editor** in deinem TradingView-Chart. +3. Füge den Code ein und klicke auf **„Zum Chart hinzufügen“**. +4. **Inputs zuweisen** – Reihenfolge (oben → unten): -👉 Details und Stolpersteine siehe [Installation.md](./docs/Installation.md). + 1. Wolke Linie Pink + 2. Cloud Punkt Long + 3. **Status Grün** ← **wichtig (Fix ab v4.0.0)** + 4. Red Devil Long + 5. Hellgrüner Punkt Long + 6. Blauer Punkt Long + 7. Grünes Plus + 8. Lollipop Long + 9. AW-Rocket Long + 10. Black Green Rocket Long + 11. … (weitere Quellen in derselben Panel-Reihenfolge) + +👉 Details siehe [Installation.md](./docs/Installation.md). --- ## FAQ 👉 Häufige Fragen findest du in der [FAQ.md](./docs/FAQ.md). -- Wie ordne ich die **input.source**-Signale korrekt zu (inkl. „Grünes Plus“)? -- Wie funktioniert die **Alert‑Combo**? + +Beispiel: +- **Welche Croc-Indikatoren müssen laufen?** + → Nur **Croc Chart**, **Croc Lochstreifen** und **Croc MSI** (daraus stammen die benötigten Variablen). +- Wie funktioniert die **Alert-Combo**? - Warum kann Croc Vibes nicht im Pinescreener verwendet werden? --- ## Beispiel -![Beispiel: Croc Vibes mit Blues Add-on](./docs/img/croc_vibes_example.png) - ---- - -## Video-Anleitung (Schritt 2: Variablen zuweisen) - -Dieses Video zeigt **nur Schritt 2 der Installation** – die **Zuweisung der input.source-Variablen**. - -📺 [Direkt im Browser ansehen](https://share.telgos.de/api/public/dl/6eo9V2cC?inline=true) -⬇️ [Download über Share-Link](https://share.telgos.de/share/6eo9V2cC) +![Beispiel: Croc Vibes mit Blues](./docs/img/croc_vibes_example.png) --- ## Hinweis zur Nutzung Croc Vibes ist ein Community-Hilfsskript und nicht offiziell von André. -Es gibt keinen Anspruch auf Vollständigkeit oder Support – jeder nutzt den Code auf eigene Verantwortung. +Es gibt keinen Anspruch auf Vollständigkeit oder Support – Nutzung erfolgt auf eigene Verantwortung. --- diff --git a/docs/Blues_Addon_Beschreibung.md b/docs/Blues_Addon_Beschreibung.md deleted file mode 100644 index 61fc487..0000000 --- a/docs/Blues_Addon_Beschreibung.md +++ /dev/null @@ -1,7 +0,0 @@ -# Blues Add-on -Dieses Projekt richtet sich **insbesondere an Anfänger** und erleichtert die Nutzung durch zusätzliche Labels, Alerts und eine Speziallogik für offene Blaue. - - -> ⚠️ **Hinweis (deprecated ab v3.8.0):** -> Das Blues-Add-on ist ab Version **3.8.0** vollständig im Hauptindikator integriert und wird nicht mehr separat weiterentwickelt. -> Bitte die **Kombi-Version (Vibes + Blues)** verwenden. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 73117b0..dc4e82d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,25 +1,39 @@ # Changelog +## [4.0.0] – 2025-09-02 +### Changed +- **Signalzuweisung korrigiert:** „Status Grün“ ist jetzt der **3. Parameter von oben** +- **Reihenfolge der Signal-Zuweisungen verbessert** → entspricht jetzt der Overlay-Darstellung (oben → unten) +- **Dokumentation aktualisiert:** Installation & Beschreibung angepasst; alte Skript-Beschreibungen bleiben im Docs-Ordner, aber nur als Referenz + +### Removed +- **Alte Pine-Skripte entfernt:** `croc_vibes_3.8.0.pine`, `croc_vibes_3.9.0.pine`, `croc_vibes+blues.pine`, `blues_addon.pine` +- Ab sofort nur noch ein zentrales Skript: `indicators/croc_vibes.pine` + +--- + ## [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 +- **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) +- README & Doku auf v3.9.0 aktualisiert (Aktuelle Version, Komponenten-Tabelle, FAQ-Hinweis) ### Fixed -- Kleinere Formulierungen in README vereinheitlicht +- Kleinere Formulierungen in README vereinheitlicht + +--- ## [3.8.0] – 2025-08-24 ### Added -- Blues-Integration im Hauptindikator (Start, Aktiv, Erfüllt, Wolkenbruch) inkl. Alerts -- Alert-Combo (bis zu 5 Signale; UND/ODER; Auto‑ODER bei beiden Blues) -- Screener/Backtest-Plots für „Blues aktiv“ +- Blues-Integration im Hauptindikator (Start, Aktiv, Erfüllt, Wolkenbruch) inkl. Alerts +- Alert-Combo (bis zu 5 Signale; UND/ODER; Auto-ODER bei beiden Blues) +- Screener/Backtest-Plots für „Blues aktiv“ ### Changed -- Einheitliche Labelgrößen -- Dokumentation aktualisiert (README, FAQ, Installation) +- Einheitliche Labelgrößen +- Dokumentation aktualisiert (README, FAQ, Installation) ### Deprecated -- Separates Blues-Add-on (`blues_addon.pine`) – bitte Kombi-Version nutzen +- Separates Blues-Add-on (`blues_addon.pine`) – bitte Kombi-Version nutzen diff --git a/docs/Croc_Vibes_Beschreibung.md b/docs/Croc_Vibes_Beschreibung.md deleted file mode 100644 index 527856a..0000000 --- a/docs/Croc_Vibes_Beschreibung.md +++ /dev/null @@ -1,30 +0,0 @@ - -# Croc Vibes – Beschreibung (v3.8.0, Pine v6) -Dieses Projekt richtet sich **insbesondere an Anfänger** und erleichtert die Nutzung durch zusätzliche Labels, Alerts und eine Speziallogik für offene Blaue. - - -## Überblick -**Croc Vibes** ist ein Community-Script zum Croc-Trading-System. -Ab **v3.8.0** ist die **Blues-Logik** vollständig integriert (inkl. Alerts), zusätzlich gibt es eine **Alert‑Combo** und **Screener‑Plots**. - -## Kernfunktionen -- Pearl Diver, Ulti Rally, Stephan Setup, BGRL, Rotes Kreuz -- **Blues-Logik mit Referenzlinie** („Ein Hoch/Tief kommt noch“) - - Zustände: **Start**, **Aktiv**, **Erfüllt**, **Wolkenbruch** - - Linien werden bis zur Erfüllung/Invalidierung rechts fortgeführt -- **Alert‑Combo Panel**: bis zu **5** Signale frei kombinierbar - - UND/ODER schaltbar; **Auto‑ODER**, wenn beide Blues (Long & Short) gewählt sind -- **Screener/Backtest-Shapes** für „Blues aktiv“ (Long/Short) - -## Hinweise zu Blues -- „**Ein Hoch kommt noch**“ wird **nur in grüner Wolke** markiert. -- „**Ein Tief kommt noch**“ wird **nur in roter Wolke** markiert. - -## Alerts (Auswahl) -- Pearl Long, Pearl Short, Ulti, Stephan, BGRL, Rotes Kreuz -- Blues: **Start**, **Aktiv**, **Erfüllt**, **Wolkenbruch** -- **Alert‑Combo**: eigene Auswahl aus bis zu 5 Signalen (UND/ODER) - -## Display -- Einheitliche Labelgrößen (size: `small`) -- Zusätzliche `plotshape` für aktive Blues (Screener-Kompatibilität) diff --git a/docs/FAQ.md b/docs/FAQ.md index 1cd8b5d..679cbcc 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -53,3 +53,15 @@ Das hängt von der Anzahl der gleichzeitig laufenden Indikatoren ab: - Falls du viele zusätzliche Indikatoren/Setups einbindest, kann ein höherer Plan sinnvoll sein (mehr gleichzeitige Indikatoren-Slots). 👉 Es geht also **nicht** darum, dass Pine Script nur in der „Professional-Version“ funktioniert – Pine läuft in allen TV-Plänen. Entscheidend ist die maximale Zahl an Indikatoren, die dein Abo erlaubt. + +--- + +## Muss ich alle Croc-Indikatoren aktiv haben, damit Croc Vibes funktioniert? + +Für Croc Vibes v4.0.0 brauchst du die drei Kern-Indikatoren: + +- **Croc Chart** +- **Croc Lochstreifen** +- **Croc MSI** + +Genau aus diesen Indis kommen die Variablen, die das Script benötigt. \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md index ab36066..84261d7 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -1,31 +1,54 @@ # Installation -Dieses Projekt richtet sich **insbesondere an Anfänger** und erleichtert die Nutzung durch zusätzliche Labels, Alerts und eine Speziallogik für offene Blaue. - ## Dateien `indicators/` – Pine Scripts -- `croc_vibes.pine` (v5, historische Basis) -- `blues_addon.pine` (v6) **deprecated (ab v3.8.0 integriert)** -- `croc_vibes_3.8.0.pine` (v6) **Kombi-Version – Basis für Updates** ✅ +- `croc_vibes.pine` (v4.0.0, aktuelles Hauptskript) ✅ + +Alle anderen Skripte (Blues Add-on, Kombi-Version etc.) wurden entfernt. +Die Beschreibungen dazu sind noch in den [Docs](./) enthalten, gelten aber nur als Referenz. + +--- ## Schritt 1: Script kopieren -- Datei im Ordner `indicators/` öffnen -- gesamten Inhalt kopieren -- in TradingView → **Pine-Editor** einfügen → **Zum Chart hinzufügen** +1. Öffne die Datei `indicators/croc_vibes.pine`. +2. Kopiere den gesamten Inhalt. +3. In TradingView → **Pine-Editor** einfügen → **Zum Chart hinzufügen**. + +--- ## Schritt 2: Variablen zuweisen (input.source) -- In den „**Eingaben**“ alle benötigten Quellen zuordnen (Croc/Lochstreifen etc.). -- **Tipp:** Die Zahlen in den Eingaben entsprechen der **Reihenfolge von oben** (z. B. Kerzenfarbe 1 = Grün, 2 = Schwarz, 3 = Rot). -- 📺 Video zu Schritt 2: siehe README. +- In den „**Eingaben**“ alle benötigten Quellen (Croc/Lochstreifen/MSI) zuordnen. +- Die Reihenfolge ist ab v4.0.0 **verbessert** und entspricht jetzt der visuellen Darstellung im Overlay: -> **Wichtig:** TradingView setzt die `input.source`-Zuweisungen nach Code-Updates zurück (Plattform-Verhalten „by design“). Danach bitte neu zuordnen. + 1. Wolke Linie Pink + 2. Cloud Punkt Long + 3. **Status Grün** ← **wichtig (Fix ab v4.0.0)** + 4. Red Devil Long + 5. Hellgrüner Punkt Long + 6. Blauer Punkt Long + 7. Grünes Plus + 8. Lollipop Long + 9. AW-Rocket Long + 10. Black Green Rocket Long + 11. … (weitere in derselben Reihenfolge, wie im Panel angezeigt) -## Schritt 3: Alert‑Combo konfigurieren (neu ab v3.8.0) -Im Reiter **Eingaben** findest du den Bereich **ALERT‑COMBO**: -1. Wähle bis zu **5** Signale (z. B. „Pearl Long“, „Blues: Ein Hoch kommt noch (aktiv)“). -2. **UND/ODER**: Häkchen „Signale nicht kombinieren“ aktiv = **ODER**, sonst **UND**. -3. Wenn **beide Blues** (Long & Short) gewählt werden, erzwingt der Indikator automatisch **ODER**. +> ⚠️ **Hinweis:** TradingView setzt `input.source`-Zuweisungen nach Code-Updates zurück („by design“). Danach bitte **neu zuordnen**. + +--- + +## Schritt 3: Alert-Combo konfigurieren +Im Reiter **Eingaben** findest du den Bereich **ALERT-COMBO**: +1. Wähle bis zu **5 Signale** (z. B. „Pearl Long“, „Blues: Ein Hoch kommt noch (aktiv)“). +2. **UND/ODER**: Häkchen „Signale nicht kombinieren“ aktiv = **ODER**, sonst **UND**. +3. Wenn **beide Blues** (Long & Short) gewählt sind, erzwingt der Indikator automatisch **ODER**. + +--- ## Schritt 4: TradingView-Alerts anlegen -- Rechtsklick im Chart → **Alarm hinzufügen** → gewünschten Indikator/Alert wählen. -- Für Blues existieren dedizierte Alerts: **Start**, **Aktiv**, **Erfüllt**, **Wolkenbruch**. +- Rechtsklick im Chart → **Alarm hinzufügen** → gewünschten Indikator/Alert auswählen. +- Für Blues existieren eigene Alerts: **Start**, **Aktiv**, **Erfüllt**, **Wolkenbruch**. + +--- + +## Optionales Video +Eine kurze Videoanleitung zur Variablenzuweisung findest du im [README](../README.md). diff --git a/docs/Vibes_Blues_Beschreibung.md b/docs/Vibes_Blues_Beschreibung.md deleted file mode 100644 index c6140b7..0000000 --- a/docs/Vibes_Blues_Beschreibung.md +++ /dev/null @@ -1,45 +0,0 @@ -# Vibes + Blues (Kombi-Version) - -Die **Kombi-Version** fasst den Hauptindikator *Croc Vibes* und das *Blues Add-on* in einem einzigen Script zusammen. - ---- - -## Hintergrund - -TradingView erlaubt nur eine begrenzte Anzahl an gleichzeitig aktiven Indikatoren. -Damit nicht zwei Slots für Croc Vibes und das Blues Add-on belegt werden, wurde eine kombinierte Version erstellt. - ---- - -## Inhalt - -Die Kombi-Version enthält: -- Alle Funktionen des Hauptindikators **Croc Vibes** -- Alle Funktionen des **Blues Add-ons** - -Da das Blues Add-on in **Pine v6** geschrieben ist, basiert auch die Kombi-Version technisch auf Pine v6. -Diese Kombi-Version bildet künftig die **Basis für Weiterentwicklungen und Fehlerkorrekturen**, da es sonst zu aufwendig wäre, mehrere parallele Varianten zu pflegen. - ---- - -## Beispiel - -![Beispiel: Vibes + Blues Kombi](./img/croc_vibes_example.png) - ---- - -## Installation - -1. Öffne den Code der Kombi-Version. -2. Kopiere den gesamten Code. -3. Öffne den **Pine-Editor** in deinem TradingView-Chart. -4. Füge den Code ein und klicke auf **"Zum Chart hinzufügen"**. - ---- - -## Hinweis - -Die Kombi-Version wird nur gepflegt, solange die Indikatoren-Limitierung in TradingView ein Thema ist. -Sollte André im Croc 3.0 selbst mehr Label- und Signaloptionen integrieren, ist diese Variante möglicherweise nicht mehr notwendig. 🚀 - -**Wichtiger Hinweis:** Dieses Skript wird ohne Support bereitgestellt. Jeder nutzt den Code auf eigene Verantwortung. diff --git a/indicators/blues_addon.pine b/indicators/blues_addon.pine deleted file mode 100644 index 26a4b79..0000000 --- a/indicators/blues_addon.pine +++ /dev/null @@ -1,126 +0,0 @@ -// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ -//@version=6 -indicator("Blues v0.1.0", overlay=true, max_lines_count=500, max_labels_count=500) - -// 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") - -// Wolkenstatus -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") - -// Anzeige -label_offset_mult = input.float(3.0, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung") - -// ========= Basics ========= -atr = ta.atr(16) -g_active = (wolke_g > 0) -r_active = (wolke_r > 0) - -// ========= Helper: steigende Flanke (series float/bool robust) ========= -f_rise(sig) => - // true, wenn das Signal JETZT neu > 0 ist, vorher aber nicht - cond_now = (not na(sig)) and (sig > 0) - cond_prev = na(sig[1]) or (sig[1] <= 0) - cond_now and cond_prev - -// ========= Zonen-Tracking ========= -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 - -// ========= Blue-Trigger & Startbedingungen ========= -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) - -// ========= States, Referenzen, Objekte ========= -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 - -// ========= Start (Label + Linie) ========= -if long_start_ok and not long_pending_active - long_pending_active := true - long_refHigh := g_zoneHigh_prev - 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.normal) - 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 - 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.normal) - 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) - -// ========= Erfüllung & Wolkenbruch ========= -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 - -// ========= Ende & Aufräumen ========= -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 diff --git a/indicators/croc_vibes+blues.pine b/indicators/croc_vibes+blues.pine deleted file mode 100644 index bb2534a..0000000 --- a/indicators/croc_vibes+blues.pine +++ /dev/null @@ -1,254 +0,0 @@ -// 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.7 + Blues by Telgos", overlay=true, max_labels_count=500, max_lines_count=500) - -// === Inputs === -// --- Gruppe: Chart-Signale --- -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") - -// --- Gruppe: Lochstreifen --- -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") - -// --- Gruppe: MSI --- -src1 = input.source(close, "Day OverBought 1", group="MSI") - -// --- Gruppe: Darstellung --- -label_offset_mult = input.float(3.0, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung") - -// === Helpers === -asBool(src) => nz(src) > 0 -atr = ta.atr(16) - -// Bool-Kapselungen -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) - -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) - -// === Markt-Zustände === -baerische_welle = wl_rr or wl_r -bullische_welle = wl_gg or wl_g - -// === Pearl Diver === -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-Setup (V2-Logik) === -stephan_zusatzbedingung_erfuellt = cp_long or rd_long or lolli_long or bb_long or awr_long or bgrl -stephan_setup = not na(src1) and wk_g and tr_s and set_r and stephan_zusatzbedingung_erfuellt - -// === Ulti Rally (V2-kompatibel) === -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 - -// === BGRL / Rotes Plus === -is_bgrl = bgrl -is_rotes_plus = r_plus and wk_g - -// ===================================================================== -// === BLUES-ADD-ON (immer sichtbar, ersetzt alte blauen Labels) === -// ===================================================================== - -// Wolken-Status -g_active = wk_g -r_active = wk_r - -// steigende Flanke (Signal wird jetzt neu > 0) -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 - -// --- Zonen-Tracking GRÜN (für „Ein Hoch kommt noch”) --- -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 - -// --- Zonen-Tracking ROT (für „Ein Tief kommt noch”) --- -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 - -// --- Trigger --- -long_blue_now = g_inZone and f_rise(blauer_punkt_short) // „Ein Hoch kommt noch“ -short_blue_now = r_inZone and f_rise(blauer_punkt_long) // „Ein Tief kommt noch“ -long_start_ok = long_blue_now and not na(g_zoneHigh_prev) -short_start_ok = short_blue_now and not na(r_zoneLow_prev) - -// --- States/Objekte --- -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 - -// --- Start (Label + Linie) --- -if long_start_ok and not long_pending_active - long_pending_active := true - long_refHigh := g_zoneHigh_prev - 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.normal) - 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 - 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.normal) - 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) - -// --- Erfüllung & Wolkenbruch --- -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 - -// --- Ende & Aufräumen --- -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 - -// ===================================================================== -// === Alerts (unverändert) -// ===================================================================== -alertcondition(isPearlLong, title="Pearl Long", message="Pearl Diver erkannt") -alertcondition(isPearlShort, title="Pearl Short", message="Oyster Farmer erkannt") -alertcondition(ulti_rally, title="Ulti Rally", message="Ulti Rally erkannt") -alertcondition(stephan_setup,title="Stephan Setup", message="Stephan Setup erkannt") -alertcondition(is_bgrl, title="BGRL", message="Black Green Rocket Long erkannt") -alertcondition(is_rotes_plus,title="Rotes Kreuz bei grüner Wolke", message="Rotes Kreuz erkannt") - -// ===================================================================== -// === Labels (ohne blaue Labels; die macht jetzt das Blues-Add-on) -// ===================================================================== -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) - -// ===================================================================== -// === Shapes für Screener/Backtest (unverändert) -// ===================================================================== -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) diff --git a/indicators/croc_vibes.pine b/indicators/croc_vibes.pine index c8fc031..903c663 100644 --- a/indicators/croc_vibes.pine +++ b/indicators/croc_vibes.pine @@ -1,104 +1,317 @@ // 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=5 -indicator("Croc Vibes V3.6 by Telgos", overlay=true) -// === Inputs === -// --- Gruppe: Chart-Signale --- -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") +//@version=6 +// Version 4.0.0 +indicator("Croc Vibes by Telgos", overlay=true, max_labels_count=500, max_lines_count=500) + +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") +red_devil_long = input.source(title="Red Devil Long", 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") +blauer_punkt_long = input.source(title="Blauer Punkt Long", defval=close, group="Chart-Signale") +gruenes_plus = input.source(title="Grünes Plus", defval=close, group="Chart-Signale") +bb_kombi_long = input.source(title="BB Kombi long", defval=close, group="Chart-Signale") +rotes_plus = input.source(title="Rotes Plus", defval=close, group="Chart-Signale") +blauer_punkt_short = input.source(title="Blauer Punkt Short", 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") -// --- Gruppe: Lochstreifen --- -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") + +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") +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_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") +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") -// --- Gruppe: MSI --- src1 = input.source(close, "Day OverBought 1", group="MSI") -// --- Gruppe: Allgemeine Einstellungen --- -show_blue_dot_labels = input.bool(true, title="Blaue Punkte Labels anzeigen", group="Allgemeine Einstellungen") -swing_lookback = input.int(5, title="Swing-Lookback", minval=1, group="Allgemeine Einstellungen") -label_offset_mult = input.float(3.0, title="Label Abstand (ATR Multiplikator)", minval=0.1, step=0.1, group="Allgemeine Einstellungen") +label_offset_mult = input.float(3.0, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung") -// Signal_close zu Übergeben macht keinen Sinn -signal_close = close - -// === Logik === +asBool(src) => nz(src) > 0 atr = ta.atr(16) -baerische_welle = (welle_rr > 0 or welle_r > 0) -bullische_welle = (welle_gg > 0 or welle_g > 0) -// === Pearl Diver === -allRed = (status_r > 0) and (kerze_r > 0) and (wolke_r > 0) and (trend_r > 0) and (setter_r > 0) and baerische_welle -kerzeSG_l = (status_r > 0) and ((kerze_s > 0) or (kerze_g > 0)) and (wolke_r > 0) and (trend_r > 0) and (setter_r > 0) and baerische_welle -isPearlLong = kerzeSG_l and allRed[1] and allRed[2] +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) -allGreen = (status_g > 0) and (kerze_g > 0) and (wolke_g > 0) and (trend_g > 0) and (setter_g > 0) and bullische_welle -kerzeSG_s = (status_g > 0) and ((kerze_s > 0) or (kerze_r > 0)) and (wolke_g > 0) and (trend_g > 0) and (setter_g > 0) and bullische_welle +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-Setup (V2-Logik) === -stephan_zusatzbedingung_erfuellt = (cloud_punkt_long > 0) or - (red_devil_long > 0) or - (lollipop_long > 0) or - (bb_kombi_long > 0) or - (aw_rocket_long > 0) or - (bgrl_signal > 0) -stephan_setup = not na(src1) and (wolke_g > 0) and (trend_s > 0) and (setter_r > 0) and stephan_zusatzbedingung_erfuellt +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 -// === Ulti Rally (V2-kompatibel) === -Kerze_in_wolke_gr = signal_close - wolke_Line_rot -ulti_rally = (hellgruener_punkt_long > 0) and (Kerze_in_wolke_gr > 0) and (status_r > 0) and (kerze_r > 0) and (setter_r > 0) and not baerische_welle +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 -// === BGRL === -is_bgrl = bgrl_signal > 0 +is_bgrl = bgrl +is_rotes_plus = r_plus and wk_g -// === Rotes Plus === -is_rotes_plus = (rotes_plus > 0) and (wolke_g > 0) +g_active = wk_g +r_active = wk_r -// === Blaue Punkte === -highest_swing = ta.highest(high, swing_lookback) -lowest_swing = ta.lowest(low, swing_lookback) -isBlueShortFulfilled = (wolke_g > 0 and blauer_punkt_short > high and high == highest_swing) -isBlueLongFulfilled = (wolke_r > 0 and blauer_punkt_long < low and low == lowest_swing) -punkt_erfuellt = isBlueShortFulfilled or isBlueLongFulfilled +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 -// === Alerts === -alertcondition(isPearlLong, title="Pearl Long", message="Pearl Diver erkannt") -alertcondition(isPearlShort, title="Pearl Short", message="Oyster Farmer erkannt") -alertcondition(ulti_rally, title="Ulti Rally", message="Ulti Rally erkannt") -alertcondition(stephan_setup, title="Stephan Setup", message="Stephan Setup erkannt") -alertcondition(is_bgrl, title="BGRL", message="Black Green Rocket Long erkannt") -alertcondition(is_rotes_plus, title="Rotes Kreuz bei grüner Wolke", message="Rotes Kreuz erkannt") +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}}") + +// --- START: Telgos-Spezial-Alarm (Version 3 Kerzen) --- + +// 1. Definieren, welche Signale als Auslöser gelten. +var bool ausloeser_signal = isPearlLong or ulti_rally or stephan_setup or is_bgrl or is_rotes_plus + +// 2. Prüfen, ob ein Auslöser auf der aktuellen oder den zwei vorherigen Kerzen aktiv war. +hat_ausloeser_in_letzten_3_kerzen = ausloeser_signal[0] or ausloeser_signal[1] or ausloeser_signal[2] + +// 3. Die finale Alarmbedingung: "Ein Hoch kommt noch" muss aktiv sein UND ein Auslöser muss kürzlich erschienen sein. +telgos_spezial_cond = long_pending_active and hat_ausloeser_in_letzten_3_kerzen + +// 4. Die neue Alert-Condition für die TradingView-Alarmeinstellungen. +alertcondition(telgos_spezial_cond, title="Telgos-Spezial-Alarm", message="Telgos-Spezial: Hoch erwartet + Signal auf Kerze 0/-1/-2 ({{ticker}} {{interval}})") + +// --- ENDE: Telgos-Spezial-Alarm --- -// === Labels === 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 @@ -108,28 +321,16 @@ if ulti_rally 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.black, textcolor=color.white, size=size.small) + 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) -// === Blaue Punkt Labels === -if isBlueShortFulfilled and show_blue_dot_labels - label.new(bar_index, high + atr * label_offset_mult, text="Blauer erfüllt", style=label.style_label_down, color=color.blue, textcolor=color.white, size=size.small) -if isBlueLongFulfilled and show_blue_dot_labels - label.new(bar_index, low - atr * label_offset_mult, text="Blauer erfüllt", style=label.style_label_up, color=color.blue, textcolor=color.white, size=size.small) -if wolke_g > 0 and blauer_punkt_short > high and not punkt_erfuellt and show_blue_dot_labels - label.new(bar_index, high + atr * label_offset_mult, text="Ein Hoch kommt noch", style=label.style_label_down, color=color.blue, textcolor=color.white, size=size.small) -if wolke_g > 0 and blauer_punkt_short < low and show_blue_dot_labels - label.new(bar_index, low - atr * label_offset_mult, text="Tief verpasst", style=label.style_label_up, color=color.blue, textcolor=color.white, size=size.small) -if wolke_r > 0 and blauer_punkt_long < low and not punkt_erfuellt and show_blue_dot_labels - label.new(bar_index, low - atr * label_offset_mult, text="Ein Tief kommt noch", style=label.style_label_up, color=color.blue, textcolor=color.white, size=size.small) -if wolke_r > 0 and blauer_punkt_long > high and show_blue_dot_labels - label.new(bar_index, high + atr * label_offset_mult, text="Hoch verpasst", style=label.style_label_down, color=color.blue, 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) -// === Shapes für Screener/Backtest === -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.black, 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) \ No newline at end of file +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) \ No newline at end of file diff --git a/indicators/croc_vibes_3.8.0.pine b/indicators/croc_vibes_3.8.0.pine deleted file mode 100644 index 9419ead..0000000 --- a/indicators/croc_vibes_3.8.0.pine +++ /dev/null @@ -1,360 +0,0 @@ -// 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.8.0 by Telgos", overlay=true, max_labels_count=500, max_lines_count=500) - -// === Inputs === -// --- Gruppe: Chart-Signale --- -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") - -// --- Gruppe: Lochstreifen --- -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") - -// --- Gruppe: MSI --- -src1 = input.source(close, "Day OverBought 1", group="MSI") - -// --- Gruppe: Darstellung --- -label_offset_mult = input.float(3.0, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung") - -// === Helpers === -asBool(src) => nz(src) > 0 -atr = ta.atr(16) - -// Bool-Kapselungen -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) - -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) - -// === Markt-Zustände === -baerische_welle = wl_rr or wl_r -bullische_welle = wl_gg or wl_g - -// === Pearl Diver === -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-Setup (V2-Logik) === -stephan_zusatzbedingung_erfuellt = cp_long or rd_long or lolli_long or bb_long or awr_long or bgrl -stephan_setup = not na(src1) and wk_g and tr_s and set_r and stephan_zusatzbedingung_erfuellt - -// === Ulti Rally (V2-kompatibel) === -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 - -// === BGRL / Rotes Plus === -is_bgrl = bgrl -is_rotes_plus = r_plus and wk_g - -// ===================================================================== -// === BLUES-ADD-ON -// ===================================================================== - -// Wolken-Status -g_active = wk_g -r_active = wk_r - -// steigende Flanke (Signal wird jetzt neu > 0) -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 - -// --- Zonen-Tracking GRÜN (für „Ein Hoch kommt noch”) --- -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 - -// --- Zonen-Tracking ROT (für „Ein Tief kommt noch”) --- -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 - -// --- Trigger --- -long_blue_now = g_inZone and f_rise(blauer_punkt_short) // „Ein Hoch kommt noch“ -short_blue_now = r_inZone and f_rise(blauer_punkt_long) // „Ein Tief kommt noch“ -long_start_ok = long_blue_now and not na(g_zoneHigh_prev) -short_start_ok = short_blue_now and not na(r_zoneLow_prev) - -// --- States/Objekte --- -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 - -// === Blues-Event-Flags (pro Bar zurücksetzen) === -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 - -// --- Start (Label + Linie) — Einzeiler-Format --- -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) - -// --- Erfüllung & Wolkenbruch --- -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 - -// Events setzen -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 - -// --- Ende & Aufräumen --- -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 - -// ===================================================================== -// === Alerts -// ===================================================================== -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}}") - -// Blues – „aktiv“-Zustände & Events -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}}") - -// ===================================================================== -// === ALERT-COMBO -// ===================================================================== -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).") - -// --- Mapping (if/else – robust) --- -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) - -// Flags: wurde in Slot X überhaupt ein Signal gewählt? -s1 = sel1 != optNone -s2 = sel2 != optNone -s3 = sel3 != optNone -s4 = sel4 != optNone -s5 = sel5 != optNone - -// Aggregation -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 - -// Beide Blues gewählt? UND unmöglich -> ODER erzwingen -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}}") - -// ===================================================================== -// === Labels -// ===================================================================== -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) - -// ===================================================================== -// === Shapes -// ===================================================================== -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) - -// Blues aktiv (für Screener/Backtest) -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) \ No newline at end of file diff --git a/indicators/croc_vibes_3.9.0.pine b/indicators/croc_vibes_3.9.0.pine deleted file mode 100644 index 03d30f5..0000000 --- a/indicators/croc_vibes_3.9.0.pine +++ /dev/null @@ -1,318 +0,0 @@ -// 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)