Sign inSign up

andyxtreme/aktien-prognose

By andyxtreme

Updated 5 days ago

Image
0

1.0K

andyxtreme/aktien-prognose repository overview

Support

If this edition helps you, I'd appreciate a small donation – thank you! ☕

Ko-fi

Aktien-Prognose

Kleine Weboberfläche im Container: Aktie suchen, Chart ansehen, und auswerten lassen, wann in den vergangenen Jahren der günstigste Kauf- bzw. Verkaufsmonat lag – mit Signifikanztest, statt nur den schönsten Rückblick zu zeigen. Dazu Nachrichtenlage aus RSS-Feeds, Quartalstermine, Kosten- und Positionsrechnung und eine Reihenprüfung über ganze Indizes.

Alles auf Deutsch, dunkler Stil, keine Anmeldung, keine Cloud, keine Datenbank.


Schnellstart

docker run -d --name aktien-prognose \
  -p 8093:8081 \
  -v ./config:/config \
  -v ./data:/data \
  -e TZ=Europe/Berlin \
  andyxtreme/aktien-prognose:latest

Danach: http://localhost:8093

Mit Compose:

services:
  prognose:
    image: andyxtreme/aktien-prognose:1.11
    container_name: aktien-prognose
    environment:
      - TZ=Europe/Berlin
      # --- Sprachmodell (optional) --------------------------------------
      # Angesprochen wird die OpenAI-Schnittstelle (/v1/chat/completions),
      # also läuft hier Ollama ebenso wie llama.cpp, vLLM oder LM Studio.
      # Einzutragen ist nur der Server, ohne Pfad – den hängt das Programm
      # selbst an. "localhost" wäre aus dem Container heraus der Container
      # selbst; es muss die LAN-Adresse sein.
      #
      # Was hier steht, schlägt die config.yaml, ohne sie zu verändern.
      # Umgekehrt heißt das: Solange MODELL_ENABLED hier steht, ist diese
      # Datei der Hebel, nicht die Einstellungsseite.
      # - MODELL_URL=http://192.168.x.y:11434
      # - MODELL_MODEL=qwen3:14b
      # - MODELL_ENABLED=true
      # - MODELL_API_KEY=            # bei lokalen Servern leer lassen
      # - MODELL_REASONING_EFFORT=none
    volumes:
      # Verzeichnis statt Einzeldatei: So wirken Änderungen an der
      # Konfiguration ohne Neustart, und der Container kann sie beim ersten
      # Start selbst anlegen.
      - ./config:/config
      # Kurs-Cache und Protokolle. Bleibt erhalten, damit nach einem Neustart
      # nicht alle Kurse erneut bei Yahoo geholt werden müssen.
      - ./data:/data
    ports:
      - "8093:8081"
    restart: unless-stopped

CONFIG_PATH, DATA_PATH und PORT müssen nur gesetzt werden, wenn von den Standardwerten abgewichen wird – siehe Tabelle unten.


Schnittstellen

Port8081 im Container
/configKonfiguration und Watchlist. Beim ersten Start wird eine kommentierte Vorlage hineinkopiert, eine vorhandene Datei nie überschrieben.
/dataKurs-Cache, Reihenprüfung und die mitgeschriebenen Protokolle. Darf verloren gehen – Kurse werden dann neu geholt, ein Reihenlauf dauert allerdings eine gute Viertelstunde, und die Protokolle beginnen von vorn.
Healthcheckist im Image enthalten, prüft /health
Umgebungsvariablen
VariableStandardZweck
TZUTCZeitzone – sonst stimmen Handelstage und Termine nicht
PORT8081Port im Container
CONFIG_PATH/config/config.yamlOrt der Konfiguration
DATA_PATH/dataOrt des Caches
MODELL_URLaus der DateiAdresse des Sprachmodells
MODELL_MODELaus der DateiModellname
MODELL_ENABLEDaus der Dateifalse schaltet das Sprachmodell ab
MODELL_API_KEYaus der DateiZugangsschlüssel, bei lokalen Servern leer
MODELL_REASONING_EFFORTnoneDenkaufwand: none, minimal, low, medium, high

