MARKOV STACK // API REFERENCE
Erstellt: 2026-06-16  |  Scope: 15 HTML-Dashboards  |  APIs dokumentiert: 4 (2x Replit Proxy, 1x TradingView Widget, 1x LW-Charts)
01. API-Übersicht
API Typ Basis-URL Daten Auth Uptime Genutzt von
gemini-os REST JSON Proxy https://gemini-os.replit.app EOD OHLCV + Ticker-Suche Keine REPLIT-RISIKO 9 Dateien
open-bb REST JSON Proxy https://open-bb.replit.app Intraday OHLCV (Yahoo Finance) Keine REPLIT-RISIKO 2 Dateien
TradingView Widget Embedded Widget https://s3.tradingview.com/tv.js Live-Charts (alle Timeframes) Keine (free widget) CDN-STABIL 11 Dateien
Lightweight Charts JS Bibliothek (CDN) https://cdn.jsdelivr.net/npm/lightweight-charts@4.1.1 Custom Chart-Rendering Keine CDN-STABIL 2 Dateien
Uptime-Risiko: Beide Replit-Proxys (gemini-os.replit.app und open-bb.replit.app) sind externe Hobby-Instanzen. Sie können bei Inaktivität schlafen gehen ("cold start" 10–30s Delay) oder jederzeit offline gehen. Kein SLA, kein Fallback im aktuellen Code.
02. gemini-os.replit.app — EOD Market Data API
EOD DATA
Gemini OS EOD Proxy
https://gemini-os.replit.app
⚠ REPLIT / KEIN SLA
GET /api/eod
Liefert End-of-Day OHLCV-Daten für ein Symbol. Wird von allen EOD-Live-Dateien für die Markov-Berechnung genutzt.
Query-Parameter
ParameterTypPflichtDefaultBeschreibungBeispiel
symbol string PFLICHT Ticker-Symbol in SYMBOL.EXCHANGE Format TSLA.US
from string OPTIONAL Startdatum ISO 8601 2023-01-01
to string OPTIONAL Enddatum ISO 8601 2024-12-31
Unterstützte Börsen-Suffixe (aus Code extrahiert)
SuffixBeschreibungBeispiel-Ticker
.USUS-Aktien (NYSE, NASDAQ)TSLA.US, NVDA.US, AAPL.US
.XETRADeutsche Börse XetraSAP.XETRA, RHM.XETRA
.PAEuronext ParisAIR.PA
.LLondon Stock ExchangeBP.L
ETFETF (via .US suffix)QQQ.US, SPY.US
Beispiel-Request
GET https://gemini-os.replit.app/api/eod?symbol=TSLA.US&from=2024-01-01&to=2024-12-31

// JavaScript (aus dem Code)
const url = `https://gemini-os.replit.app/api/eod?symbol=${ticker}&from=${fromDate}&to=${toDate}`;
const response = await fetch(url);
const data = await response.json();
Response-Format (Array von Candle-Objekten)
[
  {
    "date":   "2024-01-02",   // string  — ISO 8601 Datum
    "open":   186.20,         // number  — Eröffnungspreis
    "high":   188.45,         // number  — Tageshoch
    "low":    183.15,         // number  — Tagestief
    "close":  185.64,         // number  — Schlusskurs
    "volume": 52340100        // number  — Handelsvolumen
  },
  // ... weitere Tages-Objekte chronologisch
]
Response-Felder
FeldTypEinheitNutzung im Stack
datestringISO 8601Zeitachse, Candle-Sequenz
opennumberUSD / EURHeikin-Ashi, Markov-State-Klassifikation
highnumberUSD / EURATR-Berechnung (H−L), Pattern-Detection
lownumberUSD / EURATR-Berechnung, Pattern-Detection
closenumberUSD / EURState-Klassifikation (Green: close>open), SMA/EMA, Markov-Matrix
volumenumberStückVolume-State-Threshold (>avgVol = V, ≤avgVol = v)
Genutzt von
MARKOV-QUANT MARKOV-INSTITUTIONAL v8.5 MARKOV-CANdlESTICKS v9.0 MARKOV-VOLUMEN v8.0 MARKOV-RISIKO v7.5 MARKOV-AVERAGE v10.6 MARKOV-PREDICTIONS
GET /api/search
Ticker-Suche für die Autocomplete-Funktion in mehreren Dashboards. Gibt eine Liste von passenden Assets zurück.
Query-Parameter
ParameterTypPflichtBeschreibungBeispiel
query string PFLICHT Suchbegriff (Ticker oder Name) AAPL
limit number OPTIONAL Max. Anzahl Ergebnisse 10
Beispiel-Request
GET https://gemini-os.replit.app/api/search?query=Apple&limit=5

