/ejtraderCT

The best Python Ctrader FIX API Perfect for HFT

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Python Ctrader Fix API

ToDo

  • Account Information "not possible fix limitation"
  • Market Position buy and sell
  • Peding orders limit and stop
  • Partial close
  • Stop loss & Take profit
  • Modify Orders
  • Modify position
  • real time bid & ask

Installation

Tested on python 3.7 to 3.9

pip install ejtraderCT -U

Or install from source

git clone https://github.com/ejtraderLabs/ejtraderCT
cd ejtraderCT
python setup.py install

Import librarys

from ejtraderCT import Ctrader

import time
import logging
from datetime import datetime

logging.getLogger().setLevel(logging.INFO)

Fix login account and details

server="h8.p.c-trader.cn" # Host name
broker="icmarkets" 
account="3152339"
password="393214"
currency="EUR"

api = Ctrader(server,broker,account,password,currency)

Real time quote

Subscribe to symbol
api.subscribe("EURUSD", "GBPUSD")
All symbols quote list
quote = api.quote()
print(quote)

# Output

{'EURUSD': {'bid': 1.02616, 'ask': 1.02618}, 'GBPUSD': {'bid': 1.21358, 'ask': 1.21362}}

Single symbol quote

quote = api.quote("EURUSD")
print(quote)

# Output

{'bid': 1.02612, 'ask': 1.02614}

Market position and pending order.

Market Position
# Buy position

symbol = "EURUSD"
volume = 0.01 # position size
stoploss =  1.18
takeprofit = 1.19

api.buy(symbol, volume, stoploss, takeprofit)

# sell position 

symbol = "EURUSD"
volume = 0.01 # position size
stoploss = 1.19
takeprofit = 1.18

api.sell(symbol, volume, stoploss, takeprofit)
Limit Orders
# Buy limit order

symbol = "EURUSD"
volume = 0.01 # position size
stoploss = 1.17
takeprofit = 1.19
price = 1.18 # entry price 

api.buyLimit(symbol, volume, stoploss, takeprofit, price)


# Sell limit order

symbol = "EURUSD"
volume = 0.01 # position size
stoploss = 1.23
takeprofit = 1.17
price = 1.22 # entry price 

api.sellLimit(symbol, volume, stoploss, takeprofit, price)

Stop Orders

# Buy stop order

symbol = "EURUSD"
volume = 0.01 # position size
stoploss = 1.20
takeprofit = 1.24
price = 1.22 # entry price

api.buyStop(symbol, volume, stoploss, takeprofit, price)

# Sell stop order

symbol = "EURUSD"
volume = 0.01 # position 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)

Cancle 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 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)

Thanks for

@HarukaMa @douglasbarros