Provides simplified, multithreaded, socket-based Python interfaces to MT5 gateways. PyMT5 requires a DevCartel MT5 gateway installed on the MT5 platform to work with PyMT5.
PyMT5 supports both Python 2 and 3. Simply install from PyPI using pip:
pip install pymt5 import pymt5 def onData(data): client = data.get('client_id') # Login if data.get('type') == '1': # Send heartbeat m.send(client, {'ver':'3','type':'6'}) # Send login OK response m.send(client, {'ver':'3', 'type':'1', 'login':data.get('login'), 'password':data.get('password'), 'res':'0'}) m = pymt5.PyMT5() m.onConnected = onConnected m.onDisconnected = onDisconnected m.onData = onDataCheckout more message examples.
pymt5.PyMT5([host=''], [port=16838])
host: str
port: int
➥return: object
Starts a PyMT5 server and listening on a port defined by port.
>> m = pymt5.PyMT5() Upon incoming connection from a gateway, PyMT5 stores client information in pymt5.requests in dict format as
pymt5.stop()
Disconnects all MT5 gateway connections and stop the server.
>> m.stop() pymt5.broadcast(data)
data: dict
Sends a message to all connected gateways. Consider using this when sending market data.
>> #send a tick >> m.broadcast({'ver':'3','type':'4','symbol':'EURUSD.TEST','bank':'dc','bid':'1.2661','ask':'1.2665','last':'1.2665','volume':'1','datetime':'0'}) pymt5.send(client_id, data)
client_id: int
data: dict
Sends a message to a connected gateway.
>> #send heartbeat >> m.send(123145536110592, {'ver':'3','type':'6'}) pymt5.disconnect(client_id)
client_id: int
Terminates a connection.
>> m.disconnect(123145536110592) pymt5.onConnected(client_info)
client_info: dict
A callback onConnected, if assigned, is called upon a successful connection from a client. Client information can be accessed from client_info's values as client_id, client_address and client_port.
>> def onConnected(client_info): >> print(str(client_info)) >> # print {'client_port': 64941, 'client_address': '127.0.0.1', 'client_id': 123145536110592} >> >> m = pymt5.PyMT5() >> m.onConnected = onConnected pymt5.onDisconnected(client_info)
client_info: dict
A callback onDisconnected, if assigned, is called upon a disconnection from a client. Client information can be accessed from client_info's values as client_id, client_address and client_port.
>> def onDisonnected(client_info): >> print(str(client_info)) >> >> m = pymt5.PyMT5() >> m.onDisconnected = onDisconnected pymt5.onData(data)
data: dict
A callback onData, if assigned, is called upon receiving messages from gateways. See Data Format for more information.
>> def onData(data): >> print(json.dumps(data)) >> >> m = pymt5.PyMT5() >> m.onData = onData Data is to be composed as a dict with key/value defined below to be sent and received from a gateway.
| Data type | Header | Tags |
|---|---|---|
| Login | 'ver':'3','type':1' | 'login','password','res' |
| Logout | 'ver':'3','type':2' | None |
| Symbol | 'ver':'3','type':3' | 'index','symbol','path','description','page','currency_base','currency_profit','currency_margin','digits','tick_flags','calc_mode','exec_mode','chart_mode','fill_flags','expir_flags','tick_value','tick_size','contract_size','volume_min','volume_max','volume_step','market_depth','margin_flags','margin_initial','margin_maintenance','margin_long','margin_short','margin_limit','margin_stop','margin_stop_limit','settlement_price','price_limit_max','price_limit_min','time_start','time_expiration','trade_mode' |
| Tick | 'ver':'3','type':4' | 'symbol','bank','bid','ask','last','volume','datetime' |
| Order | 'ver':'3','type':5' | 'symbol','bank','bid','ask','last','volume','datetime','order_action','state','order','exchange_id','custom_data','request_id','symbol','login','type_order','type_time','type_fill','action','price_order','price_sl','price_tp','price_tick_bid','price_tick_ask','volume','expiration_time','result' |
| Heartbeat | 'ver':'3','type':6' | None |
| Deal | 'ver':'3','type':7' | 'exchange_id','order','symbol','login','type_deal','volume','volume_rem','price','position' |
| External Deal | 'ver':'3','type':50' | 'exchange_id','order','symbol','login','type_deal','volume','volume_rem','price','datetime','comment' |
- Get a DevCartel MT5 Gateway in order to work with PyMT5
- Report an issue in issue tracker
1.4.0
- 30 October 2022
- Fix potential data loss due to data fragmentation
1.3.0
- 8 August 2021
- Fix parsing data buffer
1.2.0
- 8 July 2019
- Support for Python 3.7
- Update support links
- Add examples
1.1.0
- 21 April 2018
- Released on PyPI
- Added README
1.0.0
- 13 April 2018
- Initial release
