{ "info": { "author": "OpenTrade Solutions", "author_email": "info@opentradesolutions.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Financial and Insurance Industry", "Intended Audience :: Information Technology", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Database :: Database Engines/Servers", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\nOpenTick\n========\n\n\n.. image:: https://github.com/opentradesolutions/opentrade/raw/master/web/img/ot.png\n :target: https://github.com/opentradesolutions/opentrade/raw/master/web/img/ot.png\n :alt: OpenTrade Logo\n\n\nOpenTick is a fast tick database for financial timeseries data, built on `FoundationDB `_ with simplified SQL layer. Here is the Python binding for OpenTick Database. For more information, please check `OpenTradeSolutions website `_.\n\nFeatures:\n=========\n\n\n* Built-in price adjustment support\n* Nanosecond support\n* Python, C++ and Go SDK\n* Both sync and async query\n* Implicit SQL statement prepare\n\nInstallation on Ubuntu\n======================\n\nYou need to use **Go >=1.11** which has module support.\n\n.. code-block:: bash\n\n sudo apt install -y python\n wget https://www.foundationdb.org/downloads/6.0.18/ubuntu/installers/foundationdb-server_6.0.18-1_amd64.deb\n wget https://www.foundationdb.org/downloads/6.0.18/ubuntu/installers/foundationdb-clients_6.0.18-1_amd64.deb\n sudo dpkg -i foundationdb-clients_6.0.18-1_amd64.deb foundationdb-server_6.0.18-1_amd64.deb\n git clone https://github.com/opentradesolutions/opentick\n make build\n sudo apt install nodejs\n sudo npm install -g pm2\n pm2 start ./opentick\n\n**Note:** FoundationDB runs in memory storage mode and only one process by default. You can change it to disk storage as belows:\n\n.. code-block:: bash\n\n user@host$ fdbcli\n fdb> configure ssd\n\nFore more configuration on FoundationDB, please check `FoundationDB Configuration `_\n\nUsage\n=====\n\n`Python `_\n\n`C++ `_\n\n`Go `_\n\nPerformance\n===========\n\n100k ohlcv bar inserted in 1 second.\n\n.. code-block:: bash\n\n user@host:~/opentick/bindings/go$ go run test.go\n 2018/11/27 21:27:23 4.500470184s 5.500314708s 0 100000 all insert futures get done\n 2018/11/27 21:27:25 861.306778ms 1.139363333s 0 10 all batch insert futures get done\n 2018/11/27 21:27:26 805.542584ms 100000 retrieved with ranges\n 2018/11/27 21:27:27 1.782497936s 100000 retrieved with async\n 2018/11/27 21:27:29 1.424262818s 100000 retrieved with one sync\n\n.. code-block:: bash\n\n user@host:~/opentick/bindings/python$ ./test.py\n 2018-11-27 21:29:10.168138 0:00:00.200577 0:00:06.724991 0 100000 all insert futures get done\n 2018-11-27 21:29:12.192570 0:00:00.176540 0:00:00.959563 0 10 all batch insert futures get done\n 2018-11-27 21:29:13.460025 0:00:01.267462 100000 retrieved with ranges\n 2018-11-27 21:29:15.077686 0:00:01.617666 100000 retrieved with async\n 2018-11-27 21:29:16.777043 0:00:01.699361 100000 retrieved with one sync\n\n.. code-block:: bash\n\n user@host:~/opentick/bindings/cpp$ make test\n 21:33:19.231156889: 4.22207s 4.84954s 0 100000 all insert futures get done\n 21:33:20.172744180: 0.447708s 0.934337s 0 10 all batch insert futures get done\n 21:33:21.677161076: 1.49497s 100000 retrieved with async\n\nSample Code (C++)\n=================\n\n\n* \n **Create database and table**\n\n .. code-block:: C++\n\n auto conn = Connection::Create(\"127.0.0.1\", 1116);\n conn->Start();\n conn->Execute(\"create database if not exists test\");\n conn->Use(\"test\");\n conn->Execute(R\"(\n create table if not exists test(sec int, interval int, tm timestamp,\n open double, high double, low double, close double, v double, vwap\n double, primary key(sec, interval, tm))\n )\");\n\n* \n **Execute**\n\n .. code-block:: C++\n\n // opentick prepares the sql statement automatically, no need to prepare explicitly\n auto fut = conn->ExecuteAsync(\n \"select * from test where sec=1 and interval=?\", Args{1}));\n auto res = fut->Get(); // blocked wait until execution done\n // Get last 2 rows ordering by primary key\n auto res = conn->Execute(\n \"select tm from test where sec=1 and interval=? limit -2\", Args{1});\n\n* \n **Insert**\n\n .. code-block:: C++\n\n static const std::string kInsert =\n \"insert into test(sec, interval, tm, open, high, low, close, vol, vwap) \"\n \"values(?, ?, ?, ?, ?, ?, ?, ?, ?)\";\n std::vector futs;\n for (auto i = 0; i < 1000; ++i) {\n futs.push_back(conn->ExecuteAsync(kInsert, Args{1, 1, system_clock::now(), 2.2, 2.4, 2.1, 2.3, 1000000, 2.25}));\n }\n // wait for all insertion done\n for (auto fut : futs) fut->Get();\n\n* \n **Batch Insert**\n\n .. code-block:: C++\n\n Argss argss;\n for (auto i = 0; i < 1000; ++i) {\n argss.push_back(Args{1, i, system_clock::now(), 2.2, 2.4, 2.1, 2.3, 1000000, 2.25});\n }\n conn->BatchInsert(kInsert, argss);\n\n* \n **Price Adjustments**\n\n.. code-block:: C++\n\n auto res = conn->Execute(\n \"select tm, adj(open), adj(high), adj(low), adj(close), adj(vol) from test where sec=1 and interval=? limit -2\", Args{1});\n\nFor more details, please checkout `adj_test.go `_\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/opentradesolutions/opentick", "keywords": "", "license": "Apache License", "maintainer": "", "maintainer_email": "", "name": "opentick", "package_url": "https://pypi.org/project/opentick/", "platform": "", "project_url": "https://pypi.org/project/opentick/", "project_urls": { "Homepage": "https://github.com/opentradesolutions/opentick" }, "release_url": "https://pypi.org/project/opentick/1.2.0/", "requires_dist": [ "pytz", "six (>=1.10.0)", "pymongo (>=3.7.0)" ], "requires_python": "", "summary": "OpenTick SDK", "version": "1.2.0", "yanked": false, "yanked_reason": null }, "last_serial": 6045515, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "afdf9a89b23629a8d98e721896fe7528", "sha256": "0c88b1c0ae94461b557fd903d1ec5d1bdb4565ee8b2f062b750cf6ffac3b6de0" }, "downloads": -1, "filename": "opentick-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "afdf9a89b23629a8d98e721896fe7528", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8526, "upload_time": "2019-04-09T02:32:57", "upload_time_iso_8601": "2019-04-09T02:32:57.181632Z", "url": "https://files.pythonhosted.org/packages/49/92/15fec37a6d595f5f2326efc346ede217ed43527d6cee4b92f33b15f64a5a/opentick-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "878076dbb89e1a2c8543cb35d0ff8223", "sha256": "6b389df8c22c57d7c504839b0f911f4c8bda93bc27aa7f65622cc9ad9f0beb91" }, "downloads": -1, "filename": "opentick-1.0.0.tar.gz", "has_sig": false, "md5_digest": "878076dbb89e1a2c8543cb35d0ff8223", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4052, "upload_time": "2019-04-09T02:32:59", "upload_time_iso_8601": "2019-04-09T02:32:59.415429Z", "url": "https://files.pythonhosted.org/packages/e8/38/d704d1516cd1e351b8ce2fd3166369087ac40622f09ba94e0a3e8e534ec6/opentick-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "8eba90fc03ca59e3a209f50f3c817783", "sha256": "4c107fffabc1aab6f992205594e4cc9d916eeb3e461bc2119a3ab7c2d33fa08c" }, "downloads": -1, "filename": "opentick-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8eba90fc03ca59e3a209f50f3c817783", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8909, "upload_time": "2019-04-09T07:07:46", "upload_time_iso_8601": "2019-04-09T07:07:46.006857Z", "url": "https://files.pythonhosted.org/packages/61/c7/19510b147c67e17811a2b84addbec19a77f7ae5b95ad64a6c486792fa923/opentick-1.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f14c8414cd7053720034aa8afebeb2c4", "sha256": "c0a6b1f1c9bc74c81b631bdf0de90f2544d503f57411f0f54fdce06d76791d0f" }, "downloads": -1, "filename": "opentick-1.0.1.tar.gz", "has_sig": false, "md5_digest": "f14c8414cd7053720034aa8afebeb2c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5978, "upload_time": "2019-04-09T07:07:47", "upload_time_iso_8601": "2019-04-09T07:07:47.472463Z", "url": "https://files.pythonhosted.org/packages/9f/fc/3e53955c9b06f44139f88d3fb4e9aab4d05a0dc0f1c162d5f622fdedb514/opentick-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "611ff7c0c5e24afa1a1626b77ef830ca", "sha256": "ea8067ebc2c181c5eae80a2d3cf3a86c5fe8b8f216e32ba7b0b629afd9e74065" }, "downloads": -1, "filename": "opentick-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "611ff7c0c5e24afa1a1626b77ef830ca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9011, "upload_time": "2019-04-09T07:15:34", "upload_time_iso_8601": "2019-04-09T07:15:34.230322Z", "url": "https://files.pythonhosted.org/packages/62/99/47c8bb096c425d00547e6a3cca123b2d7ab71b8508b58e58e9e3242a8734/opentick-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4ecb1bd808f04483b522fff7a33eec83", "sha256": "b6f4a584d313d916e96fe3627c5b16f8e362cc493a4cc19016b9fc54e4734bb3" }, "downloads": -1, "filename": "opentick-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4ecb1bd808f04483b522fff7a33eec83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6407, "upload_time": "2019-04-09T07:15:35", "upload_time_iso_8601": "2019-04-09T07:15:35.865115Z", "url": "https://files.pythonhosted.org/packages/55/85/20c84367e5914bb9672acb95358104eef4d6ea8cb6819beab6edd479c447/opentick-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "010c18c3ed523f17d8ba56f581f1c42a", "sha256": "5b62f9e7f7d20039a04707668e632e8811ae15b5508cafc5ec56a45360fabcbf" }, "downloads": -1, "filename": "opentick-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "010c18c3ed523f17d8ba56f581f1c42a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9119, "upload_time": "2019-04-09T07:21:49", "upload_time_iso_8601": "2019-04-09T07:21:49.540981Z", "url": "https://files.pythonhosted.org/packages/25/f1/400988cb141ecdbee6313f8870744053d349695f234e39377adec1985b69/opentick-1.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ecb93f413853433f4cb770d2706fbee7", "sha256": "1ab538cf691b0f4822565b6adbd2cece2d3746635e210da1c76f06ca3f410422" }, "downloads": -1, "filename": "opentick-1.0.3.tar.gz", "has_sig": false, "md5_digest": "ecb93f413853433f4cb770d2706fbee7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6454, "upload_time": "2019-04-09T07:21:51", "upload_time_iso_8601": "2019-04-09T07:21:51.096459Z", "url": "https://files.pythonhosted.org/packages/f4/60/ac60c38be7644dcf109f2781463388a7c4cd12f9b9720263335de5bb4139/opentick-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "ec69fca748ab99bb64e30cb8afd5975a", "sha256": "d7594dd9df9e60a7ce1faec3d20c053c35cfbcb64c5ab37b978c25777719db85" }, "downloads": -1, "filename": "opentick-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "ec69fca748ab99bb64e30cb8afd5975a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9138, "upload_time": "2019-10-09T09:33:45", "upload_time_iso_8601": "2019-10-09T09:33:45.754859Z", "url": "https://files.pythonhosted.org/packages/24/ae/e331f5bec10e5bea7e9b3a2b25fb4112a7a0ea59ef66dfa71babace4224e/opentick-1.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "62cf608c3136f858ccc0167bcedcda3c", "sha256": "e87605325272d8c39eebebf5fd4247a59b51f660f078902af53e753c0d8aa2f0" }, "downloads": -1, "filename": "opentick-1.0.4.tar.gz", "has_sig": false, "md5_digest": "62cf608c3136f858ccc0167bcedcda3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6497, "upload_time": "2019-10-09T09:33:47", "upload_time_iso_8601": "2019-10-09T09:33:47.898473Z", "url": "https://files.pythonhosted.org/packages/ac/6c/88ac285220d2541aa5f178754822393b3b938ad37d9f74bad0a4dff958e8/opentick-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "5715b25c4347d4edfd574210ba9c2d41", "sha256": "2d18bccb8e9835c5f96b3a8d5572735c5b94e9925cc188b4dd7d593cc89c3ef5" }, "downloads": -1, "filename": "opentick-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "5715b25c4347d4edfd574210ba9c2d41", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10671, "upload_time": "2019-10-21T04:04:54", "upload_time_iso_8601": "2019-10-21T04:04:54.582595Z", "url": "https://files.pythonhosted.org/packages/d1/49/dcdb9c0196a2ba1d237e20a559696382709dec24aa440b672b8d3099183c/opentick-1.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a8249e8d05e456baf67fdb5bd437d418", "sha256": "d147e5554f5bc9c56e0b124c7928be174d1370a6b6cb5a6446d7afb5550c94de" }, "downloads": -1, "filename": "opentick-1.0.5.tar.gz", "has_sig": false, "md5_digest": "a8249e8d05e456baf67fdb5bd437d418", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6705, "upload_time": "2019-10-21T04:04:56", "upload_time_iso_8601": "2019-10-21T04:04:56.657102Z", "url": "https://files.pythonhosted.org/packages/3c/7b/00a4b74e79e2ba645c89f5cbe61e0eb192e0250f2db2489d760c08595e1f/opentick-1.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "6cfb259a468eed38fc38cbbfd25eef99", "sha256": "0df9697b14becc4dbcfc7024eba6c925f1c9df02a3b409c6cd7f0e1f62a6be99" }, "downloads": -1, "filename": "opentick-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6cfb259a468eed38fc38cbbfd25eef99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11423, "upload_time": "2019-10-25T19:16:49", "upload_time_iso_8601": "2019-10-25T19:16:49.586376Z", "url": "https://files.pythonhosted.org/packages/18/07/4dab8dfb6949b85905934020cefff0f5e33966e2e8c0c8b1a1258ad078f1/opentick-1.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b371d963d391f06bb7997316dd0e0cd6", "sha256": "57ce3c7894f8c803d9cc960c0ab4bff18a9e6361995db7b5561b7351a5859cce" }, "downloads": -1, "filename": "opentick-1.1.0.tar.gz", "has_sig": false, "md5_digest": "b371d963d391f06bb7997316dd0e0cd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7434, "upload_time": "2019-10-25T19:16:51", "upload_time_iso_8601": "2019-10-25T19:16:51.667576Z", "url": "https://files.pythonhosted.org/packages/8f/bc/4e79707d146d9b362ad7dd490fbfd2422b9d5715a18fab899eded773aa47/opentick-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "68aec7d7c08e1d6e676d206308e19cd7", "sha256": "2b62bb9e9e57544b57e02fc88416a278a6bcc4a943b07d817a3bcda9c59a8ccd" }, "downloads": -1, "filename": "opentick-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "68aec7d7c08e1d6e676d206308e19cd7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11454, "upload_time": "2019-10-26T04:07:39", "upload_time_iso_8601": "2019-10-26T04:07:39.406795Z", "url": "https://files.pythonhosted.org/packages/c3/49/bbfabfa61a5696a381e427836482a6560130345042b7bb329236054bf12b/opentick-1.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2cc832709ad37c60a6360cf73b32631c", "sha256": "89939d4bbbc68169beb6f3bcf0e25eef8e69b5eb626873ac487b428f40ca5e88" }, "downloads": -1, "filename": "opentick-1.1.1.tar.gz", "has_sig": false, "md5_digest": "2cc832709ad37c60a6360cf73b32631c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7457, "upload_time": "2019-10-26T04:07:41", "upload_time_iso_8601": "2019-10-26T04:07:41.530142Z", "url": "https://files.pythonhosted.org/packages/ad/e6/9ad4011a5eec10c773e5a660be2647ba00b35458817b19cc8f36b7b8638b/opentick-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d9e6821110ede04464ac2e73c5be6139", "sha256": "973a18189652cbac447669b75efc81114605a5e26d74f54261d8b96a88a1a159" }, "downloads": -1, "filename": "opentick-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d9e6821110ede04464ac2e73c5be6139", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11521, "upload_time": "2019-10-29T06:53:46", "upload_time_iso_8601": "2019-10-29T06:53:46.996318Z", "url": "https://files.pythonhosted.org/packages/c1/02/60094e22f011d3946ce675b8bd12fbe1069ea80c1b7eae493ddf54eb87b4/opentick-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "72df968d59f5a215caeae8461a316690", "sha256": "06693181cf676f57aa51f98b6ba3c1eaa5ffb61bbe0039de757b200a1d4479c8" }, "downloads": -1, "filename": "opentick-1.2.0.tar.gz", "has_sig": false, "md5_digest": "72df968d59f5a215caeae8461a316690", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7514, "upload_time": "2019-10-29T06:53:48", "upload_time_iso_8601": "2019-10-29T06:53:48.989564Z", "url": "https://files.pythonhosted.org/packages/68/25/129ecf5c43591b0057d67e5c7532574361c0cf3aa407aec95b6bb2c72d54/opentick-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d9e6821110ede04464ac2e73c5be6139", "sha256": "973a18189652cbac447669b75efc81114605a5e26d74f54261d8b96a88a1a159" }, "downloads": -1, "filename": "opentick-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d9e6821110ede04464ac2e73c5be6139", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11521, "upload_time": "2019-10-29T06:53:46", "upload_time_iso_8601": "2019-10-29T06:53:46.996318Z", "url": "https://files.pythonhosted.org/packages/c1/02/60094e22f011d3946ce675b8bd12fbe1069ea80c1b7eae493ddf54eb87b4/opentick-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "72df968d59f5a215caeae8461a316690", "sha256": "06693181cf676f57aa51f98b6ba3c1eaa5ffb61bbe0039de757b200a1d4479c8" }, "downloads": -1, "filename": "opentick-1.2.0.tar.gz", "has_sig": false, "md5_digest": "72df968d59f5a215caeae8461a316690", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7514, "upload_time": "2019-10-29T06:53:48", "upload_time_iso_8601": "2019-10-29T06:53:48.989564Z", "url": "https://files.pythonhosted.org/packages/68/25/129ecf5c43591b0057d67e5c7532574361c0cf3aa407aec95b6bb2c72d54/opentick-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }