chore: Release v4.0.0 – Signalzuweisung korrigiert, Reihenfolge verbessert, alte Skripte entfernt

- "Status Grün" als 3. Parameter von oben festgelegt (Fix)
- Reihenfolge der input.source-Zuweisungen an Overlay-Darstellung angepasst
- Alle alten Pine-Skripte entfernt → nur noch `croc_vibes.pine`
- Doku aktualisiert (Installation, Beschreibung, Changelog, FAQ ergänzt)
- Alte Beschreibungen (Blues Add-on, Vibes+Blues) im Docs-Ordner erhalten, aber als Referenz markiert
This commit is contained in:
2025-09-02 14:39:28 +02:00
parent eb1d4c3e13
commit e8c7f85c9a
12 changed files with 407 additions and 1308 deletions

View File

@@ -10,8 +10,8 @@
⚠️ **Wichtiger Hinweis** ⚠️ ⚠️ **Wichtiger Hinweis** ⚠️
**Croc Vibes** ist ein *temporäres Community-Hilfsskript*, insbesondere für **Anfänger**. **Croc Vibes** ist ein *Community-Hilfsskript*.
Dieses Projekt **verfolgt keine wirtschaftlichen Interessen** es ist ein **Beitrag von Telgos für die Community**. 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. Sobald im Forum das **direkte Teilen von Skripten** möglich ist, wird dieses Repository eingestellt.
![Communitycroc](./docs/img/e_community.png) ![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 ## 📌 Aktuelle Version
➡️ **[Croc Vibes v3.9.0 (Kombi-Version)](./indicators/croc_vibes_3.9.0.pine)** ➡️ **[Croc Vibes v4.0.0](./indicators/croc_vibes.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**, **AlertCombo**, **Screener/BacktestPlots**
👉 Details zu allen Änderungen siehe [CHANGELOG.md](./docs/CHANGELOG.md) 👉 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 ## Community-Hilfsskript
**Croc Vibes** ist ein *temporäres Community-Hilfsskript*. **Croc Vibes** wurde entwickelt, weil der Croc 3.0 nur eine begrenzte Anzahl an Labels ausgibt.
Es wurde entwickelt, weil der Croc 3.0 nur eine begrenzte Anzahl an Labels ausgibt und wir Anfänger von zusätzlichen Labels profitieren. Gerade Anfänger profitieren von zusätzlichen Labels und klareren Signalzuweisungen.
--- ---
## Komponenten ## Komponenten (ab v4.0.0)
| Script | Rolle | Pine | Status | Nur noch das zentrale Skript `croc_vibes.pine` wird gepflegt.
|----------------|--------------------|------|--------|
| 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**.
--- ---
## Installation ## Installation
1. Öffne den gewünschten Indikator-Code im Ordner `indicators/`. 1. Lade die Datei [`croc_vibes.pine`](./indicators/croc_vibes.pine).
2. Kopiere den gesamten Code aus der Datei. 2. Öffne den **Pine-Editor** in deinem TradingView-Chart.
3. Öffne den **Pine-Editor** in deinem TradingView-Chart. 3. 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“**. 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 ## FAQ
👉 Häufige Fragen findest du in der [FAQ.md](./docs/FAQ.md). 👉 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 **AlertCombo**? 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? - Warum kann Croc Vibes nicht im Pinescreener verwendet werden?
--- ---
## Beispiel ## Beispiel
![Beispiel: Croc Vibes mit Blues Add-on](./docs/img/croc_vibes_example.png) ![Beispiel: Croc Vibes mit Blues](./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)
--- ---
## Hinweis zur Nutzung ## Hinweis zur Nutzung
Croc Vibes ist ein Community-Hilfsskript und nicht offiziell von André. 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.
--- ---

View File

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

View File

@@ -1,25 +1,39 @@
# Changelog # 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 ## [3.9.0] 2025-09-01
### Added ### Added
- **Input „Grünes Plus“** (`gruenes_plus`) als `input.source` - **Input „Grünes Plus“** (`gruenes_plus`) als `input.source`
- **Stephan-Setup**: „Grünes Plus“ als zusätzliche **ODER**-verknüpfte Zusatzbedingung - **Stephan-Setup**: „Grünes Plus“ als zusätzliche **ODER**-verknüpfte Zusatzbedingung
### Changed ### 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 ### Fixed
- Kleinere Formulierungen in README vereinheitlicht - Kleinere Formulierungen in README vereinheitlicht
---
## [3.8.0] 2025-08-24 ## [3.8.0] 2025-08-24
### Added ### Added
- Blues-Integration im Hauptindikator (Start, Aktiv, Erfüllt, Wolkenbruch) inkl. Alerts - Blues-Integration im Hauptindikator (Start, Aktiv, Erfüllt, Wolkenbruch) inkl. Alerts
- Alert-Combo (bis zu 5 Signale; UND/ODER; AutoODER bei beiden Blues) - Alert-Combo (bis zu 5 Signale; UND/ODER; Auto-ODER bei beiden Blues)
- Screener/Backtest-Plots für „Blues aktiv“ - Screener/Backtest-Plots für „Blues aktiv“
### Changed ### Changed
- Einheitliche Labelgrößen - Einheitliche Labelgrößen
- Dokumentation aktualisiert (README, FAQ, Installation) - Dokumentation aktualisiert (README, FAQ, Installation)
### Deprecated ### Deprecated
- Separates Blues-Add-on (`blues_addon.pine`) bitte Kombi-Version nutzen - Separates Blues-Add-on (`blues_addon.pine`) bitte Kombi-Version nutzen

View File

@@ -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 **AlertCombo** und **ScreenerPlots**.
## 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
- **AlertCombo Panel**: bis zu **5** Signale frei kombinierbar
- UND/ODER schaltbar; **AutoODER**, 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**
- **AlertCombo**: 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)

View File

@@ -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). - 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. 👉 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.