Die MODELL_* schlagen die config.yaml, ohne sie zu verändern. Gedacht für den Fall, dass das Image auf einem fremden Rechner startet, dessen Sprachmodell woanders steht. Umgekehrt heißt das: Solange MODELL_ENABLED gesetzt ist, ist die Compose-Datei der Hebel. Die alten Namen OLLAMA_URL, OLLAMA_MODEL und OLLAMA_ENABLED gelten weiter.

Alles Übrige zum Modell – Denkaufwand, Zeitgrenzen, Zugangsschlüssel, Zusatzfelder – steht in der Oberfläche unter /einstellungen, mit einem Knopf, der die Verbindung prüft und den Fehler im Klartext nennt. Gewichte der Ampel, Nachrichtenquellen, Gebührenmodell und Watchlist stehen in /config/config.yaml; die Datei ist durchgehend kommentiert, Änderungen wirken ohne Neustart.


Sprachmodell (optional)

Für den Lagebericht auf Knopfdruck und die Bewertung der Schlagzeilen kann ein Sprachmodell angebunden werden. Ohne läuft alles weiter – die Schlagzeilen werden dann über Wortlisten bewertet.

Angesprochen wird die OpenAI-Schnittstelle (/v1/chat/completions), es läuft also Ollama ebenso wie llama.cpp, vLLM, LM Studio, Jan oder LocalAI. Einzutragen ist nur die Serveradresse; den Pfad hängt das Programm an. Was ein einzelner Server darüber hinaus braucht, kann als Zusatzfeld durchgereicht werden.

Denkaufwand. Fünf Stufen von none bis high, dazu „nicht senden" für Server, die das Feld nicht kennen. Der Standard ist bewusst none: In eigenen Messungen lieferte Nachdenken bei beiden Aufgaben schlechtere Ergebnisse – unvollständigere Lageberichte und erfundene Prozentzahlen – und kostete das Zweieinhalbfache an Zeit. Wer über Ollama anbindet, sollte außerdem wissen, dass die Zwischenstufen dort gar nicht ankommen: Ollama ersetzt die Vorlage des Modells durch eine eigene, und die Dosierung steckt in der verworfenen. Übrig bleibt an und aus.

Zwei Stolpersteine:

  • localhost ist aus dem Container heraus der Container selbst. Es muss die LAN-Adresse des Ollama-Rechners sein.
  • Ollama lauscht in der Grundeinstellung nur lokal. Damit ein Container es erreicht, braucht es dort OLLAMA_HOST=0.0.0.0.

Voraussetzung: fc.yahoo.com darf nicht blockiert sein

Kennzahlen, Quartalstermine und Analystendaten kommen über eine Yahoo-Endstelle, die vorher ein Cookie von fc.yahoo.com braucht. Etliche DNS-Filter (Pi-hole, AdGuard, NextDNS) sperren diesen Host als Werbedomain – die Kurse und Charts laufen dann normal weiter, die Kennzahlen bleiben aber kommentarlos leer.

Prüfen:

docker exec aktien-prognose python -c "import socket;print(socket.gethostbyname('fc.yahoo.com'))"

Kommt 0.0.0.0 zurück, ist der Host gesperrt und gehört auf die Ausnahmeliste.


