Programming lesson
Datenbankgestützte Aktienhandelsstrategie mit Java: Ein Tutorial für CSCI 330
Lerne, wie du mit Java und MySQL eine Aktienhandelsstrategie implementierst, die auf gleitenden Durchschnitten basiert. Dieses Tutorial führt dich durch die Datenbankverbindung, Split-Bereinigung und die Berechnung von Gewinn/Verlust – ideal für die CSCI 330 Assignment 2.
Einführung in die datenbankgestützte Aktienhandelsstrategie
In diesem Tutorial lernst du, wie du mit Java und einer MySQL-Datenbank eine automatisierte Aktienhandelsstrategie umsetzt. Das Szenario basiert auf der Aufgabenstellung CSCI 330 Database Systems Assignment 2, bei der Aktienkursdaten aus der Datenbank johnson330 abgerufen und nach einem vorgegebenen Schema verarbeitet werden. Die Strategie nutzt einen 50-Tage gleitenden Durchschnitt, um Kauf- und Verkaufssignale zu generieren. Dieses Tutorial ist besonders relevant, wenn du dich mit Java-Datenbankprogrammierung, SQL-Abfragen und finanziellen Algorithmen beschäftigst.
Warum ist dieses Thema aktuell?
Im Mai 2026 nutzen viele KI-gestützte Handelsbots ähnliche Strategien, um an der Börse zu agieren. Der Trend zu algorithmischem Trading wächst rasant, und selbst Privatanleger verwenden Python und Java, um ihre eigenen Strategien zu testen. Mit diesem Tutorial legst du den Grundstein für das Verständnis solcher Systeme – ein echter Karrierebooster in der Finanztechnologie.
1. Datenbankverbindung und Konfiguration
Die erste Hürde ist die Verbindung zur entfernten MySQL-Datenbank. Die Aufgabenstellung verwendet eine ConnectionParameters.txt-Datei, um die Anmeldedaten auszulagern. Das erhöht die Sicherheit und erleichtert das Testen in verschiedenen Umgebungen.
Beispiel: ConnectionParameters.txt
dburl=jdbc:mysql://mysql.cs.wwu.edu/johnson330
user=dein_benutzername
password=dein_passwortFür den Zugriff von außerhalb des Campusnetzwerks benötigst du eine VPN-Verbindung und einen SSH-Tunnel. Der Befehl dafür lautet:
ssh -N -p922 -L4321:mysql.cs.wwu.edu:3306 [email protected]Nach erfolgreicher Verbindung änderst du die dburl in der Konfigurationsdatei auf:
dburl=jdbc:mysql://127.0.0.1:4321/johnson3302. Datenbank-Schema verstehen
Die Datenbank enthält zwei relevante Tabellen: company und pricevolume. Die company-Tabelle speichert Firmeninformationen wie Ticker, Name, Branche und Standort. Die pricevolume-Tabelle enthält tägliche Kursdaten: Eröffnungs-, Höchst-, Tiefst- und Schlusskurse sowie Volumen.
Ein SQL-Join beider Tabellen liefert dir alle nötigen Daten für die Strategie. Die Abfrage sollte die Daten in absteigender chronologischer Reihenfolge sortieren, um die Split-Erkennung zu erleichtern.
3. Split-Bereinigung: Ein entscheidender Schritt
Aktiensplits verzerren die Kurshistorie. Bevor du die Handelsstrategie anwendest, musst du die historischen Kurse um Splits bereinigen. Die Aufgabenstellung definiert drei Split-Arten:
- 2:1-Split: Wenn |Cx / Ox+1 – 2,0| < 0,20
- 3:1-Split: Wenn |Cx / Ox+1 – 3,0| < 0,30
- 3:2-Split: Wenn |Cx / Ox+1 – 1,5| < 0,15
Dabei ist Cx der Schlusskurs am Tag x und Ox+1 der Eröffnungskurs am nächsten Handelstag. Die Bereinigung erfolgt durch Division aller Preise (Open, High, Low, Close) ab dem Tag des Splits durch den entsprechenden Faktor. Ein effizienter Algorithmus verwendet einen kumulativen Divisor, der bei jedem Split aktualisiert wird.
4. Die Handelsstrategie: 50-Tage gleitender Durchschnitt
Nach der Bereinigung wendest du die eigentliche Strategie an. Der Kern ist ein 50-Tage gleitender Durchschnitt (SMA50). Für jeden Tag d wird der Durchschnitt der Schlusskurse der letzten 50 Tage (d-50 bis d-1) berechnet. Die Regeln sind:
- Kaufsignal: Wenn der Schlusskurs am Tag d unter dem SMA50 liegt und der Schlusskurs mindestens 3% unter dem Eröffnungskurs des gleichen Tages liegt.
- Verkaufssignal: (wird in der Aufgabenstellung weiter ausgeführt – hier wird das Prinzip gezeigt)
Die Strategie startet mit 0 Cash und 0 Aktien. Käufe werden durch Kredite finanziert. Der Gewinn oder Verlust wird am Ende der Datenperiode berechnet.
5. Implementierung in Java
Hier ein Ausschnitt, wie du die Datenbankabfrage und Split-Bereinigung in Java umsetzen kannst:
// Verbindung herstellen
Connection conn = DriverManager.getConnection(url, user, password);
// Abfrage der Kursdaten in absteigender Reihenfolge
String sql = "SELECT * FROM pricevolume WHERE Ticker = ? ORDER BY TransDate DESC";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, ticker);
ResultSet rs = stmt.executeQuery();
// Daten in Liste speichern und Splits erkennen
List<PriceData> data = new ArrayList<>();
double divisor = 1.0;
while (rs.next()) {
PriceData pd = new PriceData();
pd.date = rs.getDate("TransDate");
pd.open = rs.getDouble("OpenPrice") / divisor;
pd.high = rs.getDouble("HighPrice") / divisor;
pd.low = rs.getDouble("LowPrice") / divisor;
pd.close = rs.getDouble("ClosePrice") / divisor;
data.add(pd);
// Split-Erkennung (vereinfacht)
if (data.size() > 1) {
PriceData prev = data.get(data.size()-2);
double ratio = prev.close / pd.open;
if (Math.abs(ratio - 2.0) < 0.20) {
divisor *= 2;
} else if (Math.abs(ratio - 3.0) < 0.30) {
divisor *= 3;
} else if (Math.abs(ratio - 1.5) < 0.15) {
divisor *= 1.5;
}
}
}6. Gewinn-/Verlustberechnung und Ausgabe
Nachdem die bereinigten Daten vorliegen, berechnest du den gleitenden Durchschnitt und simulierst die Trades. Die Ausgabe sollte den Ticker, den Firmennamen und den Netto-Gewinn/Verlust enthalten. Bei weniger als 51 Datenpunkten wird ein Gewinn von null gemeldet.
Fazit
Dieses Tutorial hat dir gezeigt, wie du eine datenbankgestützte Aktienhandelsstrategie in Java implementierst. Du hast gelernt, wie man eine MySQL-Datenbank anbindet, Aktiensplits bereinigt und einen gleitenden Durchschnitt zur Entscheidungsfindung nutzt. Diese Fähigkeiten sind nicht nur für die Uni-Aufgabe relevant, sondern auch für reale Finanzanwendungen und algorithmische Trading-Systeme. Viel Erfolg bei deiner Implementierung!