// JavaScript
const res = await fetch(`https://gemini-os.replit.app/api/search?query=${encodeURIComponent(q)}`);
const results = await res.json();
Response-Format (vermutetes Schema aus Code-Nutzung)
[
  {
    "symbol": "AAPL.US",       // string — volles Symbol mit Börsen-Suffix
    "name":   "Apple Inc.",    // string — Firmenname
    "exchange": "NASDAQ"       // string — Börsenname
  },
  ...
]
Genutzt von
MARKOV-QUANT MARKOV-INSTITUTIONAL v8.5 MARKOV-CANdlESTICKS v9.0

Fehler-Verhalten

SituationVerhalten der APIStack-Handling
Symbol nicht gefunden Leeres Array [] oder {"error": "..."} Meistens kein UI-Feedback — nur console.error
Replit Cold Start HTTP 502 oder Timeout nach 30s fetch() wirft Exception — unbehandelt in 7/9 Dateien
Rate Limit HTTP 429 (unbekannt ob implementiert) Kein Retry-Mechanismus im Stack
CORS Headers vorhanden (Replit-Proxy setzt sie) Kein Problem, funktioniert aus Browser
03. open-bb.replit.app — Intraday Market Data API
INTRADAY DATA
OpenBB Yahoo Finance Proxy
https://open-bb.replit.app
⚠ REPLIT / KEIN SLA
GET /api/yahoo/chart/{ticker}
Liefert Intraday OHLCV-Daten über Yahoo Finance (proxied). Unterstützt verschiedene Zeitintervalle und Datums-Ranges. Genutzt ausschließlich von den INTRADAY-* Files.
Path-Parameter
ParameterTypPflichtBeschreibungBeispiel
ticker string PFLICHT Yahoo Finance Ticker (kein Börsen-Suffix nötig) TSLA, AAPL, QQQ
Query-Parameter
ParameterTypPflichtErlaubte WerteDefaultBeschreibung
range string PFLICHT 1d 5d 10d 1mo 3mo Datums-Range für historische Daten
interval string PFLICHT 1m 5m 15m 30m 1h 1d Candle-Granularität
Im Stack genutzte Kombination: Die INTRADAY-Files nutzen ausschließlich range=10d&interval=1h — also 10 Tage stündliche Daten. Das ergibt ~70 Candles (7 Handelsstunden × 10 Tage).
Beispiel-Request (aus Code extrahiert)
GET https://open-bb.replit.app/api/yahoo/chart/TSLA?range=10d&interval=1h

// JavaScript (aus INTRADAY-SHANNON.html)
const ticker = document.getElementById('ticker').value.trim().toUpperCase();
const url = `https://open-bb.replit.app/api/yahoo/chart/${ticker}?range=10d&interval=1h`;
const res = await fetch(url);
const json = await res.json();
Response-Format (Yahoo Finance Candle-Array)
// Mögliche Struktur 1: Direkt als Array
[
  {
    "timestamp": 1704196200,   // number — Unix-Timestamp (Sekunden)
    "open":      185.10,       // number — Eröffnung
    "high":      186.90,       // number — Hoch
    "low":       184.50,       // number — Tief
    "close":     186.45,       // number — Schluss
    "volume":    4521300       // number — Volumen
  },
  ...
]

