Skip to main content

Download tick data from Dukascopy Bank SA to local cache, and simulate multi-symbol time-ordered price streams to stdout.

Project description

cover

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

tickterial-1.1.1.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

tickterial-1.1.1-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

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

Hashes for tickterial-1.1.1.tar.gz
Algorithm Hash digest
SHA256 4437400b7bd5b83c307c6bbfeae87502c08f5e076da38d93d5d4bf67a507669b
MD5 bcfc9aeff47716d27e97cab1a1b3c5ab
BLAKE2b-256 d881c2a7aac711ec3b473e13388445eed551f7846fc6ce5a3c41d7c328c57d49

See more details on using hashes here.

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

Hashes for tickterial-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ffdbe4934c08dcb5a2499c79a7f564a4c5b7367e9225d63b3ef481c76b31e143
MD5 43360fc16aa9c06840182aa69b5db004
BLAKE2b-256 7ff61f9960d1d5affd2c53e4f5e7033b72ae2fe1afeb85bf7eb602d1f5a23ceb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page