Was drin ist

  • Ampel aus Technik, Saison und Nachrichten – jeder Baustein einzeln im Klartext begründet, und mit einer Spalte dazu, ob seine Wirkung tatsächlich gemessen wurde. Der Technikbaustein ist es nicht; das steht auch so da.
  • Bester Kauf-/Verkaufsmonat mit Permutationstest über alle 132 möglichen Fenster, dazu Vorwärtstest und Index-Vergleich. Findet sich nichts, sagt die Auswertung ausdrücklich nichts – das ist der eigentliche Punkt.
  • Reihenprüfung über DAX, MDAX, TecDAX, EURO STOXX 50 und S&P 500 mit FDR-Korrektur (Benjamini-Hochberg), weil 700 Einzeltests sonst allein durch Zufall rund 35 „Treffer" liefern.
  • Score und Kurs im Verlauf: Je Watchlist-Wert und Handelstag wird der Score mitgeschrieben und gegen die folgende Kursentwicklung gerechnet. Weil auch die Ampel selbst eine Behauptung ist, die man prüfen kann. Festgehalten wird ein Tag erst, wenn sein Schlusskurs feststeht – der laufende Tag kommt in der Nacht danach dazu. In der Auswertung über die Watchlist wird jede Aktie mit sich selbst verglichen, damit zehn Aktien nicht als hunderte Bestätigungen zählen.
  • Nachrichtenlage aus RSS-Feeds, mit Messung, ob das Signal je gewirkt hat.
  • Kosten und Steuern, Positionsgröße, Bandbreite, Quartalstermine, relative Stärke, Analystenkonsens (nur zur Ansicht, ohne Wertung).
  • Umrechnung in Euro zum Kurs des jeweiligen Handelstages.

Alles Aufwendige läuft im Hintergrund: Ein Klick liest ab, was der Tageslauf vorbereitet hat. Ändert sich im Laufe des Tages der Kursstand, zeigt er das letzte fertige Ergebnis und die neue Rechnung läuft nebenher – gewartet wird nicht.

Was es nicht ist

Kein Broker-Zugang, keine Orderfunktion, keine Anlageberatung. Das Programm rechnet Vergangenes nach und sagt, wie viel davon Zufall sein kann. Mehr nicht.


Neu in 1.11

  • Score-Protokoll ohne Lücken. Aufgezeichnet wird aus einem eigenen Stand zum Schluss des letzten abgeschlossenen Handelstags. Bisher konnte ein Seitenaufruf oder Neustart während der Börsenzeit dazu führen, dass der Vortag fehlte. Schon entstandene Lücken lassen sich nicht nachholen.
  • Echte Kurse im Verlauf. Kurs und Tagesveränderung im Diagramm kommen aus der fertigen Kursreihe. Bei Werten in Fremdwährung lag der mitgeschriebene Euro-Kurs bis zu 0,6 % daneben, weil der Wechselkurs morgens noch nicht feststeht.
  • Deutlichere Balken. Die Balken sind grau (oben gestiegen, unten gefallen). Ob der Score vom Vortag gepasst hat, zeigt ein grüner Haken oder ein rotes Kreuz – bei langen Zeiträumen ein Punkt. Die beiden Farben unterscheiden sich auch in der Helligkeit.
  • Ehrlichere Auswertung über mehrere Aktien. Score-Verlauf und Nachrichtengüte vergleichen jede Aktie mit sich selbst. Ohne diese Korrektur meldete der Test in einer Simulation ohne echten Zusammenhang nach zwei Jahren in 14 % der Fälle einen Treffer statt in 5 %.
  • Schnellere Aktienseiten. Einzelne Werte brauchten beim ersten Klick bis zu sechs Sekunden, weil sich der Kursstand nach dem nächtlichen Vorrechnen geändert hatte. Auch Stammdaten wie KGV und Branche werden jetzt im Hintergrund erneuert.

Zeilen im Score-Protokoll aus der Zeit vor 1.10, die während der laufenden Börsensitzung entstanden sind, bleiben in /data/verlauf.jsonl stehen, zählen aber nicht mehr mit. Löschen muss man nichts.


Tags

Tag
latestjeweils aktueller Stand
1.11feste Version

Vollständige Dokumentation – jede Kennzahl, jeder Test, jede Konfigurationsoption – liegt als README.md im Quellverzeichnis des Projekts.

Tag summary

Content type

Image

Digest

sha256:e36a39f54

Size

112.2 MB

Last updated

5 days ago

docker pull andyxtreme/aktien-prognose