Dokumentation

DataConvert

Ein kostenloses, quelloffenes Tool, das historische Kursdaten aus CSV-Dateien in partiqons BAR6-Binärformat umwandelt. Läuft vollständig auf deinem Rechner. Deine Rohdaten verlassen nie dein Gerät.

Download: github.com/hangmann/bar6-dataconvert · Erfordert Python 3.9 oder neuer.

Schritt 1: Python installieren

DataConvert ist ein Python-Skript. Python unter python.org herunterladen (Version 3.9 oder neuer). Während der Installation das Häkchen bei „Add Python to PATH" setzen.

Zum Testen: Ein Terminal öffnen (Windows: Win + R, dann cmd eingeben und Enter drücken) und tippen:

python --version

Es erscheint z.B. Python 3.11.5. Jede Version 3.9+ funktioniert.

Schritt 2: DataConvert herunterladen

Auf github.com/hangmann/bar6-dataconvert die ZIP-Datei herunterladen (grüner Code-Button → Download ZIP). ZIP entpacken, z.B. nach C:\DataConvert.

Benötigt wird nur die Datei dataconvert.py.

Schritt 3: Deine Kursdaten

partiqon ist eine Bring-Your-Own-Data-Plattform. Es werden historische Kursdaten für das zu testende Instrument benötigt: Daten, die du selbst aufgezeichnet, aus deinem eigenen Handelskonto exportiert oder anderweitig zu nutzen berechtigt bist.

Wir nennen keine spezifischen Datenquellen. Entscheidend ist, dass die Daten in einem Format vorliegen, das DataConvert lesen kann (siehe Formattabelle unten), und dass du das Recht zur Nutzung für deinen eigenen Test hast.

Schritt 4: DataConvert ausführen (GUI, am einfachsten)