// Alternativ: Yahoo Finance native Struktur
{
  "chart": {
    "result": [{
      "timestamp": [1704196200, ...],
      "indicators": {
        "quote": [{
          "open":   [185.10, ...],
          "high":   [186.90, ...],
          "low":    [184.50, ...],
          "close":  [186.45, ...],
          "volume": [4521300, ...]
        }]
      }
    }]
  }
}
Genutzte Response-Felder (aus Code)
FeldTypNutzung in INTRADAY-*
timestampnumber (Unix)Zeitachse, Power Hour Detection (14:00–15:00 EST), Session-Klassifikation
opennumberState-Klassifikation (Green: close>open), Overnight Gap Detection
highnumberRange-Berechnung
lownumberRange-Berechnung
closenumberState-Klassifikation, Markov-Chain-Key, Shannon-Entropie
volumenumberNicht genutzt in INTRADAY-* (nur EOD-Files nutzen Volume)
Genutzt von
INTRADAY-SHANNON INTRADAY-MARKOV

Ticker-Konventionen

Wichtig: open-bb nutzt Yahoo Finance Ticker-Format (OHNE Börsen-Suffix), nicht das EOD-Format (MIT Suffix).
Korrekt: TSLA, NVDA, QQQ
Nicht: TSLA.US, NVDA.US — das würde Yahoo Finance nicht finden.

Zeitzonen-Hinweis

Timestamps sind in Unix-Sekunden (UTC). Die INTRADAY-* Files konvertieren für Power Hour Detection:

// EST Stunde aus Timestamp
const estHour = new Date(bar.timestamp * 1000).toLocaleString('en-US', {
  timeZone: 'America/New_York', hour: 'numeric', hour12: false
});
// Power Hour: 14 = 14:00 EST (letzte Handelsstunde US-Markt)
04. TradingView Widget API
CHARTING WIDGET
TradingView Advanced Charts Widget
https://s3.tradingview.com/tv.js
CDN-STABIL
Keine Authentifizierung erforderlich. Das Free-Tier TradingView Widget ist öffentlich nutzbar ohne API-Key. Einschränkung: TradingView-Branding immer sichtbar.
JS new TradingView.widget(config)
Erzeugt ein interaktives TradingView-Chart innerhalb eines HTML-Container-Elements. Wird in 11 der 15 Dateien genutzt.
Alle im Stack genutzten Konfigurations-Parameter
ParameterTypPflichtIm Stack genutzte WerteBeschreibung
container_id string PFLICHT "tv_main_chart" ID des DIV-Elements, in das der Chart gerendert wird
symbol string PFLICHT "TSLA", "BABA", "SAP" TradingView Ticker (ohne Börsen-Suffix in den meisten Files)
interval string OPTIONAL "D", "W", "60", "15" Candle-Interval: "D"=Daily, "W"=Weekly, Zahl=Minuten
style string OPTIONAL "1" (Candle), "8" (Renko), "9" (Kagi), "10" (P&F), "11" (Line Break) Chart-Typ. Style "8"–"11" werden in MULTI-REGIME genutzt
theme string OPTIONAL "dark" Widget-Farbschema (alle Files nutzen dark)
locale string OPTIONAL "de_DE", "en" Sprache des Widgets. Einige Files nutzen deutsch.
width string/number OPTIONAL "100%" Breite des Chart-Containers
height number OPTIONAL 400, 500, 550 Höhe in Pixeln
allow_symbol_change boolean OPTIONAL false Verhindert, dass der User den Ticker im Widget selbst ändert
hide_top_toolbar boolean OPTIONAL false, true Zeigt/versteckt die TV-Toolbar
save_image boolean OPTIONAL false Screenshot-Button im Widget de-/aktivieren
studies array OPTIONAL ["STD;EMA"], ["STD;Volume"] Vorgeladene Indikatoren (Standard-TradingView Kürzel)
Vollständiges Code-Beispiel (aus MARKOV-INSTITUTIONAL.html)
// WICHTIG: Container leeren vor Neuinitialisierung (fehlt im aktuellen Stack!)
document.getElementById("tv_main_chart").innerHTML = "";

