cTraderFixPy
                                
                                 cTraderFixPy copied to clipboard
                                
                                    cTraderFixPy copied to clipboard
                            
                            
                            
                        A Python package for interacting with cTrader FIX API.
cTraderFixPy
A Python package for interacting with cTrader FIX API.
This package uses Twisted and it works asynchronously.
- Free software: MIT
- Documentation: https://spotware.github.io/cTraderFixPy/.
Features
- 
Works asynchronously by using Twisted 
- 
Allows you to easily interact with cTrader FIX API and it manages everything in background 
- 
Generate FIX message by using Python objects 
Insallation
pip install ctrader-fix
Config
Config file sample:
{
  "Host": "",
  "Port": 0,
  "SSL": false,
  "Username": "",
  "Password": "",
  "BeginString": "FIX.4.4",
  "SenderCompID": "",
  "SenderSubID": "QUOTE",
  "TargetCompID": "cServer",
  "TargetSubID": "QUOTE",
  "HeartBeat": "30"
}
Usage
from twisted.internet import reactor
import json
from ctrader_fix import *
# Callback for receiving all messages
def onMessageReceived(client, responseMessage):
    print("Received: ", responseMessage.getMessage().replace("", "|"))
    messageType = responseMessage.getFieldValue(35)
    if messageType == "A":
        print("We are logged in")
# Callback for client disconnection
def disconnected(client, reason): 
    print("Disconnected, reason: ", reason)
# Callback for client connection
def connected(client):
    print("Connected")
    logonRequest = LogonRequest(config)
    client.send(logonRequest)
# you can use two separate config files for QUOTE and TRADE
with open("config-trade.json") as configFile:
    config = json.load(configFile)
client = Client(config["Host"], config["Port"], ssl = config["SSL"])
# Setting client callbacks
client.setConnectedCallback(connected)
client.setDisconnectedCallback(disconnected)
client.setMessageReceivedCallback(onMessageReceived)
# Starting the client service
client.startService()
reactor.run()
Please check documentation or samples for a complete example.