Download tick data from Dukascopy Bank SA to local cache, and simulate multi-symbol time-ordered price streams to stdout.
Project description
tickterial: forex & cfd tick data
Download and cache tick data from Dukascopy Bank SA.
Installation ::Python3
pip install tickterial
Example multi-symbol stream download:
$ tickterial --symbols GBPUSD EURUSD USDJPY XAUUSD --start '2024-04-08 17:00:00' --end '2024-04-10 00:00:00' --progress true
timestamp, symbol, ask-price, bid-price, ask-volume, bid-volume
...
1712696398.152,GBPUSD,1.26785,1.26774,900000,900000
1712696398.192,USDJPY,1.51808,1.51759,1800000,1800000
1712696398.295,XAUUSD,2353.505,2352.835,90,470
1712696398.343,USDJPY,1.51808,1.51755,1800000,1800000
...
- Easy, normalized prices, multi-currency, simultaneous and ordered price output!
Why the name?
I thought of tick material as a replacement for tick-data, which has been used way too many times already, both in research and code.
What & how the code works:
This python module downloads tick data on request and caches downloads to disk for subsequent calls. Finally, a quick and easy historical data collection for backtesting your forex trading algorithms! Currency pairs(tested) and more(untested) instruments on this page are supported. Email me for requests. Note that this code respects their API rate-limits. As such, asyncronous frameworks like aiohttp largely returned errors, before I settled for a syncronous. A work-around is to use a list of proxies for each individual request (planned).
Usage
Two modes are supported.
- As a commandline program with arguments (python's argparse is beautiful!)
- Embedded in your python code.
Usage example 1: Module usage
from datetime import datetime
from tickterial import Tickloader
def test_download():
tickloader = Tickloader()
period = datetime(hour=17, day=8,month=4, year=2024)
print(period.ctime())
#
ticks = list()
if data := tickloader.download('GBPUSD', period):
for tick in data:
ticks.append(tick)
if ticks:
print(f'{period} tick count: {len(ticks)}')
print(ticks[0])
else:
print('No data!')
test_download()
print('--end--')
#output:
# {'timestamp': 1689631196.875, 'ask': 1.30788, 'bid': 1.30778, 'ask-vol': 900000, 'bid-vol': 900000}
Usage example 2: Commandlie program
pip install tickterial
tickterial -h
to check supported arguments.- The Makefile in the project root directory has a sample invocation that downloads ticks for listed symbols and timeframes, streaming to stdout.
- For multi-symbol downloads, the streams are ordered by timestamp(wow!). You can stream ordered prices for say EURUSD, GBPUSD etc
# Output format is: <timestamp, symbol, ask, bid, ask-volume, bid-volume>,[repeated if multiple symbols at same timestamp]
#Sample output:
1712696398.152,GBPUSD,1.26785,1.26774,900000,900000
1712696398.192,USDJPY,1.51808,1.51759,1800000,1800000
1712696398.295,XAUUSD,2353.505,2352.835,90,470
1712696398.343,USDJPY,1.51808,1.51755,1800000,1800000
#When multiple ticks exist in the same timestamp, the output is concatenated as such:
1712696267.989,EURUSD,1.0857,1.08569,990000,900000,1712696267.989,GBPUSD,1.26778,1.26769,900000,900000
- Keeping track of the number of
,
should allow easy partitioning of the ticks for backtesting systems. -My next project. ;)
TODO
- Add console functionality - Done!
- Use proxies to perform async downloads. - Planned
Notes
- Cache is store in UTC. Pass your UTC time difference as last parameter to
tickloader.download
to fix local time offset. - Tick data can only be fetched to the previous hour. Current hour returns 404, thus ignored.
- Cache is stored in current working directory(default), path =
$(pwd)/.tick-data
. Move this directory when migrating to keep your downloaded data.
Support the project
I couldn't pay for my college. I therefore learn on my own to create amazing software that can impact this world ways I can. A little help will offload my bills and give me more working time.
- You can paypal at me:
ngaira14nelson@gmail.com
- Contact me for requests, optimizations, pull-requests and every other interesting topic.
for the spirit of opensource:
#drui9```
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file tickterial-1.1.1.tar.gz
.
File metadata
- Download URL: tickterial-1.1.1.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4437400b7bd5b83c307c6bbfeae87502c08f5e076da38d93d5d4bf67a507669b |
|
MD5 | bcfc9aeff47716d27e97cab1a1b3c5ab |
|
BLAKE2b-256 | d881c2a7aac711ec3b473e13388445eed551f7846fc6ce5a3c41d7c328c57d49 |
File details
Details for the file tickterial-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: tickterial-1.1.1-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ffdbe4934c08dcb5a2499c79a7f564a4c5b7367e9225d63b3ef481c76b31e143 |
|
MD5 | 43360fc16aa9c06840182aa69b5db004 |
|
BLAKE2b-256 | 7ff61f9960d1d5affd2c53e4f5e7033b72ae2fe1afeb85bf7eb602d1f5a23ceb |