View File

@@ -1,31 +1,54 @@
# Installation # 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 ## Dateien
`indicators/` Pine Scripts `indicators/` Pine Scripts
- `croc_vibes.pine` (v5, historische Basis) - `croc_vibes.pine` (v4.0.0, aktuelles Hauptskript) ✅
- `blues_addon.pine` (v6) **deprecated (ab v3.8.0 integriert)**
- `croc_vibes_3.8.0.pine` (v6) **Kombi-Version Basis für Updates** 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 ## Schritt 1: Script kopieren
- Datei im Ordner `indicators/` öffnen 1. Öffne die Datei `indicators/croc_vibes.pine`.
- gesamten Inhalt kopieren 2. Kopiere den gesamten Inhalt.
- in TradingView → **Pine-Editor** einfügen → **Zum Chart hinzufügen** 3. In TradingView → **Pine-Editor** einfügen → **Zum Chart hinzufügen**.
---
## Schritt 2: Variablen zuweisen (input.source) ## Schritt 2: Variablen zuweisen (input.source)
- In den „**Eingaben**“ alle benötigten Quellen zuordnen (Croc/Lochstreifen etc.). - In den „**Eingaben**“ alle benötigten Quellen (Croc/Lochstreifen/MSI) zuordnen.
- **Tipp:** Die Zahlen in den Eingaben entsprechen der **Reihenfolge von oben** (z.B. Kerzenfarbe 1 = Grün, 2 = Schwarz, 3 = Rot). - Die Reihenfolge ist ab v4.0.0 **verbessert** und entspricht jetzt der visuellen Darstellung im Overlay:
- 📺 Video zu Schritt 2: siehe README.
> **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: AlertCombo konfigurieren (neu ab v3.8.0) > ⚠️ **Hinweis:** TradingView setzt `input.source`-Zuweisungen nach Code-Updates zurück („by design“). Danach bitte **neu zuordnen**.
Im Reiter **Eingaben** findest du den Bereich **ALERTCOMBO**:
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**. ## 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 ## Schritt 4: TradingView-Alerts anlegen
- Rechtsklick im Chart → **Alarm hinzufügen** → gewünschten Indikator/Alert wählen. - Rechtsklick im Chart → **Alarm hinzufügen** → gewünschten Indikator/Alert auswählen.
- Für Blues existieren dedizierte Alerts: **Start**, **Aktiv**, **Erfüllt**, **Wolkenbruch**. - Für Blues existieren eigene Alerts: **Start**, **Aktiv**, **Erfüllt**, **Wolkenbruch**.
---
## Optionales Video
Eine kurze Videoanleitung zur Variablenzuweisung findest du im [README](../README.md).

View File

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

View File

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

View File

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

View File