// Widget erstellen
new TradingView.widget({
  container_id:        "tv_main_chart",
  symbol:              globalTvSymbol,   // z.B. "TSLA"
  interval:            "D",
  style:               "1",             // 1 = Candlestick
  theme:               "dark",
  locale:              "de_DE",
  width:               "100%",
  height:              500,
  allow_symbol_change: false,
  hide_top_toolbar:    false,
  save_image:          false,
  studies:             ["STD;EMA"]
});
Chart-Style-Werte (Referenz)
styleChart-TypGenutzt in
"0"Bars
"1"CandlestickINSTITUTIONAL, CANdlESTICKS, VOLUMEN, RISIKO, SHORT, PREDICTIONS, QUANT
"2"Line
"8"RenkoMARKOV-RENKO v12.5
"9"KagiMARKOV-MULTI-REGIME v14.0 (Tab 2)
"10"Point & FigureMARKOV-MULTI-REGIME v14.0 (Tab 3)
"11"Line BreakMARKOV-MULTI-REGIME v14.0 (Tab 4)
Genutzt von
MARKOV-QUANT MARKOV-INSTITUTIONAL v8.5 MARKOV-CANdlESTICKS v9.0 MARKOV-VOLUMEN v8.0 MARKOV-RISIKO v7.5 MARKOV-AVERAGE v10.6 MARKOV-PREDICTIONS MARKOV-SHORT v11.0 MARKOV-RENKO v12.5 MARKOV-MULTI-REGIME v14.0 MARKOV-TRADING-VIEW v5.5
05. Lightweight Charts v4.1.1 (TradingView Open-Source)
OPEN SOURCE
Lightweight Charts — TradingView OSS
https://cdn.jsdelivr.net/npm/lightweight-charts@4.1.1/dist/lightweight-charts.standalone.production.js
CDN-STABIL (jsDelivr)

Lightweight Charts ist eine Open-Source-Charting-Bibliothek von TradingView. Genutzt von den INTRADAY-* Files als Alternative zum embedded Widget, da sie mehr Kontrolle über Dateneingabe ermöglicht.

Initialisierung (aus INTRADAY-SHANNON.html)
// Chart erstellen
const chart = LightweightCharts.createChart(
  document.getElementById('chartContainer'),
  {
    width:  document.getElementById('chartContainer').clientWidth,
    height: 300,
    layout: {
      background: { color: '#0a0a1a' },
      textColor:   '#c9d1d9',
    },
    grid: {
      vertLines: { color: '#1a1a3e' },
      horzLines: { color: '#1a1a3e' },
    },
    timeScale: { timeVisible: true, secondsVisible: false }
  }
);

// Candlestick-Serie hinzufügen
const candleSeries = chart.addCandlestickSeries({
  upColor:   '#00ff87',
  downColor: '#ff3366',
  borderUpColor:   '#00ff87',
  borderDownColor: '#ff3366',
  wickUpColor:     '#00ff87',
  wickDownColor:   '#ff3366',
});

// Daten setzen (UTC-Timestamps)
candleSeries.setData([
  { time: 1704196200, open: 185.10, high: 186.90, low: 184.50, close: 186.45 },
  ...
]);
Genutzt von
INTRADAY-SHANNON INTRADAY-MARKOV
06. Fallback-Strategien bei API-Ausfall
Aktueller Status: Kein einziges Dashboard im Stack hat eine Offline-Fallback-Strategie. Bei API-Ausfall → leere Panels ohne User-Feedback.
Strategie 1: Prominentes Error-Banner

Bei API-Fehler: Großes rotes Banner anzeigen statt nur console.error.

async function fetchEODData(symbol) {
  try {
    const res = await fetch(`https://gemini-os.replit.app/api/eod?symbol=${symbol}`);
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return await res.json();
  } catch (err) {
    document.getElementById('error-banner').innerHTML =
      `⚠ API nicht erreichbar: ${err.message}. Daten möglicherweise veraltet.`;
    document.getElementById('error-banner').style.display = 'block';
    return null;
  }
}
Strategie 2: LocalStorage Cache

Letzten erfolgreichen API-Response cachen, bei Fehler Cache nutzen.

async function fetchWithCache(url, cacheKey) {
  try {
    const res = await fetch(url);
    const data = await res.json();
    localStorage.setItem(cacheKey, JSON.stringify({ data, ts: Date.now() }));
    return data;
  } catch (err) {
    const cached = localStorage.getItem(cacheKey);
    if (cached) {
      const { data, ts } = JSON.parse(cached);
      const ageHours = (Date.now() - ts) / 3600000;
      showWarning(`Offline-Daten genutzt (${Math.round(ageHours)}h alt).`);
      return data;
    }
    throw err;
  }
}
Strategie 3: Loading-State während Fetch

