{ "info": { "author": "bopo.wang", "author_email": "ibopo@126.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "PyAlgoTrade mootdx module\n=========================\n\u6b64\u9879\u76ee\u662f PyAlgoTrade [mootdx](https://github.com/bopo/mootdx) (\u57fa\u4e8e pytdx \u7684\u4e8c\u6b21\u5c01\u88c5\u7248\u672c) \u7684\u4e00\u4e2a\u6570\u636e\u6e90\n\n\u4e00\u4e2a\u7b80\u5355\u7684\u7528\u6cd5:\n\n```\nfrom pyalgotrade import plotter, strategy\nfrom pyalgotrade.bar import Frequency\nfrom pyalgotrade.barfeed.csvfeed import GenericBarFeed\nfrom pyalgotrade.stratanalyzer import sharpe\nfrom pyalgotrade.technical import ma\n\nfrom pyalgotrade_mootdx import tools\n\n\nclass Strategy(strategy.BacktestingStrategy):\n def __init__(self, feed, instrument):\n super(Strategy, self).__init__(feed)\n\n self.__position = None\n self.__sma = ma.SMA(feed[instrument].getCloseDataSeries(), 150)\n self.__instrument = instrument\n self.getBroker()\n\n def onEnterOk(self, position):\n execInfo = position.getEntryOrder().getExecutionInfo()\n self.info(\"\u4e70\u5165 %.2f\" % (execInfo.getPrice()))\n\n def onEnterCanceled(self, position):\n self.__position = None\n\n def onExitOk(self, position):\n execInfo = position.getExitOrder().getExecutionInfo()\n self.info(\"\u5356\u51fa %.2f\" % (execInfo.getPrice()))\n self.__position = None\n\n def onExitCanceled(self, position):\n # If the exit was canceled, re-submit it.\n self.__position.exitMarket()\n\n def getSMA(self):\n return self.__sma\n\n def onBars(self, bars):\n # \u6bcf\u4e00\u4e2a\u6570\u636e\u90fd\u4f1a\u62b5\u8fbe\u8fd9\u91cc\uff0c\u5c31\u50cfbecktest\u4e2d\u7684next\n # Wait for enough bars to be available to calculate a SMA.\n if self.__sma[-1] is None:\n return\n\n # bar.getTyoicalPrice = (bar.getHigh() + bar.getLow() + bar.getClose())/ 3.0\n bar = bars[self.__instrument]\n\n # If a position was not opened, check if we should enter a long position.\n if self.__position is None:\n if bar.getPrice() > self.__sma[-1]:\n # \u5f00\u591a\u5934.\n self.__position = self.enterLong(self.__instrument, 100, True)\n\n # \u5e73\u6389\u591a\u5934\u5934\u5bf8.\n elif bar.getPrice() < self.__sma[-1] and not self.__position.exitActive():\n self.__position.exitMarket()\n\n\ndef main():\n instruments = [\"600036\"]\n feeds = tools.build_feed(instruments, 2017, 2018, \"histdata\")\n\n # 3.\u5b9e\u4f8b\u5316\u7b56\u7565\n strat = Strategy(feeds, instruments[0])\n\n # 4.\u8bbe\u7f6e\u6307\u6807\u548c\u7ed8\u56fe\n ratio = sharpe.SharpeRatio()\n strat.attachAnalyzer(ratio)\n plter = plotter.StrategyPlotter(strat)\n\n # 5.\u8fd0\u884c\u7b56\u7565\n strat.run()\n strat.info(\"\u6700\u7ec8\u6536\u76ca: %.2f\" % strat.getResult())\n\n # 6.\u8f93\u51fa\u590f\u666e\u7387\u3001\u7ed8\u56fe\n strat.info(\"\u590f\u666e\u6bd4\u7387: \" + str(ratio.getSharpeRatio(0)))\n # plter.plot()\n\n\nif __name__ == '__main__':\n main()\n```\n\n```\n2018-04-03 00:00:00 strategy [INFO] \u5356\u51fa 28.86\n2018-04-11 00:00:00 strategy [INFO] \u4e70\u5165 30.34\n2018-04-17 00:00:00 strategy [INFO] \u5356\u51fa 28.25\n2018-05-02 00:00:00 strategy [INFO] \u4e70\u5165 29.98\n2018-05-04 00:00:00 strategy [INFO] \u5356\u51fa 29.28\n2018-05-09 00:00:00 strategy [INFO] \u4e70\u5165 29.70\n2018-05-24 00:00:00 strategy [INFO] \u5356\u51fa 29.60\n2018-09-25 00:00:00 strategy [INFO] \u4e70\u5165 29.83\n2018-10-12 00:00:00 strategy [INFO] \u5356\u51fa 28.70\n2018-10-15 00:00:00 strategy [INFO] \u4e70\u5165 29.16\n2018-10-19 00:00:00 strategy [INFO] \u5356\u51fa 27.75\n2018-10-22 00:00:00 strategy [INFO] \u4e70\u5165 29.53\n2018-10-30 00:00:00 strategy [INFO] \u5356\u51fa 28.12\n2018-11-01 00:00:00 strategy [INFO] \u4e70\u5165 29.45\n2018-11-15 00:00:00 strategy [INFO] \u5356\u51fa 28.24\n2018-11-19 00:00:00 strategy [INFO] \u4e70\u5165 28.70\n2018-11-23 00:00:00 strategy [INFO] \u5356\u51fa 28.29\n2018-12-03 00:00:00 strategy [INFO] \u4e70\u5165 29.49\n2018-12-11 00:00:00 strategy [INFO] \u5356\u51fa 28.35\n2018-12-12 00:00:00 strategy [INFO] \u4e70\u5165 29.00\n2018-12-18 00:00:00 strategy [INFO] \u5356\u51fa 28.05\n2018-12-21 13:48:01,740 strategy [INFO] \u6700\u7ec8\u6536\u76ca: 999254.00\n2018-12-21 13:48:01,740 strategy [INFO] \u590f\u666e\u6bd4\u7387: -0.6957113853538597\n```\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bopo/pyalgotrade_mootdx", "keywords": "pyalgotrade_mootdx", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "pyalgotrade_mootdx", "package_url": "https://pypi.org/project/pyalgotrade_mootdx/", "platform": "", "project_url": "https://pypi.org/project/pyalgotrade_mootdx/", "project_urls": { "Homepage": "https://github.com/bopo/pyalgotrade_mootdx" }, "release_url": "https://pypi.org/project/pyalgotrade_mootdx/0.1.1/", "requires_dist": null, "requires_python": "", "summary": "pyalgotrade mootdx module", "version": "0.1.1" }, "last_serial": 4623744, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "8dc200a899e84bf7cbf3d3055ca72777", "sha256": "d903f520ab06d6551b3551eb9c54347180cb0420e1f4e3fe0494c4b650009a9c" }, "downloads": -1, "filename": "pyalgotrade_mootdx-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8dc200a899e84bf7cbf3d3055ca72777", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 9037, "upload_time": "2018-12-21T06:41:30", "url": "https://files.pythonhosted.org/packages/4f/c3/a33f4d12ece36cb793aaf8d425a8ca40efd6a717c46af1009e74fdd12b1a/pyalgotrade_mootdx-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff1a11c32854f6ae8ba1d54be4fd30d1", "sha256": "f46b150613b2c730d5241a228c46187adebd35fd6494ef95b835dd8f169431b8" }, "downloads": -1, "filename": "pyalgotrade_mootdx-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ff1a11c32854f6ae8ba1d54be4fd30d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6318, "upload_time": "2018-12-21T06:41:18", "url": "https://files.pythonhosted.org/packages/da/35/fa0728d352e7d15a634fcb06fbf5c1e64ddbded609b270a30c9628863026/pyalgotrade_mootdx-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8dc200a899e84bf7cbf3d3055ca72777", "sha256": "d903f520ab06d6551b3551eb9c54347180cb0420e1f4e3fe0494c4b650009a9c" }, "downloads": -1, "filename": "pyalgotrade_mootdx-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8dc200a899e84bf7cbf3d3055ca72777", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 9037, "upload_time": "2018-12-21T06:41:30", "url": "https://files.pythonhosted.org/packages/4f/c3/a33f4d12ece36cb793aaf8d425a8ca40efd6a717c46af1009e74fdd12b1a/pyalgotrade_mootdx-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff1a11c32854f6ae8ba1d54be4fd30d1", "sha256": "f46b150613b2c730d5241a228c46187adebd35fd6494ef95b835dd8f169431b8" }, "downloads": -1, "filename": "pyalgotrade_mootdx-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ff1a11c32854f6ae8ba1d54be4fd30d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6318, "upload_time": "2018-12-21T06:41:18", "url": "https://files.pythonhosted.org/packages/da/35/fa0728d352e7d15a634fcb06fbf5c1e64ddbded609b270a30c9628863026/pyalgotrade_mootdx-0.1.1.tar.gz" } ] }