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:
71
README.md
71
README.md
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
⚠️ **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.
|
||||||
|
|
||||||
@@ -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**, **Alert‑Combo**, **Screener/Backtest‑Plots**
|
|
||||||
|
|
||||||
👉 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 **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?
|
- Warum kann Croc Vibes nicht im Pinescreener verwendet werden?
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Beispiel
|
## Beispiel
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@@ -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.
|
|
@@ -1,5 +1,17 @@
|
|||||||
# 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`
|
||||||
@@ -11,10 +23,12 @@
|
|||||||
### 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; Auto‑ODER 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
|
||||||
|
@@ -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)
|
|
12
docs/FAQ.md
12
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).
|
- 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.
|
@@ -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: Alert‑Combo 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 **ALERT‑COMBO**:
|
|
||||||
1. Wähle bis zu **5** Signale (z. B. „Pearl Long“, „Blues: Ein Hoch kommt noch (aktiv)“).
|
---
|
||||||
|
|
||||||
|
## 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**.
|
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**.
|
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).
|
||||||
|
@@ -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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 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.
|
|
@@ -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
|
|
@@ -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)
|
|
@@ -1,29 +1,29 @@
|
|||||||
// 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")
|
||||||
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")
|
cloud_punkt_long = input.source(title="Cloud Punkt Long", defval=close, group="Chart-Signale")
|
||||||
red_devil_long = input.source(title="Red Devil Long", defval=close, group="Chart-Signale")
|
red_devil_long = input.source(title="Red Devil Long", defval=close, group="Chart-Signale")
|
||||||
|
hellgruener_punkt_long = input.source(title="Hellgruener Punkt Long", 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")
|
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")
|
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")
|
aw_rocket_long = input.source(title="AW-Rocket long", defval=close, group="Chart-Signale")
|
||||||
bgrl_signal = input.source(title="Black Green Rocket Long", defval=close, group="Chart-Signale")
|
bgrl_signal = input.source(title="Black Green Rocket Long", defval=close, group="Chart-Signale")
|
||||||
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")
|
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")
|
||||||
@@ -39,66 +39,279 @@ kerze_g = input.source(title="Kerzenfarbe (1) Gruen", defval=close, group="Lochs
|
|||||||
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)
|
||||||
|
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]
|
isPearlLong = kerzeSG_l and allRed[1] and allRed[2]
|
||||||
|
|
||||||
allGreen = (status_g > 0) and (kerze_g > 0) and (wolke_g > 0) and (trend_g > 0) and (setter_g > 0) and bullische_welle
|
allGreen = st_g and cz_g and wk_g and tr_g and set_g 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
|
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 ===
|
|
||||||
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)
|
|
||||||
|
|
||||||
// === 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(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(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(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(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_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(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)
|
@@ -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)
|
|
@@ -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)
|
|
Reference in New Issue
Block a user