User informieren, dass Daten geladen werden (nur INTRADAY-* macht das korrekt).

async function loadData(symbol) {
  const btn = document.getElementById('loadBtn');
  const output = document.getElementById('outputPanel');
  btn.disabled = true;
  btn.textContent = 'LOADING...';
  output.innerHTML = '<div class="loader">Berechne Markov-Matrix...</div>';
  try {
    const data = await fetchEODData(symbol);
    renderResults(data);
  } finally {
    btn.disabled = false;
    btn.textContent = 'ANALYSE STARTEN';
  }
}
Strategie 4: Alternative API-Endpunkte

Falls gemini-os offline ist: Fallback auf public APIs.

ServiceEndpunktFree?Auth?Geeignet für
Alpha Vantage https://www.alphavantage.co/query?function=TIME_SERIES_DAILY API Key EOD-Daten (25 Calls/Tag kostenlos)
Yahoo Finance v8 https://query1.finance.yahoo.com/v8/finance/chart/{ticker} Nein EOD + Intraday (inoffiziell, Rate-Limit)
Polygon.io https://api.polygon.io/v2/aggs/ticker/{ticker}/range Teilweise API Key EOD kostenlos, Intraday kostenpflichtig
07. Integration-Guide — Datenfluss im Stack

Visualisierung wie Daten durch die Live-API-Files fließen:

SchrittAktionCode-ReferenzOutput
1. Ticker Input User gibt Symbol ein oder klickt Asset-Button input#symbolInput, setAsset('TSLA.US') globalApiSymbol = 'TSLA.US'
2. API-Fetch fetch(gemini-os.replit.app/api/eod?symbol=...) runAnalysis() / loadMarkovData() JSON-Array mit OHLCV-Candles
3. State-Klassifikation Jede Candle → binärer State (G/R) oder 4-State (Rv/RV/Gv/GV) buildTransitionMatrix() states[] Array
4. Matrix-Aufbau Zähle Transitionen, berechne MLE-Wahrscheinlichkeiten countMatrix[prev][curr]++ P[][] Transitionsmatrix
5. Edge-Berechnung edge = P[G][G] - 0.5 (Bull-Edge) computeEdge() edge float (−0.5 bis +0.5)
6. Kelly-Sizing kelly = edge - (1-edge)/crv oder Citadel-Formel runRiskEngine() kellyPct, totalShares
7. Display Schreibe Ergebnisse in Execution-Panel via .innerHTML = ... executionPanel.innerHTML = ... Sichtbare Ausgabe im Browser
8. TV-Widget Update Neues TradingView.widget() mit dem Symbol erstellen new TradingView.widget({symbol: tvTicker, ...}) Chart aktualisiert

Markov-Matrix-Berechnung — Kern-Algorithmus

Standard-Implementierung (aus MARKOV-PREDICTIONS.html — sauberster Code)
// 1. Candle-States bestimmen
const states = data.map(c => c.close > c.open ? 1 : 0); // 1=Green, 0=Red

// 2. Transitions zählen (MLE)
const countMatrix = [[0,0],[0,0]]; // [prevState][currState]
for (let i = 1; i < states.length; i++) {
  countMatrix[states[i-1]][states[i]]++;
}

// 3. Wahrscheinlichkeiten normalisieren
const P = countMatrix.map(row => {
  const total = row[0] + row[1];
  return total > 0 ? row.map(v => v / total) : [0.5, 0.5];
});
// P[0][1] = P(Green | prev=Red) — Reversal-Wahrscheinlichkeit
// P[1][1] = P(Green | prev=Green) — Continuation-Wahrscheinlichkeit

// 4. Edge aus letztem bekannten State
const lastState = states[states.length - 1];
const edgeRaw = P[lastState][1]; // Prob. dass nächste Candle Green
const edge = edgeRaw - 0.5;     // Normalisiert: -0.5 bis +0.5

// 5. Kelly-Fraction
const crv = 2.0; // Chance-Risk-Ratio
const kelly = edge > 0 ? edge - (1 - edgeRaw) / crv : 0;
const kellyPct = Math.min(kelly * 100, 35); // 35% Hard Cap
MARKOV STACK API REFERENCE v1.0 // CLAUDE SONNET 4.6 // 2026-06-16