@@ -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/ // 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 // CrocVibes by Telgos
// Danke für die Grundlagen und Basisversion: amper04, ray_duke, husky, Audidriver13│ // Danke für die Grundlagen und Basisversion: amper04, ray_duke, husky, Audidriver13│
//@version=5
indicator("Croc Vibes V3.6 by Telgos", overlay=true)
// === Inputs === //@version=6
// --- Gruppe: Chart-Signale --- // Version 4.0.0
wolke_Line_rot = input.source(title="Wolke Linie Pink", defval=close, group="Chart-Signale") indicator("Croc Vibes by Telgos", overlay=true, max_labels_count=500, max_lines_count=500)
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") 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") 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") blauer_punkt_long = input.source(title="Blauer Punkt Long", defval=close, group="Chart-Signale")
red_devil_long = input.source(title="Red Devil 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") 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") rotes_plus = input.source(title="Rotes Plus", defval=close, group="Chart-Signale")
aw_rocket_long = input.source(title="AW-Rocket long", defval=close, group="Chart-Signale") blauer_punkt_short = input.source(title="Blauer Punkt Short", defval=close, group="Chart-Signale")
bgrl_signal = input.source(title="Black Green Rocket Long", defval=close, group="Chart-Signale") lollipop_long = input.source(title="Lollipop long", defval=close, group="Chart-Signale")
rotes_plus = input.source(title="Rotes Plus", 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")
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_g = input.source(title="Wolke (1) Grün", defval=close, group="Lochstreifen")
wolke_r = input.source(title="Wolke (3) Rot", defval=close, group="Lochstreifen") wolke_r = input.source(title="Wolke (3) Rot", defval=close, group="Lochstreifen")
trend_s = input.source(title="Trend (1) Schwarz", defval=close, group="Lochstreifen") trend_s = input.source(title="Trend (1) Schwarz", defval=close, group="Lochstreifen")
trend_r = input.source(title="Trend (2) Rot", defval=close, group="Lochstreifen") trend_r = input.source(title="Trend (2) Rot", defval=close, group="Lochstreifen")
trend_g = input.source(title="Trend (3) Grün", defval=close, group="Lochstreifen") trend_g = input.source(title="Trend (3) Grün", defval=close, group="Lochstreifen")
setter_r = input.source(title="Setter (Trend 5) Rot", defval=close, group="Lochstreifen") setter_r = input.source(title="Setter (Trend 5) Rot", defval=close, group="Lochstreifen")
setter_g = input.source(title="Setter (Trend 6) grün", defval=close, group="Lochstreifen") setter_g = input.source(title="Setter (Trend 6) grün", defval=close, group="Lochstreifen")
welle_g = input.source(title="Welle (1) grün", defval=close, group="Lochstreifen") welle_g = input.source(title="Welle (1) grün", defval=close, group="Lochstreifen")
welle_gg = input.source(title="Welle (2) dunkelgrün", defval=close, group="Lochstreifen") welle_gg = input.source(title="Welle (2) dunkelgrün", defval=close, group="Lochstreifen")
welle_r = input.source(title="Welle (4) Rot", defval=close, group="Lochstreifen") welle_r = input.source(title="Welle (4) Rot", defval=close, group="Lochstreifen")
welle_rr = input.source(title="Welle (6) dunkelRot", defval=close, group="Lochstreifen") welle_rr = input.source(title="Welle (6) dunkelRot", defval=close, group="Lochstreifen")
kerze_g = input.source(title="Kerzenfarbe (1) Gruen", defval=close, group="Lochstreifen") kerze_g = input.source(title="Kerzenfarbe (1) Gruen", defval=close, group="Lochstreifen")
kerze_s = input.source(title="Kerzenfarbe (2) Schwarz", defval=close, group="Lochstreifen") kerze_s = input.source(title="Kerzenfarbe (2) Schwarz", defval=close, group="Lochstreifen")
kerze_r = input.source(title="Kerzenfarbe (3) Rot", defval=close, group="Lochstreifen") kerze_r = input.source(title="Kerzenfarbe (3) Rot", defval=close, group="Lochstreifen")
// --- Gruppe: MSI ---
src1 = input.source(close, "Day OverBought 1", group="MSI") src1 = input.source(close, "Day OverBought 1", group="MSI")
// --- Gruppe: Allgemeine Einstellungen --- label_offset_mult = input.float(3.0, title="Label-Abstand (ATR x)", minval=0.1, step=0.1, group="Darstellung")
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")
// Signal_close zu Übergeben macht keinen Sinn asBool(src) => nz(src) > 0
signal_close = close
// === Logik ===
atr = ta.atr(16) atr = ta.atr(16)
baerische_welle = (welle_rr > 0 or welle_r > 0)
bullische_welle = (welle_gg > 0 or welle_g > 0)
// === Pearl Diver === b_long = asBool(blauer_punkt_long)
allRed = (status_r > 0) and (kerze_r > 0) and (wolke_r > 0) and (trend_r > 0) and (setter_r > 0) and baerische_welle b_short = asBool(blauer_punkt_short)
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 hgr_long = asBool(hellgruener_punkt_long)
isPearlLong = kerzeSG_l and allRed[1] and allRed[2] 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 st_g = asBool(status_g)
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_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] 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 or g_plus
stephan_zusatzbedingung_erfuellt = (cloud_punkt_long > 0) or stephan_setup = not na(src1) and wk_g and tr_s and set_r and stephan_zusatzbedingung_erfuellt
(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
// === Ulti Rally (V2-kompatibel) === Kerze_in_wolke_gr = close - wolke_Line_pink
Kerze_in_wolke_gr = signal_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
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
// === BGRL === is_bgrl = bgrl
is_bgrl = bgrl_signal > 0 is_rotes_plus = r_plus and wk_g
// === Rotes Plus === g_active = wk_g
is_rotes_plus = (rotes_plus > 0) and (wolke_g > 0) r_active = wk_r
// === Blaue Punkte === f_rise(sig) =>
highest_swing = ta.highest(high, swing_lookback) cond_now = (not na(sig)) and (sig > 0)
lowest_swing = ta.lowest(low, swing_lookback) cond_prev = na(sig[1]) or (sig[1] <= 0)
isBlueShortFulfilled = (wolke_g > 0 and blauer_punkt_short > high and high == highest_swing) cond_now and cond_prev
isBlueLongFulfilled = (wolke_r > 0 and blauer_punkt_long < low and low == lowest_swing)
punkt_erfuellt = isBlueShortFulfilled or isBlueLongFulfilled
// === Alerts === var int g_zoneStart = na
alertcondition(isPearlLong, title="Pearl Long", message="Pearl Diver erkannt") var float g_zoneHigh = na
alertcondition(isPearlShort, title="Pearl Short", message="Oyster Farmer erkannt") g_switch = barstate.isfirst ? true : (g_active != g_active[1])
alertcondition(ulti_rally, title="Ulti Rally", message="Ulti Rally erkannt") if bar_index == 0 or g_switch
alertcondition(stephan_setup, title="Stephan Setup", message="Stephan Setup erkannt") g_zoneStart := bar_index
alertcondition(is_bgrl, title="BGRL", message="Black Green Rocket Long erkannt") g_zoneHigh := na
alertcondition(is_rotes_plus, title="Rotes Kreuz bei grüner Wolke", message="Rotes Kreuz erkannt") 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 if isPearlLong
label.new(bar_index, low - atr * label_offset_mult, text="Pearl Diver", style=label.style_label_up, color=color.purple, textcolor=color.white, size=size.small) label.new(bar_index, low - atr * label_offset_mult, text="Pearl Diver", style=label.style_label_up, color=color.purple, textcolor=color.white, size=size.small)
if isPearlShort if isPearlShort
@@ -108,28 +321,16 @@ if ulti_rally
if stephan_setup 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) 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 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 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) 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 === plotshape(isPearlLong, title="Pearl Long", location=location.abovebar, color=color.new(color.purple, 100), style=shape.labelup, size=size.tiny)
if isBlueShortFulfilled and show_blue_dot_labels plotshape(isPearlShort, title="Pearl Short", location=location.belowbar, color=color.new(color.purple, 100), style=shape.labeldown, size=size.tiny)
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) plotshape(ulti_rally, title="Ulti Rally", location=location.abovebar, color=color.new(color.aqua, 100), style=shape.diamond, size=size.tiny)
if isBlueLongFulfilled and show_blue_dot_labels plotshape(stephan_setup, title="Stephan Setup", location=location.abovebar, color=color.new(color.teal, 100), style=shape.labelup, size=size.tiny)
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) plotshape(is_bgrl, title="BGRL", location=location.abovebar, color=color.new(color.gray, 100), style=shape.triangleup, size=size.tiny)
if wolke_g > 0 and blauer_punkt_short > high and not punkt_erfuellt and show_blue_dot_labels plotshape(is_rotes_plus, title="Rotes Kreuz", location=location.belowbar, color=color.new(color.red, 100), style=shape.labeldown, size=size.tiny)
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)
// === Shapes 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(isPearlLong, title="Pearl Long", location=location.abovebar, color=color.new(color.purple, 100), style=shape.labelup, 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)
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)

View File

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

View File

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