{"id":17081855,"url":"https://github.com/yutiansut/qatrader","last_synced_at":"2025-04-12T20:32:59.007Z","repository":{"id":57458796,"uuid":"194015262","full_name":"yutiansut/QATrader","owner":"yutiansut","description":"QATRADER","archived":false,"fork":false,"pushed_at":"2020-08-19T05:37:27.000Z","size":50,"stargazers_count":28,"open_issues_count":2,"forks_count":54,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-31T15:37:57.987Z","etag":null,"topics":["quantaxis"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yutiansut.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-27T03:20:03.000Z","updated_at":"2024-08-22T18:35:18.000Z","dependencies_parsed_at":"2022-09-10T05:51:04.083Z","dependency_job_id":null,"html_url":"https://github.com/yutiansut/QATrader","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yutiansut%2FQATrader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yutiansut%2FQATrader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yutiansut%2FQATrader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yutiansut%2FQATrader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yutiansut","download_url":"https://codeload.github.com/yutiansut/QATrader/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223546010,"owners_count":17163002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["quantaxis"],"created_at":"2024-10-14T12:57:09.542Z","updated_at":"2024-11-07T16:03:28.098Z","avatar_url":"https://github.com/yutiansut.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QATrader\n\n\n_QATrader兼容 [QIFI协议标准](https://github.com/QUANTAXIS/QIFI/blob/master/README.md)_\n\n![version](https://img.shields.io/pypi/v/QATRADER.svg)\n\n```\npip install QATRADER\n```\n\nQATRADER 会逐步开放多个语言的实现\n\n==\u003e  GO Client\n\n[QATrader_GO](https://github.com/yutiansut/qatrader_go)\n\n==\u003e Rust Client\n\n[QATrader_Rust](https://github.com/yutiansut/qatrader_rust)\n\n\n\n\n\nQATRADER websocket 接入的期货交易/ 并给予HTTP接口方便快速调用业务(可自行封装)\n\n需要先行配置好Rabbitmq/ quantaxis_pubsub\n\n```\nrabbitmq ubuntu一键部署 https://github.com/yutiansut/QUANTAXIS_RUN/blob/master/ubuntu_install.bash\n\nwindows 可以参考, erlang/rabbit的安装文件在群文件中有\n```\n\n安装部署可以参见: [安装参考](期货模拟盘从零配置.md)\n\n\n策略无需考虑交易的部分, 及策略只负责从数据库读取实时的账户数据/ 并发送业务请求到EVENT MQ即可实现交易\n\n这种设置主要是为了单账户多策略/ 以及单策略多市场等考虑\n\n\n## QATRADER 提供的两种交易接入方案\n\n### 1. eventmq 接入(AMQP协议)\n\neventmq的接入模式速度较快, 延迟也较低\n\nAMQP协议天生也支持多个语言: c++/java/python/go/javascript/rust (具体可以在github搜索 rabbitmq的相关支持)\n\nQUANTAIXS的python版本的api接入 采用quantaxis_pubsub\n\n详细信息可以参考:[eventmq](## EVENTMQ 接入API)\n\n\n### 2. http 接入\n\n\n```\n在pip install 之后, 在命令行输入\n\nqatraderserver\n\n即可开启http端口(8020)\n```\n\n\u003e 账户相关\n\n查询账户组合: [GET]  http://localhost:8020/tradeaccounts?action=list_sim\n\n查询单个账户: [GET]  http://localhost:8020/tradeaccounts?action=query_account\u0026account_cookie=1010101\n\n查询账户历史(昨日 前日这些)  [GET] http://localhost:8020/tradeaccounts?action=query_accounthistory\u0026account_cookie=1010101\n\n查询账户的资金曲线 [GET] http://localhost:8020/tradeaccounts?action=query_accounthistorytick\u0026account_cookie=1010101\n\n\n\u003e 订单相关  [POST] http://localhost:8020/order?action={}\u0026acc={}\n\n下单: [POST] \n\nattention:  \n1. exchange 内的交易所大写\n2. direction/offset 大写\n\nhttp://localhost:8020/order?action=sendorder\u0026acc=1010101\u0026price=3800\u0026code=rb1910\u0026\u0026direction=BUY\u0026offset=OPEN\u0026volume=1\u0026exchange=SHFE\u0026type=sim\n\n\n撤单 [POST]\n\nhttp://localhost:8020/order?action=cancel_order\u0026acc=1010101\u0026order_id=xxxxx\n\n转账 [POST]\n\n\nhttp://localhost:8020/order?action=transfer\u0026acc=1010101\u0026type=real\u0026amount=100\n\n\n查询银行 [POST]  (实盘独有API)\n\nhttp://localhost:8020/order?action=query_bank\u0026acc=1010101\u0026type=real\u0026bank_id=1\n\n修改密码 [POST] \n\n\nhttp://localhost:8020/order?action=change_password\u0026acc=1010101\u0026new_password=xxxx\u0026type=real\n\n查询结算单  [POST]\n\nhttp://localhost:8020/order?action=query_settlement\u0026acc=1010101\u0026day=20190818\n\n\n\n## EVENTMQ 接入API\n\n\u003e 获取账户数据:\n\n```python\nacc = pymongo.MongoClient().QAREALTIME.account.find_one({'account_cookie':'xxxx'})\n\n# 基础信息\nprint(acc['accounts'])\n\n# 持仓\nprint(acc['positions'])\n\n# 订单\nprint(acc['orders'])\n\n# 交易\nprint(acc['trades'])\n\n# 银期转账\nprint(acc['transfer'])\n\n# 查询银行(多银行)\nprint(acc['banks'])\n\n```\n\n当然 除了从数据库获取, 你也可以从业务平台上订阅该账户的增量信息\n\n```python\nfrom QAPUBSUB import consumer\nimport json\nfrom QAREALTIME.setting import real_account_mongo_ip\nz = consumer.subscriber_routing(host='127.0.0.1', user='admin', password='admin',exchange='QAACCOUNT',routing_key='812572')\nimport pandas as pd\nimport QUANTAXIS as QA\n\n\ndef parse(a, b, c, body):\n    z = json.loads(str(body, encoding='utf-8'))\n    # QA.QA_util_log_info(z)\n    if z['aid'] == 'rtn_data':\n        data = z['data'][0]['trade']\n        account_cookie = str(list(data.keys())[0])\n        QA.QA_util_log_info(data)\n        user_id = data[account_cookie]['user_id']\n        accounts = data[account_cookie]['accounts']['CNY']\n        positions = data[account_cookie]['positions']\n        orders = data[account_cookie]['orders']\n        trades = data[account_cookie]['trades']\n        banks = data[account_cookie]['banks']\n        transfers = data[account_cookie]['transfers']\n\n        QA.QA_util_log_info(\"======================= QUANTAXIS ::{}=======================\".format(\n            account_cookie))\n        QA.QA_util_log_info(\"== pre_balance \" + str(accounts['pre_balance']) +\n                            \"== balance \" + str(accounts['balance']))\n        QA.QA_util_log_info(\"== 可用资金 \" + str(accounts['available']) +\n                            \"== 冻结保证金 \" + str(accounts['margin']) +\n                            \"== risk_ratio \" + str(accounts['risk_ratio']))\n        QA.QA_util_log_info('== position_profit ' +\n                            str(accounts['position_profit']))\n        QA.QA_util_log_info(\"==============POSITIONS===============\")\n        QA.QA_util_log_info(pd.DataFrame(positions))\n        QA.QA_util_log_info(\"==============ORDERS==================\")\n        QA.QA_util_log_info(pd.DataFrame(orders))\n        QA.QA_util_log_info(\"==============TRADERS==================\")\n        QA.QA_util_log_info(pd.DataFrame(trades))\nz.callback = parse\nz.start()\n```\n\n\n\u003e 下单:\n\n```python\nfrom QAPUBSUB import producer\n\np = producer.publisher_routing(\n    user='admin', password='admin', host=host, exchange='QAORDER_ROUTER')\n\np.pub(json.dumps({\n    'topic': 'sendorder',\n    'account_cookie': '111111',\n    'strategy_id': 'test',\n    'code': 'rb1910',\n    'price': 4750,\n    'order_direction': 'BUY',\n    'order_offset': 'OPEN',\n    'volume': 1,\n    'order_time': str(datetime.datetime.now()),\n    'exchange_id': 'SHFE'\n}), routing_key='111111')\n\n```\n\n\u003e 撤单:\n\n```python\nfrom QAPUBSUB import producer\n\np = producer.publisher_routing(\n    user='admin', password='admin', host=host, exchange='QAORDER_ROUTER')\n    \np.pub(json.dumps({\n    'topic':'cancel_order',\n    'order_id':'xxxx'}), routing_key=acc)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyutiansut%2Fqatrader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyutiansut%2Fqatrader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyutiansut%2Fqatrader/lists"}