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