easyfix
Easy to use, low-boilerplate wrapper for QuickFIX (initiator only for now).
Motivation
Setting up a FIX application with QuickFIX is a lot of boilerplate. This is your easy fix.
This is mainly intended to experiment and explore with a FIX counterparty, or to be used in test cases. There is no effort made to make this suitable in a high performance setting.
Install
pip install easyfix
QuickFIX is not installed automatically, if you don't have it already:
pip install quickfix
Features
- Minimalistic API for quick and no fuss FIX API exploration
- Humanized output: converts enum fields to descriptions -- no more spending hours digging through FIX references
- Automatically set your sequence number to the needed value if your counterparty tells you "MsgSeqNum too low". Just restarting your app if your connection gets hung usually fixes it.
Usage
More examples at example.py
Initiator
import quickfix as fix
import quickfix44 as fix44
import easyfix
# Enable verbose logging for troubleshooting
# easyfix.enable_logging()
# Finally, no need to create a whole class just to connect to a FIX server!
app = easyfix.InitiatorApp.create('example.cfg')
app.start()
while not app.logged_on:
time.sleep(0.1)
print("Logged in!")
# Send message using normal QuickFIX messages
m = fix44.SecurityListRequest()
m.setField(fix.SecurityReqID(str(uuid.uuid4())))
m.setField(fix.SecurityListRequestType(fix.SecurityListRequestType_ALL_SECURITIES))
fix.Session.sendToTarget(m, app.session_id)
# Pull messages from a Queue
while m := app.incoming_messages.get():
# Get field(s) by name
#
# Note that this does not consider repeating group hierarchies and dump
# all fields matching the tag of the name
#
# Example output:
#
# ["SecurityList"]
# ["BTC/USD", "ETH/BTC"]
print(app.get_fields_by_name(m, 'MsgType'))
print(app.get_fields_by_name(m, 'Symbol'))
# Get "nicely" formatted FIX message dump. Enums are automatically converted to descriptions
#
# Example output:
#
# BeginString=FIX.4.4|BodyLength=736|MsgType=SECURITY_LIST(y)|MsgSeqNum=1039|...
print(app.humanize(m))
Verbose logging
You can get dump of FIX messages by enabling logging:
easyfix.enable_logging()
Metadata
Release files for easyfix 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| easyfix-0.1.3.tar.gz | 6.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| easyfix-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.3 kB
Release files / easyfix-0.1.3.tar.gz
| Download URL | easyfix-0.1.3.tar.gz |
|---|---|
| Size | 6.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
17ecffae897ea9a7ecbe20311bdf926a00bd02e2d5acd4449b28e31bb7266fbf
|
|
BLAKE2b-256 checksum How to use checksums |
2877c9e115d9f297f8de154a94f502cb975bf22a3f0b88524c8db13988f10191
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
|
Release files / easyfix-0.1.3-py3-none-any.whl
| Download URL | easyfix-0.1.3-py3-none-any.whl |
|---|---|
| Size | 5.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d08adb104bf02c15bd526998681451d74da7e214beb94d7aef456243d697d8de
|
|
BLAKE2b-256 checksum How to use checksums |
b0d102d12130a5cc839375d2c1fc08dc6d0f0729263bdab86ccf5c5405bdebe0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5
|