{ "info": { "author": "DevCartel", "author_email": "support@devcartel.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "# PyMT5\n[![version](https://img.shields.io/pypi/v/pymt5.svg)](https://pypi.org/project/pymt5)\n[![pyversion](https://img.shields.io/pypi/pyversions/pymt5.svg)](#)\n[![platform](https://img.shields.io/badge/platform-linux|%20win-lightgray.svg)](#platform-availability)\n[![license](https://img.shields.io/pypi/l/pymt5.svg)](https://github.com/devcartel/pymt5/blob/master/LICENSE.txt)\n[![downloads](https://img.shields.io/pypi/dm/pymt5.svg)](https://pypi.org/project/pymt5)\n[![Sponsor](https://img.shields.io/badge/Sponsor%20PyMT5-%2419.99%2Fmonth-orange.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CKHUBNTFNDCB8)\n\nProvides simplified, multithreaded, socket-based Python interfaces to MT5 gateways. PyMT5 requires a [DevCartel MT5 gateway](https://github.com/devcartel/devcartelgateway64) installed on the MT5 platform to work with PyMT5.\n\n

\n \"application\"\n

\n\n## Installation\nPyMT5 supports both Python 2 and 3. Simply install from [PyPI](https://pypi.org/project/pymt5) using `pip`:\n\n pip install pymt5\n\n## Example\n```python\nimport pymt5\n\ndef onData(data):\n client = data.get('client_id')\n # Login\n if data.get('type') == '1':\n # Send heartbeat\n m.send(client, {'ver':'3','type':'6'})\n # Send login OK response\n m.send(client, {'ver':'3',\n 'type':'1',\n 'login':data.get('login'),\n 'password':data.get('password'),\n 'res':'0'})\n\nm = pymt5.PyMT5()\nm.onConnected = onConnected\nm.onDisconnected = onDisconnected\nm.onData = onData\n\n```\n\nCheckout more message [examples](https://github.com/devcartel/pymt5/tree/master/examples).\n\n## API\n__pymt5.PyMT5([_host=''_], [_port=16838_])__ \n_host: str_ \n_port: int_ \n_\u27a5return: object_ \nStarts a PyMT5 server and listening on a port defined by _port_.\n\n >> m = pymt5.PyMT5()\n\nUpon incoming connection from a gateway, PyMT5 stores client information in `pymt5.requests` in dict format as\n\n__pymt5.stop()__ \nDisconnects all MT5 gateway connections and stop the server.\n\n >> m.stop()\n\n__pymt5.broadcast(_data_)__ \n_data: dict_ \nSends a message to all connected gateways. Consider using this when sending market data.\n\n >> #send a tick\n >> m.broadcast({'ver':'3','type':'4','symbol':'EURUSD.TEST','bank':'dc','bid':'1.2661','ask':'1.2665','last':'1.2665','volume':'1','datetime':'0'})\n\n__pymt5.send(client_id, _data_)__ \nclient_id: int \n_data: dict_ \nSends a message to a connected gateway.\n\n >> #send heartbeat\n >> m.send(123145536110592, {'ver':'3','type':'6'})\n\n__pymt5.disconnect(client_id)__ \nclient_id: int \nTerminates a connection.\n\n >> m.disconnect(123145536110592)\n\n__pymt5.onConnected(client_info)__ \nclient_info: dict \nA 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`.\n\n >> def onConnected(client_info):\n >> print(str(client_info))\n >> # print {'client_port': 64941, 'client_address': '127.0.0.1', 'client_id': 123145536110592}\n >>\n >> m = pymt5.PyMT5()\n >> m.onConnected = onConnected\n\n__pymt5.onDisconnected(client_info)__ \nclient_info: dict \nA 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`.\n\n >> def onDisonnected(client_info):\n >> print(str(client_info))\n >>\n >> m = pymt5.PyMT5()\n >> m.onDisconnected = onDisconnected\n\n__pymt5.onData(_data_)__ \n_data: dict_ \nA callback `onData`, if assigned, is called upon receiving messages from gateways. See [Data Format](#data-format) for more information.\n\n >> def onData(data):\n >> print(json.dumps(data))\n >>\n >> m = pymt5.PyMT5()\n >> m.onData = onData\n\n## Data Format\nData is to be composed as a dict with key/value defined below to be sent and received from a gateway.\n\n| Data type | Header | Tags |\n| ------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Login | `'ver':'3','type':1'` | `'login'`,`'password'`,`'res'` |\n| Logout | `'ver':'3','type':2'` | _None_ |\n| 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'` |\n| Tick | `'ver':'3','type':4'` | `'symbol'`,`'bank'`,`'bid'`,`'ask'`,`'last'`,`'volume'`,`'datetime'` |\n| 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'` |\n| Heartbeat | `'ver':'3','type':6'` | _None_ |\n| Deal | `'ver':'3','type':7'` | `'exchange_id'`,`'order'`,`'symbol'`,`'login'`,`'type_deal'`,
`'volume'`,`'volume_rem'`,`'price'` |\n| External Deal | `'ver':'3','type':50'` | `'exchange_id'`,`'order'`,`'symbol'`,`'login'`,`'type_deal'`,
`'volume'`,`'volume_rem'`,`'price'`,`'datetime'` |\n\n## Support\n* Get a [DevCartel MT5 Gateway](http://devcartel.com/devcartelgateway64) in order to work with PyMT5\n* Report an issue in [issue tracker](https://github.com/devcartel/pymt5/issues)\n\n## Changelog\n1.2.0\n* 8 July 2019\n* Support for Python 3.7\n* Update support links\n* Add examples\n\n1.1.0\n* 21 April 2018\n* Released on PyPI\n* Added README\n\n1.0.0\n* 13 April 2018\n* Initial release\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/devcartel/pymt5", "keywords": "metatrader,metaquotes,mt5,gateway,api,python", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pymt5", "package_url": "https://pypi.org/project/pymt5/", "platform": "", "project_url": "https://pypi.org/project/pymt5/", "project_urls": { "Homepage": "https://github.com/devcartel/pymt5" }, "release_url": "https://pypi.org/project/pymt5/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "Python API for MetaTrader 5 gateways", "version": "1.2.0" }, "last_serial": 5499163, "releases": { "1.1.0": [ { "comment_text": "", "digests": { "md5": "48ebf4f734740d4d7cb7f1ecc322b57f", "sha256": "8de9ca806bebb33fd43862132c30d389c1ed9f864cc36ab6ee9d869d77b3e719" }, "downloads": -1, "filename": "pymt5-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "48ebf4f734740d4d7cb7f1ecc322b57f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5410, "upload_time": "2018-04-21T06:01:15", "url": "https://files.pythonhosted.org/packages/1b/16/b092081cd6beadc9fa01400a2bbac4023a0bb593a50d5e0f66fc35256f23/pymt5-1.1.0-py2.py3-none-any.whl" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "a2141560db6c9911c7e340e38329814b", "sha256": "3f28e1c62400b9b293f581d8df6d7375436b6bec87bbbcdf3b77739d1a64b90b" }, "downloads": -1, "filename": "pymt5-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a2141560db6c9911c7e340e38329814b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5809, "upload_time": "2019-07-08T04:37:32", "url": "https://files.pythonhosted.org/packages/31/dd/fd3ec4e4c0799515e952e648f9d4861e328f469242dd74636393fa35235d/pymt5-1.2.0-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a2141560db6c9911c7e340e38329814b", "sha256": "3f28e1c62400b9b293f581d8df6d7375436b6bec87bbbcdf3b77739d1a64b90b" }, "downloads": -1, "filename": "pymt5-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a2141560db6c9911c7e340e38329814b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5809, "upload_time": "2019-07-08T04:37:32", "url": "https://files.pythonhosted.org/packages/31/dd/fd3ec4e4c0799515e952e648f9d4861e328f469242dd74636393fa35235d/pymt5-1.2.0-py2.py3-none-any.whl" } ] }