LEVIEW CUSTOM // STRATEGY LAB
JS STRATEGY EDITOR · PINE-SCRIPT-STIL · SMA · RSI · EMA · BB · MACD · LIVE BACKTESTING
← LEVIEW
SYMBOL PERIODE
SMA
VOLUME
RSI-14
Symbol eingeben → laden → Strategie schreiben → anwenden
EDITOR
DOKUMENTATION
STRATEGIE EDITOR
JavaScript · Pine-Script-Stil · Live auf Chart
▸ API REFERENZ — Verfügbare Funktionen
// ── PREIS-DATEN (n = Bars zurück, 0 = aktuell) ──
H.close(n)   H.open(n)    H.high(n)    H.low(n)
H.vol(n)     H.len         H.i

// ── INDIKATOREN ─────────────────────────────────
H.sma(period, n=0)   → number|null
H.ema(period, n=0)   → number|null
H.rsi(period=14,n=0) → number|null (0–100)
H.bb(period=20, n=0) → {mid,upper,lower}|null
H.macd(n=0)          → {line,signal,hist}|null
H.highest(p, n=0)    → höchster Close letzte p Bars
H.lowest(p, n=0)     → tiefster Close letzte p Bars
H.stdev(p, n=0)      → Standardabweichung
H.avgVol(p=20, n=0)  → Durchschnittsvolumen

// ── RÜCKGABEWERTE ───────────────────────────────
return 'long'    // → grüne Kerze ↑
return 'short'   // → rote Kerze ↓
return 'neutral' // → graue Kerze (default)
return '#ff8800' // → Custom Hex-Farbe

