Guide DataFeed Dukascopy
La librairie Dukascopy fournit l'accès à des données de marché historiques gratuites de Dukascopy Bank SA, couvrant plus de 1600 instruments financiers.
Qu'est-ce que Dukascopy ?
Dukascopy Bank SA est une banque suisse qui fournit des données de marché historiques gratuites (ticks et bars) via ses serveurs publics. La librairie Dukascopy de TheoryCraft facilite le téléchargement et le streaming de ces données directement dans vos pipelines de backtesting.
Cela fait de Dukascopy une source de données idéale pour backtester des stratégies sur le forex, les actions, les matières premières et les cryptomonnaies.
Instruments Disponibles
| Catégorie | Exemples | Nombre |
|---|---|---|
| Forex Majors | EUR/USD, GBP/USD, USD/JPY | 7 |
| Forex Crosses | EUR/GBP, GBP/JPY, AUD/NZD | 290+ |
| Métaux | XAU/USD (Or), XAG/USD (Argent) | 50+ |
| Actions | AAPL.US/USD, MSFT.US/USD, GOOGL.US/USD | 1000+ |
| Matières premières | Pétrole, Gaz Naturel | 10+ |
| Agricoles | Blé, Maïs, Soja | 6 |
Installation
En tant que Librairie
Ajoutez à votre mix.exs :
def deps do
[
{:dukascopy, github: "theorycraft-trading/dukascopy"}
]
end
En tant qu'Outil CLI
Installez l'interface en ligne de commande :
$> mix escript.install github theorycraft-trading/dukascopy
Utilisation CLI
Le CLI fournit deux commandes : download et search.
Rechercher des Instruments
Trouvez les instruments disponibles par symbole :
# Rechercher les paires EUR
$> dukascopy search EUR
# Rechercher l'action Apple
$> dukascopy search AAPL
# Rechercher Bitcoin
$> dukascopy search BTC
Télécharger des Données
Téléchargez des données historiques dans différents formats :
# Données journalières EUR/USD pour 2024
$> dukascopy download -i EUR/USD --from 2024-01-01 --to 2024-12-31
# Barres 5 minutes en format JSON
$> dukascopy download -i EUR/USD -t m5 --from 2024-01-01 -f json
# Données tick (très granulaires)
$> dukascopy download -i EUR/USD -t tick --from 2024-01-01 --to 2024-01-02
# Données horaires Or avec prix ask
$> dukascopy download -i XAU/USD -t h1 --from 2024-01-01 -p ask
Options CLI
| Flag | Défaut | Description |
|---|---|---|
-i, --instrument |
- | Symbole de l'instrument (requis) |
--from |
- | Date de début AAAA-MM-JJ (requis) |
--to |
now | Date de fin (AAAA-MM-JJ ou "now") |
-t, --timeframe |
D | tick, m1, m5, m15, m30, h1, h4, D, W, M |
-p, --price-type |
bid | bid, ask, mid |
-v, --volume-units |
millions | millions, thousands, units |
--flats |
false | Inclure les barres à volume zéro |
-f, --format |
csv | csv, json, ndjson, none |
-o, --output |
./download | Répertoire de sortie |
--filename |
- | Nom de fichier personnalisé (sans extension) |
-s, --silent |
false | Pas de sortie en-tête |
--timezone |
Etc/UTC | Fuseau horaire (ex : America/New_York) |
--utc-offset |
0 | Décalage UTC en minutes |
--market-open |
00:00:00 | Heure d'ouverture du marché (HH:MM:SS) |
--weekly-open |
monday | Jour de début de semaine |
--batch-size |
10 | Téléchargements parallèles par batch |
--batch-pause |
1000 | Pause entre les batches (ms) |
--cache |
false | Activer la mise en cache |
--cache-path |
.dukascopy-cache | Chemin du dossier de cache |
--retries |
3 | Tentatives par requête |
--retry-pause |
500 | Pause entre les tentatives (ms) |
--proxy |
- | URL du proxy (http://[user:pass@]host:port ou socks5://host:port) |
--continue-on-error |
false | Continuer malgré les erreurs (ATTENTION : peut causer des gaps de données) |
-h, --help |
- | Afficher l'aide |
API Elixir
Module Instruments
iex> alias Dukascopy.Instruments
iex> Instruments.all()
["EUR/USD", "GBP/USD", "AAPL.US/USD", ...]
iex> Instruments.forex() # Tout le forex
iex> Instruments.forex_majors() # EUR/USD, GBP/USD, USD/JPY, etc.
iex> Instruments.forex_crosses() # EUR/GBP, GBP/JPY, etc.
iex> Instruments.metals() # XAU/USD, XAG/USD, etc.
iex> Instruments.stocks() # AAPL.US/USD, MSFT.US/USD, etc.
iex> Instruments.commodities() # Pétrole, Gaz Naturel, etc.
iex> Instruments.agriculturals() # Blé, Maïs, etc.
iex> Instruments.search("XAU")
["XAU/USD"]
iex> Instruments.search("AAPL")
["AAPL.US/USD"]
Streaming de Données
La fonction Dukascopy.stream/3 crée un stream lazy de données de marché.
iex> stream = Dukascopy.stream("EUR/USD", :tick, from: ~D[2024-01-01], to: ~D[2024-01-02])
iex> for tick <- stream do
...> IO.puts("#{tick.time}: bid=#{tick.bid} ask=#{tick.ask}")
...> end
2024-01-01 00:00:00.123Z: bid=1.10452 ask=1.10455
2024-01-01 00:00:00.456Z: bid=1.10453 ask=1.10456
2024-01-01 00:00:00.789Z: bid=1.10451 ask=1.10454
...
iex> stream = Dukascopy.stream("EUR/USD", :m5, from: ~D[2024-01-01], to: ~D[2024-01-31])
iex> for bar <- stream do
...> IO.puts("#{bar.time}: O=#{bar.open} H=#{bar.high} L=#{bar.low} C=#{bar.close}")
...> end
2024-01-01 00:00:00Z: O=1.10450 H=1.10480 L=1.10445 C=1.10472
2024-01-01 00:05:00Z: O=1.10472 H=1.10495 L=1.10468 C=1.10491
2024-01-01 00:10:00Z: O=1.10491 H=1.10502 L=1.10485 C=1.10498
...
Options de Stream
Plage de Dates (requis) :
Fournissez soit :from et :to (intervalle semi-ouvert [from, to)) soit :date_range (inclusif Date.Range).
# Avec from/to
iex> Dukascopy.stream("EUR/USD", :h1, from: ~D[2024-01-01], to: ~D[2024-02-01])
# Avec date_range
iex> Dukascopy.stream("EUR/USD", :h1, date_range: Date.range(~D[2024-01-01], ~D[2024-01-31]))
Toutes les Options :
| Option | Défaut | Description |
|---|---|---|
:price_type |
:bid |
:bid, :ask, ou :mid |
:timezone |
"Etc/UTC" |
Chaîne de fuseau horaire (supporte DST) |
:volume_units |
:millions |
:millions, :thousands, ou :units |
:ignore_flats |
true |
Ignorer les barres à volume zéro |
:batch_size |
10 |
Requêtes parallèles par batch |
:pause_between_batches_ms |
1000 |
Délai entre les batches (ms) |
:use_cache |
false |
Activer la mise en cache |
:cache_folder_path |
".dukascopy-cache" |
Répertoire de cache |
:max_retries |
3 |
Tentatives par requête |
:market_open |
~T[00:00:00] |
Heure d'ouverture du marché pour l'alignement |
:weekly_open |
:monday |
Jour de début de semaine |
Types de Prix
iex> Dukascopy.stream("EUR/USD", :h1, price_type: :bid, from: ~D[2024-01-01]) # Bid (défaut)
iex> Dukascopy.stream("EUR/USD", :h1, price_type: :ask, from: ~D[2024-01-01]) # Ask
iex> Dukascopy.stream("EUR/USD", :h1, price_type: :mid, from: ~D[2024-01-01]) # Mid
Intégration avec TheoryCraft
Utilisez Dukascopy.DataFeed comme source de données dans votre pipeline MarketSource :
iex> alias TheoryCraft.MarketSource
iex> opts = [
...> instrument: "EUR/USD",
...> granularity: :tick,
...> from: ~D[2024-01-01],
...> to: ~D[2024-01-31]
...> ]
iex> market =
...> %MarketSource{}
...> |> MarketSource.add_data({Dukascopy.DataFeed, opts}, name: "EURUSD")
...> |> MarketSource.resample("m5", name: "EURUSD_m5")
...> |> MarketSource.resample("h1", name: "EURUSD_h1")
iex> for event <- MarketSource.stream(market) do
...> IO.inspect(event)
...> end
Référence des Timeframes
Les timeframes peuvent être des atomes ou des chaînes (ex : :m5 ou "m5").
Le 1 est optionnel : D1 = D, h1 = h, etc...
| Pattern | Description | Exemples |
|---|---|---|
:tick |
Données tick brutes | ticks |
t<N> |
N ticks par barre | t5, t100 |
s<N> |
Barres de N secondes | s30 |
m<N> |
Barres de N minutes | m1, m5, m15, m30 |
h<N> |
Barres de N heures | h1, h4 |
D<N> |
Barres de N jours | D, D3 |
W<N> |
Barres de N semaines | W |
M<N> |
Barres de N mois | M |
Conseils et Bonnes Pratiques
Utilisez le Cache
Activez la mise en cache pour éviter les téléchargements redondants :
iex> Dukascopy.stream("EUR/USD", :h1,
...> from: ~D[2024-01-01],
...> to: ~D[2024-06-30],
...> use_cache: true
...> )
$> dukascopy download -i EUR/USD -t h1 --from 2024-01-01 --to 2024-06-30 --cache
Commencez par les Timeframes Supérieurs
Commencez par les timeframes supérieurs pour un prototypage rapide, puis passez aux timeframes inférieurs pour des données plus précises :
# Itération rapide pendant le développement
iex> Dukascopy.stream("EUR/USD", :D, from: ~D[2020-01-01], to: ~D[2024-01-01])
# Données détaillées pour les tests finaux
iex> Dukascopy.stream("EUR/USD", :m1, from: ~D[2024-01-01], to: ~D[2024-03-01])
# Itération rapide pendant le développement
$> dukascopy download -i EUR/USD -t D --from 2020-01-01 --to 2024-01-01
# Données détaillées pour les tests finaux
$> dukascopy download -i EUR/USD -t m1 --from 2024-01-01 --to 2024-03-01
Gérez les Horaires de Marché
Les marchés forex ferment le weekend. Vos données auront des gaps du vendredi soir au dimanche soir.
Prochaines Étapes
- Comprendre les DataFeeds - Apprenez les concepts de DataFeed
- Visualisation avec Kino - Visualisez vos données téléchargées