Python API for MetaTrader 5 gateways
Project description
PyMT5
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.
Installation
PyMT5 supports both Python 2 and 3. Simply install from PyPI using pip
:
pip install pymt5
Example
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 = onData
Checkout more message examples.
API
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 Format
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' ,'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' |
External Deal | 'ver':'3','type':50' |
'exchange_id' ,'order' ,'symbol' ,'login' ,'type_deal' ,'volume' ,'volume_rem' ,'price' ,'datetime' |
Support
- Get a DevCartel MT5 Gateway in order to work with PyMT5
- Report an issue in issue tracker
Changelog
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
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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size pymt5-1.2.0-py2.py3-none-any.whl (5.8 kB) | File type Wheel | Python version py2.py3 | Upload date | Hashes View |
Hashes for pymt5-1.2.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f28e1c62400b9b293f581d8df6d7375436b6bec87bbbcdf3b77739d1a64b90b |
|
MD5 | a2141560db6c9911c7e340e38329814b |
|
BLAKE2-256 | 31ddfd3ec4e4c0799515e952e648f9d4861e328f469242dd74636393fa35235d |