// ── BAR OBJEKT ──────────────────────────────────
// bar.open  bar.high  bar.low  bar.close  bar.volume
STRATEGIE CODE
Erst Daten laden
VORLAGEN — Copy & Paste zum Testen
SYM
CLOSE
CHANGE
OPEN
HIGH
LOW
SMA
RSI
LONG%
SHORT%
PREIS
VOLUME
RSI-14
STRATEGY API
LEVIEW CUSTOM · JAVASCRIPT STRATEGY LAB · DOKUMENTATION
Jede Strategie ist eine einzige JavaScript-Funktion myStrategy(i, bar, H) — ähnlich wie Pine Script in TradingView, aber in echtem JavaScript. Die Funktion wird für jede Kerze einzeln aufgerufen und gibt ein Signal zurück, das die Kerzenfarbe bestimmt. Daten und Indikatoren werden automatisch gecacht — du rufst sie einfach auf, ohne sie vorher berechnen zu müssen.
01 GRUNDSTRUKTUR
Jede Strategie besteht aus genau einer Funktion namens myStrategy. Sie erhält drei Parameter und gibt ein Signal zurück:
function myStrategy(i, bar, H) { // i → Index der aktuellen Kerze (0 = erste, len-1 = letzte) // bar → Aktueller Kerzen-Datensatz (OHLCV) // H → Helper-Objekt mit allen Indikator-Funktionen return 'long'; // grüne Kerze return 'short'; // rote Kerze return 'neutral'; // graue Kerze (default wenn nichts zurückgegeben) return '#ff8800'; // beliebige Hex-Farbe }
Die Funktion wird für jeden Bar einzeln aufgerufen — von Index 0 (ältester Bar) bis zum letzten Bar. Alle Berechnungen sollten zustandslos sein und nur auf H.* Funktionen basieren. Globale Variablen zwischen Bars sind nicht empfohlen.
02 DAS BAR OBJEKT
Das bar Objekt enthält die Preisdaten der aktuellen Kerze:
EigenschaftTypBeschreibungBeispiel
bar.opennumberEröffnungskurs182.50
bar.highnumberTageshoch185.20
bar.lownumberTagestief181.10
bar.closenumberSchlusskurs184.80
bar.volumenumberHandelsvolumen52000000
bar.timestringDatum (YYYY-MM-DD)"2024-03-15"
// Beispiele mit bar const isGreen = bar.close > bar.open; // Bullische Kerze const bodySize = Math.abs(bar.close - bar.open); // Kerzenkörper-Größe const range = bar.high - bar.low; // Gesamte Kursspanne
03 H.* — PREIS-DATEN
Vergangene Preisdaten über den Offset-Parameter n abrufen. n=0 ist die aktuelle Kerze, n=1 ist die vorherige Kerze, usw. Gibt null zurück wenn der Index außerhalb des Datenbereichs liegt.
FunktionBeschreibungRückgabe
H.close(n=0)Schlusskurs n Bars zurücknumber | null
H.open(n=0)Eröffnungskurs n Bars zurücknumber | null
H.high(n=0)Tageshoch n Bars zurücknumber | null
H.low(n=0)Tagestief n Bars zurücknumber | null
H.vol(n=0)Volumen n Bars zurücknumber | null
H.iAktueller Bar-Index (0-basiert)number
H.lenGesamtanzahl der Barsnumber
// Vergleich aktuelle vs. vorherige Kerze const prev = H.close(1); // Schlusskurs gestern const prev2 = H.close(2); // Schlusskurs vorgestern const mom = bar.close - H.close(5); // 5-Bar Momentum // Wichtig: immer auf null prüfen! if (prev === null) return 'neutral';
04 H.* — INDIKATOREN
Alle Indikatoren werden automatisch gecacht. Der erste Aufruf mit einem bestimmten Zeitraum berechnet das gesamte Array — alle folgenden Aufrufe mit demselben Zeitraum sind sofort. Du kannst jeden beliebigen Zeitraum verwenden.
GLEITENDE DURCHSCHNITTE
FunktionBeschreibungRückgabe bei n=0
H.sma(period, n=0)Simple Moving Average — Arithmetisches Mittel der letzten period Closesnumber | null
H.ema(period, n=0)Exponential Moving Average — Gewichtet neuere Bars stärker (k = 2/(p+1))number | null
// SMA und EMA — beliebige Perioden const sma20 = H.sma(20); // SMA der letzten 20 Bars const ema9 = H.ema(9); // EMA der letzten 9 Bars const ema9p = H.ema(9, 1); // EMA9 des vorherigen Bars // Crossover-Erkennung const crossed = H.ema(8) > H.ema(21) && H.ema(8,1) <= H.ema(21,1);
RSI — RELATIVE STÄRKE INDEX
// RSI(14) — Standard-Periode ist 14, aber anpassbar const rsi14 = H.rsi(); // RSI-14 (Standard) const rsi9 = H.rsi(9); // RSI-9 (schneller, sensitiver) const rsi21 = H.rsi(21); // RSI-21 (langsamer, stabiler) // Rückgabe: 0–100 | null // <30 = überverkauft | >70 = überkauft | 50 = Mittellinie (Trendrichtung)
BOLLINGER BANDS
// Bollinger Bands(20, 2) — Gibt Objekt zurück const bb = H.bb(); // bb(20, σ×2) — Standard const bb10 = H.bb(10); // Kürzere Periode = engere Bänder // Rückgabe: { mid: number, upper: number, lower: number } | null if (bb) { const aboveUpper = bar.close > bb.upper; // Überkauft const belowLower = bar.close < bb.lower; // Überverkauft const bbWidth = bb.upper - bb.lower; // Band-Breite (Volatilität) }
MACD (12, 26, 9)
// MACD — Fixe Parameter: Fast 12, Slow 26, Signal 9 const macd = H.macd(); // Aktueller Bar const prev = H.macd(1); // Vorheriger Bar // Rückgabe: { line: number, signal: number, hist: number } | null if (macd) { macd.line // MACD-Linie (EMA12 - EMA26) macd.signal // Signal-Linie (EMA9 der MACD-Linie) macd.hist // Histogramm (macd.line - macd.signal) }
STATISTISCHE FUNKTIONEN
FunktionBeschreibungBeispielwert
H.highest(p, n=0)Höchster Schlusskurs der letzten p Bars198.40
H.lowest(p, n=0)Tiefster Schlusskurs der letzten p Bars176.20
H.stdev(p, n=0)Standardabweichung der Closes über p Bars4.82
H.avgVol(p=20, n=0)Durchschnittsvolumen der letzten p Bars48500000
05 STRATEGIE ENTWICKELN — SCHRITT FÜR SCHRITT
1
HYPOTHESE FORMULIEREN
Definiere eine klare, testbare Aussage: "Wenn der EMA8 den EMA21 von unten kreuzt UND der RSI über 50 ist, folgt eine Aufwärtsbewegung." Ohne klare Hypothese baut man nichts Sinnvolles.
2
SIGNAL-BEDINGUNGEN ÜBERSETZEN
Übersetze die Hypothese in JavaScript-Bedingungen: Welche Funktionen brauchst du? Welche Vergleiche? Schreib zuerst die Kern-Logik ohne null-Checks.
3
NULL-SICHERHEIT HINZUFÜGEN
Alle Indikator-Funktionen können null zurückgeben (wenn nicht genug historische Daten vorhanden sind). Jede Strategie braucht null-Checks: if (sma === null) return 'neutral';
4
TESTEN UND VERFEINERN
Lade Daten, wende die Strategie an und schaue dir das LONG%/SHORT% Verhältnis im Stats-Strip an. Zu viele Signale? Bedingungen verschärfen. Zu wenige? Bedingungen lockern. Teste auf verschiedenen Symbolen und Zeiträumen.
5
VISUELL VALIDIEREN
Schau dir die eingefärbten Kerzen an. Werden die Signale an logischen Stellen ausgelöst? Gibt es offensichtliche Fehler (alle Kerzen grün/rot, zufällige Muster)? Ein gutes Signal sieht im Chart sofort sinnvoll aus.
06 PATTERN BIBLIOTHEK — Häufige Muster
CROSSOVER ERKENNEN
// Wann kreuzt A über B?
const a  = H.ema(8),   b  = H.ema(21);
const ap = H.ema(8,1), bp = H.ema(21,1);
const crossUp   = a > b && ap <= bp;
const crossDown = a < b && ap >= bp;
NULL-SICHERHEIT
// Mehrere Werte auf null prüfen
const sma = H.sma(20);
const rsi = H.rsi();
if (!sma || !rsi) return 'neutral';
// Ab hier sind sma und rsi sicher
AUSBRUCH AUS RANGE
// Ausbruch über 20-Bar-Hoch
const h20 = H.highest(20, 1);
const l20 = H.lowest(20,  1);
if (bar.close > h20) return 'long';
if (bar.close < l20) return 'short';
MULTI-BEDINGUNG FILTER
// Trend + Momentum + Volumen
const trend = bar.close > H.sma(50);
const mom   = H.rsi() > 50;
const vol   = H.vol() > H.avgVol(20);
if (trend && mom && vol) return 'long';
Z-SCORE BERECHNEN
// Standardabweichungen vom Mittel
const sma = H.sma(20);
const std = H.stdev(20);
if (!sma || !std || std===0) return 'neutral';
const z = (bar.close - sma) / std;
KERZEN-MUSTER
// Bullische/Bearische Kerze
const isBull = bar.close > bar.open;
const body   = Math.abs(bar.close-bar.open);
const range  = bar.high - bar.low;
const isDoji = body < range * 0.1;
MOMENTUM RICHTUNG
// Steigt/fällt der Impuls?
const macd = H.macd(), prev = H.macd(1);
if (!macd||!prev) return 'neutral';
const growing = macd.hist > prev.hist;
const bullish = macd.hist > 0;
CUSTOM FARBEN
// Farbintensität nach RSI-Stärke
const r = H.rsi();
if (!r) return 'neutral';
if (r < 20) return '#00ff88'; // stark
if (r < 30) return '#00aa55'; // mittel
07 VOLLSTÄNDIGES BEISPIEL — EMA + RSI + Volume Filter
Dieses Beispiel kombiniert drei unabhängige Signale zu einer robusten Strategie. Jedes Signal muss für sich alleine bestätigen bevor ein LONG/SHORT ausgegeben wird.
function myStrategy(i, bar, H) { // ── 1. Alle Indikatoren abrufen ────────────────────────────────── const ema8 = H.ema(8); const ema21 = H.ema(21); const ema8p = H.ema(8, 1); // EMA8 des vorherigen Bars const ema21p = H.ema(21, 1); // EMA21 des vorherigen Bars const rsi = H.rsi(14); const avgVol = H.avgVol(20, 1); // Avg-Vol der letzten 20 Bars // ── 2. Null-Sicherheit ─────────────────────────────────────────── if (!ema8 || !ema21 || !ema8p || !ema21p || !rsi || !avgVol) { return 'neutral'; // Noch nicht genug Daten } // ── 3. Signal-Bedingungen ──────────────────────────────────────── const emaBullCross = ema8 > ema21 && ema8p <= ema21p; // Frisches Kreuz ↑ const emaBearCross = ema8 < ema21 && ema8p >= ema21p; // Frisches Kreuz ↓ const emaBull = ema8 > ema21; // Genereller Aufwärtstrend const rsiBull = rsi > 50; // RSI-Momentum bullish const highVol = bar.volume > avgVol * 1.2; // Überdurchschnittliches Volumen // ── 4. LONG-Signal: Alle drei Bedingungen ──────────────────────── if (emaBull && rsiBull && highVol) return 'long'; // ── 5. SHORT-Signal: Gegenläufig ──────────────────────────────── if (!emaBull && rsi < 50 && highVol) return 'short'; // ── 6. Default: Kein klares Signal ────────────────────────────── return 'neutral'; }
Tipp: Das LONG%/SHORT% im Stats-Strip zeigt dir wie oft die Strategie anschlägt. 20–40% ist typisch für selektive Strategien. Über 80% bedeutet meistens, dass fast alle Kerzen dieselbe Farbe haben — die Bedingungen sind zu locker.
FÜR KI — PROMPT GUIDE
Du bist ein Trading-Strategie-Entwickler für das LEVIEW CUSTOM Strategy Lab. Schreib JavaScript-Strategien für die Funktion myStrategy(i, bar, H). Verfügbare H-Funktionen:
// PREIS: H.close(n) H.open(n) H.high(n) H.low(n) H.vol(n) H.i H.len // TREND: H.sma(period,n) H.ema(period,n) // OSZILATOR: H.rsi(period=14,n) → 0–100 // VOLATILITÄT: H.bb(period=20,n) → {mid,upper,lower} | H.stdev(p,n) // MOMENTUM: H.macd(n) → {line,signal,hist} // BEREICH: H.highest(p,n) H.lowest(p,n) // VOLUMEN: H.avgVol(p=20,n) // RETURN: 'long' | 'short' | 'neutral' | '#hexfarbe' // WICHTIG: Immer null-check! Alle Funktionen können null zurückgeben.
Beispiel-Prompt: "Schreib eine myStrategy Funktion die einen RSI-Divergenz-Filter mit Bollinger-Squeeze kombiniert. Kommentiere jede Bedingung auf Deutsch."
08 HÄUFIGE FEHLER
FehlerUrsacheLösung
Alle Kerzen grauFunktion heißt nicht myStrategy oder gibt nichts zurückFunktionsname prüfen, return-Statement hinzufügen
TypeError: Cannot read nullIndikator gibt null zurück, kein null-Checkif (!sma) return 'neutral' vor dem Vergleich
Alle Kerzen grün/rotBedingungen immer erfüllt (z.B. bar.close > 0)Logik prüfen, Bedingungen verschärfen
SyntaxfehlerFehlende Klammern, Semikolons oder AnführungszeichenFehlermeldung lesen — zeigt genaue Zeile
SMA gibt null für erste BarsNicht genug Daten für die Periode (normal)return 'neutral' bei null — die ersten p-1 Bars haben kein SMA
EMA und SMA stimmen nicht übereinEMA reagiert schneller als SMA — ist kein FehlerBewusst einsetzen: EMA für schnelle Signale, SMA für Trendbestätigung