Ctrader Fix API
Project description
Python Ctrader Fix API
ejtraderCT
is a Python library to access the Ctrader trading platform's FIX API.
Features
- Market Position buy and sell
- Pending orders limit and stop
- Partial close
- Stop loss & Take profit
- Modify Orders
- Modify position
- Real-time bid & ask
- Check connection status
- Rest API server (in development)
- Webhook for Tradingviewer (in development)
Prerequisites
The library has been tested on Python 3.7 to 3.9.
Installation
To install the latest version of ejtraderCT
, you can use pip:
pip install ejtraderCT -U
Or if you want to install from source, you can use:
pip install git+https://github.com/ejtraderLabs/ejtraderCT.git
Accessing the Ctrader FIX API
To access your API, follow these simple steps:
-
Open the cTrader desktop or web platform.
-
In the bottom left corner of the platform, you will find the Settings option. Click on it.
-
A popup window will appear. In the menu of the popup, look for the last option: FIX API.
-
First, click on the Change Password button. Make sure to add a numeric password of at least 8 digits.
-
After changing the password, click on the Copy to Clipboard button from Trade Connection.
-
Now, let's move to the Trade Connection section. Here, you will receive your data in the following format (this is an example with IC Markets for a real account):
- Host name: (Current IP address 168.205.95.20 can be changed without notice)
- Port: 5212 (SSL), 5202 (Plain text)
- Password: (a/c 1104928 password)
- SenderCompID: live.icmarkets.1104926 or demo.icmarkets.1104926 or live2.icmarkets.1104926
- TargetCompID: cServer
- SenderSubID: TRADE
Import libraries
from ejtraderCT import Ctrader
Fix account login and details
server="168.205.95.20" # - Host name: (Current IP address 168.205.95.20 can be changed without notice)
account="live.icmarkets.1104926" # - SenderCompID: live.icmarkets.1104926
password="12345678" # - The password you configured
api = Ctrader(server,account,password)
Check the connection status
api.isconnected()
Logout
api.logout()
Real-time quote
Subscribe to symbols
api.subscribe("EURUSD", "GBPUSD")
List of quotes for all symbols
quote = api.quote()
print(quote)
# Output
{'EURUSD': {'bid': 1.02616, 'ask': 1.02618}, 'GBPUSD': {'bid': 1.21358, 'ask': 1.21362}}
Quote for a single symbol
quote = api.quote("EURUSD")
print(quote)
# Output
{'bid': 1.02612, 'ask': 1.02614}
Market position and pending orders.
Market position
# Buy position
symbol = "EURUSD"
volume = 0.01 # position size:
stoploss = 1.18
takeprofit = 1.19
id = api.buy(symbol, volume, stoploss, takeprofit)
print(f"Position: {id}")
# sell position
symbol = "EURUSD"
volume = 0.01 # position size
stoploss = 1.19
takeprofit = 1.18
id = api.sell(symbol, volume, stoploss, takeprofit)
print(f"Position: {id}")
Limit Orders
# Buy limit order
symbol = "EURUSD"
volume = 0.01 # order size
stoploss = 1.17
takeprofit = 1.19
price = 1.18 # entry price
id = api.buyLimit(symbol, volume, stoploss, takeprofit, price)
print(f"Order: {id}")
# Sell limit order
symbol = "EURUSD"
volume = 0.01 # Order size
stoploss = 1.23
takeprofit = 1.17
price = 1.22 # entry price
id = api.sellLimit(symbol, volume, stoploss, takeprofit, price)
print(f"Order: {id}")
Stop Orders
# Buy stop order
symbol = "EURUSD"
volume = 0.01 # order size
stoploss = 1.20
takeprofit = 1.24
price = 1.22 # entry price
id = api.buyStop(symbol, volume, stoploss, takeprofit, price)
print(f"Order: {id}")
# Sell stop order
symbol = "EURUSD"
volume = 0.01 # order size
stoploss = 1.19
takeprofit = 1.17
price = 1.18 # entry price
api.sellStop(symbol, volume, stoploss, takeprofit, price)
List Positions
positions = api.positions()
print(positions)
List limit and stop Orders
orders = api.orders()
print(orders)
Cancel order by id
orders = api.orders()
for order in orders:
api.orderCancelById(order['ord_id'])
Close position by id
for position in positions:
api.positionCloseById(position['pos_id'], position['amount'])
Cancel all orders
api.cancel_all()
Close all positions
api.close_all()
Modify position SL and TP
id = "position id "
stoploss = "stop loss price""
takeprofit "stop gain price"
api.positionModify(id, stoploss, takeprofit)
Modify order SL and TP and entry price
id = "order id "
stoploss = "stop loss price""
takeprofit= "stop gain price"
price = "limit or stop entry price"
api.orderModify(id, stoploss, takeprofit, price)
Contributing
We welcome any contribution to ejtraderCT
. Here are some ways to contribute:
- Report issues or suggest improvements by opening an issue.
- Contribute with code to fix issues or add features via a Pull Request.
Before submitting a pull request, please make sure your codes are well formatted and tested.
Acknowledgements
I would like to express my gratitude to @HarukaMa for creating the initial project. Their work has been an invaluable starting point for my modifications and improvements.
Project details
Release history Release notifications | RSS feed
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
Hashes for ejtraderCT-1.1.1rc0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9393430eb7af107e32e12ae3fba9891158e7f6642af50a63586d20ad9ad767bf |
|
MD5 | 2aa182cf30377f79215c17abccbf22e5 |
|
BLAKE2b-256 | b211e34053008ae5c41c18770c22aeb3ab1c33053ee3c59f021636e449f48426 |