Ein Terminal im DataConvert-Ordner öffnen (Windows: Shift gedrückt halten, Rechtsklick auf den Ordner → „PowerShell-Fenster hier öffnen") und ausführen:

python dataconvert.py

Ein Fenster öffnet sich. Felder ausfüllen:

Auf Convert & Write .bin klicken. Das Log unten zeigt den Fortschritt. Wenn „DONE" erscheint, ist die Datei fertig.

Schritt 4 (Alternative): Kommandozeile

Wer lieber die Kommandozeile nutzt:

python dataconvert.py INPUT.csv OUTPUT.bin --symbol EURUSD --tf 5

INPUT.csv durch die eigene Datei ersetzen, OUTPUT.bin durch den Speicherort, EURUSD durch den Symbolnamen und 5 durch den Timeframe in Minuten.

Häufige Beispiele

# Tick-CSV → M5-Bars python dataconvert.py my_ticks.csv EURUSD_M5.bin --symbol EURUSD --tf 5 # MT4 Bar-CSV python dataconvert.py bars.csv DAX_M1.bin --symbol DAX40 --tf 1 --format mt4 # Generische OHLCV-CSV (Auto-Erkennung) python dataconvert.py my_bars.csv BTCUSDT_H1.bin --symbol BTCUSDT --tf 60 # Vorhandene .bin-Datei prüfen python dataconvert.py --info my_data.bin

Schritt 5: In partiqon hochladen

Im partiqon-Workspace das Panel Settings öffnen, bestätigen, dass dir die Daten gehören (oder du sie nutzen darfst), und die .bin-Datei in den Upload-Bereich ziehen. partiqon liest Symbol und Timeframe aus dem Datei-Header und prüft, ob die Datei gültig ist.

Unterstützte Eingabeformate

FormatnameWas es verarbeitet
kein --formatErkennt das Format anhand von Dateiendung und Inhalt (empfohlen). In der GUI ist das die Auswahl auto.
dukascopyDukascopy-Tick-CSV (LocalTime, Ask, Bid, AskVolume, BidVolume)
mt4 / mt5MetaTrader-4/5-Bar-CSV
mt4hstMT4-Binär-History-Datei (.hst)
tradingviewTradingView-Export (time, open, high, low, close, volume)
ninjatraderNinjaTrader-Bar-CSV
tradestationTradeStation-EasyLanguage-Bar-CSV
binanceBinance-Klines (data.binance.vision, Zeitstempel in Millisekunden)
bybitBybit-/Kraken-/Coinbase-OHLCV-CSV (Unix-Zeitstempel in Sekunden)
genericBeliebige OHLCV-CSV; erkennt die Spalten selbst, oder in der GUI „Map Columns“ verwenden
⚠ Wenn die Auto-Erkennung fehlschlägt: GUI öffnen und die Schaltfläche Map Columns… verwenden, um DataConvert manuell mitzuteilen, welche Spalte Datum, Open, High, Low und Close enthält. Die meisten Edge-Case-CSVs lassen sich so lösen.

Häufige Fragen

Mein CSV hat ein ungewöhnliches Datumsformat. Funktioniert das?

Wahrscheinlich ja. DataConvert erkennt DD.MM.YYYY, YYYY-MM-DD, MM/DD/YYYY, NinjaTraders YYYYMMDD HHMMSS, Unix-Timestamps in Sekunden und Unix-Timestamps in Millisekunden. Für andere Formate das Generic-Format mit Map Columns verwenden.

Wie groß wird die .bin-Datei?

Bar-Dateien verwenden 56 Bytes pro Bar. Ein 5-Jahres-M5-Datensatz (≈260.000 Bars) ist etwa 14 MB. Tick-Dateien verwenden 32 Bytes pro Tick; ein Jahr dichter FX-Tick-Daten liegt typischerweise im Bereich von 500 MB–1 GB, je nach Instrument.

Kann ich Tick-Daten für Backtests verwenden?

Ja. Wenn deine Daten als Tick-CSV (Bid/Ask pro Tick) vorliegen, das Flag --ticks hinzufügen, um Roh-Ticks statt aggregierter Bars zu speichern:

python dataconvert.py ticks.csv MY_TICKS.bin --symbol EURUSD --tf 5 --ticks

Mit --ticks wird der Wert von --tf ignoriert. Eine Tick-Datei wird Tick für Tick gebacktestet; wer mit Bars arbeiten will, fügt dem Graphen einen Aggregator.TickToBar-Block hinzu.

DataConvert verweigert meine Datei: „the records are not in time order"

DataConvert schreibt keine .bin, deren Datensätze zeitlich nicht vorwärts laufen, denn jeder Verbraucher (die Backtest-Engine eingeschlossen) liest sie so. Die Meldung nennt die betroffenen Datensätze mit ihren exakten Zeitstempeln. Die üblichen Ursachen:

DataConvert verweigert meine Datei: zwei Bars mit demselben Zeitstempel

Zwei Bars mit derselben Minute würden diese Minute in jedem Backtest doppelt zählen. Deshalb bricht die Konvertierung ab, statt eine Datei zu erzeugen, die intakt aussieht. Die übliche Ursache sind zwei Exporte mit überlappenden Zeiträumen.

Die zweite Ursache war die Zeitumstellung im Herbst; die wird jetzt automatisch aufgelöst. Formate mit bloßer lokaler Uhrzeit (MT4/MT5, NinjaTrader, TradeStation, Generic) enthalten die wiederholte Stunde zweimal unter derselben Bezeichnung. Wird --tz ein Zonenname übergeben (etwa Europe/Helsinki oder Europe/Berlin), kennt DataConvert die Umstellungszeitpunkte dieser Zone und liest die zweite Kopie der Stunde anhand ihrer Position in der Datei als die wiederholte. Nichts zu bearbeiten.

Ein fester Offset (--tz +02:00) hat keine Umstellungen und kann die beiden Kopien deshalb nicht unterscheiden. Dann bricht die Konvertierung weiterhin ab. Wenn die Serveruhr des Brokers die Sommerzeit mitmacht, den Zonennamen statt des Offsets übergeben. Wenn sie es wirklich nicht tut, ist der Offset richtig und ein Duplikat ist tatsächlich ein überlappender Export.

DataConvert verweigert meine Datei: eine Uhrzeit, die es nicht gibt

Am Morgen der Umstellung nach vorne wird eine Stunde Lokalzeit übersprungen. In Europe/Helsinki sprang die Uhr am 31. März 2024 direkt von 03:00 auf 04:00; keine Uhr in dieser Zone zeigte an diesem Tag also 03:30. Eine Zeile mit so einer Bezeichnung lässt sich nicht umrechnen, nur erfinden, und der erfundene Zeitpunkt ist genau derjenige, den die echte Zeile eine Stunde später schon hat.

Fast immer heißt das, dass --tz nicht die Zone der Datei ist: ein Broker, dessen Serveruhr keine Sommerzeit kennt, gelesen als Zone, die sie kennt. Dann den festen Offset dieses Servers übergeben (--tz +02:00) oder die Zone, in der die Datei wirklich exportiert wurde. Die Meldung nennt die Zeilen.

„Python is not recognized": Was tun?

Python ist nicht im System-PATH. Python von python.org neu installieren und dabei „Add Python to PATH" aktivieren. Alternativ Python manuell suchen: unter Windows in C:\Users\DeinName\AppData\Local\Programs\Python nach python.exe suchen und den vollständigen Pfad verwenden.