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.
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:
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:
Ein Fenster öffnet sich. Felder ausfüllen:
- Input File: Auf Browse klicken und die CSV-Datei (oder .hst) auswählen.
- Format: Auf „auto“ belassen; das erkennt gängige CSV-Formate (MT4, MT5, Tick-CSV, OHLCV usw.) automatisch. Nur ändern, wenn die Auto-Erkennung fehlschlägt.
- Symbol: Der Name in partiqon. Beispiele:
EURUSD,BTCUSDT,DAX40. Kurz halten, keine Leerzeichen. - Timeframe: In Minuten. 1 = M1, 5 = M5, 60 = H1, 1440 = D1. Bei Tick-Daten ist dies das Aggregationsziel.
- Output File: Speicherort der .bin-Datei. Browse klicken für Auswahl.
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:
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
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
| Formatname | Was es verarbeitet |
|---|---|
kein --format | Erkennt das Format anhand von Dateiendung und Inhalt (empfohlen). In der GUI ist das die Auswahl auto. |
dukascopy | Dukascopy-Tick-CSV (LocalTime, Ask, Bid, AskVolume, BidVolume) |
mt4 / mt5 | MetaTrader-4/5-Bar-CSV |
mt4hst | MT4-Binär-History-Datei (.hst) |
tradingview | TradingView-Export (time, open, high, low, close, volume) |
ninjatrader | NinjaTrader-Bar-CSV |
tradestation | TradeStation-EasyLanguage-Bar-CSV |
binance | Binance-Klines (data.binance.vision, Zeitstempel in Millisekunden) |
bybit | Bybit-/Kraken-/Coinbase-OHLCV-CSV (Unix-Zeitstempel in Sekunden) |
generic | Beliebige OHLCV-CSV; erkennt die Spalten selbst, oder in der GUI „Map Columns“ verwenden |
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:
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:
- Zwei Exporte in der falschen Reihenfolge zusammengefügt. Das CSV nach der Zeitstempel-Spalte sortieren und erneut konvertieren.
- Zwei Exporte mit überlappenden Zeiträumen. Die überlappenden Zeilen kommen doppelt vor; in einem der beiden Exporte entfernen.
- Nur bei Roh-Ticks: dieselbe Datei stattdessen zu Bars konvertieren (
--ticksweglassen,--tfangeben) sortiert die Zeilen automatisch.
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.