From 45827f4ae5206af8ebe0c9900f80e7464e9243f9 Mon Sep 17 00:00:00 2001 From: zhiyong Date: Mon, 28 Apr 2025 21:58:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20add=20=E8=BF=85=E6=8A=95trader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .python-version | 1 + main.py | 6 + pyproject.toml | 12 + requirements.txt | 6 - src/config.py | 8 +- src/real_trader.py | 99 - src/trade_server.py | 19 +- src/xt_trader.py | 179 + src/xtquant/__init__.py | 27 + src/xtquant/config/MarketTime.ini | 185 + src/xtquant/config/StockInfo.lua | 7 + src/xtquant/config/captial_structure_1.ini | 7 + src/xtquant/config/cashflow_new_1.ini | 109 + src/xtquant/config/config.lua | 446 +++ src/xtquant/config/configHelper.lua | 545 +++ src/xtquant/config/env.lua | 159 + src/xtquant/config/metaInfo.json | 3032 +++++++++++++++ src/xtquant/config/pershare_new.ini | 29 + src/xtquant/config/sharebalance_new_1.ini | 143 + src/xtquant/config/shareholder_new_1.ini | 9 + src/xtquant/config/shareincome_new_1.ini | 68 + src/xtquant/config/table2json.lua | 25 + src/xtquant/config/top10holder_new_1.ini | 10 + src/xtquant/config/tradeTime.txt | 370 ++ .../config/user/root2/lua/ConstFunc.lua | 0 .../config/user/root2/lua/FunIndex.lua | 117 + .../config/user/root2/lua/FunLogic.lua | 238 ++ src/xtquant/config/user/root2/lua/FunMath.lua | 24 + .../config/user/root2/lua/FunOther.lua | 831 ++++ src/xtquant/config/user/root2/lua/FunRef.lua | 657 ++++ .../config/user/root2/lua/FunStatistic.lua | 395 ++ .../config/user/root2/lua/FunString.lua | 164 + .../config/user/root2/lua/FunSystem.lua | 75 + .../config/user/root2/lua/FunTrader.lua | 182 + .../config/user/root2/lua/MetaType.lua | 10 + src/xtquant/config/user/root2/lua/config.lua | 1485 ++++++++ src/xtquant/config/user/root2/lua/util.lua | 292 ++ src/xtquant/config/xtquantservice.log4cxx | 19 + src/xtquant/config/xtquantservice.lua | 116 + src/xtquant/config/xtquoterconfig.xml | 23 + src/xtquant/config/xtstocktype.lua | 420 +++ src/xtquant/doc/xtdata.md | 1885 +++++++++ src/xtquant/doc/xttrader.md | 1912 ++++++++++ src/xtquant/libeay32.dll | Bin 0 -> 2079744 bytes src/xtquant/log4cxx.dll | Bin 0 -> 2136576 bytes src/xtquant/metatable/__init__.py | 13 + src/xtquant/metatable/get_arrow.py | 373 ++ src/xtquant/metatable/get_bson.py | 295 ++ src/xtquant/metatable/meta_config.py | 198 + src/xtquant/msvcp140.dll | Bin 0 -> 675112 bytes src/xtquant/qmttools/__init__.py | 6 + src/xtquant/qmttools/contextinfo.py | 353 ++ src/xtquant/qmttools/functions.py | 537 +++ src/xtquant/qmttools/stgentry.py | 73 + src/xtquant/qmttools/stgframe.py | 312 ++ src/xtquant/ssleay32.dll | Bin 0 -> 377856 bytes src/xtquant/vcruntime140.dll | Bin 0 -> 87864 bytes src/xtquant/xtbson/__init__.py | 7 + src/xtquant/xtbson/bson36/__init__.py | 1182 ++++++ src/xtquant/xtbson/bson36/_helpers.py | 40 + src/xtquant/xtbson/bson36/binary.py | 352 ++ src/xtquant/xtbson/bson36/code.py | 94 + src/xtquant/xtbson/bson36/codec_options.py | 389 ++ src/xtquant/xtbson/bson36/dbref.py | 125 + src/xtquant/xtbson/bson36/decimal128.py | 315 ++ src/xtquant/xtbson/bson36/errors.py | 35 + src/xtquant/xtbson/bson36/int64.py | 37 + src/xtquant/xtbson/bson36/json_util.py | 861 +++++ src/xtquant/xtbson/bson36/max_key.py | 54 + src/xtquant/xtbson/bson36/min_key.py | 54 + src/xtquant/xtbson/bson36/objectid.py | 285 ++ src/xtquant/xtbson/bson36/raw_bson.py | 174 + src/xtquant/xtbson/bson36/regex.py | 131 + src/xtquant/xtbson/bson36/son.py | 184 + src/xtquant/xtbson/bson36/timestamp.py | 122 + src/xtquant/xtbson/bson36/tz_util.py | 51 + src/xtquant/xtbson/bson37/__init__.py | 1404 +++++++ src/xtquant/xtbson/bson37/_helpers.py | 41 + src/xtquant/xtbson/bson37/binary.py | 364 ++ src/xtquant/xtbson/bson37/code.py | 101 + src/xtquant/xtbson/bson37/codec_options.py | 462 +++ src/xtquant/xtbson/bson37/codec_options.pyi | 108 + src/xtquant/xtbson/bson37/datetime_ms.py | 158 + src/xtquant/xtbson/bson37/dbref.py | 133 + src/xtquant/xtbson/bson37/decimal128.py | 314 ++ src/xtquant/xtbson/bson37/errors.py | 35 + src/xtquant/xtbson/bson37/int64.py | 39 + src/xtquant/xtbson/bson37/json_util.py | 903 +++++ src/xtquant/xtbson/bson37/max_key.py | 55 + src/xtquant/xtbson/bson37/min_key.py | 55 + src/xtquant/xtbson/bson37/objectid.py | 286 ++ src/xtquant/xtbson/bson37/py.typed | 2 + src/xtquant/xtbson/bson37/raw_bson.py | 196 + src/xtquant/xtbson/bson37/regex.py | 135 + src/xtquant/xtbson/bson37/son.py | 208 + src/xtquant/xtbson/bson37/timestamp.py | 124 + src/xtquant/xtbson/bson37/tz_util.py | 52 + src/xtquant/xtconn.py | 196 + src/xtquant/xtconstant.py | 1173 ++++++ src/xtquant/xtdata.ini | 17 + src/xtquant/xtdata.log4cxx | 18 + src/xtquant/xtdata.py | 3352 +++++++++++++++++ src/xtquant/xtdata_config.py | 1 + src/xtquant/xtdatacenter.py | 300 ++ src/xtquant/xtextend.py | 138 + src/xtquant/xtstocktype.py | 373 ++ src/xtquant/xttools.py | 11 + src/xtquant/xttrader.py | 1476 ++++++++ src/xtquant/xttype.py | 373 ++ src/xtquant/xtutil.py | 52 + src/xtquant/xtview.py | 326 ++ tests/__init__.py | 1 - tests/test_real_trader.py | 59 - uv.lock | 447 +++ 114 files changed, 34302 insertions(+), 184 deletions(-) create mode 100644 .python-version create mode 100644 main.py create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 src/real_trader.py create mode 100644 src/xt_trader.py create mode 100644 src/xtquant/__init__.py create mode 100644 src/xtquant/config/MarketTime.ini create mode 100644 src/xtquant/config/StockInfo.lua create mode 100644 src/xtquant/config/captial_structure_1.ini create mode 100644 src/xtquant/config/cashflow_new_1.ini create mode 100644 src/xtquant/config/config.lua create mode 100644 src/xtquant/config/configHelper.lua create mode 100644 src/xtquant/config/env.lua create mode 100644 src/xtquant/config/metaInfo.json create mode 100644 src/xtquant/config/pershare_new.ini create mode 100644 src/xtquant/config/sharebalance_new_1.ini create mode 100644 src/xtquant/config/shareholder_new_1.ini create mode 100644 src/xtquant/config/shareincome_new_1.ini create mode 100644 src/xtquant/config/table2json.lua create mode 100644 src/xtquant/config/top10holder_new_1.ini create mode 100644 src/xtquant/config/tradeTime.txt create mode 100644 src/xtquant/config/user/root2/lua/ConstFunc.lua create mode 100644 src/xtquant/config/user/root2/lua/FunIndex.lua create mode 100644 src/xtquant/config/user/root2/lua/FunLogic.lua create mode 100644 src/xtquant/config/user/root2/lua/FunMath.lua create mode 100644 src/xtquant/config/user/root2/lua/FunOther.lua create mode 100644 src/xtquant/config/user/root2/lua/FunRef.lua create mode 100644 src/xtquant/config/user/root2/lua/FunStatistic.lua create mode 100644 src/xtquant/config/user/root2/lua/FunString.lua create mode 100644 src/xtquant/config/user/root2/lua/FunSystem.lua create mode 100644 src/xtquant/config/user/root2/lua/FunTrader.lua create mode 100644 src/xtquant/config/user/root2/lua/MetaType.lua create mode 100644 src/xtquant/config/user/root2/lua/config.lua create mode 100644 src/xtquant/config/user/root2/lua/util.lua create mode 100644 src/xtquant/config/xtquantservice.log4cxx create mode 100644 src/xtquant/config/xtquantservice.lua create mode 100644 src/xtquant/config/xtquoterconfig.xml create mode 100644 src/xtquant/config/xtstocktype.lua create mode 100644 src/xtquant/doc/xtdata.md create mode 100644 src/xtquant/doc/xttrader.md create mode 100644 src/xtquant/libeay32.dll create mode 100644 src/xtquant/log4cxx.dll create mode 100644 src/xtquant/metatable/__init__.py create mode 100644 src/xtquant/metatable/get_arrow.py create mode 100644 src/xtquant/metatable/get_bson.py create mode 100644 src/xtquant/metatable/meta_config.py create mode 100644 src/xtquant/msvcp140.dll create mode 100644 src/xtquant/qmttools/__init__.py create mode 100644 src/xtquant/qmttools/contextinfo.py create mode 100644 src/xtquant/qmttools/functions.py create mode 100644 src/xtquant/qmttools/stgentry.py create mode 100644 src/xtquant/qmttools/stgframe.py create mode 100644 src/xtquant/ssleay32.dll create mode 100644 src/xtquant/vcruntime140.dll create mode 100644 src/xtquant/xtbson/__init__.py create mode 100644 src/xtquant/xtbson/bson36/__init__.py create mode 100644 src/xtquant/xtbson/bson36/_helpers.py create mode 100644 src/xtquant/xtbson/bson36/binary.py create mode 100644 src/xtquant/xtbson/bson36/code.py create mode 100644 src/xtquant/xtbson/bson36/codec_options.py create mode 100644 src/xtquant/xtbson/bson36/dbref.py create mode 100644 src/xtquant/xtbson/bson36/decimal128.py create mode 100644 src/xtquant/xtbson/bson36/errors.py create mode 100644 src/xtquant/xtbson/bson36/int64.py create mode 100644 src/xtquant/xtbson/bson36/json_util.py create mode 100644 src/xtquant/xtbson/bson36/max_key.py create mode 100644 src/xtquant/xtbson/bson36/min_key.py create mode 100644 src/xtquant/xtbson/bson36/objectid.py create mode 100644 src/xtquant/xtbson/bson36/raw_bson.py create mode 100644 src/xtquant/xtbson/bson36/regex.py create mode 100644 src/xtquant/xtbson/bson36/son.py create mode 100644 src/xtquant/xtbson/bson36/timestamp.py create mode 100644 src/xtquant/xtbson/bson36/tz_util.py create mode 100644 src/xtquant/xtbson/bson37/__init__.py create mode 100644 src/xtquant/xtbson/bson37/_helpers.py create mode 100644 src/xtquant/xtbson/bson37/binary.py create mode 100644 src/xtquant/xtbson/bson37/code.py create mode 100644 src/xtquant/xtbson/bson37/codec_options.py create mode 100644 src/xtquant/xtbson/bson37/codec_options.pyi create mode 100644 src/xtquant/xtbson/bson37/datetime_ms.py create mode 100644 src/xtquant/xtbson/bson37/dbref.py create mode 100644 src/xtquant/xtbson/bson37/decimal128.py create mode 100644 src/xtquant/xtbson/bson37/errors.py create mode 100644 src/xtquant/xtbson/bson37/int64.py create mode 100644 src/xtquant/xtbson/bson37/json_util.py create mode 100644 src/xtquant/xtbson/bson37/max_key.py create mode 100644 src/xtquant/xtbson/bson37/min_key.py create mode 100644 src/xtquant/xtbson/bson37/objectid.py create mode 100644 src/xtquant/xtbson/bson37/py.typed create mode 100644 src/xtquant/xtbson/bson37/raw_bson.py create mode 100644 src/xtquant/xtbson/bson37/regex.py create mode 100644 src/xtquant/xtbson/bson37/son.py create mode 100644 src/xtquant/xtbson/bson37/timestamp.py create mode 100644 src/xtquant/xtbson/bson37/tz_util.py create mode 100644 src/xtquant/xtconn.py create mode 100644 src/xtquant/xtconstant.py create mode 100644 src/xtquant/xtdata.ini create mode 100644 src/xtquant/xtdata.log4cxx create mode 100644 src/xtquant/xtdata.py create mode 100644 src/xtquant/xtdata_config.py create mode 100644 src/xtquant/xtdatacenter.py create mode 100644 src/xtquant/xtextend.py create mode 100644 src/xtquant/xtstocktype.py create mode 100644 src/xtquant/xttools.py create mode 100644 src/xtquant/xttrader.py create mode 100644 src/xtquant/xttype.py create mode 100644 src/xtquant/xtutil.py create mode 100644 src/xtquant/xtview.py delete mode 100644 tests/__init__.py delete mode 100644 tests/test_real_trader.py create mode 100644 uv.lock diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..09dcc78 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.10.11 diff --git a/main.py b/main.py new file mode 100644 index 0000000..dc140ca --- /dev/null +++ b/main.py @@ -0,0 +1,6 @@ +def main(): + print("Hello from real-trader!") + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..7f19a01 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +[project] +name = "real-trader" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.10.11" +dependencies = [ + "flask>=3.1.0", + "flask-limiter>=3.12", + "requests>=2.32.3", + "schedule>=1.2.2", +] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 81047af..0000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -Flask -Flask-Limiter -pywin32 -requests -schedule -pytesseract \ No newline at end of file diff --git a/src/config.py b/src/config.py index 511aefc..777391b 100644 --- a/src/config.py +++ b/src/config.py @@ -7,9 +7,9 @@ class Config: DEBUG = False # Trading hours - MARKET_OPEN_TIME = "09:00" + MARKET_OPEN_TIME = "09:20" MARKET_ACTIVE_TIME = "09:15" - MARKET_CLOSE_TIME = "15:30" + MARKET_CLOSE_TIME = "15:10" # Logging LOG_DIR = "logs" @@ -21,3 +21,7 @@ class Config: # API Rate limiting RATE_LIMIT_REQUESTS = 100 RATE_LIMIT_PERIOD = 60 # seconds + + # XtQuant 相关配置 + XT_ACCOUNT = os.getenv('XT_ACCOUNT', '80391818') + XT_PATH = os.getenv('XT_PATH', r'C:\\江海证券QMT实盘_交易\\userdata_mini') diff --git a/src/real_trader.py b/src/real_trader.py deleted file mode 100644 index fd8603e..0000000 --- a/src/real_trader.py +++ /dev/null @@ -1,99 +0,0 @@ -import easytrader -import time -import os - -""" -需要32位python -""" - - -class RealTrader: - def __init__(self): - self._ACCOUNT = os.environ.get("ACCOUNT") - self._PASSWORD = os.environ.get("PASSWORD") - self._exe_path = r"C:\\ths\\xiadan.exe" - pass - - def login(self): - print("准备登录:", self._ACCOUNT, self._PASSWORD) - # self.trader = easytrader.use("universal_client") - self.trader = easytrader.use("ths5.19") - # 使用修改版交易客户端时, 不会超时 - try: - self.trader.enable_type_keys_for_editor() - self.trader.prepare( - user=self._ACCOUNT, password=self._PASSWORD, exe_path=self._exe_path - ) - except Exception as e: - time.sleep(1) - - def logout(self): - self.trader.exit() - - def get_balance(self): - return self.trader.balance - - def get_positions(self): - return self.trader.position - - # 查询当日成交 - def get_today_trades(self): - return self.trader.today_trades - - # 查询当日委托 - def get_today_entrust(self): - return self.trader.today_entrusts - - # 刷新数据 - def refresh(self): - self.trader.refresh() - - def buy(self, code, price, amount): - return self.trader.buy(code, price, amount) - - def sell(self, code, price, amount): - return self.trader.sell(code, price, amount) - - def cancel(self, entrust_no): - return self.trader.cancel_entrust(entrust_no) - - -if __name__ == "__main__": - # 创建RealTrader实例 - trader = RealTrader() - - try: - # 测试登录 - print("正在登录...") - trader.login() - print("登录成功!") - - # 获取账户余额测试 - balance = trader.get_balance() - print("账户余额信息:", balance) - - # 获取持仓信息 - positions = trader.get_positions() - print("持仓信息:", positions) - - # 获取当日成交 - today_trades = trader.get_today_trades() - print("当日成交:", today_trades) - - # 获取当日委托 - today_entrust = trader.get_today_entrust() - print("当日委托:", today_entrust) - - # 刷新数据 - trader.refresh() - print("数据已刷新") - - except Exception as e: - print("发生错误:", str(e)) - # finally: - # # 确保退出登录 - # try: - # trader.logout() - # print("已安全退出!") - # except: - # pass diff --git a/src/trade_server.py b/src/trade_server.py index 0473760..471d1f2 100644 --- a/src/trade_server.py +++ b/src/trade_server.py @@ -1,7 +1,7 @@ import schedule import threading import time -from real_trader import RealTrader +from xt_trader import XtTrader from flask import Flask, request, abort, jsonify from flask_limiter import Limiter from flask_limiter.util import get_remote_address @@ -69,7 +69,7 @@ def run_pending_tasks(): # Run the task scheduler in a new thread threading.Thread(target=run_pending_tasks).start() -trader = RealTrader() +trader = XtTrader() trader.login() @@ -234,21 +234,6 @@ def get_today_entrust(): abort(500, description="Internal server error") -@app.route("/yu/refresh", methods=["GET"]) -def refresh(): - """Refresh the account.""" - logger.info("Received refresh request") - try: - trader.refresh() - logger.info("Account data refreshed successfully") - - response = {"success": True, "data": "Account data refreshed successfully."} - return jsonify(response), 200 - except Exception as e: - logger.error(f"Error processing refresh request: {str(e)}") - abort(500, description="Internal server error") - - if __name__ == "__main__": logger.info(f"Server starting on {Config.HOST}:{Config.PORT}") app.run(debug=Config.DEBUG, host=Config.HOST, port=Config.PORT) diff --git a/src/xt_trader.py b/src/xt_trader.py new file mode 100644 index 0000000..4843a8b --- /dev/null +++ b/src/xt_trader.py @@ -0,0 +1,179 @@ +import os +import random +import logging +from logging.handlers import TimedRotatingFileHandler +from config import Config +from xtquant.xttrader import XtQuantTrader +from xtquant.xttype import StockAccount +from xtquant import xtconstant + +# 日志配置 +LOG_DIR = "log" +if not os.path.exists(LOG_DIR): + os.makedirs(LOG_DIR) +log_path = os.path.join(LOG_DIR, "%Y-%m-%d.log") +logger = logging.getLogger("xt_trader") +logger.setLevel(logging.INFO) +handler = TimedRotatingFileHandler( + os.path.join(LOG_DIR, "xt_trader.log"), when="midnight", interval=1, backupCount=7, encoding="utf-8" +) +handler.suffix = "%Y-%m-%d" +formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') +handler.setFormatter(formatter) +if not logger.handlers: + logger.addHandler(handler) + +class MyXtQuantTraderCallback: + def on_connected(self): + logger.info("连接成功") + def on_disconnected(self): + logger.warning("连接断开") + def on_account_status(self, status): + logger.info(f"账号状态: {status.account_id} {status.status}") + def on_stock_asset(self, asset): + logger.info(f"资金变动: {asset.account_id} {asset.cash} {asset.total_asset}") + def on_stock_order(self, order): + logger.info(f"委托回报: {order.stock_code} {order.order_status} {order.order_sysid}") + def on_stock_trade(self, trade): + logger.info(f"成交变动: {trade.account_id} {trade.stock_code} {trade.order_id}") + def on_stock_position(self, position): + logger.info(f"持仓变动: {position.stock_code} {position.volume}") + def on_order_error(self, order_error): + logger.error(f"委托失败: {order_error.order_id} {order_error.error_id} {order_error.error_msg}") + def on_cancel_error(self, cancel_error): + logger.error(f"撤单失败: {cancel_error.order_id} {cancel_error.error_id} {cancel_error.error_msg}") + def on_order_stock_async_response(self, response): + logger.info(f"异步下单反馈: {response.order_id}") + def on_cancel_order_stock_async_response(self, response): + logger.info(f"异步撤单反馈: {response.order_id}") + def on_smt_appointment_async_response(self, response): + logger.info(f"约券异步反馈: {response.seq}") + +class XtTrader: + def __init__(self): + self._ACCOUNT = Config.XT_ACCOUNT + self._PATH = Config.XT_PATH + self._SESSION_ID = random.randint(100000, 99999999) + self._account_type = os.environ.get("XT_ACCOUNT_TYPE", "STOCK") + self._strategy_name = os.environ.get("XT_STRATEGY_NAME", "xt_strategy") + self._remark = os.environ.get("XT_REMARK", "remark") + self._callback = MyXtQuantTraderCallback() + self.xt_trader = XtQuantTrader(self._PATH, self._SESSION_ID) + self.account = StockAccount(self._ACCOUNT, self._account_type) + self.xt_trader.register_callback(self._callback) + self.started = False + self.connected = False + self.subscribed = False + + def login(self): + if not self.started: + self.xt_trader.start() + self.started = True + if not self.connected: + result = self.xt_trader.connect() + self.connected = (result == 0) + if not self.subscribed: + result = self.xt_trader.subscribe(self.account) + self.subscribed = (result == 0) + return self.connected and self.subscribed + + def logout(self): + if self.started: + self.xt_trader.stop() + self.started = False + self.connected = False + self.subscribed = False + + def get_balance(self): + asset = self.xt_trader.query_stock_asset(self.account) + if asset: + return { + "account_id": asset.account_id, + "cash": asset.cash, + "frozen_cash": asset.frozen_cash, + "market_value": asset.market_value, + "total_asset": asset.total_asset + } + return None + + def get_positions(self): + positions = self.xt_trader.query_stock_positions(self.account) + if positions: + return [ + { + "account_id": p.account_id, + "stock_code": p.stock_code, + "volume": p.volume, + "can_use_volume": p.can_use_volume, + "open_price": p.open_price, + "market_value": p.market_value, + "frozen_volume": p.frozen_volume, + "on_road_volume": p.on_road_volume, + "yesterday_volume": p.yesterday_volume, + "avg_price": p.avg_price + } for p in positions + ] + return [] + + def get_today_trades(self): + trades = self.xt_trader.query_stock_trades(self.account) + if trades: + return [ + { + "account_id": t.account_id, + "stock_code": t.stock_code, + "order_id": t.order_id, + "traded_id": t.traded_id, + "traded_time": t.traded_time, + "traded_price": t.traded_price, + "traded_volume": t.traded_volume, + "traded_amount": t.traded_amount + } for t in trades + ] + return [] + + def get_today_entrust(self): + orders = self.xt_trader.query_stock_orders(self.account) + if orders: + return [ + { + "account_id": o.account_id, + "stock_code": o.stock_code, + "order_id": o.order_id, + "order_time": o.order_time, + "order_type": o.order_type, + "order_volume": o.order_volume, + "price_type": o.price_type, + "price": o.price, + "traded_volume": o.traded_volume, + "traded_price": o.traded_price, + "order_status": o.order_status, + "status_msg": o.status_msg + } for o in orders + ] + return [] + + def buy(self, code, price, amount): + order_id = self.xt_trader.order_stock( + self.account, code, xtconstant.STOCK_BUY, amount, xtconstant.FIX_PRICE, price, self._strategy_name, self._remark + ) + return {"order_id": order_id} + + def sell(self, code, price, amount): + order_id = self.xt_trader.order_stock( + self.account, code, xtconstant.STOCK_SELL, amount, xtconstant.FIX_PRICE, price, self._strategy_name, self._remark + ) + return {"order_id": order_id} + + def cancel(self, entrust_no): + # 撤单接口需要订单编号 + result = self.xt_trader.cancel_order_stock(self.account, int(entrust_no)) + return {"cancel_result": result} + +if __name__ == "__main__": + trader = XtTrader() + trader.login() + logger.info(f"账户余额: {trader.get_balance()}") + logger.info(f"持仓: {trader.get_positions()}") + logger.info(f"当日成交: {trader.get_today_trades()}") + logger.info(f"当日委托: {trader.get_today_entrust()}") diff --git a/src/xtquant/__init__.py b/src/xtquant/__init__.py new file mode 100644 index 0000000..c8554d3 --- /dev/null +++ b/src/xtquant/__init__.py @@ -0,0 +1,27 @@ +#coding: utf-8 + +__version__ = "xtquant" + + +def check_for_update(package_name): + import requests + from pkg_resources import get_distribution + # 获取当前安装的版本 + current_version = get_distribution(package_name).version + # 查询PyPI的API获取最新版本信息 + response = requests.get(f"https://pypi.org/pypi/{package_name}/json", timeout = 10) + if response.status_code == 200: + latest_version = response.json()['info']['version'] + if current_version != latest_version: + print(f"xtquant{latest_version}已经发布,前往 http://dict.thinktrader.net/nativeApi/download_xtquant.html 查看更新说明\n") + else: + print("xtquant文档地址:http://dict.thinktrader.net/nativeApi/start_now.html") + else: + pass + + +try: + check_for_update("xtquant") +except: + pass + diff --git a/src/xtquant/config/MarketTime.ini b/src/xtquant/config/MarketTime.ini new file mode 100644 index 0000000..ff518dd --- /dev/null +++ b/src/xtquant/config/MarketTime.ini @@ -0,0 +1,185 @@ +[IF] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[SH] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= +bondsRepuropentime=093000,130000 +bondsRepuroclosetime=113000,153000 + +[SZ] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= +bondsRepuropentime=093000,130000 +bondsRepuroclosetime=113000,153000 + +[SHO] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[SZO] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[HGT] +tradetime=093000,120000,130000,161000 +opentime=093000,130000 +closetime=120000,161000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[SGT] +tradetime=093000,120000,130000,161000 +opentime=093000,130000 +closetime=120000,161000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[NEEQ] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[SF] +tradetime=-30000,23000,90000,101500,103000,113000,133000,150000 +opentime=090000,103000,133000 +closetime=101500,113000,150000 +nightopentime=210000,000000 +nightclosetime=235959,023000 +indexopentime= +indexclosetime= + +[DF] +tradetime=-30000,-10000,90000,101500,103000,113000,133000,150000 +opentime=090000,103000,133000 +closetime=101500,113000,150000 +nightopentime=210000 +nightclosetime=230000 +indexopentime= +indexclosetime= + +[ZF] +tradetime=-30000,-10000,90000,101500,103000,113000,133000,150000 +opentime=090000,103000,133000 +closetime=101500,113000,150000 +nightopentime=210000 +nightclosetime=230000 +indexopentime= +indexclosetime= + +[YSWP] +tradetime=-76000,23000,90000,113000,130000,150000 +opentime=090000 +closetime=155500 +nightopentime=164000,000000 +nightclosetime=235959,020000 +indexopentime=093000,130000 +indexclosetime=113000,150000 + +[INE] +tradetime=-30000,23000,90000,101500,103000,113000,133000,150000 +opentime=090000,103000,133000 +closetime=101500,113000,150000 +nightopentime=210000,000000 +nightclosetime=235959,023000 +indexopentime= +indexclosetime= + +[SI] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[BKZS] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= +futureindexopentime=090000,103000,133000 +futureindexclosetime=101500,113000,150000 + +[HK] +tradetime=093000,120000,130000,160000 +opentime=093000,130000 +closetime=120000,160000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[] +tradetime=000000,240000 +opentime=000000 +closetime=235959 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[WP] +tradetime=060000,290000 +opentime=060000 +closetime=290000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[GF] +tradetime=090000,101500,103000,113000,133000,150000 +opentime=090000,103000,133000 +closetime=101500,113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= + +[BJ] +tradetime=093000,113000,130000,150000 +opentime=093000,130000 +closetime=113000,150000 +nightopentime= +nightclosetime= +indexopentime= +indexclosetime= \ No newline at end of file diff --git a/src/xtquant/config/StockInfo.lua b/src/xtquant/config/StockInfo.lua new file mode 100644 index 0000000..67c6d7c --- /dev/null +++ b/src/xtquant/config/StockInfo.lua @@ -0,0 +1,7 @@ +--[[-------------------------------------------------------------- + Ʊ/ڻĻϢ + cnname : Ʊ/ڻ +----------------------------------------------------------------]] +StockBasicInfo = { + {label = "if1209", cnname = "ָ1209", blocks = {"ij"},}, +} \ No newline at end of file diff --git a/src/xtquant/config/captial_structure_1.ini b/src/xtquant/config/captial_structure_1.ini new file mode 100644 index 0000000..79a6870 --- /dev/null +++ b/src/xtquant/config/captial_structure_1.ini @@ -0,0 +1,7 @@ +股本表|CAPITALSTRUCTURE +变动日期|m_timetag|changeDate +公告日期|m_anntime|declareDate +总股本|total_capital|totalCapital +已上市流通A股|circulating_capital|floatCapitalA +其他流通股份|restrict_circulating_capital|otherCapital +自由流通股份|freeFloatCapital|freeFloatCapital diff --git a/src/xtquant/config/cashflow_new_1.ini b/src/xtquant/config/cashflow_new_1.ini new file mode 100644 index 0000000..ee98a8a --- /dev/null +++ b/src/xtquant/config/cashflow_new_1.ini @@ -0,0 +1,109 @@ +现金流量表|ASHARECASHFLOW +披露日期|m_anntime|m_annTime +截止日期|m_timetag|m_endTime +收到原保险合同保费取得的现金|cash_received_ori_ins_contract_pre|m_cashReceivedOriInsContractPre +收到再保险业务现金净额|net_cash_received_rei_ope|m_netCashReceivedReiOpe +保户储金及投资款净增加额|net_increase_insured_funds|m_netIncreaseInsuredFunds +处置交易性金融资产净增加额|net_increase_in_disposal|m_netIncreaseInDisposal +收取利息、手续费及佣金的现金|cash_for_interest|m_cashForInterest +回购业务资金净增加额|net_increase_in_repurchase_funds|m_netIncreaseInRepurchaseFunds +支付原保险合同赔付款项的现金|cash_for_payment_original_insurance|m_cashForPaymentOriginalInsurance +支付保单红利的现金|cash_payment_policy_dividends|m_cashPaymentPolicyDividends +处置子公司及其他收到的现金|disposal_other_business_units|m_disposalOtherBusinessUnits +减少质押和定期存款所收到的现金|cash_received_from_pledges|m_cashReceivedFromPledges +投资所支付的现金|cash_paid_for_investments|m_cashPaidForInvestments +质押贷款净增加额|net_increase_in_pledged_loans|m_netIncreaseInPledgedLoans +取得子公司及其他营业单位支付的现金净额|cash_paid_by_subsidiaries|m_cashPaidBySubsidiaries +增加质押和定期存款所支付的现金|increase_in_cash_paid|m_increaseInCashPaid +其中子公司吸收现金|cass_received_sub_abs|m_cassReceivedSubAbs +其中:子公司支付给少数股东的股利、利润|cass_received_sub_investments|m_cassReceivedSubInvestments +少数股东损益|minority_shareholder_profit_loss|m_minorityShareholderProfitLoss +未确认的投资损失|unrecognized_investment_losses|m_unrecognizedInvestmentLosses +递延收益增加(减:减少)|ncrease_deferred_income|m_ncreaseDeferredIncome +预计负债|projected_liability|m_projectedLiability +经营性应付项目的增加|increase_operational_payables|m_increaseOperationalPayables +已完工尚未结算款的减少(减:增加)|reduction_outstanding_amounts_less|m_reductionOutstandingAmountsLess +已结算尚未完工款的增加(减:减少)|reduction_outstanding_amounts_more|m_reductionOutstandingAmountsMore +销售商品、提供劳务收到的现金|goods_sale_and_service_render_cash|m_goodsSaleAndServiceRenderCash +客户存款和同业存放款项净增加额|net_incr_dep_cob|m_netIncrDepCob +向中央银行借款净增加额(万元|net_incr_loans_central_bank|m_netIncrLoansCentralBank +向其他金融机构拆入资金净增加额|net_incr_fund_borr_ofi|m_netIncrFundBorrOfi +拆入资金净增加额|net_incr_fund_borr_ofi|m_netIncrFundBorrOfi +收到的税费与返还|tax_levy_refund|m_taxLevyRefund +投资支付的现金|cash_paid_invest|m_cashPaidInvest +收到的其他与经营活动有关的现金|other_cash_recp_ral_oper_act|m_otherCashRecpRalOperAct +经营活动现金流入小计|stot_cash_inflows_oper_act|m_stotCashInflowsOperAct +购买商品、接受劳务支付的现金|goods_and_services_cash_paid|m_goodsAndServicesCashPaid +客户贷款及垫款净增加额|net_incr_clients_loan_adv|m_netIncrClientsLoanAdv +存放中央银行和同业款项净增加额|net_incr_dep_cbob|m_netIncrDepCbob +支付利息、手续费及佣金的现金|handling_chrg_paid|m_handlingChrgPaid +支付给职工以及为职工支付的现金|cash_pay_beh_empl|m_cashPayBehEmpl +支付的各项税费|pay_all_typ_tax|m_payAllTypTax +支付其他与经营活动有关的现金|other_cash_pay_ral_oper_act|m_otherCashPayRalOperAct +经营活动现金流出小计|stot_cash_outflows_oper_act|m_stotCashOutflowsOperAct +经营活动产生的现金流量净额|net_cash_flows_oper_act|m_netCashFlowsOperAct +收回投资所收到的现金|cash_recp_disp_withdrwl_invest|m_cashRecpDispWithdrwlInvest +取得投资收益所收到的现金|cash_recp_return_invest|m_cashRecpReturnInvest +处置固定资产、无形资产和其他长期投资收到的现金|net_cash_recp_disp_fiolta|m_netCashecpDispFiolta +收到的其他与投资活动有关的现金|other_cash_recp_ral_inv_act|m_otherCashRecpRalInvAct +投资活动现金流入小计|stot_cash_inflows_inv_act|m_stotCashInflowsInvAct +购建固定资产、无形资产和其他长期投资支付的现金|cash_pay_acq_const_fiolta|m_cashPayAcqConstFiolta +投资活动现金流出小计|stot_cash_outflows_inv_act|m_stotCashOutflowsInvAct +投资活动产生的现金流量净额|net_cash_flows_inv_acm_netCashFlowsInvAct|m_netCashFlowsInvAct +吸收投资收到的现金|cash_recp_cap_contrib|m_cashRecpCapContrib +取得借款收到的现金|cash_recp_borrow|m_cashRecpBorrow +发行债券收到的现金|proc_issue_bonds|m_procIssueBonds +收到其他与筹资活动有关的现金|other_cash_recp_ral_fnc_act|m_otherCashRecpRalFncAct +筹资活动现金流入小计|stot_cash_inflows_fnc_act|m_stotCashInflowsFncAct +偿还债务支付现金|cash_prepay_amt_borr|m_cashPrepayAmtBorr +分配股利、利润或偿付利息支付的现金|cash_pay_dist_dpcp_int_exp|m_cashPayDistDpcpIntExp +支付其他与筹资的现金|other_cash_pay_ral_fnc_act|m_otherCashPayRalFncAct +筹资活动现金流出小计|stot_cash_outflows_fnc_act|m_stotCashOutflowsFncAct +筹资活动产生的现金流量净额|net_cash_flows_fnc_act|m_netCashFlowsFncAct +汇率变动对现金的影响|eff_fx_flu_cash|m_effFxFluCash +现金及现金等价物净增加额|net_incr_cash_cash_equ|m_netIncrCashCashEqu +期初现金及现金等价物余额|cash_cash_equ_beg_period|m_cashCashEquBegPeriod +期末现金及现金等价物余额|cash_cash_equ_end_period|m_cashCashEquEndPeriod +净利润|net_profit|m_netProfit +资产减值准备|plus_prov_depr_assets|m_plusProvDeprAssets +固定资产折旧、油气资产折耗、生产性物资折旧|depr_fa_coga_dpba|m_deprFaCogaDpba +无形资产摊销|amort_intang_assets|m_amortIntangAssets +长期待摊费用摊销|amort_lt_deferred_exp|m_amortLtDeferredExp +待摊费用的减少|decr_deferred_exp|m_decrDeferredExp +预提费用的增加|incr_acc_exp|m_incrAccExp +处置固定资产、无形资产和其他长期资产的损失|loss_disp_fiolta|m_lossDispFiolta +固定资产报废损失|loss_scr_fa|m_lossScrFa +公允价值变动损失|loss_fv_chg|m_lossFvChg +财务费用|fin_exp|m_finExp +投资损失|invest_loss|m_investLoss +递延所得税资产减少|decr_deferred_inc_tax_assets|m_decrDeferredIncTaxAssets +递延所得税负债增加|incr_deferred_inc_tax_liab|m_incrDeferredIncTaxLiab +存货的减少|decr_inventories|m_decrInventories +经营性应收项目的减少|decr_oper_payable|m_decrOperPayable +其他|others|m_others +经营活动产生现金流量净额|im_net_cash_flows_oper_act|m_imNetCashFlowsOperAct +债务转为资本|conv_debt_into_cap|m_convDebtIntoCap +一年内到期的可转换公司债券|conv_corp_bonds_due_within_1y|m_convCorpBondsDueWithin1y +融资租入固定资产|fa_fnc_leases|m_faFncLeases +现金的期末余额|end_bal_cash|m_endBalCash +现金的期初余额|less_beg_bal_cash|m_lessBegBalCash +现金等价物的期末余额|plus_end_bal_cash_equ|m_plusEndBalCashEqu +现金等价物的期初余额|less_beg_bal_cash_equ|m_lessBegBalCashEqu +现金及现金等价物的净增加额|im_net_incr_cash_cash_equ|m_imNetIncrCashCashEqu + +销售商品、提供劳务收到的现金|m_cashSellingProvidingServices +拆出资金净减少额|m_netDecreaseUnwindingFunds +买入返售款项净减少额|m_netReductionPurchaseRebates +存放中央银行和同业款项净增加额|m_netIncreaseDepositsBanks +支付再保业务现金净额|m_netCashReinsuranceBusiness +保户储金及投资款净减少额|m_netReductionDeposInveFunds +拆出资金净增加额|m_netIncreaseUnwindingFunds +拆入资金净减少额|m_netReductionAmountBorrowedFunds +卖出回购款项净减少额|m_netReductionSaleRepurchaseProceeds +投资支付的现金|m_investmentPaidInCash +支付其他与投资活动有关的现金|m_paymentOtherCashRelated +投资活动产生的现金流出小计|m_cashOutFlowsInvesactivities +吸收权益性投资收到的现金|m_absorbCashEquityInv +其他对现金的影响|m_otherImpactsOnCash +经营性应收项目的增加|m_addOperatingReceivableItems + diff --git a/src/xtquant/config/config.lua b/src/xtquant/config/config.lua new file mode 100644 index 0000000..3521e84 --- /dev/null +++ b/src/xtquant/config/config.lua @@ -0,0 +1,446 @@ +local __config_lua_path = debug.getinfo(1, "S").source:sub(2) +local __config_lua_dir = __config_lua_path:match("(.-)[\\/][^\\/]-$") .. "/" +local function testDofile(path) + local abs_path = __config_lua_dir .. path + local file = io.open(abs_path, "r") + if file ~= nil then + dofile(abs_path) + return true + else + return false + end +end + +g_is_address_from_daemon = 0 +g_is_server = true +g_is_report_logcenter = false +g_system_tag = "" +g_is_topology_logcenter = false + +g_ftCategory = { + ["2101"]="ag", + ["2102"]="al", + ["2103"]="au", + ["2104"]="bu", + ["2105"]="cu", + ["2106"]="fu", + ["2107"]="hc", + ["2108"]="pb", + ["2109"]="rb", + ["2110"]="ru", + ["2111"]="wr", + ["2112"]="zn", + ["2113"]="ni", + ["2114"]="sn", + + ["2151"]="IF", + ["2152"]="T", + ["2153"]="TF", + ["2154"]="IC", + ["2155"]="IH", + + ["2201"]="SP a&a", + ["2202"]="SP b&b", + ["2203"]="SP bb&bb", + ["2204"]="SP c&c", + ["2205"]="SP cs&cs", + ["2206"]="SP fb&fb", + ["2207"]="SP i&i", + ["2208"]="SP j&j", + ["2209"]="SP jd&jd", + ["2210"]="SP jm&jm", + ["2211"]="SP l&l", + ["2212"]="SP m&m", + ["2213"]="SP p&p", + ["2214"]="SP pp&pp", + ["2215"]="SP v&v", + ["2216"]="SP y&y", + ["2217"]="SPC a&m", + ["2218"]="SPC c&cs", + ["2219"]="SPC fb&bb", + ["2220"]="SPC i&j", + ["2221"]="SPC i&jm", + ["2222"]="SPC j&jm", + ["2223"]="SPC l&pp", + ["2224"]="SPC l&v", + ["2225"]="SPC v&pp", + ["2226"]="SPC y&p", + ["2227"]="a", + ["2228"]="b", + ["2229"]="bb", + ["2230"]="c", + ["2231"]="cs", + ["2232"]="fb", + ["2233"]="i", + ["2234"]="j", + ["2235"]="jd", + ["2236"]="jm", + ["2237"]="l", + ["2238"]="m", + ["2239"]="p", + ["2240"]="pp", + ["2241"]="v", + ["2242"]="y", + + ["2251"]="CF", + ["2252"]="FG", + ["2253"]="IPS SF&SM", + ["2254"]="JR", + ["2255"]="LR", + ["2256"]="MA", + ["2257"]="ME", + ["2258"]="OI", + ["2259"]="PM", + ["2260"]="RI", + ["2261"]="RM", + ["2262"]="RS", + ["2263"]="SF", + ["2264"]="SM", + ["2265"]="SPD CF&CF", + ["2266"]="SPD FG&FG", + ["2267"]="SPD JR&JR", + ["2268"]="SPD LR&LR", + ["2269"]="SPD MA&MA", + ["2270"]="SPD ME&ME", + ["2271"]="SPD OI&OI", + ["2272"]="SPD PM&PM", + ["2273"]="SPD RI&RI", + ["2274"]="SPD RM&RM", + ["2275"]="SPD RS&RS", + ["2276"]="SPD SF&SF", + ["2277"]="SPD SM&SM", + ["2278"]="SPD SR&SR", + ["2279"]="SPD TA&TA", + ["2280"]="SPD TC&TC", + ["2281"]="SPD WH&WH", + ["2282"]="SR", + ["2283"]="TA", + ["2284"]="TC", + ["2285"]="WH" +} + +testDofile("../config/platform.lua") +testDofile("../config/serverEnv.lua") +if testDofile("../config/clientEnv.lua") or testDofile("../config/itsmClientEnv.lua") then g_is_server = false end +testDofile("../config/env.lua") +testDofile("../config/xtdaemon.lua") +testDofile("../config/clientEnv.lua") +testDofile("../config/itsmClientEnv.lua") +testDofile("../config/serverEnv.lua") +testDofile("../config/fairplaytables.lua") +testDofile("../config/configHelper.lua") +testDofile("../config/xtstocktype.lua") + +function getFutureOrderLimits() + return table2json({content = g_future_order_limits}) +end + +function getFuturePlatforms() + return table2json({content = g_future_platforms}) +end + +function getStockPlatforms() + return table2json({content = g_stock_platforms}) +end + +function getCreditPlatforms() + return table2json({content = g_credit_platforms}) +end + +function getHGTPlatforms() + return table2json({content = g_hgt_platforms}) +end + +function getHGTQuotePlatforms() + return table2json({content = g_hgt_quote_platforms}) +end + +function getFutureQuotePlatforms() + return table2json({content = g_future_quote_platforms}) +end + +function getStockQuotePlatforms() + return table2json({content = g_stock_quote_platforms}) +end + +function getStockOptionPlatforms() + return table2json({content = g_stockoption_platforms}) +end + +function getStockOptionQuotePlatforms() + return table2json({content = g_stockoption_quote_platforms}) +end + +function getNew3BoardPlatforms() + return table2json({content = g_new3board_platforms}) +end + +function getNew3BoardQuotePlatforms() + return table2json({content = g_new3board_quote_platforms}) +end + +function getGoldPlatforms() + return table2json({content = g_gold_platforms}) +end + +function getGoldQuotePlatforms() + return table2json({content = g_gold_quote_platforms}) +end + +function getBanks() + return table2json({content = g_banks}) +end + +function getTTServiceGlobalConfig() + return table2json(g_ttservice_global_config) +end + +function getMysqlConfig() + return table2json(g_mysql_config) +end + +function getMysqlConfigWhiteListFlowControl() + return table2json(g_mysql_config_white_list_flow_control) +end + +function getRabbitMqConfig() + return table2json(g_rabbitMq_config) +end + +function getBatchOrderConfig() + return table2json(g_batchOrder_config) +end + +function getPlatformInfo() + return getConfigByAppName("calcConfigEnv") +end + +function getSystemTag() + return g_system_tag +end + +-- ȡƱ +function getXtStockType() + return toIni(g_stocktype_info) +end + +function getBrokerAddressWithReInit(brokerType, platformId, brokerId, accountId, reInit) + if reInit then print("true") else print("false") end + local key = "xtbroker_" .. brokerType .. "_" .. platformId .. "_" ..brokerId + local address = g_defaultPorts[key] + if address == nil then + key = "xtbroker_" .. brokerType .. "_" .. platformId + address = g_defaultPorts[key] + if address == nil then + key = "xtbroker_" .. brokerType + address = g_defaultPorts[key] + if address == nil then + key = "xtbroker" + address = g_defaultPorts[key] + end + end + end + + if address == nil then + if reInit then + g_brokerPorts = genBrokerInfos() + mergeBrokerInfos(g_brokerPorts) + address = getBrokerAddressWithReInit(brokerType, platformId, brokerId, accountId, false) + end + end + if address == nil then address = "" end + return address +end + +function getBrokerAddress(brokerType, platformId, brokerId, accountId) + return getBrokerAddressWithReInit(brokerType, platformId, brokerId, accountId, true) +end + +-- tagplatformId +function getBrokerConfig(tag) + return getConfigByAppName("xtbroker", {tag}) +end + +function getSfitMdquoterConfig(tag) + return getConfigByAppName("sfitMdquoter", {tag}) +end + +function getXtQuoterConfig() + return getConfigByAppName("xtquoter") +end + +-- ȡTTService +function getXtServiceConfig() + return getConfigByAppName("xtservice") +end + +-- ȡ׷ +function getXtTraderServiceConfig() + return getConfigByAppName("xttraderservice") +end + +-- ȡط +function getXtRiskControlConfig() + return getConfigByAppName("xtriskcontrol") +end + +-- ȡMysqlService +function getXtMysqlServiceConfig() + return getConfigByAppName("xtmysqlservice") +end + +function getXtSourceConfig() + return getConfigByAppName("xtsource") +end + +function getXtTaskConfig(tag) + return getConfigByAppName("xttask", {tag}) +end + +function getXtMobileServiceConfig() + return getConfigByAppName("xtmobileservice") +end + +function getParam(param) + return table2json(_G[param]) +end + +function getXtClientConfig() + return getConfigByAppName("xtclient") +end + +function getXtMiniQmtConfig() + return getConfigByAppName("xtminiqmt") +end + +function getXtMiniQuoteConfig() + return getConfigByAppName("xtminiquote") +end + +function getXtQuantServiceConfig() + return getConfigByAppName("xtquantservice") +end + +function getXtItsmClientConfig() + return getConfigByAppName("xtitsmclient") +end + +function getXtItsmServiceConfig() + return getConfigByAppName("xtitsmservice") +end + +function getXtQueryBrokerConfig() + return getConfigByAppName("xtquerybroker") +end + +function getXtOtpConfig() + return getConfigByAppName("xtotpservice") +end + +function getXtLogCenterConfig() + return getConfigByAppName("xtlogcenter") +end + +function getCtpServiceConfig() + return getConfigByAppName("xtctpservice") +end + +function getXtApiServiceConfig() + return getConfigByAppName("xtapiservice") +end + +function getXtClearServiceConfig() + return getConfigByAppName("xtclearservice") +end + +function getDelegateServiceConfig() + return getConfigByAppName("xtdelegateservice") +end + +function getFtProduct() + return table2json(g_ftCategory) +end + +function getAlgoAdapterServiceConfig() + return getConfigByAppName("xtalgoadapterservice") +end + +function getXtFairPlayServiceConfig(tag) + return getConfigByAppName("xtfairplayservice", {tag} ) +end + +function getXtNonStandardServiceConfig() + return getConfigByAppName("xtnonstandardservice") +end + +function getModules() + modules = getModulesHelper() + return table2json(modules["modules"]) +end +--ȡͷϢ +function getCustomerServiceConfig() + return getConfigByAppName("customerservice") +end + +function getBrokerProxy() + return getConfigByAppName("xtbrokerproxy") +end + +function getHttpUrlConfig() + return getConfigByAppName("xthttpurlconfig") +end + +--require "std" +--require "io" +local function main() + if arg == nil then + return "" + end + + if arg[1] ~= nil then + local d = _G[ arg[1] ] + if d ~= nil then + if type(d) == "function" then + local newArg = {} + for i = 1, 100 do + if arg[1 + i] ~= nil then + table.insert(newArg, arg[1 + i]) + else + break + end + end + return d(unpack(newArg)) + elseif type(d) == "table" then + return table2json(d) + end + else + local newArg = {} + for i = 1, 100 do + if arg[1 + i] ~= nil then + table.insert(newArg, arg[1 + i]) + else + break + end + end + return getConfigByAppName(arg[1], newArg) + end + end +end + +print(main()) +--print(getXtClientConfig()) +--[[ +print(main()) +print(getPlatform("")) +print("=====================") +print(getXtServiceConfig()) +print("=====================") +print(getXTTraderServiceConfig()) +print("=====================") +print(getXtQuoterConfig()) +print("=====================") +print(getXtTaskConfig("xttask")) +print("=====================") +print(getBrokerConfig("1_21001_1001")) +--print(getConfigByAppName("sfit")) +]] diff --git a/src/xtquant/config/configHelper.lua b/src/xtquant/config/configHelper.lua new file mode 100644 index 0000000..f0f7db5 --- /dev/null +++ b/src/xtquant/config/configHelper.lua @@ -0,0 +1,545 @@ +local __config_helper_lua_path = debug.getinfo(1, "S").source:sub(2) +local __config_helper_lua_dir = __config_helper_lua_path:match("(.-)[\\/][^\\/]-$") .. "/" +dofile(__config_helper_lua_dir .. "table2json.lua") + +-- lua文件使用%作为分隔符 +-- ini文件使用&作为分隔符 +local function eval(str) + if type(str) == "string" then + if #str > 0 then + return loadstring("return " .. str)() + end + elseif type(str) == "number" then + return loadstring("return " .. tostring(str))() + else + error("is not a string") + end +end + +local function split(str,sep) + local ret={} + local n=1 + for w in str:gmatch("([^" .. sep .. "]*)") do + ret[n]=ret[n] or w -- only set once (so the blank after a string is ignored) + if w=="" then n=n+1 end -- step forwards on a blank but not a string + end + return ret +end + +function tableMerge(t1, t2) + for k,v in pairs(t2) do + if type(v) == "table" then + if type(t1[k] or false) == "table" then + tableMerge(t1[k] or {}, t2[k] or {}) + else + t1[k] = v + end + else + t1[k] = v + end + end + return t1 +end + +local function genMap(key, value) + local m = {} + local items = split(key, "%.") + local d = nil + for i = 0, (#items -1) do + local str = items[#items - i] + if i == 0 then + d = {} + d[str] = eval(value) + else + local raw = d + d = {} + d[str] = raw + end + end + for k, v in pairs(d) do + m[k] = v + end + return m +end + +function parse(param, localMap) + local ret = param + for w in string.gmatch(param, "{{([^}]*)}}") do + local v = localMap[w] + if v == nil then v = eval(w) end + if v ~= nil then + ret = string.gsub(ret, "{{" .. w .. "}}", v) + end + end + return ret +end + +local function getLocalFileMap(filePath) + local ret = {} + local file = io.open(__config_helper_lua_dir..filePath, "r") + if file ~= nil then + local content = file:read("*a") + local loadRet = loadstring(content) + if loadRet == nil then + loadRet = loadstring("return " .. content) + end + if loadRet ~= nil then + ret = loadRet() + end + end + return ret +end + +local function getLocalMap() + m1 = getLocalFileMap("../config_local/customer.lua") + m2 = getLocalFileMap("../config_local/machine.lua") + return tableMerge(m1, m2) +end + +function mergeLocal() + local m = getLocalMap() + local g_localMap = {} + local g_globalMap = {} + for k, v in pairs(m) do + local r1, r2 = k:find("g_") + if r1 == 1 then + g_globalMap[k] = v + else + g_localMap[k] = v + end + end + + _G = tableMerge(_G, g_globalMap) + _G["g_localMap"] = g_localMap + +end + +function toIni(map) + local ret = "" + for key, value in pairs(map) do + str = "[" .. key .. "]\n" + for itemKey, itemValue in pairs(value) do + if type(itemValue) == type("") then + if itemValue:len() > 0 then + str = str .. itemKey .. "=" .. itemValue .. "\n" + end + elseif type(itemValue) == type(true) then + local v = 1 + if itemValue then v = 1 else v = 0 end + str = str .. itemKey .. "=" .. v .. "\n" + else + str = str .. itemKey .. "=" .. itemValue .. "\n" + end + end + ret = ret .. str .. "\n" + end + return ret +end + +function getClientMap(tag) + local CLINET_CONFIG = { + tagTemplate = "", --标签模版, 可以做正则匹配 + address = "127.0.0.1:80", -- 地址 + isGetdAddressFromNameServer = g_is_address_from_daemon, -- 是否从NameServer取得地址 + isUsedAloneIO = 0, -- 是否单独使用一个ioservice + timeoutSecond = 600, -- 超时检测时间 + keepAliveCheckSecond = 5, -- 保活包 + reconnectSecond = 3, -- 断线重连时间间隔 + requestTimeoutSecond = 600, -- 请求超时时间 + isUseSSL = 0, --是否使用SSL + sslCaPath = "", -- SSL证书地址 + proxyType = "0", -- 代理类型, 0表示无, 1表示http, 2表示socket4, 3表示socket5 + proxyIp = "", -- 代理地址 + proxyPort = 80, -- 代理端口 + proxyNeedCheck = 0, -- 是否需要验证 + proxyUserName = "", -- 代理用户名 + proxyPassword = "", -- 代理密码 + packageDir = "", -- 存放网络包目录 + } + local tagKey = "client_" .. tag + local ret = { + [tagKey] = CLINET_CONFIG + } + local address = g_defaultPorts[tag] + if address == nil then address = "127.0.0.1:8000" end + local m = { + [tagKey] = { + tagTemplate = tag, + address = g_defaultPorts[tag] + } + } + ret = tableMerge(ret, m) + return ret +end + + +function getServerMap(tag) + local SERVER_CONFIG = { + tag = "", -- 标签模版, 可以做正则匹配 + address = "0.0.0.0:80", -- 地址 + isGetdAddressFromNameServer = 0,-- 是否从NameServer取得地址 + timeoutSecond = 600, -- 超时检测时间 + maxConnectionNum = 1000000, -- 最大连接数 + isAutoBind = g_is_address_from_daemon, -- 是否自动绑定(即端口无法监听, 监听下一端口) + isUseSSL = 0, -- 是否启用SSL + crtPath = "", + serverKeyPath = "", + tempDhPath = "", + sslPassword = "", + packageDir = "", + } + local port = 80 + local address = g_defaultPorts[tag] + if address ~= nil then + port = string.sub(address, string.find(address, ":") +1 ,#address) + end + + local ret = { + ["server_" .. tag] = SERVER_CONFIG + } + local m = { + ["server_" .. tag] = { + tag = tag, + address = "0.0.0.0:" .. port, + } + } + ret = tableMerge(ret, m) + ret["server"] = ret["server_" .. tag] + return ret +end + +function getLocalAppMap(tag) + local ret = { + app = { + appName = tag, + netThreadNum = 1, -- 线程数 + dispatcherThreadNum = 1, -- 处理线程数 + logPath = "", -- 日志文件路径 + reportSeconds = 60, -- 状态报告时间 + isReportLogCenter = 1 and g_is_report_logcenter or 0, -- 是否日志打印到logCenter + serverDeployType = g_server_deploy_type, -- 部署类型 + host_ip = g_host_ip, -- 主机IP + zkRunningDir = g_running_dir, -- 运行目录 + topology = 1 and g_is_topology_logcenter or 0, --是否发送拓扑数据 + topologyInterval = 20, --发送拓扑数据时间间隔 + }, + client_NameService = { + tagTemplate = "NameService", + address = g_defaultPorts["xtdaemon"], + reconnectSecond = 3, + }, + quoter_config = { + is_use_proxy_all_push = g_use_proxy_whole_quoter, + is_use_future_all_push = g_use_future_whole_quoter, + timeoutsec = 20, + }, + } + return ret +end + +function getAppMap(serverTag, clients) + local ret = getLocalAppMap(serverTag) + if serverTag ~= nil then + local serverMap = getServerMap(serverTag) + ret = tableMerge(ret, serverMap) + end + if clients ~= nil then + for i, v in pairs(clients) do + local map = getClientMap(v) + ret = tableMerge(ret, map) + end + end + return ret +end + +function getLog4cxx(tag) + local d = [[ +log4j.logger.TTStdFile=INFO,fa +log4j.logger.TTDbgFile=DEBUG,fa2 + +# 文件输出 +log4j.appender.fa=org.apache.log4j.DailyRollingFileAppender +log4j.appender.fa.MaxFileSize=500MB +log4j.appender.fa.datePattern='.'yyyy-MM-dd +log4j.appender.fa.File=../userdata/log/{{tag}}.log +log4j.appender.fa.Append=true +log4j.appender.fa.layout=org.apache.log4j.PatternLayout +log4j.appender.fa.layout.ConversionPattern=%d [%p] [%t] %m%n + +# 文件输出2 +log4j.appender.fa2=org.apache.log4j.FileAppender +log4j.appender.fa2.MaxFileSize=500MB +log4j.appender.fa2.MaxBackupIndex=10 +log4j.appender.fa2.File=../userdata/log/{{tag}}_debug.log +log4j.appender.fa2.Append=true +log4j.appender.fa2.layout=org.apache.log4j.PatternLayout +log4j.appender.fa2.layout.ConversionPattern=%d [%p] [%t] %m%n + +# 控制台输出 +log4j.appender.ca=org.apache.log4j.ConsoleAppender +log4j.appender.ca.layout=org.apache.log4j.PatternLayout +log4j.appender.ca.layout.ConversionPattern=%d [%p] [%t] %m%n +]] + d = parse(d, {["tag"] = tag}) + return d +end + +local function getTableDepth(t, depth) + if type(t) == "table" then + depth = depth + 1 + local maxDepth = depth + for k, v in pairs(t) do + if type(v) == "table" then + local d = getTableDepth(v, depth) + if d > maxDepth then maxDepth = d end + end + end + depth = maxDepth + end + return depth +end + +-- 根据App名称取配置 +local function getConfigTableByAppName(param, m) + if m == nil then m = {} end + if type(m) ~= "table" then + m = {m} + end + local paramObj = _G[param] + if paramObj == nil then + local file = io.open(__config_helper_lua_dir .. param .. ".lua", "r") + if file ~= nil then + local content = file:read("*a") + if content ~= nil then + local loadRet = loadstring(content) + if loadRet == nil then + loadRet = loadstring("return " .. content) + end + if loadRet ~= nil then + paramObj = loadRet() + _G[param] = paramObj + end + end + end + end + if paramObj == nil then paramObj = {} end + local t = {} + if type(paramObj) == "function" then + t = paramObj(unpack(m)) + elseif type(paramObj) == "table" then + t = paramObj + end + + -- 合并本地数据 + local localMap = {} + if g_localMap ~= nil then + localMap = g_localMap[param] + end + if localMap == nil then localMap = {} end + t = tableMerge(t, localMap) + return t +end + +-- 根据App名称取配置 +function getConfigByAppName(param, m) + local t = getConfigTableByAppName(param, m) + local depth = getTableDepth(t, 0) + if depth == 2 then + return toIni(t) + else + return table2json(t) + end +end + +function getModulesHelper() + return getLocalFileMap("../config_local/modules.lua") +end + +-- 取Broker模块配置 +function getBrokerModuleConfig(configTag, moduleTag) + local t = getConfigTableByAppName(configTag) + if moduleTag ~= nil then + local tag = moduleTag + local index = moduleTag:find("_") + if index ~= nil then + tag = moduleTag:sub(moduleTag:find("_", index+1) + 1) + end + tag = configTag .. "/" .. tag + local t1 = getConfigTableByAppName(tag) + t = tableMerge(t, t1) + end + local depth = getTableDepth(t, 0) + if depth == 2 then + return toIni(t) + else + return table2json(t) + end +end + +function getPlatform(tag) + for k, v in pairs(g_allPlatforms) do + local tTag = v["m_nType"] .. "_" .. v["m_nId"] .. "_" .. v["m_brokerId"] + local r1, r2 = tag:find(tTag) + if r1 == 1 then + return v + end + end + return nil +end + +local function genPlatformInfos() + local allTypes = {g_future_platforms, g_stock_platforms, g_credit_platforms, g_stockoption_platforms, g_new3board_platforms, g_hgt_platforms, g_gold_platforms} + for tk, tv in pairs(allTypes) do + for k, v in pairs(tv) do + table.insert(g_allPlatforms, v) + end + end +end + +function genBrokerInfos() + local key = "xtbroker_1_21001_9999" + local ret = {} + ret[key] = "127.0.0.1:" .. (58000 + 3) + + return ret +end + +-- 参数:待分割的字符串,分割字符 +-- 返回:子串表.(含有空串) +function lua_string_split(str, split_char) + local sub_str_tab = {}; + + while (true) do + local pos = string.find(str, split_char); + if (not pos) then + local size_t = table.getn(sub_str_tab) + table.insert(sub_str_tab,size_t+1,str); + break; + end + + local sub_str = string.sub(str, 1, pos - 1); + local size_t = table.getn(sub_str_tab); + table.insert(sub_str_tab,size_t+1,sub_str); + local t = string.len(str); + str = string.sub(str, pos + 1, t); + end + return sub_str_tab; +end + +function do_checkVersion(version, minVersion) + local tableVersion = lua_string_split(version, "%.") + local tempMinVersion = minVersion + local tableGMinVersion = lua_string_split(tempMinVersion , "%.") + local ret = false + local tablesize = 0 + local isVShort = false + if table.getn(tableVersion) < table.getn(tableGMinVersion) then + isVShort = true + tablesize = table.getn(tableVersion) + else + tablesize = table.getn(tableGMinVersion) + end + + for i = 1, tablesize , 1 do + tableVersion[i] = tonumber(tableVersion[i]) + tableGMinVersion[i] = tonumber(tableGMinVersion[i]) + if tableVersion[i] < tableGMinVersion[i] then + ret = true + return ret + elseif tableVersion[i] > tableGMinVersion[i] then + return ret + end + end + + if isVShort then + ret = true + end + + return ret +end + +function checkVersion(version) + local ret = do_checkVersion(version, g_minVersion) + local msg = "" + if ret then + msg = "您的客户端版本过低, 请联系" .. g_company .."获取最新版本!" + end + return msg +end + +function checkMobileVersion(version) + local ret = do_checkVersion(version, g_minMobileVersion) + local msg = "" + if ret then + msg = "您的移动客户端版本过低, 请联系" .. g_company .."获取最新版本!" + end + return msg +end + +-- 取地址Ip +function getIp(address) + local ip = address:sub(1, address:find(":") - 1) + return ip +end + +-- 取地址端口 +function getPort(address) + local port = address:sub(address:find(":") + 1, address:len()) + return port +end + +function genFairyPlayUnitInfos() + if g_fairplay_units == nil then return end + for k, v in pairs(g_fairplay_units) do + table.insert(g_fairPlayUnits, v) + end +end + +function getFairPlayUnit(tag) + for k, v in pairs(g_fairPlayUnits) do + local tTag = v["m_nType"] .. "_" .. v["m_nId"] + local r1, r2 = tag:find(tTag) + if r1 == 1 then + return v + end + end + return nil +end + +function mergeBrokerInfos(brokerPorts) + if g_allBrokers == nil then + g_allBrokers = {} + end + + for k, v in pairs(brokerPorts) do + if g_defaultPorts[k] == nil then + g_defaultPorts[k] = v + end + table.insert(g_allBrokers, k) + end +end + +-- 合并本地数据 +mergeLocal() + +if not g_is_address_from_daemon then + -- 产生平台信息 + genPlatformInfos() + + -- 产生券商信息 + if g_brokerPorts == nil then + g_brokerPorts = genBrokerInfos() + end + mergeBrokerInfos(g_brokerPorts) + + --产生公平交易单元信息 + genFairyPlayUnitInfos() +end + +function getExtraThreadPools(key) + local threadNum = g_extra_thread_pools[key] + if threadNum ~= nil then + return threadNum + end + return 0 +end diff --git a/src/xtquant/config/env.lua b/src/xtquant/config/env.lua new file mode 100644 index 0000000..287d1f7 --- /dev/null +++ b/src/xtquant/config/env.lua @@ -0,0 +1,159 @@ + +g_minVersion = "2.0.1.600" +g_minMobileVersion = "1.0.0.0" +g_company = "ڿ" +g_is_address_from_daemon = false +g_use_proxy_whole_quoter = 1 +g_use_future_whole_quoter = 0 +g_server_deploy_type = 0 + +g_defaultPorts = { + xtdaemon="127.0.0.1:55000", + xtservice="127.0.0.1:56000", + xtindex="127.0.0.1:56001", + xtmonitor="127.0.0.1:56002", + xtwebservice="127.0.0.1:56003", + xttraderservice="127.0.0.1:57000", + xtquoter="127.0.0.1:59000", + xtriskcontrol="127.0.0.1:60000", + proxy="210.14.136.66:55300", + proxy_backup="203.156.205.182:55300", + xtcounter="127.0.0.1:61100", + xtgateway="127.0.0.1:62100", + xtsource="127.0.0.1:63000", + xtitsmservice="127.0.0.1:63500", + xttask="127.0.0.1:61000", + xtquerybroker="127.0.0.1:65000", + xtotp="127.0.0.1:64200", + xtlogcenter="127.0.0.1:65100", + xtctpservice="127.0.0.1:65200", + xtapiservice="127.0.0.1:65300", + xtclearservice="127.0.0.1:64100", + xtdelegateservice="127.0.0.1:64300", + xtalgoadapterservice="127.0.0.1:64500", + xtmarket = "127.0.0.1:60100", + xtfairplayservice="127.0.0.1:64600", + xtnonstandardservice="127.0.0.1:64703", + xtantisharefinancingservice = "127.0.0.1:64800", + xtmysqlservice="127.0.0.1:64704", + xtmobileservice="127.0.0.1:65400", + xtmarketinfo="210.14.136.69:59500", +} + +g_allPlatforms = {} +g_allBrokers = {} +g_fairPlayUnits = {} + +g_ttservice_global_config = { + m_maxClientCount=1, + m_logCfg="ttservice.log4cxx", + m_listenIP="0.0.0.0", + m_nListenPort=56100, + m_proxyIP="210.14.136.66", + m_nProxyPort=55808, + m_nWorkFlowPort=63000, + m_workFlowIP="127.0.0.1", + m_redisHost="127.0.0.1", + m_redisPort=6379, + m_nPortalThread=5, + m_addrsPath="", + m_nProductMaxPortfilio=100, + m_debugAccounts="", + m_nUseMd5=0, +} + +g_future_quote_platforms = { + {m_nId=20001, m_strName="CTPʵ", m_strAbbrName="sqsp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20002, m_strName="ʵ", m_strAbbrName="hssp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21018, m_strName="v8tʵ", m_strAbbrName="sqsp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21001, m_strName="CTPģ", m_strAbbrName="gdmn", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21002, m_strName="ģ", m_strAbbrName="hsmn", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21003, m_strName="v8tģ", m_strAbbrName="gdmn", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20000, m_strName="ѸͶ߼", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21111, m_strName="ʹʵ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21112, m_strName="ʹģ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20013, m_strName="ʵ", m_strAbbrName="hshl", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21013, m_strName="ģ", m_strAbbrName="hshl", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21015, m_strName="Խ", m_strAbbrName="hsdy", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21014, m_strName="Ӣ", m_strAbbrName="hsyd", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21017, m_strName="", m_strAbbrName="hsjg", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=21019, m_strName="ԭ", m_strAbbrName="hszy", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20015, m_strName="Խʵ", m_strAbbrName="hsdysp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20014, m_strName="Ӣʵ", m_strAbbrName="hsydsp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20017, m_strName="ʵ", m_strAbbrName="hsjgsp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, + {m_nId=20019, m_strName="ԭʵ", m_strAbbrName="hszysp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=1,}, +} + +g_futureoption_quote_platforms = { + {m_nId=70001, m_strName="CTPʵ", m_strAbbrName="sqsp", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=5,}, + {m_nId=71001, m_strName="CTPģ", m_strAbbrName="gdmn", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=5,}, + {m_nId=71111, m_strName="ʹʵ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=5,}, + {m_nId=71112, m_strName="ʹģ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=5,}, +} + +g_stock_quote_platforms = { + {m_nId=10000, m_strName="ѸͶ߼", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=2,}, + {m_nId=1111, m_strName="ʹʵ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=2,}, + {m_nId=1112, m_strName="ʹģ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=2,}, +} + +g_credit_quote_platforms = { + {m_nId=10000, m_strName="ѸͶ߼", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=3,}, +} + +g_stockoption_quote_platforms = { + {m_nId=10001, m_strName="ѸͶ߼", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=6,}, + {m_nId=1211, m_strName="ʹʵ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=6,}, + {m_nId=1212, m_strName="ʹģ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=6,}, +} + +g_hgt_quote_platforms = { + {m_nId=10003, m_strName="ѸͶ߼", m_strAbbrName="hgtmn", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=7,}, + {m_nId=1411, m_strName="ʹʵ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=7,}, + {m_nId=1412, m_strName="ʹģ", m_strAbbrName="xtgj", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=7,}, +} + +g_new3board_quote_platforms = { + {m_nId=10002, m_strName="ѸͶ߼", m_strAbbrName="neeq", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=10,}, + {m_nId=1311, m_strName="ʹʵ", m_strAbbrName="neeq", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=10,}, + {m_nId=1312, m_strName="ʹģ", m_strAbbrName="neeq", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=10,}, +} + +g_gold_quote_platforms = { + {m_nId=31003, m_strName="ѸͶ߼", m_strAbbrName="zxjtgold", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=4,}, + {m_nId=31111, m_strName="ʹʵ", m_strAbbrName="zxjtgold", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=4,}, + {m_nId=31112, m_strName="ʹģ", m_strAbbrName="zxjtgold", m_strLogo="broker_logo_1", m_strBrokerTag="xtbroker", m_strQuoterTag="xtquoter", m_nType=4,}, +} + +g_future_order_limits = { + {m_strProductID="IF", m_nLimit=200}, + {m_strProductID="AU", m_nLimit=100}, +} + +g_banks = { + {m_strLogo="bank_logo_1", m_strId="1", m_strName="",}, + {m_strLogo="bank_logo_2", m_strId="2", m_strName="ũҵ",}, + {m_strLogo="bank_logo_3", m_strId="3", m_strName="й",}, + {m_strLogo="bank_logo_4", m_strId="4", m_strName="",}, + {m_strLogo="bank_logo_5", m_strId="5", m_strName="ͨ",}, + {m_strLogo="bank_logo_6", m_strId="6", m_strName="ڽ",}, + {m_strLogo="bank_logo_Z", m_strId="Z", m_strName="",} +} + +g_batchOrder_config = { + -- Ƿµ, 0 ʾ ʹ + is_batch_ordinaryOrder = 1, + -- µöٺ뷢һλ + buffer_clear_duration_milli_sec = 100, + buffer_clear_max_order_num = 100, + -- apiserver λʱڵ µ + api_order_upper_limit = 1000, + -- µޣöٺﵽ޲Ŵ + api_order_duration_milli_sec = 1000, + -- 㷨Сµ Ϊ 0.5s + api_min_algorithm_order_duration_milli_sec = 500, + -- ϵСµΪ 10s + api_min_group_order_duration_milli_sec = 10000, + max_order_duration_milli_sec = -1, + max_order_count = -1, +} diff --git a/src/xtquant/config/metaInfo.json b/src/xtquant/config/metaInfo.json new file mode 100644 index 0000000..8c152d6 --- /dev/null +++ b/src/xtquant/config/metaInfo.json @@ -0,0 +1,3032 @@ +{ + u"1008" : { + u"desc" : u"主买单", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"type" : u"double", + }, + u"1" : { + u"type" : u"long", + }, + u"2" : { + u"type" : u"double", + }, + u"3" : { + u"type" : u"int", + }, + }, + + }, + u"1009" : { + u"desc" : u"主卖单", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"type" : u"double", + }, + u"1" : { + u"type" : u"long", + }, + u"2" : { + u"type" : u"double", + }, + u"3" : { + u"type" : u"int", + }, + }, + }, + u"1010" : { + u"desc" : u"实时行情(L2)", + u"isLevel2" : 1, + u"periods" : [0, 86400000], + u"fields" : { + u"0" : { + u"desc" : u"当前价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"成交总量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"成交总额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"持仓量", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"昨结算", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"成交笔数", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"市盈率1", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"市盈率2", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"开盘价", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"最高价", + u"type" : u"double", + }, + u"a" : { + u"desc" : u"最低价", + u"type" : u"double", + }, + u"b" : { + u"desc" : u"今结算", + u"type" : u"double", + }, + u"c" : { + u"desc" : u"前收盘", + u"type" : u"double", + }, + u"d" : { + u"desc" : u"多档委买价", + u"type" : u"vdouble", + }, + u"e" : { + u"desc" : u"多档委买量", + u"type" : u"vint", + }, + u"f" : { + u"desc" : u"多档委卖价", + u"type" : u"vdouble", + }, + u"g" : { + u"desc" : u"多档委卖量", + u"type" : u"vint", + }, + u"h" : { + u"desc" : u"证券状态", + u"type" : u"int", + }, + u"v" : { + u"desc" : u"原始成交总量", + u"type" : u"long", + }, + }, + }, + u"1011" : { + u"desc" : u"实时行情补充(L2)", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"委买均价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"委买总量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"委卖均价", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"委卖总量", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"买入撤单总量", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"买入撤单总额", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"卖出撤单总量", + u"type" : u"long", + }, + u"7" : { + u"desc" : u"卖出撤单总额", + u"type" : u"double", + }, + }, + }, + u"1801" : { + u"desc" : u"逐笔成交(L2)", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"成交价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"成交量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"成交额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"买方订单号", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"卖方订单号", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"成交标志:0:未知;1:外盘;2:内盘; 3:撤单", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"成交类型:对应委托类型", + u"type" : u"int", + }, + u"7" : { + u"desc" : u"成交记录号", + u"type" : u"int", + }, + }, + }, + u"1802" : { + u"desc" : u"逐笔委托(L2)", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"委托价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"委托量", + u"type" : u"int", + }, + u"2" : { + u"desc" : u"委托订单号", + u"type" : u"long", + }, + u"3" : { + u"desc" : u"委托类型:参考深交所OrderKind字段", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"委托方向:1:买入;2:卖出;3:撤单", + u"type" : u"int", + }, + }, + }, + u"1803" : { + u"desc" : u"委买委卖千档盘口(L2)", + u"isLevel2" : 1, + u"periods" : [60000], + u"fields" : { + u"0" : { + u"desc" : u"委买价", + u"type" : u"vdouble", + }, + u"1" : { + u"desc" : u"委买量", + u"type" : u"vint", + }, + u"2" : { + u"desc" : u"委卖价", + u"type" : u"vdouble", + }, + u"3" : { + u"desc" : u"委卖量", + u"type" : u"vint", + }, + }, + }, + u"1804" : { + u"desc" : u"委买委卖一档委托队列", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"委买价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"委买明细", + u"type" : u"vint", + }, + u"2" : { + u"desc" : u"委卖价", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"委卖明细", + u"type" : u"vint", + }, + u"4" : { + u"desc" : u"委买总笔数", + u"type" : u"int", + }, + u"5" : { + u"desc" : u"委卖总笔数", + u"type" : u"int", + }, + }, + }, + u"1806" : { + u"desc" : u"逐笔成交统计", + u"isLevel2" : 1, + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"主买单总单数", + u"type" : u"int", + }, + u"1" : { + u"desc" : u"主买特大单成交量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"主买大单成交量", + u"type" : u"long", + }, + u"3" : { + u"desc" : u"主买中单成交量", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"主买小单成交量", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"主卖单总单数", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"主卖特大单成交量", + u"type" : u"long", + }, + u"7" : { + u"desc" : u"主卖大单成交量", + u"type" : u"long", + }, + u"8" : { + u"desc" : u"主卖中单成交量", + u"type" : u"long", + }, + u"9" : { + u"desc" : u"主卖小单成交量", + u"type" : u"long", + }, + u"a" : { + u"desc" : u"主买特大单成交额", + u"type" : u"double", + }, + u"b" : { + u"desc" : u"主买大单成交额", + u"type" : u"double", + }, + u"c" : { + u"desc" : u"主买中单成交额", + u"type" : u"double", + }, + u"d" : { + u"desc" : u"主买小单成交额", + u"type" : u"double", + }, + u"e" : { + u"desc" : u"主卖特大单成交额", + u"type" : u"double", + }, + u"f" : { + u"desc" : u"主卖大单成交额", + u"type" : u"double", + }, + u"g" : { + u"desc" : u"主卖中单成交额", + u"type" : u"double", + }, + u"h" : { + u"desc" : u"主卖小单成交额", + u"type" : u"double", + }, + u"i" : { + u"desc" : u"大单动向", + u"type" : u"double", + }, + u"j" : { + u"desc" : u"涨跌动因", + u"type" : u"double", + }, + u"k" : { + u"desc" : u"大单差分", + u"type" : u"double", + }, + u"l" : { + u"desc" : u"资金博弈 净流入", + u"type" : u"long", + }, + u"m" : { + u"desc" : u"资金博弈 超大单", + u"type" : u"long", + }, + u"n" : { + u"desc" : u"资金博弈 大单", + u"type" : u"long", + }, + u"o" : { + u"desc" : u"资金博弈 中单", + u"type" : u"long", + }, + u"p" : { + u"desc" : u"资金博弈 小单", + u"type" : u"long", + }, + u"q" : { + u"desc" : u"净挂", + u"type" : u"long", + }, + u"r" : { + u"desc" : u"净撤", + u"type" : u"long", + }, + u"s" : { + u"desc" : u"总撤买", + u"type" : u"long", + }, + u"t" : { + u"desc" : u"总撤卖", + u"type" : u"long", + }, + u"u" : { + u"desc" : u"被动买特大单成交量", + u"type" : u"long", + }, + u"v" : { + u"desc" : u"被动买大单成交量", + u"type" : u"long", + }, + u"w" : { + u"desc" : u"被动买中单成交量", + u"type" : u"long", + }, + u"x" : { + u"desc" : u"被动买小单成交量", + u"type" : u"long", + }, + u"y" : { + u"desc" : u"被动卖特大单成交量", + u"type" : u"long", + }, + u"z" : { + u"desc" : u"被动卖大单成交量", + u"type" : u"long", + }, + u"00" : { + u"desc" : u"被动卖中单成交量", + u"type" : u"long", + }, + u"01" : { + u"desc" : u"被动卖小单成交量", + u"type" : u"long", + }, + u"02" : { + u"desc" : u"被动买特大单成交额", + u"type" : u"double", + }, + u"03" : { + u"desc" : u"被动买大单成交额", + u"type" : u"double", + }, + u"04" : { + u"desc" : u"被动买中单成交额", + u"type" : u"double", + }, + u"05" : { + u"desc" : u"被动买小单成交额", + u"type" : u"double", + }, + u"06" : { + u"desc" : u"被动卖特大单成交额", + u"type" : u"double", + }, + u"07" : { + u"desc" : u"被动卖大单成交额", + u"type" : u"double", + }, + u"08" : { + u"desc" : u"被动卖中单成交额", + u"type" : u"double", + }, + u"09" : { + u"desc" : u"被动卖小单成交额", + u"type" : u"double", + }, + }, + }, + u"1830" : { + u"desc" : u"ETF统计数据L2", + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"申购笔数", + u"type" : u"int", + }, + u"1" : { + u"desc" : u"申购数量", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"申购金额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"赎回笔数", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"赎回数量", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"赎回金额", + u"type" : u"double", + }, + }, + }, + u"2" : { + u"desc" : u"市场交易日信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"交易日", + u"type" : u"long", + }, + }, + }, + u"2000" : { + u"desc" : u"股票列表", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"股票代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"股票名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"昨日收盘价", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"昨日结算价", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"昨日持仓量", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"涨停价", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"跌停价", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"总股本", + u"type" : u"long", + }, + u"8" : { + u"desc" : u"流通盘", + u"type" : u"long", + }, + u"9" : { + u"desc" : u"合约数量乘数", + u"type" : u"int", + }, + u"10" : { + u"desc" : u"产品代码", + u"type" : u"string", + }, + u"11" : { + u"desc" : u"产品类型", + u"type" : u"string", + }, + u"12" : { + u"desc" : u"交割年份", + u"type" : u"int", + }, + u"13" : { + u"desc" : u"交割月", + u"type" : u"int", + }, + u"14" : { + u"desc" : u"市价单最大下单量(买)", + u"type" : u"int", + }, + u"15" : { + u"desc" : u"市价单最小下单量(买)", + u"type" : u"int", + }, + u"16" : { + u"desc" : u"限价单最大下单量(买)", + u"type" : u"int", + }, + u"17" : { + u"desc" : u"限价单最小下单量(买)", + u"type" : u"int", + }, + u"18" : { + u"desc" : u"最小变动价位", + u"type" : u"double", + }, + u"19" : { + u"desc" : u"创建日", + u"type" : u"int", + }, + u"20" : { + u"desc" : u"上市日", + u"type" : u"int", + }, + u"21" : { + u"desc" : u"到期日", + u"type" : u"string", + }, + u"22" : { + u"desc" : u"开始交割日", + u"type" : u"int", + }, + u"23" : { + u"desc" : u"结束交割日", + u"type" : u"int", + }, + u"24" : { + u"desc" : u"合约生命周期状态", + u"type" : u"int", + }, + u"25" : { + u"desc" : u"当前是否交易", + u"type" : u"int", + }, + u"26" : { + u"desc" : u"持仓类型", + u"type" : u"int", + }, + u"27" : { + u"desc" : u"持仓日期类型", + u"type" : u"int", + }, + u"28" : { + u"desc" : u"多头保证金率", + u"type" : u"double", + }, + u"29" : { + u"desc" : u"空头保证金率", + u"type" : u"double", + }, + u"30" : { + u"desc" : u"是否主力合约", + u"type" : u"int", + }, + u"31" : { + u"desc" : u"是否近月合约", + u"type" : u"int", + }, + u"32" : { + u"desc" : u"合约在RZRK的代码", + u"type" : u"string", + }, + u"33" : { + u"desc" : u"合约在交易所的代码", + u"type" : u"string", + }, + u"34" : { + u"desc" : u"是否夜盘合约", + u"type" : u"int", + }, + u"35" : { + u"desc" : u"利息额", + u"type" : u"double", + }, + u"36" : { + u"desc" : u"除权除息", + u"type" : u"double", + }, + u"37" : { + u"desc" : u"停牌", + u"type" : u"int", + }, + u"38" : { + u"desc" : u"履行方式", + u"type" : u"int", + }, + u"39" : { + u"desc" : u"单位保证金", + u"type" : u"double", + }, + u"40" : { + u"desc" : u"行权价", + u"type" : u"double", + }, + u"41" : { + u"desc" : u"期权行权日", + u"type" : u"int", + }, + u"42" : { + u"desc" : u"期权到期日", + u"type" : u"int", + }, + u"43" : { + u"desc" : u"整手数", + u"type" : u"int", + }, + u"44" : { + u"desc" : u"币种", + u"type" : u"int", + }, + u"45" : { + u"desc" : u"市场代码", + u"type" : u"string", + }, + u"46" : { + u"desc" : u"前日成交量", + u"type" : u"long", + }, + u"47" : { + u"desc" : u"无风险收益率", + u"type" : u"double", + }, + u"48" : { + u"desc" : u"历史收益率", + u"type" : u"double", + }, + u"49" : { + u"desc" : u"标的合约", + u"type" : u"string", + }, + u"50" : { + u"desc" : u"投资者适当性管理分类", + u"type" : u"int", + }, + u"51" : { + u"desc" : u"标识港股是否为标的证券", + u"type" : u"int", + }, + u"52" : { + u"desc" : u"最小回购天数", + u"type" : u"int", + }, + u"53" : { + u"desc" : u"最大回购天数", + u"type" : u"int", + }, + u"54" : { + u"desc" : u"参考汇率买入价", + u"type" : u"double", + }, + u"55" : { + u"desc" : u"参考汇率卖出价", + u"type" : u"double", + }, + u"56" : { + u"desc" : u"每百元应计利息额", + u"type" : u"double", + }, + u"57" : { + u"desc" : u"证券类型 1.全国股转:标识分层信息", + u"type" : u"string", + }, + u"58" : { + u"desc" : u"持仓主力合约", + u"type" : u"int", + }, + u"59" : { + u"desc" : u"单票估值", + u"type" : u"double", + }, + u"60" : { + u"desc" : u"到期收益率", + u"type" : u"double", + }, + u"61" : { + u"desc" : u"注册资本", + u"type" : u"int", + }, + u"62" : { + u"desc" : u"最大有效申报范围", + u"type" : u"double", + }, + u"63" : { + u"desc" : u"最小有效申报范围", + u"type" : u"double", + }, + u"64" : { + u"desc" : u"同股同权比例", + u"type" : u"double", + }, + u"65" : { + u"desc" : u"证券种类", + u"type" : u"long", + }, + u"66" : { + u"desc" : u"转换比例", + u"type" : u"double", + }, + u"67" : { + u"desc" : u"原因", + u"type" : u"string", + }, + u"68" : { + u"desc" : u"要约收购信息", + u"type" : u"string", + }, + u"69" : { + u"desc" : u"证券种类和属性高位", + u"type" : u"int", + }, + u"70" : { + u"desc" : u"证券种类和属性低位", + u"type" : u"int", + }, + u"71" : { + u"desc" : u"市价单最大下单量(卖)", + u"type" : u"int", + }, + u"72" : { + u"desc" : u"市价单最小下单量(卖)", + u"type" : u"int", + }, + u"73" : { + u"desc" : u"限价单最大下单量(卖)", + u"type" : u"int", + }, + u"74" : { + u"desc" : u"限价单最小下单量(卖)", + u"type" : u"int", + }, + u"75" : { + u"desc" : u"收费方式", + u"type" : u"int", + }, + u"76" : { + u"desc" : u"分红方式", + u"type" : u"int", + }, + u"77" : { + u"desc" : u"投资期限", + u"type" : u"int", + }, + u"78" : { + u"desc" : u"投资品种", + u"type" : u"int", + }, + u"79" : { + u"desc" : u"风险等级", + u"type" : u"int", + }, + u"80" : { + u"desc" : u"起息日", + u"type" : u"int", + }, + u"81" : { + u"desc" : u"交易状态", + u"type" : u"string", + }, + u"82" : { + u"desc" : u"交易类型", + u"type" : u"int", + }, + u"83" : { + u"desc" : u"证券级别", + u"type" : u"string", + }, + u"84" : { + u"desc" : u"可购买额度", + u"type" : u"double", + }, + u"85" : { + u"desc" : u"净值", + u"type" : u"double", + }, + u"86" : { + u"desc" : u"预计年化收益率", + u"type" : u"double", + }, + u"87" : { + u"desc" : u"发行机构简称", + u"type" : u"string", + }, + u"88" : { + u"desc" : u"认购开始日期", + u"type" : u"int", + }, + u"89" : { + u"desc" : u"认购结束日期", + u"type" : u"int", + }, + u"90" : { + u"desc" : u"发行机构编号", + u"type" : u"string", + }, + u"91" : { + u"desc" : u"是否逐笔签约", + u"type" : u"int", + }, + u"92" : { + u"desc" : u"面值", + u"type" : u"double", + }, + u"95" : { + u"desc" : u"盘后定价委托数量上限(买)", + u"type" : u"int", + }, + u"96" : { + u"desc" : u"盘后定价委托数量下限(买)", + u"type" : u"int", + }, + u"97" : { + u"desc" : u"盘后定价委托数量上限(卖)", + u"type" : u"int", + }, + u"98" : { + u"desc" : u"盘后定价委托数量下限(卖)", + u"type" : u"int", + }, + }, + }, + u"2001" : { + u"desc" : u"指数板块信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"", + u"type" : u"string", + }, + }, + }, + u"2002" : { + u"desc" : u"行业板块信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"板块名称", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"成分股市场代码", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"成分股股票代码", + u"type" : u"string", + }, + u"5" : { + u"desc" : u"板块类别", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"板块代码", + u"type" : u"string", + }, + }, + }, + u"2004" : { + u"desc" : u"ETF申赎清单信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"基金代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"基金名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"现金差额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"最小申购、赎回单位净值", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"基金份额净值", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"预估现金差额", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"现金替代比例上限", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"是否需要公布IOPV", + u"type" : u"int", + }, + u"8" : { + u"desc" : u"最小申购、赎回单位", + u"type" : u"int", + }, + u"9" : { + u"desc" : u"申购的允许情况", + u"type" : u"int", + }, + u"10" : { + u"desc" : u"赎回的允许情况", + u"type" : u"int", + }, + u"11" : { + u"desc" : u"申购上限", + u"type" : u"double", + }, + u"12" : { + u"desc" : u"赎回上限", + u"type" : u"double", + }, + u"13" : { + u"desc" : u"成份股信息", + u"type" : u"string", + }, + u"14" : { + u"desc" : u"成份股代码", + u"type" : u"string", + }, + u"15" : { + u"desc" : u"成份股名称", + u"type" : u"string", + }, + u"16" : { + u"desc" : u"成份股数量", + u"type" : u"int", + }, + u"17" : { + u"desc" : u"现金替代标志", + u"type" : u"int", + }, + u"18" : { + u"desc" : u"申购现金替代溢价比率", + u"type" : u"double", + }, + u"19" : { + u"desc" : u"申购替代金额", + u"type" : u"double", + }, + u"20" : { + u"desc" : u"赎回现金替代折价比率", + u"type" : u"double", + }, + u"21" : { + u"desc" : u"赎回替代金额", + u"type" : u"double", + }, + u"22" : { + u"desc" : u"成份股所属市场", + u"type" : u"int", + }, + u"23" : { + u"desc" : u"映射代码", + u"type" : u"string", + }, + u"24" : { + u"desc" : u"是否实物对价申赎", + u"type" : u"int", + }, + u"25" : { + u"desc" : u"占净值比例", + u"type" : u"double", + }, + u"26" : { + u"desc" : u"持股数", + u"type" : u"int", + }, + u"27" : { + u"desc" : u"持仓市值", + u"type" : u"double", + }, + }, + }, + u"2005" : { + u"desc" : u"概念板块信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"板块代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"板块名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"板块成分股", + u"type" : u"string", + }, + }, + }, + u"2006" : { + u"desc" : u"债券信息", + u"periods" : [86400000], + u"fields" : { + }, + }, + u"2007" : { + u"desc" : u"期权组合策略信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"组合策略编码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"组合策略名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"组合自动解除日设置", + u"type" : u"int", + }, + u"3" : { + u"desc" : u"成份合约到期日要求", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"成份合约标的要求", + u"type" : u"int", + }, + u"5" : { + u"desc" : u"是否适用非标合约", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"适用标的清单", + u"type" : u"string", + }, + u"9" : { + u"desc" : u"成分合约个数", + u"type" : u"int", + }, + u"10" : { + u"desc" : u"成份合约信息", + u"type" : u"string", + }, + }, + }, + u"2008" : { + u"desc" : u"地域板块信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"板块代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"板块名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"板块成分股", + u"type" : u"string", + }, + }, + }, + u"2009" : { + u"desc" : u"板块信息(所有)", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"板块代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"板块名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"板块类别", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"分类等级", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"板块成分股", + u"type" : u"string", + }, + u"5" : { + u"desc" : u"成分板块", + u"type" : u"string", + }, + u"6" : { + u"desc" : u"板块原始代码", + u"type" : u"string", + }, + }, + }, + u"2010" : { + u"desc" : u"转融通证券出借业务", + u"periods" : [86400000], + u"fields" : { + u"S" : { + u"desc" : u"证券代码", + u"type" : u"string", + }, + u"0" : { + u"desc" : u"期限费率信息", + u"type" : u"string", + }, + }, + }, + u"2011" : { + u"desc" : u"ST变更历史", + u"periods" : [86400000], + u"fields" : { + }, + }, + u"2012" : { + u"desc" : u"板块成分股变动历史", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"调入成份股", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"调出成份股", + u"type" : u"string", + }, + }, + }, + u"2013" : { + u"desc" : u"港股通持股统计", + u"periods" : [86400000], + u"fields" : { + u"1" : { + u"desc" : u"持股量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"持股市值", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"持股数量占比", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"净买入", + u"type" : u"double", + }, + }, + }, + u"2014" : { + u"desc" : u"港股通持股明细", + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"持股机构名称", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"持股量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"持股市值", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"持股数量占比", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"净买入", + u"type" : u"double", + }, + }, + }, + u"2015" : { + u"desc" : u"新股申购信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"证券代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"代码简称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"所属市场", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"发行总量(股)", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"网上发行量(股)", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"申购代码", + u"type" : u"string", + }, + u"6" : { + u"desc" : u"申购上限(股)", + u"type" : u"long", + }, + u"7" : { + u"desc" : u"发行价格", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"产品类型: 1-股票 2-债券 3-基金 4-科创板", + u"type" : u"int", + }, + u"9" : { + u"desc" : u"申购开始日期", + u"type" : u"int", + }, + }, + }, + u"2016" : { + u"desc" : u"融资融券交易信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"融资买入额", + u"type" : u"long", + }, + u"1" : { + u"desc" : u"融资余额", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"融资偿还额", + u"type" : u"long", + }, + u"3" : { + u"desc" : u"融券卖出量", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"融券余量", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"融券偿还量", + u"type" : u"long", + }, + u"6" : { + u"desc" : u"融券余额", + u"type" : u"long", + }, + u"7" : { + u"desc" : u"融资融券余额", + u"type" : u"long", + }, + }, + }, + u"2017" : { + u"desc" : u"市场涨跌停相关数据统计", + u"periods" : [60000], + u"fields" : { + u"0" : { + u"desc" : u"昨日涨停股今日平均涨幅", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"涨停股数", + u"type" : u"int", + }, + u"2" : { + u"desc" : u"跌停股数", + u"type" : u"int", + }, + u"3" : { + u"desc" : u"非一字涨停股数", + u"type" : u"int", + }, + }, + }, + u"2018" : { + u"desc" : u"实时行情委买卖统计", + u"periods" : [60000], + u"fields" : { + u"0" : { + u"desc" : u"委买均价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"委买总量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"委卖均价", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"委卖总量", + u"type" : u"long", + }, + }, + }, + u"2025" : { + u"desc" : u"红利分配方案信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"公告日期", + }, + u"1" : { + u"desc" : u"分红方案", + }, + u"2" : { + u"desc" : u"方案内容", + }, + u"3" : { + u"desc" : u"股票代码", + }, + u"4" : { + u"desc" : u"股票市场", + }, + u"5" : { + u"desc" : u"每股股利", + }, + u"6" : { + u"desc" : u"每股红股", + }, + u"7" : { + u"desc" : u"每股转增股本", + }, + u"8" : { + u"desc" : u"每股配股数", + }, + u"9" : { + u"desc" : u"配股价格", + }, + u"a" : { + u"desc" : u"股权登记日", + }, + u"b" : { + u"desc" : u"除权除息日", + }, + u"c" : { + u"desc" : u"派息日", + }, + u"d" : { + u"desc" : u"红股/转增股上市日", + }, + u"e" : { + u"desc" : u"分红年度", + }, + }, + }, + u"2032" : { + u"desc" : u"国债收益率", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"10年期收益率", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"1年期收益率", + u"type" : u"double", + }, + }, + }, + u"2999" : { + u"desc" : u"实时行情(全市场L1)", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"当前价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"成交总量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"成交总额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"持仓量", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"昨结算", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"成交笔数", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"市盈率1", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"市盈率2", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"开盘价", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"最高价", + u"type" : u"double", + }, + u"a" : { + u"desc" : u"最低价", + u"type" : u"double", + }, + u"b" : { + u"desc" : u"今结算", + u"type" : u"double", + }, + u"c" : { + u"desc" : u"前收盘", + u"type" : u"double", + }, + u"d" : { + u"desc" : u"多档委买价", + u"type" : u"vdouble", + }, + u"e" : { + u"desc" : u"多档委买量", + u"type" : u"vint", + }, + u"f" : { + u"desc" : u"多档委卖价", + u"type" : u"vdouble", + }, + u"g" : { + u"desc" : u"多档委卖量", + u"type" : u"vint", + }, + u"h" : { + u"desc" : u"证券状态", + u"type" : u"int", + }, + u"v" : { + u"desc" : u"原始成交总量", + u"type" : u"long", + }, + }, + }, + u"3000" : { + u"desc" : u"实时行情(L1)", + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"当前价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"成交总量", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"成交总额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"持仓量", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"昨结算", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"成交笔数", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"市盈率1", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"市盈率2", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"开盘价", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"最高价", + u"type" : u"double", + }, + u"a" : { + u"desc" : u"最低价", + u"type" : u"double", + }, + u"b" : { + u"desc" : u"今结算", + u"type" : u"double", + }, + u"c" : { + u"desc" : u"前收盘", + u"type" : u"double", + }, + u"d" : { + u"desc" : u"多档委买价", + u"type" : u"vdouble", + }, + u"e" : { + u"desc" : u"多档委买量", + u"type" : u"vint", + }, + u"f" : { + u"desc" : u"多档委卖价", + u"type" : u"vdouble", + }, + u"g" : { + u"desc" : u"多档委卖量", + u"type" : u"vint", + }, + u"h" : { + u"desc" : u"证券状态", + u"type" : u"int", + }, + u"v" : { + u"desc" : u"原始成交总量", + u"type" : u"long", + }, + }, + }, + u"3001" : { + u"desc" : u"K线", + u"periods" : [60000, 300000, 3600000, 86400000], + u"fields" : { + u"0" : { + u"desc" : u"开盘价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"最高价", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"最低价", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"收盘价", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"前收盘价", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"成交量", + u"type" : u"long", + }, + u"6" : { + u"desc" : u"成交额", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"持仓量", + u"type" : u"int", + }, + u"8" : { + u"desc" : u"流通盘", + u"type" : u"long", + }, + u"9" : { + u"desc" : u"总股本", + u"type" : u"long", + }, + u"a" : { + u"desc" : u"当日除权系数", + u"type" : u"double", + }, + u"b" : { + u"desc" : u"总的除权系数", + u"type" : u"double", + }, + u"c" : { + u"desc" : u"停牌标志", + u"type" : u"int", + }, + u"d" : { + u"desc" : u"今结算", + u"type" : u"double", + }, + }, + }, + u"3002" : { + u"desc" : u"分时行情", + u"periods" : [60000], + u"fields" : { + u"0" : { + u"desc" : u"价格", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"成交量", + u"type" : u"int", + }, + }, + }, + u"3004" : { + u"desc" : u"快照指标", + u"periods" : [60000], + u"fields" : { + u"z" : { + u"desc" : u"量比", + u"type" : u"double", + }, + u"y" : { + u"desc" : u"1分钟涨速(%)", + u"type" : u"double", + }, + u"x" : { + u"desc" : u"5分钟涨速(%)", + u"type" : u"double", + }, + u"w" : { + u"desc" : u"3日涨幅(%)", + u"type" : u"double", + }, + u"v" : { + u"desc" : u"5日涨幅(%)", + u"type" : u"double", + }, + u"u" : { + u"desc" : u"10日涨幅(%)", + u"type" : u"double", + }, + u"t" : { + u"desc" : u"3日换手(%)", + u"type" : u"double", + }, + u"s" : { + u"desc" : u"5日换手(%)", + u"type" : u"double", + }, + u"r" : { + u"desc" : u"10日换手(%)", + u"type" : u"double", + }, + }, + }, + u"4" : { + u"desc" : u"节假日信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"日期", + u"type" : u"long", + }, + u"1" : { + u"desc" : u"节假日说明", + u"type" : u"string", + }, + }, + }, + u"3005" : { + u"desc" : u"港股盘前价格优化(集合竞价阶段价格限制)", + u"periods" : [0, 86400000], + u"fields" : { + u"0" : { + u"desc" : u"参考价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"买盘价格下限", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"买盘价格上限", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"卖盘价格下限", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"卖盘价格上限", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"市场状态", + u"type" : u"int", + }, + }, + }, + u"3006" : { + u"desc" : u"港股通资金流向", + u"periods" : [60000, 86400000], + u"fields" : { + u"0" : { + u"desc" : u"HGT北向买入资金", + u"type" : u"long", + }, + u"1" : { + u"desc" : u"HGT北向卖出资金", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"HGT南向买入资金", + u"type" : u"long", + }, + u"3" : { + u"desc" : u"HGT南向卖出资金", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"SGT北向买入资金", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"SGT北向卖出资金", + u"type" : u"long", + }, + u"6" : { + u"desc" : u"SGT南向买入资金", + u"type" : u"long", + }, + u"7" : { + u"desc" : u"SGT南向卖出资金", + u"type" : u"long", + }, + u"8" : { + u"desc" : u"HGT北向资金净流入", + u"type" : u"long", + }, + u"9" : { + u"desc" : u"HGT北向当日资金余额", + u"type" : u"long", + }, + u"a" : { + u"desc" : u"HGT南向资金净流入", + u"type" : u"long", + }, + u"b" : { + u"desc" : u"HGT南向当日资金余额", + u"type" : u"long", + }, + u"c" : { + u"desc" : u"SGT北向资金净流入", + u"type" : u"long", + }, + u"d" : { + u"desc" : u"SGT北向当日资金余额", + u"type" : u"long", + }, + u"e" : { + u"desc" : u"SGT南向资金净流入", + u"type" : u"long", + }, + u"f" : { + u"desc" : u"SGT南向当日资金余额", + u"type" : u"long", + }, + }, + }, + u"3030" : { + u"desc" : u"ETF统计数据", + u"periods" : [0], + u"fields" : { + u"0" : { + u"desc" : u"申购笔数", + u"type" : u"int", + }, + u"1" : { + u"desc" : u"申购数量", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"申购金额", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"赎回笔数", + u"type" : u"int", + }, + u"4" : { + u"desc" : u"赎回数量", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"赎回金额", + u"type" : u"double", + }, + }, + }, + u"4000" : { + u"desc" : u"除权除息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"每股股利(税前,元)", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"每股红股(股)", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"每股转增股本(股)", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"每股配股数(股)", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"配股价格(元)", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"是否股改", + u"type" : u"int", + }, + u"d" : { + u"desc" : u"除权系数 * 10^12", + u"type" : u"long", + }, + }, + }, + u"4002" : { + u"desc" : u"内外盘", + u"periods" : [60000, 300000, 3600000, 86400000], + u"fields" : { + u"0" : { + u"desc" : u"内盘", + u"type" : u"long", + }, + u"1" : { + u"desc" : u"外盘", + u"type" : u"long", + }, + u"2" : { + u"desc" : u"委买总量", + u"type" : u"long", + }, + u"3" : { + u"desc" : u"委买均价", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"委卖总量", + u"type" : u"long", + }, + u"5" : { + u"desc" : u"委卖均价", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"成交笔数", + u"type" : u"int", + }, + u"7" : { + u"desc" : u"委买量变化值", + u"type" : u"long", + }, + u"8" : { + u"desc" : u"委卖量变化值", + u"type" : u"long", + }, + }, + }, + u"4003" : { + u"periods" : [60000,86400000], + u"fields" : { + }, + }, + u"4004" : { + u"desc" : u"可转债基础信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"可转债代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"可转债简称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"正股代码", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"正股简称", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"发行年限", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"面值", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"发行价格", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"发行总额(元)", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"债券余额(元)", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"起息日期", + u"type" : u"int", + }, + u"10" : { + u"desc" : u"到期日期", + u"type" : u"int", + }, + u"11" : { + u"desc" : u"利率类型", + u"type" : u"string", + }, + u"12" : { + u"desc" : u"票面利率", + u"type" : u"double", + }, + u"13" : { + u"desc" : u"补偿利率", + u"type" : u"double", + }, + u"14" : { + u"desc" : u"年付息次数", + u"type" : u"int", + }, + u"15" : { + u"desc" : u"上市日期", + u"type" : u"int", + }, + u"16" : { + u"desc" : u"摘牌日", + u"type" : u"int", + }, + u"17" : { + u"desc" : u"上市地点", + u"type" : u"string", + }, + u"18" : { + u"desc" : u"转股起始日", + u"type" : u"int", + }, + u"19" : { + u"desc" : u"转股截止日", + u"type" : u"int", + }, + u"20" : { + u"desc" : u"初始转股价", + u"type" : u"double", + }, + u"21" : { + u"desc" : u"最新转股价", + u"type" : u"double", + }, + u"22" : { + u"desc" : u"利率说明", + u"type" : u"string", + }, + }, + }, + u"4005" : { + u"desc" : u"可转债转股价格历史变动", + u"periods" : [86400000], + u"fields" : { + u"S" : { + u"desc" : u"股票", + u"type" : u"string", + }, + u"C" : { + u"desc" : u"转股价历史变动信息", + u"type" : u"string", + }, + }, + }, + u"4011" : { + u"desc" : u"etfiopv", + u"periods" : [60000, 86400000], + u"fields" : { + u"0" : { + u"desc" : u"开盘价", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"最高价", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"最低价", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"收盘价", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"前收盘价", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"成交量", + u"type" : u"long", + }, + u"6" : { + u"desc" : u"成交额", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"持仓量", + u"type" : u"int", + }, + u"8" : { + u"desc" : u"流通盘", + u"type" : u"long", + }, + u"9" : { + u"desc" : u"总股本", + u"type" : u"long", + }, + u"a" : { + u"desc" : u"当日除权系数", + u"type" : u"double", + }, + u"b" : { + u"desc" : u"总的除权系数", + u"type" : u"double", + }, + u"c" : { + u"desc" : u"停牌标志", + u"type" : u"int", + }, + u"d" : { + u"desc" : u"今结算", + u"type" : u"double", + }, + u"e" : { + u"desc" : u"涨停价", + u"type" : u"double", + }, + u"f" : { + u"desc" : u"跌停价", + u"type" : u"double", + }, + }, + }, + u"4015" : { + u"desc" : u"期货仓单", + u"periods" : [86400000], + u"fields" : { + u"1" : { + u"desc" : u"仓库", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"仓单", + u"type" : u"string", + }, + }, + }, + u"4020" : { + u"desc" : u"退市可转债信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"可转债代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"可转债简称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"正股代码", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"正股名称", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"上市首日收盘价", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"最后交易价格", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"最低收盘价", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"最高收盘价", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"发行规模(亿)", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"回售规模(亿)", + u"type" : u"double", + }, + u"10" : { + u"desc" : u"剩余规模(亿)", + u"type" : u"double", + }, + u"11" : { + u"desc" : u"发行日期", + u"type" : u"int", + }, + u"12" : { + u"desc" : u"上市日期", + u"type" : u"int", + }, + u"13" : { + u"desc" : u"最后交易日", + u"type" : u"int", + }, + u"14" : { + u"desc" : u"到期日期", + u"type" : u"int", + }, + u"15" : { + u"desc" : u"存续年限(年)", + u"type" : u"double", + }, + u"16" : { + u"desc" : u"退市原因", + u"type" : u"string", + }, + }, + }, + u"4021" : { + u"desc" : u"代发可转债信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"正股代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"正股名称", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"可转债代码", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"可转债简称", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"方案进展", + u"type" : u"int", + }, + u"5" : { + u"desc" : u"进展公告日", + u"type" : u"int", + }, + u"6" : { + u"desc" : u"总发行规模(亿元)", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"评级", + u"type" : u"string", + }, + u"8" : { + u"desc" : u"股东配售率(%)", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"转股价", + u"type" : u"double", + }, + u"10" : { + u"desc" : u"正股每股净资产", + u"type" : u"double", + }, + u"11" : { + u"desc" : u"每股配售(元)", + u"type" : u"double", + }, + u"12" : { + u"desc" : u"股权登记日", + u"type" : u"int", + }, + u"13" : { + u"desc" : u"网上发行规模(亿元)", + u"type" : u"double", + }, + u"14" : { + u"desc" : u"中签率(%)", + u"type" : u"double", + }, + u"15" : { + u"desc" : u"单账户中签(顶格)", + u"type" : u"double", + }, + u"16" : { + u"desc" : u"申购户数(万户)", + u"type" : u"double", + }, + u"17" : { + u"desc" : u"网下顶格(亿元)", + u"type" : u"double", + }, + u"18" : { + u"desc" : u"顶格获配(万元)", + u"type" : u"double", + }, + u"19" : { + u"desc" : u"网下户数(户)", + u"type" : u"double", + }, + u"20" : { + u"desc" : u"包销比例(%)", + u"type" : u"double", + }, + u"21" : { + u"desc" : u"网上申购代码", + u"type" : u"string", + }, + }, + }, + u"4999" : { + u"desc" : u"除权除息(所有股票)", + u"periods" : [86400000], + u"fields" : { + }, + }, + u"5001" : { + u"periods" : [86400000], + u"fields" : { + }, + }, + u"5002" : { + u"desc" : u"龙虎榜", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"", + u"type" : u"string", + }, + u"5" : { + u"desc" : u"", + u"type" : u"string", + }, + u"6" : { + u"desc" : u"", + u"type" : u"string", + }, + u"7" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B10" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B11" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B12" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B13" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B14" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B15" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B20" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B21" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B22" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B23" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B24" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B25" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B30" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B31" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B32" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B33" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B34" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B35" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B40" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B41" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B42" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B43" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B44" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B45" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B50" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B51" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B52" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B53" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B54" : { + u"desc" : u"", + u"type" : u"string", + }, + u"B55" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S10" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S11" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S12" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S13" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S14" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S15" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S20" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S21" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S22" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S23" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S24" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S25" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S30" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S31" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S32" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S33" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S34" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S35" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S40" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S41" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S42" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S43" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S44" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S45" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S50" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S51" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S52" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S53" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S54" : { + u"desc" : u"", + u"type" : u"string", + }, + u"S55" : { + u"desc" : u"", + u"type" : u"string", + }, + }, + }, + u"5003" : { + u"desc" : u"分级基金", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"", + u"type" : u"double", + }, + u"1" : { + u"desc" : u"", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"", + u"type" : u"double", + }, + }, + }, + u"5004" : { + u"desc" : u"历史主力合约", + u"periods" : [86400000], + u"fields" : { + u"33" : { + u"desc" : u"合约在交易所的代码", + u"type" : u"string", + }, + u"150" : { + u"desc" : u"期货统一规则代码", + u"type" : u"string", + }, + u"151" : { + u"desc" : u"次主力合约代码", + u"type" : u"string", + }, + u"152" : { + u"desc" : u"次主力统一规则编码", + u"type" : u"string", + }, + u"S" : { + u"desc" : u"主力合约代码", + u"type" : u"string", + }, + u"G" : { + u"desc" : u"所属日期", + u"type" : u"long", + }, + }, + }, + u"5008" : { + u"desc" : u"期货日持仓成交排名", + u"periods" : [86400000], + u"fields" : { + u"1" : { + u"desc" : u"当日成交量排名", + }, + u"2" : { + u"desc" : u"持买单量排名", + }, + u"3" : { + u"desc" : u"持卖单量排名", + }, + u"4" : { + u"desc" : u"会员名称", + }, + u"5" : { + u"desc" : u"当日总量", + }, + u"6" : { + u"desc" : u"相比上日增减量", + }, + }, + }, + u"5100" : { + u"desc" : u"大宗交易", + u"periods" : [86400000], + u"fields" : { + }, + }, + u"6" : { + u"desc" : u"汇率", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"外国货币代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"本国货币代码", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"汇率", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"汇率日期", + u"type" : u"long", + }, + u"4" : { + u"desc" : u"汇率买入价", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"汇率卖出价", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"汇率买入浮动比例", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"汇率卖出浮动比例", + u"type" : u"double", + }, + }, + }, + u"6000" : { + u"desc" : u"板块指数信息", + u"periods" : [86400000], + u"fields" : { + u"turn" : { + u"desc" : u"", + u"type" : u"double", + }, + }, + }, + u"7" : { + u"desc" : u"个股交易日信息", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"交易日", + u"type" : u"long", + }, + u"1" : { + u"desc" : u"停牌状态", + u"type" : u"int", + }, + }, + }, + u"7000" : { + u"desc" : u"财务数据", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"股票代码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"股东人数", + u"type" : u"double", + }, + u"2" : { + u"desc" : u"净利润(元)", + u"type" : u"double", + }, + u"3" : { + u"desc" : u"经营现金流量净额", + u"type" : u"double", + }, + u"4" : { + u"desc" : u"投资现金流量净额", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"筹资现金流量净额", + u"type" : u"double", + }, + u"6" : { + u"desc" : u"资产总计", + u"type" : u"double", + }, + u"7" : { + u"desc" : u"负债总计", + u"type" : u"double", + }, + u"8" : { + u"desc" : u"资产负债比率", + u"type" : u"double", + }, + u"9" : { + u"desc" : u"净利润增长率", + u"type" : u"double", + }, + u"10" : { + u"desc" : u"主营业务利润", + u"type" : u"double", + }, + u"11" : { + u"desc" : u"主营增长率", + u"type" : u"double", + }, + u"12" : { + u"desc" : u"流通A/B股", + u"type" : u"double", + }, + u"13" : { + u"desc" : u"人均持股数", + u"type" : u"double", + }, + u"14" : { + u"desc" : u"上年度每股净收益", + u"type" : u"double", + }, + u"15" : { + u"desc" : u"全年预估每股净收益", + u"type" : u"double", + }, + u"16" : { + u"desc" : u"每股收益", + u"type" : u"double", + }, + u"17" : { + u"desc" : u"每股资本公积金", + u"type" : u"double", + }, + u"18" : { + u"desc" : u"每股未分配利润", + u"type" : u"double", + }, + u"19" : { + u"desc" : u"解禁数量", + u"type" : u"double", + }, + u"20" : { + u"desc" : u"解禁日期", + u"type" : u"long", + }, + u"21" : { + u"desc" : u"总质押股份数量", + u"type" : u"double", + }, + u"22" : { + u"desc" : u"质押股份占A股总股本比例", + u"type" : u"double", + }, + u"23" : { + u"desc" : u"发布日期", + u"type" : u"int", + }, + u"24" : { + u"desc" : u"报表年份", + u"type" : u"int", + }, + u"25" : { + u"desc" : u"报表季度", + u"type" : u"int", + }, + }, + }, + u"7011" : { + u"desc" : u"问答", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"问答编号", + }, + u"1" : { + u"desc" : u"问题时间", + }, + u"2" : { + u"desc" : u"问题内容", + }, + u"3" : { + u"desc" : u"回答时间", + }, + u"4" : { + u"desc" : u"回答内容", + }, + }, + }, + u"9000" : { + u"desc" : u"公告", + u"periods" : [0], + u"fields" : { + u"1" : { + u"desc" : u"证券", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"主题", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"摘要", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"格式", + u"type" : u"string", + }, + u"5" : { + u"desc" : u"内容", + u"type" : u"string", + }, + u"6" : { + u"desc" : u"级别", + u"type" : u"int", + }, + u"7" : { + u"desc" : u"类型 0-其他 1-财报类", + u"type" : u"int", + }, + }, + }, + u"9502" : { + u"desc" : u"期权数据", + u"periods" : [86400000], + u"fields" : { + u"0" : { + u"desc" : u"期权编码", + u"type" : u"string", + }, + u"1" : { + u"desc" : u"期权市场", + u"type" : u"string", + }, + u"2" : { + u"desc" : u"标的编码", + u"type" : u"string", + }, + u"3" : { + u"desc" : u"标的市场", + u"type" : u"string", + }, + u"4" : { + u"desc" : u"行权价", + u"type" : u"double", + }, + u"5" : { + u"desc" : u"方向", + u"type" : u"string", + }, + u"6" : { + u"desc" : u"到期月", + u"type" : u"int", + }, + u"7" : { + u"desc" : u"到期日", + u"type" : u"int", + }, + u"8" : { + u"desc" : u"合约类型", + u"type" : u"int", + }, + u"9" : { + u"desc" : u"上市日", + u"type" : u"int", + }, + u"10" : { + u"desc" : u"调整", + u"type" : u"int", + }, + u"11" : { + u"desc" : u"期权名称", + u"type" : u"string", + }, + u"12" : { + u"desc" : u"合约单位", + u"type" : u"int", + }, + }, + }, + u"9506" : { + u"desc" : u"日线涨跌停", + u"periods" : [86400000], + u"fields" : { + u"e" : { + u"desc" : u"涨停价", + u"type" : u"double", + }, + u"f" : { + u"desc" : u"跌停价", + u"type" : u"double", + }, + }, + }, +} \ No newline at end of file diff --git a/src/xtquant/config/pershare_new.ini b/src/xtquant/config/pershare_new.ini new file mode 100644 index 0000000..c7392af --- /dev/null +++ b/src/xtquant/config/pershare_new.ini @@ -0,0 +1,29 @@ +主要指标|PERSHAREINDEX +每股经营活动现金流量|s_fa_ocfps|m_sFaOcfps +每股净资产|s_fa_bps|m_sFaBps +基本每股收益|s_fa_eps_basic|m_sFaEpsBasic +稀释每股收益|s_fa_eps_diluted|m_sFaEpsDiluted +每股未分配利润|s_fa_undistributedps|m_sFaUndistributedps +每股资本公积金|s_fa_surpluscapitalps|m_sFaSurpluscapitalps +扣非每股收益|adjusted_earnings_per_share|m_adjustedEarningsPerShare +净资产收益率|du_return_on_equity|m_duReturnOnEquity +销售毛利率|sales_gross_profit|m_salesGrossProfit +主营收入同比增长|inc_revenue_rate|m_incRevenueRate +净利润同比增长|du_profit_rate|m_duProfitRate +归属于母公司所有者的净利润同比增长|inc_net_profit_rate|m_incNetProfitRate +扣非净利润同比增长|adjusted_net_profit_rate|m_adjustedNetProfitRate +营业总收入滚动环比增长|inc_total_revenue_annual|m_incTotalRevenueAnnual +归属净利润滚动环比增长|inc_net_profit_to_shareholders_annual|m_incNetProfitToShareholdersAnnual +扣非净利润滚动环比增长|adjusted_profit_to_profit_annual|m_adjustedProfitToProfitAnnual +加权净资产收益率|equity_roe|m_equityRoe +摊薄净资产收益率|net_roe|m_netRoe +摊薄总资产收益率|total_roe|m_totalRoe +毛利率|gross_profit|m_grossProfit +净利率|net_profit|m_netProfit +实际税率|actual_tax_rate|m_actualTaxRate +预收款/营业收入|pre_pay_operate_income|m_prePayOperateIncome +销售现金流/营业收入|sales_cash_flow|m_salesCashFlow +资产负债比率|gear_ratio|m_gearRatio +存货周转率|inventory_turnover|m_inventoryTurnover +公告日|m_anntime|m_anntime +报告截止日|m_timetag|m_endtime \ No newline at end of file diff --git a/src/xtquant/config/sharebalance_new_1.ini b/src/xtquant/config/sharebalance_new_1.ini new file mode 100644 index 0000000..13e4b8f --- /dev/null +++ b/src/xtquant/config/sharebalance_new_1.ini @@ -0,0 +1,143 @@ +资产负债表|ASHAREBALANCESHEET +披露日期|m_anntime|m_annTime +截止日期|m_timetag|m_endTime +内部应收款|internal_shoule_recv|m_internalShouldRecv +固定资产清理|fixed_capital_clearance|m_fixedCapitalClearance +应付分保账款|should_pay_money|m_shouldPayMony +结算备付金|settlement_payment|m_settlementPayment +应收保费|receivable_premium|m_receivablePremium +应收分保账款|accounts_receivable_reinsurance|m_accountsReceivableReinsurance +应收分保合同准备金|reinsurance_contract_reserve|m_reinsuranceContractReserve +应收股利|dividends_payable|m_dividendsPayable +应收出口退税|tax_rebate_for_export|m_taxRebateForExport +应收补贴款|subsidies_receivable|m_subsidiesReceivable +应收保证金|deposit_receivable|m_depositReceivable +待摊费用|apportioned_cost|m_apportionedCost +待处理流动资产损益|profit_and_current_assets_with_deal|m_profitAndCurrentAssetsWithDeal +一年内到期的非流动资产|current_assets_one_year|m_currentAssetsOneYear +长期应收款|long_term_receivables|m_longTermReceivables +其他长期投资|other_long_term_investments|m_otherLongTermInvestments +固定资产原值|original_value_of_fixed_assets|m_originalValueOfFixedAssets +固定资产净值|net_value_of_fixed_assets|m_netValueOfFixedAssets +固定资产减值准备|depreciation_reserves_of_fixed_assets|m_depreciationReservesOfFixedAssets +生产性生物资产|productive_biological_assets|m_productiveBiologicalAssets +公益性生物资产|public_welfare_biological_assets|m_publicWelfareBiologicalAssets +油气资产|oil_and_gas_assets|m_oilAndGasAssets +开发支出|development_expenditure|m_developmentExpenditure +股权分置流通权|right_of_split_share_distribution|m_rightSplitShareDistribution +其他非流动资产|other_non_mobile_assets|m_otherNonMobileEssets +应付手续费及佣金|handling_fee_and_commission|m_handlingFeeAndCommission +其他应交款|other_payables|m_otherPayables +应付保证金|margin_payable|m_marginPayable +内部应付款|internal_accounts_payable|m_internalAccountsPayable +预提费用|advance_cost|m_advanceCost +保险合同准备金|insurance_contract_reserve|m_insuranceContractReserve +代理买卖证券款|broker_buying_and_selling_securities|m_brokerBuyingSellingSecurities +代理承销证券款|acting_underwriting_securities|m_actingUnderwritingSecurities +国际票证结算|international_ticket_settlement|m_internationalTicketSettlement +国内票证结算|domestic_ticket_settlement|m_domesticTicketSettlement +递延收益|deferred_income|m_deferredIncome +应付短期债券|short_term_bonds_payable|m_shortTermBondsPayable +长期递延收益|long_term_deferred_income|m_longTermDeferredIncome +未确定的投资损失|undetermined_investment_losses|m_undeterminedInvestmentLosses +拟分配现金股利|quasi_distribution_of_cash_dividends|m_quasiDistributionCashDividends +预计负债|provisions_not|m_provisionsNot +吸收存款及同业存放|cust_bank_dep|m_custBankDep +预计流动负债|provisions|m_provisions +减:库存股|less_tsy_stk|m_lessTsyStk +货币资金|cash_equivalents|m_cashEquivalents +拆出资金|loans_to_oth_banks|m_loansToOthBanks +交易性金融资产|tradable_fin_assets|m_tradableFinAssets +衍生金融资产|derivative_fin_assets|m_derivativeFinAssets +应收票据|bill_receivable|m_billReceivable +应收账款|account_receivable|m_accountReceivable +预付款项|advance_payment|m_advancePayment +应收利息|int_rcv|m_intRcv +其他应收款|other_receivable|m_otherReceivable +买入返售金融资产|red_monetary_cap_for_sale|m_redMonetaryCapForSale +以公允价值计量且其变动计入当期损益的金融资产|agency_bus_assets|m_agencyBusAssets +存货|inventories|m_inventories +其他流动资产|other_current_assets|m_otherCurrentAssets +流动资产合计|total_current_assets|m_totalCurrentAssets +发放贷款及垫款|loans_and_adv_granted|m_loansAndAdvGranted +可供出售金融资产|fin_assets_avail_for_sale|m_finAssetsAvailForSale +持有至到期投资|held_to_mty_invest|m_heldToMtyInvest +长期股权投资|long_term_eqy_invest|m_longTermEqyInvest +投资性房地产|invest_real_estate|m_investRealEstate +累计折旧|accumulated_depreciation|m_accumulatedDepreciation +固定资产|fix_assets|m_fixAssets +在建工程|constru_in_process|m_construInProcess +工程物资|construction_materials|m_constructionMaterials +长期负债|long_term_liabilities|m_longTermLiabilities +无形资产|intang_assets|m_intangAssets +商誉|goodwill|m_goodwill +长期待摊费用|long_deferred_expense|m_longDeferredExpense +递延所得税资产|deferred_tax_assets|m_deferredTaxAssets +非流动资产合计|total_non_current_assets|m_totalNonCurrentAssets +资产总计|tot_assets|m_totAssets +短期借款|shortterm_loan|m_shorttermLoan +向中央银行借款|borrow_central_bank|m_borrowCentralBank +拆入资金|loans_oth_banks|m_loansOthBanks +交易性金融负债|tradable_fin_liab|m_tradableFinLiab +衍生金融负债|derivative_fin_liab|m_derivativeFinLiab +应付票据|notes_payable|m_notesPayable +应付账款|accounts_payable|m_accountsPayable +预收账款|advance_peceipts|m_advancePeceipts +卖出回购金融资产款|fund_sales_fin_assets_rp|m_fundSalesFinAssetsRp +应付职工薪酬|empl_ben_payable|m_emplBenPayable +应交税费|taxes_surcharges_payable|m_taxesSurchargesPayable +应付利息|int_payable|m_intPayable +应付股利|dividend_payable|m_dividendPayable +其他应付款|other_payable|m_otherPayable +一年内到期的非流动负债|non_current_liability_in_one_year|m_nonCurrentLiabilityInOneYear +其他流动负债|other_current_liability|m_otherCurrentLiability +流动负债合计|total_current_liability|m_totalCurrentLiability +长期借款|long_term_loans|m_longTermLoans +应付债券|bonds_payable|m_bondsPayable +长期应付款|longterm_account_payable|m_longtermAccountPayable +专项应付款|grants_received|m_grantsReceived +递延所得税负债|deferred_tax_liab|m_deferredTaxLiab +其他非流动负债|other_non_current_liabilities|m_otherNonCurrentLiabilities +非流动负债合计|non_current_liabilities|m_nonCurrentLiabilities +负债合计|tot_liab|m_totLiab +实收资本(或股本)|cap_stk|m_capStk +资本公积|cap_rsrv|m_capRsrv +专项储备|specific_reserves|m_specificReserves +盈余公积|surplus_rsrv|m_surplusRsrv +一般风险准备|prov_nom_risks|m_provNomRisks +未分配利润|undistributed_profit|m_undistributedProfit +外币报表折算差额|cnvd_diff_foreign_curr_stat|m_cnvdDiffForeignCurrStat +归属于母公司股东权益合计|tot_shrhldr_eqy_excl_min_int|m_totShrhldrEqyExclMinInt +少数股东权益|minority_int|m_minorityInt +所有者权益合计|total_equity|m_totalEquity +负债和股东权益总计|tot_liab_shrhldr_eqy|m_totLiabShrhldrEqy + +现金及存放中央银行款项:企业持有的现金、存放中央银行款项等总额|m_cashAdepositsCentralBank +贵金属:企业(金融)持有的黄金、白银等贵金属存货的成本|m_nobleMetal +存放同业和其它金融机构款项:企业(银行)存放于境内、境外银行和非银行金融机构的款项|m_depositsOtherFinancialInstitutions +短期投资|m_currentInvestment +买入返售金融资产|m_redemptoryMonetaryCapitalSale +应收代位追偿款净额|m_netAmountSubrogation +存出保证金|m_refundableDeposits +保户质押贷款净额|m_netAmountLoanPledged +定期存款|m_fixedTimeDeposit +长期债权投资净额|m_netLongtermDebtInvestments +长期投资|m_permanentInvestment +存出资本保证金|m_depositForcapitalRecognizance +在建工程净额|m_netBalConstructionProgress +独立账户资产|m_separateAccountAssets +代理业务资产|m_capitalInvicariousBussiness +其他资产|m_otherAssets +其中:同业及其他金融机构存放款项|m_depositsWithBanksOtherFinancialIns +应付赔付款|m_indemnityPayable +应付保单红利|m_policyDividendPayable +保户储金及投资款|m_guaranteeInvestmentFunds +预收保费|m_premiumsReceivedAdvance +保单负债|m_insuranceLiabilities +独立账户负债|m_liabilitiesIndependentAccounts +代理业务负债|m_liabilitiesVicariousBusiness +其他负债|m_otherLiablities +资本溢价|m_capitalPremium +保留溢利|m_petainedProfit +交易风险准备|m_provisionTransactionRisk +其他储备|m_otherReserves diff --git a/src/xtquant/config/shareholder_new_1.ini b/src/xtquant/config/shareholder_new_1.ini new file mode 100644 index 0000000..c97a46b --- /dev/null +++ b/src/xtquant/config/shareholder_new_1.ini @@ -0,0 +1,9 @@ +股东数|SHAREHOLDER +公告日期|declareDate|declareDate +截止日期|endDate|endDate +股东总数|shareholder|shareholder +A股东户数|shareholderA|shareholderA +B股东户数|shareholderB|shareholderB +H股东户数|shareholderH|shareholderH +已流通股东户数|shareholderFloat|shareholderFloat +未流通股东户数|shareholderOther|shareholderOther \ No newline at end of file diff --git a/src/xtquant/config/shareincome_new_1.ini b/src/xtquant/config/shareincome_new_1.ini new file mode 100644 index 0000000..481c695 --- /dev/null +++ b/src/xtquant/config/shareincome_new_1.ini @@ -0,0 +1,68 @@ +利润表|ASHAREINCOME +披露日期|m_anntime|m_annTime +截止日期|m_timetag|m_endTime +营业收入|revenue_inc|m_revenueInc +已赚保费|earned_premium|m_earnedPremium +房地产销售收入|real_estate_sales_income|m_realEstateSalesIncome +营业总成本|total_operating_cost|m_totalOperatingCost +房地产销售成本|real_estate_sales_cost|m_realEstateSalesCost +研发费用|research_expenses|m_researchExpenses +退保金|surrender_value|m_surrenderValue +赔付支出净额|net_payments|m_netPayments +提取保险合同准备金净额|net_withdrawal_ins_con_res|m_netWithdrawalInsConRes +保单红利支出|policy_dividend_expenses|m_policyDividendExpenses +分保费用|reinsurance_cost|m_reinsuranceCost +公允价值变动收益|change_income_fair_value|m_changeIncomeFairvalue +期货损益|futures_loss|m_futuresLoss +托管收益|trust_income|m_trustIncome +补贴收入|subsidize_revenue|m_subsidizeRevenue +其他业务利润|other_business_profits|m_otherBusinessProfits +被合并方在合并前实现净利润|net_profit_excl_merged_int_inc|m_netProfitExclMergedIntInc +利息收入|int_inc|m_intInc +手续费及佣金收入|handling_chrg_comm_inc|m_handlingChrgCommInc +手续费及佣金支出|less_handling_chrg_comm_exp|m_lessHandlingChrgCommExp +其他业务成本|other_bus_cost|m_otherBusCost +汇兑收益|plus_net_gain_fx_trans|m_plusNetGainFxTrans +非流动资产处置收益|il_net_loss_disp_noncur_asset|m_ilNetLossDispNoncurAsset +所得税费用|inc_tax|m_incTax +未确认投资损失|unconfirmed_invest_loss|m_unconfirmedInvestLoss +归属于母公司所有者的净利润|net_profit_excl_min_int_inc|m_netProfitExclMinIntInc +利息支出|less_int_exp|m_lessIntExp +其他业务收入|other_bus_inc|m_otherBusInc +营业总收入|revenue|m_revenue +营业成本|total_expense|m_totalExpense +营业税金及附加|less_taxes_surcharges_ops|m_lessTaxesSurchargesOps +销售费用|sale_expense|m_saleExpense +管理费用|less_gerl_admin_exp|m_lessGerlAdminExp +财务费用|financial_expense|m_financialExpense +资产减值损失|less_impair_loss_assets|m_lessImpairLossAssets +投资收益|plus_net_invest_inc|m_plusNetInvestInc +联营企业和合营企业的投资收益|incl_inc_invest_assoc_jv_entp|m_inclIncInvestAssocJvEntp +营业利润|oper_profit|m_operProfit +营业外收入|plus_non_oper_rev|m_plusNonOperRev +营业外支出|less_non_oper_exp|m_lessNonOperExp +利润总额|tot_profit|m_totProfit +净利润|net_profit_incl_min_int_inc|m_netProfitInclMinIntInc +净利润(扣除非经常性损益后)|net_profit_incl_min_int_inc_after|m_netProfitInclMinIntIncAfter +少数股东损益|minority_int_inc|m_minorityIntInc +基本每股收益|s_fa_eps_basic|m_sFaEpsBasic +稀释每股收益|s_fa_eps_diluted|m_sFaEpsDiluted +综合收益总额|total_income|m_totalIncome +归属于少数股东的综合收益总额|total_income_minority|m_totalIncomeMinority +其他收益|other_compreh_inc|m_otherComprehInc + +利息净收入|m_netinterestIncome +手续费及佣金净收入|m_netFeesCommissions +保险业务收入|m_insuranceBusiness +减:分出保费|m_separatePremium +减:提取未到期责任准备金|m_asideReservesUndueLiabilities +赔付支出|m_paymentsInsuranceClaims +减:摊回赔付支出|m_amortizedCompensationExpenses +提取保险责任准备金净额|m_netReserveInsuranceLiability +提取保险责任准备金|m_policyReserve +减:摊回保险责任准备金|m_amortizeInsuranceReserve +保险业务手续费及佣金支出|m_nsuranceFeesCommissionExpenses +业务及管理费|m_operationAdministrativeExpense +减:摊回分保费用|m_amortizedReinsuranceExpenditure +其中:非流动资产处置净损益|m_netProfitLossdisposalNonassets +影响净利润的其他项目|m_otherItemsAffectingNetProfit diff --git a/src/xtquant/config/table2json.lua b/src/xtquant/config/table2json.lua new file mode 100644 index 0000000..0e88d8b --- /dev/null +++ b/src/xtquant/config/table2json.lua @@ -0,0 +1,25 @@ + +-- 将lua中的table转换为json +function table2json(t) + local function serialize(tbl) + local tmp = {} + for k, v in pairs(tbl) do + local k_type = type(k) + local v_type = type(v) + local key = (k_type == "string" and "\"" .. k .. "\":") + or (k_type == "number" and "") + local value = (v_type == "table" and serialize(v)) + or (v_type == "boolean" and tostring(v)) + or (v_type == "string" and "\"" .. v .. "\"") + or (v_type == "number" and v) + tmp[#tmp + 1] = key and value and tostring(key) .. tostring(value) or nil + end + if table.maxn(tbl) == 0 then + return "{" .. table.concat(tmp, ",") .. "}" + else + return "[" .. table.concat(tmp, ",") .. "]" + end + end + assert(type(t) == "table") + return serialize(t) +end \ No newline at end of file diff --git a/src/xtquant/config/top10holder_new_1.ini b/src/xtquant/config/top10holder_new_1.ini new file mode 100644 index 0000000..544a384 --- /dev/null +++ b/src/xtquant/config/top10holder_new_1.ini @@ -0,0 +1,10 @@ +十大股东|十大流通股东|TOP10HOLDER|TOP10FLOWHOLDER +公告日期|declareDate|declareDate +截止日期|endDate|endDate +股东名称|name|name +股东类型|type|type +持股数量|quantity|quantity +变动原因|reason|reason +持股比例|ratio|ratio +股份性质|nature|nature +持股排名|rank|rank diff --git a/src/xtquant/config/tradeTime.txt b/src/xtquant/config/tradeTime.txt new file mode 100644 index 0000000..f783d01 --- /dev/null +++ b/src/xtquant/config/tradeTime.txt @@ -0,0 +1,370 @@ +// AG21:00--02:30 9:00--10:15 10:30-11:30 13:30--15:00 +// ZN21:00--01:00 9:00--11:30 13:30--15:00 +// SC21:00--02:30 9:00--10:15 10:30-11:30 13:30--15:00 + +// (AG),ƽ(AU) 21:00--02:30 +// п(ZN),ͭ(CU),Ǧ(PB),(AL),(NI),(SN),(SS),(AO) 21:00--01:00 +// Ƹ(RB),(HC),ʯ(BU,BUY) 21:00--23:00 +// Ȼ(RU),ȼ(FU),ֽ(SP) 21:00--23:00 + +// (P),(Y) 21:00--23:30 +// (M),(Y),̿(J),ƴһ(A,AX,AY) 21:00--23:00 +// ƴ󶹶(B),ú(JM),ʯ(I),ϩ(L),ϩ(V)21:00--23:00 +// ۱ϩ(PP),Ҷ(EG),(C),׵(CS) 21:00--23:00 +// ϩ(EB),Һʯ(PG),(RR) 21:00--23:00 + +// ֣ (SR,SRX,SRY),޻(CF),(RM),״(MA,ME),PTA(TA)21:00--23:00 +// ú(ZC),(OI),(FG),ɴ(CY) 21:00--23:00 +// (SA),(PF)ռ(SH)ױ(PX) 21:00--23:00 +// Դ ԭ(SC,SCW,SCX,SCY,SCZ) 21:00--02:30 +// ͭ(BC) 21:00--01:00 +// ȼ(LU),20Ž(NR) 21:00--23:00 + +// 1: ʱ 2: ҹ̿ʱ + + +1|SF|AG|555|1261-1440|1-150|541-615|631-690|811-900 +1|SF|AU|555|1261-1440|1-150|541-615|631-690|811-900 +1|SF|AUX|555|1261-1440|1-150|541-615|631-690|811-900 +1|SF|AUY|555|1261-1440|1-150|541-615|631-690|811-900 + +1|SF|ZN|465|1261-1440|1-60|541-615|631-690|811-900 +1|SF|CU|465|1261-1440|1-60|541-615|631-690|811-900 +1|SF|PB|465|1261-1440|1-60|541-615|631-690|811-900 +1|SF|AL|465|1261-1440|1-60|541-615|631-690|811-900 + +1|SF|SN|465|1261-1440|1-60|541-615|631-690|811-900 +1|SF|NI|465|1261-1440|1-60|541-615|631-690|811-900 +1|SF|SS|465|1261-1440|1-60|541-615|631-690|811-900 +1|SF|AO|465|1261-1440|1-60|541-615|631-690|811-900 + +1|SF|RB|345|1261-1380|541-615|631-690|811-900 +1|SF|HC|345|1261-1380|541-615|631-690|811-900 +1|SF|BU|345|1261-1380|541-615|631-690|811-900 +1|SF|BUY|345|1261-1380|541-615|631-690|811-900 +1|SF|RU|345|1261-1380|541-615|631-690|811-900 +1|SF|FU|345|1261-1380|541-615|631-690|811-900 +1|SF|SP|345|1261-1380|541-615|631-690|811-900 + +1|DF|J|345|1261-1380|541-615|631-690|811-900 +1|DF|P|345|1261-1380|541-615|631-690|811-900 + +1|DF|M|345|1261-1380|541-615|631-690|811-900 +1|DF|Y|345|1261-1380|541-615|631-690|811-900 +1|DF|A|345|1261-1380|541-615|631-690|811-900 +1|DF|AX|345|1261-1380|541-615|631-690|811-900 +1|DF|AY|345|1261-1380|541-615|631-690|811-900 +1|DF|B|345|1261-1380|541-615|631-690|811-900 +1|DF|JM|345|1261-1380|541-615|631-690|811-900 +1|DF|I|345|1261-1380|541-615|631-690|811-900 + +1|DF|L|345|1261-1380|541-615|631-690|811-900 +1|DF|V|345|1261-1380|541-615|631-690|811-900 +1|DF|PP|345|1261-1380|541-615|631-690|811-900 +1|DF|EG|345|1261-1380|541-615|631-690|811-900 +1|DF|C|345|1261-1380|541-615|631-690|811-900 +1|DF|CS|345|1261-1380|541-615|631-690|811-900 +1|DF|EB|345|1261-1380|541-615|631-690|811-900 +1|DF|PG|345|1261-1380|541-615|631-690|811-900 +1|DF|RR|345|1261-1380|541-615|631-690|811-900 + +1|ZF|SR|345|1261-1380|541-615|631-690|811-900 +1|ZF|SRX|345|1261-1380|541-615|631-690|811-900 +1|ZF|SRY|345|1261-1380|541-615|631-690|811-900 +1|ZF|CF|345|1261-1380|541-615|631-690|811-900 +1|ZF|RM|345|1261-1380|541-615|631-690|811-900 +1|ZF|MA|345|1261-1380|541-615|631-690|811-900 +1|ZF|ME|345|1261-1380|541-615|631-690|811-900 +1|ZF|TA|345|1261-1380|541-615|631-690|811-900 +1|ZF|ZC|345|1261-1380|541-615|631-690|811-900 +1|ZF|FG|345|1261-1380|541-615|631-690|811-900 +1|ZF|OI|345|1261-1380|541-615|631-690|811-900 +1|ZF|CY|345|1261-1380|541-615|631-690|811-900 +1|ZF|SA|345|1261-1380|541-615|631-690|811-900 +1|ZF|PF|345|1261-1380|541-615|631-690|811-900 +1|ZF|SH|345|1261-1380|541-615|631-690|811-900 +1|ZF|PX|345|1261-1380|541-615|631-690|811-900 + +1|YSWP|CN|976|540-955|1001-1440|1-120 +1|YSWP|ID|976|540-955|1001-1440|1-120 +1|YSWP|IN|976|540-955|1001-1440|1-120 +1|YSWP|SG|976|540-955|1001-1440|1-120 +1|YSWP|SPDCN|976|540-955|1001-1440|1-120 +1|YSWP|SPDID|976|540-955|1001-1440|1-120 +1|YSWP|SPDIN|976|540-955|1001-1440|1-120 +1|YSWP|SPDSG|976|540-955|1001-1440|1-120 + +1|INE|LU|345|1261-1380|541-615|631-690|811-900 +1|INE|NR|345|1261-1380|541-615|631-690|811-900 +1|INE|SC|555|1261-1440|1-150|541-615|631-690|811-900 +1|INE|SCW|555|1261-1440|1-150|541-615|631-690|811-900 +1|INE|SCX|555|1261-1440|1-150|541-615|631-690|811-900 +1|INE|SCY|555|1261-1440|1-150|541-615|631-690|811-900 +1|INE|SCZ|555|1261-1440|1-150|541-615|631-690|811-900 +1|INE|BC|465|1261-1440|1-60|541-615|631-690|811-900 + +2|SF|AG,AU,AUX,AUY|210000-235959|000000-023000 +2|SF|ZN,CU,PB,AL,SN,NI,SS,AO|210000-235959|000000-010000 +2|SF|RB,HC,BU,BUY,RU,FU,SP,BR|210000-230000 + +2|DF|A,AX,AY,B,M,Y,J,JM,I,L,V,PP,EG,C,CS,P,EB,PG,RR|210000-230000 + +2|ZF|SR,SRX,SRY,CF,RM,MA,ME,TA,ZC,FG,OI,CY,SA,PF,RI,SH,PX|210000-230000 + +2|YSWP|CN,ID,IN,SG,SPDCN,SPDID,SPDIN,SPDSG,CNINDEX|164000-235959|000000-020000 + +2|INE|LU,NR|210000-230000 +2|INE|SC,SCW,SCX,SCY,SCZ|210000-235959|000000-023000 +2|INE|BC|210000-235959|000000-010000 + +1|WP|NYMEX:NG|1381|360-1440|1-300 +1|WP|NYMEX:CL|1381|360-1440|1-300 +1|WP|NYMEX:BZ|1381|360-1440|1-300 +1|WP|NYMEX:QG|1381|360-1440|1-300 +1|WP|NYMEX:QM|1381|360-1440|1-300 +1|WP|NYMEX:HO|1381|360-1440|1-300 +1|WP|NYMEX:RB|1381|360-1440|1-300 +1|WP|NYMEX:MCL|1381|360-1440|1-300 +1|WP|NYMEX:PA|1381|360-1440|1-300 +1|WP|NYMEX:PL|1381|360-1440|1-300 +1|WP|CME:6L|1381|360-1440|1-300 +1|WP|CME:GE|1381|360-1440|1-300 +1|WP|CME:6A|1381|360-1440|1-300 +1|WP|CME:6B|1381|360-1440|1-300 +1|WP|CME:6C|1381|360-1440|1-300 +1|WP|CME:6E|1381|360-1440|1-300 +1|WP|CME:6J|1381|360-1440|1-300 +1|WP|CME:6S|1381|360-1440|1-300 +1|WP|CME:6Z|1381|360-1440|1-300 +1|WP|CME:SIR|1381|360-1440|1-300 +1|WP|CME:6M|1381|360-1440|1-300 +1|WP|CME:NKD|1381|360-1440|1-300 +1|WP|CME:ES|1381|360-1440|1-300 +1|WP|CME:MIR|1381|360-1440|1-300 +1|WP|CME:BTC|1381|360-1440|1-300 +1|WP|CME:ETH|1381|360-1440|1-300 +1|WP|CME:MBT|1381|360-1440|1-300 +1|WP|CME:MET|1381|360-1440|1-300 +1|WP|CME:NQ|1381|360-1440|1-300 +1|WP|CME:RP|1381|360-1440|1-300 +1|WP|CME:6N|1381|360-1440|1-300 +1|WP|CME:PJY|1381|360-1440|1-300 +1|WP|CME:RY|1381|360-1440|1-300 +1|WP|CME:EMD|1381|360-1440|1-300 +1|WP|CME:M2K|1381|360-1440|1-300 +1|WP|CME:MES|1381|360-1440|1-300 +1|WP|CME:MNQ|1381|360-1440|1-300 +1|WP|CME:RTY|1381|360-1440|1-300 +1|WP|CME:M6A|1381|360-1440|1-300 +1|WP|CME:M6B|1381|360-1440|1-300 +1|WP|CME:M6E|1381|360-1440|1-300 +1|WP|CME:M6J|1381|360-1440|1-300 +1|WP|CME:MCD|1381|360-1440|1-300 +1|WP|CME:MSF|1381|360-1440|1-300 +1|WP|CME:RU|1381|360-1440|1-300 +1|WP|CME:HE|276|1290-1440|1-125 +1|WP|CME:GF|276|1290-1440|1-125 +1|WP|CME:LE|276|1290-1440|1-125 +1|WP|HKFE:MCS|1066|1155-1440|1-180|511-1110 +1|WP|HKFE:CUS|1066|1155-1440|1-180|511-1110 +1|WP|HKFE:CEU|1066|1155-1440|1-180|511-1110 +1|WP|HKFE:CJP|1066|1155-1440|1-180|511-1110 +1|WP|HKFE:CAU|1066|1155-1440|1-180|511-1110 +1|WP|HKFE:UCN|1066|1155-1440|1-180|511-1110 +1|WP|HKFE:HHI|961|1035-1440|1-180|556-720|781-990 +1|WP|HKFE:MCH|961|1035-1440|1-180|556-720|781-990 +1|WP|HKFE:HSI|961|1035-1440|1-180|556-720|781-990 +1|WP|HKFE:MHI|961|1035-1440|1-180|556-720|781-990 +1|WP|HKFE:HTI|961|1035-1440|1-180|556-720|781-990 +1|WP|HKFE:CHI|1036|1035-1440|1-180|541-990 +1|WP|HKFE:MCA|1036|1035-1440|1-180|541-990 +1|WP|HKFE:MPS|1036|1035-1440|1-180|541-990 +1|WP|HKFE:MVI|1036|1035-1440|1-180|541-990 +1|WP|HKFE:MEI|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MIA|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MMA|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MDI|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MTD|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:CHN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:EMN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MPN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MVN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MSN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:EAN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MDN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MIN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MJU|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MMN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MTN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MXJ|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MAN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MCN|1036|1155-1440|1-180|541-1110 +1|WP|HKFE:MTW|1051|870-1440|1-180|526-825 +1|WP|HKFE:MWN|1051|1155-1440|1-180|526-1110 +1|WP|HKFE:GDU|1066|1035-1440|1-180|511-990 +1|WP|HKFE:FEM|1036|1035-1440|1-180|541-990 +1|WP|HKFE:LUA|1036|1035-1440|1-180|541-990 +1|WP|HKFE:LUC|1036|1035-1440|1-180|541-990 +1|WP|HKFE:LUN|1036|1035-1440|1-180|541-990 +1|WP|HKFE:LUP|1036|1035-1440|1-180|541-990 +1|WP|HKFE:LUS|1036|1035-1440|1-180|541-990 +1|WP|HKFE:LUZ|1036|1035-1440|1-180|541-990 +1|WP|COMEX:ALI|1381|360-1440|1-300 +1|WP|COMEX:HG|1381|360-1440|1-300 +1|WP|COMEX:MHG|1381|360-1440|1-300 +1|WP|COMEX:QC|1381|360-1440|1-300 +1|WP|COMEX:GC|1381|360-1440|1-300 +1|WP|COMEX:SI|1381|360-1440|1-300 +1|WP|COMEX:MGC|1381|360-1440|1-300 +1|WP|COMEX:QO|1381|360-1440|1-300 +1|WP|COMEX:QI|1381|360-1440|1-300 +1|WP|COMEX:SGU|1381|360-1440|1-300 +1|WP|COMEX:SIL|1381|360-1440|1-300 +1|WP|ICE.IFEU:T|1321|480-1440|1-360 +1|WP|ICE.IFEU:B|1321|480-1440|1-360 +1|WP|ICE.IFEU:G|1321|480-1440|1-360 +1|WP|CBOT:ZL|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:ZM|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:XK|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:ZS|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:XC|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:ZC|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:KE|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:XW|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:ZW|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:ZO|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:ZR|1056|481-1245|1290-1440|1-140 +1|WP|CBOT:MYM|1381|360-1440|1-300 +1|WP|CBOT:YM|1381|360-1440|1-300 +1|WP|CBOT:TN|1381|360-1440|1-300 +1|WP|CBOT:UB|1381|360-1440|1-300 +1|WP|CBOT:ZB|1381|360-1440|1-300 +1|WP|CBOT:ZF|1381|360-1440|1-300 +1|WP|CBOT:ZN|1381|360-1440|1-300 +1|WP|CBOT:ZT|1381|360-1440|1-300 +1|WP|CBOT:10Y|1381|360-1440|1-300 +1|WP|CBOT:2YY|1381|360-1440|1-300 +1|WP|CBOT:30Y|1381|360-1440|1-300 +1|WP|CBOT:5YY|1381|360-1440|1-300 +1|WP|SGX:FEF|1296|1215-1440|1-315|446-1200 +1|WP|SGX:NK|1276|895-1440|1-315|451-865 +1|WP|SGX:UC|1291|1095-1440|1-315|446-1075 +1|WP|SGX:IU|1291|1190-1440|1-315|446-1170 +1|WP|SGX:KU|1291|1190-1440|1-315|446-1170 +1|WP|SGX:TF|605|476-1080 +1|WP|SGX:US|1291|1190-1440|1-315|446-1170 +1|WP|SGX:FCH|1186|1020-1440|1-315|541-990 +1|WP|SGX:IN|1186|1120-1440|1-315|541-1090 +1|WP|SGX:CN|1186|1020-1440|1-315|541-990 +1|WP|SGX:SGP|1246|1070-1440|1-345|511-1040 +1|WP|ICE.IFUS:MME|1321|480-1440|1-360 +1|WP|ICE.IFUS:OJ|361|1200-1440|1-120 +1|WP|ICE.IFUS:CT|1041|540-1440|1-140 +1|WP|ICE.IFUS:KC|556|975-1440|1-90 +1|WP|ICE.IFUS:MFS|1321|480-1440|1-360 +1|WP|ICE.IFUS:SB|571|930-1440|1-60 +1|WP|ICE.IFUS:RS|1101|480-1440|1-140 +1|WP|ICE.IFUS:SF|241|1260-1440|1-60 +1|WP|ICE.IFUS:CC|526|1005-1440|1-90 +1|WP|ICE.IFUS:DX|1261|480-1440|1-300 +1|WP|ICE.IFUS:FNG|1321|480-1440|1-360 +1|WP|ICE.IFUS:QA|1261|480-1440|1-300 +1|WP|EUREX:DAX|1186|495-1440|1-240 +1|WP|EUREX:DXM|1186|495-1440|1-240 +1|WP|EUREX:ESX|1186|495-1440|1-240 +1|WP|EUREX:MHK|1186|495-1440|1-240 +1|WP|EUREX:MIN|1186|495-1440|1-240 +1|WP|EUREX:MTH|1186|495-1440|1-240 +1|WP|EUREX:SMI|1186|495-1440|1-240 +1|WP|EUREX:VS|1186|495-1440|1-240 +1|WP|EUREX:BON|1186|495-1440|1-240 +1|WP|EUREX:BTP|1186|495-1440|1-240 +1|WP|EUREX:CRQ|1186|495-1440|1-240 +1|WP|EUREX:ESB|1186|495-1440|1-240 +1|WP|EUREX:GBL|1186|495-1440|1-240 +1|WP|EUREX:GBM|1186|495-1440|1-240 +1|WP|EUREX:GBS|1186|495-1440|1-240 +1|WP|EUREX:GBX|1186|495-1440|1-240 +1|WP|EUREX:OAT|1186|495-1440|1-240 +1|WP|EUREX:STX|1186|495-1440|1-240 +1|WP|EUREX:TDX|1186|495-1440|1-240 +1|WP|ICE.IFLL:I|1201|480-1440|1-240 +1|WP|ICE.IFLL:Z|1201|480-1440|1-240 +1|WP|ICE.IFLL:R|601|900-1440|1-60 +1|WP|ICE.IFLX:C|445|991-1435 +1|WP|ICE.IFLX:RC|511|960-1440|1-30 +1|WP|ICE.IFLX:W|556|945-1440|1-60 +1|WP|BAN:BTC|1439|1-1439 +1|WP|BAN:ETH|1439|1-1439 +2|WP|NG,CL,BZ,QG,QM,HO,RB,MCL,PA,PL|060000-235959|000000-050000 +2|WP|6L,GE,6A,6B,6C,6E,6J,6S,6Z,SIR,6M,NKD,ES,MIR,BTC,ETH,MBT,MET,NQ,RP,6N,PJY,RY,EMD,M2K,MES,MNQ,RTY,M6A,M6B,M6E,M6J,MCD,MSF,RU|060000-235959|000000-050000 +2|WP|HE,GF,LE|213000-235959|000000-020500 +2|WP|MCS,CUS,CEU,CJP,CAU,UCN,MEI,MIA,MMA,MDI,MTD,CHN,EMN,MPN,MVN,MSN,EAN,MDN,MIN,MJU,MMN,MTN,MXJ,MAN,MCN,MWN|191500-235959|000000-030000 +2|WP|HHI,MCH,HSI,MHI,HTI,CHI,MCA,MPS,MVI,GDU,FEM,LUA,LUC,LUN,LUP,LUS,LUZ|171500-235959|000000-030000 +2|WP|MTW|143000-235959|000000-030000 +2|WP|ALI,HG,MHG,QC,GC,SI,MGC,QO,QI,SGU,SIL|060000-235959|000000-050000 +2|WP|T,B,G|080000-235959|000000-060000 +2|WP|ZL,ZM,XK,ZS,XC,ZC,KE,XW,ZW,ZO,ZR|080000-235959|000000-022000 +2|WP|MYM,YM,TN,UB,ZB,ZF,ZN,ZT,10Y,2YY,30Y,5YY|060000-235959|000000-050000 +2|WP|FEF|201500-235959|000000-051500 +2|WP|NK|145500-235959|000000-051500 +2|WP|UC|181500-235959|000000-051500 +2|WP|IU,KU,US|195000-235959|000000-051500 +2|WP|FCH,CN|170000-235959|000000-051500 +2|WP|IN|184000-235959|000000-051500 +2|WP|SGP|175000-235959|000000-054500 +2|WP|MME,MFS,FNG|080000-235959|000000-060000 +2|WP|OJ|200000-235959|000000-020000 +2|WP|CT|090000-235959|000000-022000 +2|WP|KC|161500-235959|000000-013000 +2|WP|SB|153000-235959|000000-010000 +2|WP|RS|080000-235959|000000-022000 +2|WP|SF|210000-235959|000000-010000 +2|WP|CC|164500-235959|000000-013000 +2|WP|DX,QA|080000-235959|000000-050000 +2|WP|DAX,DXM,ESX,MHK,MIN,MTH,SMI,VS,BON,BTP,CRQ,ESB,GBL,GBM,GBS,GBX,OAT,STX,TDX|081500-235959|000000-040000 +2|WP|I,Z|080000-235959|000000-040000 +2|WP|R|150000-235959|000000-010000 +2|WP|RC|160000-235959|000000-003000 +2|WP|W|154500-235959|000000-010000 + +1|BKZS|290000|555|1261-1440|1-150|541-615|631-690|811-900 +1|BKZS|290006|555|1261-1440|1-150|541-615|631-690|811-900 +1|BKZS|290020|555|1261-1440|1-150|541-615|631-690|811-900 +1|BKZS|290002|465|1261-1440|1-60|541-615|631-690|811-900 +1|BKZS|290001|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290003|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290004|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290005|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290007|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290008|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290009|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290010|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290012|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290013|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290014|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290015|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290016|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290017|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290018|345|1261-1380|541-615|631-690|811-900 +1|BKZS|290019|345|1261-1380|541-615|631-690|811-900 +2|BKZS|290000|210000-235959|000000-023000 +2|BKZS|290006|210000-235959|000000-023000 +2|BKZS|290020|210000-235959|000000-023000 +2|BKZS|290001|210000-230000 +2|BKZS|290003|210000-230000 +2|BKZS|290004|210000-230000 +2|BKZS|290005|210000-230000 +2|BKZS|290007|210000-230000 +2|BKZS|290008|210000-230000 +2|BKZS|290009|210000-230000 +2|BKZS|290010|210000-230000 +2|BKZS|290012|210000-230000 +2|BKZS|290013|210000-230000 +2|BKZS|290014|210000-230000 +2|BKZS|290015|210000-230000 +2|BKZS|290016|210000-230000 +2|BKZS|290017|210000-230000 +2|BKZS|290018|210000-230000 +2|BKZS|290019|210000-230000 +2|BKZS|290002|210000-235959|000000-010000 diff --git a/src/xtquant/config/user/root2/lua/ConstFunc.lua b/src/xtquant/config/user/root2/lua/ConstFunc.lua new file mode 100644 index 0000000..e69de29 diff --git a/src/xtquant/config/user/root2/lua/FunIndex.lua b/src/xtquant/config/user/root2/lua/FunIndex.lua new file mode 100644 index 0000000..e6661d9 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunIndex.lua @@ -0,0 +1,117 @@ +------------------------------------------------------------ +-- 指标函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author zhangjin +-- @since 2012-10-8 +----------------------------------------------------------- +function c_sar() + local cache = FormulaCacheContainer() + function sar(N, S, M, timetag, __formula) + return sar_c(cache, N, S, M, timetag, __formula) + end + return sar +end + +function c_sarturn() + local cache = FormulaCacheContainer() + function sarturn(N, S, M, timetag, __formula) + return sarturn_c(cache, N, S, M, timetag, __formula) + end + return sarturn +end + +function callstock2() + local container = FormulaCacheContainer() + function funcimpl(stockcode, metaID, fieldID, period, offset, timetag, formula) + return callstock2_c(container, stockcode, metaID, fieldID, period, offset, timetag, formula) + end + return funcimpl +end + +function getstocklist() + local container = FormulaCacheContainer() + function funcimpl(sector, timetag, formula) + return getstocklist_c(container, sector, timetag, formula) + end + return funcimpl +end + +function getinitgroup() + local container = FormulaCacheContainer() + function funcimpl(timetag, formula) + return getinitgroup_c(container, timetag, formula) + end + return funcimpl +end + +function c_getspotprodgroup() + local container = FormulaCacheContainer() + function funcimpl(productcode, timetag, formula) + return getspotprodgroup_c(container, productcode, timetag, formula) + end + return funcimpl +end + +function c_getspotprodinst() + local container = FormulaCacheContainer() + function funcimpl(productcode, stockindex, timetag, formula) + return getspotprodinst_c(container, productcode, stockindex, timetag, formula) + end + return funcimpl +end + +function c_getwarehousereceipt() + local container = FormulaCacheContainer() + function funcimpl(productcode, warehousecode, timetag, formula) + return getwarehousereceipt_c(container, productcode, warehousecode, timetag, formula) + end + return funcimpl +end + +function c_getwarehousename() + local container = FormulaCacheContainer() + function funcimpl(productcode, warehouseindex, timetag, formula) + return getwarehousename_c(container, productcode, warehouseindex, timetag, formula) + end + return funcimpl +end + +function c_getfutureseats() + local container = FormulaCacheContainer() + function funcimpl(stockcode, field, rank, timetag, formula) + return getfutureseats_c(container, stockcode, field, rank, timetag, formula) + end + return funcimpl +end + +function c_getfutureseatsname() + local container = FormulaCacheContainer() + function funcimpl(stockcode, field, rank, timetag, formula) + return getfutureseatsname_c(container, stockcode, field, rank, timetag, formula) + end + return funcimpl +end + +function c_findfutureseats() + local container = FormulaCacheContainer() + function funcimpl(stockcode, field, member, timetag, formula) + return findfutureseats_c(container, stockcode, field, member, timetag, formula) + end + return funcimpl +end + +function c_stocktype() + local container = FormulaCacheContainer() + function funcimpl(stockcode, timetag, formula) + return stocktype_c(container, stockcode, timetag, formula) + end + return funcimpl +end + +function c_convindex() + local container = FormulaCacheContainer() + function funcimpl(stockcode, type, timetag, formula) + return convindex_c(container, stockcode, type, timetag, formula) + end + return funcimpl +end diff --git a/src/xtquant/config/user/root2/lua/FunLogic.lua b/src/xtquant/config/user/root2/lua/FunLogic.lua new file mode 100644 index 0000000..e42234a --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunLogic.lua @@ -0,0 +1,238 @@ +------------------------------------------------------------ +-- 逻辑函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author zhangjin +-- @since 2012-9-18 +----------------------------------------------------------- +function c_any() + local count = 0 + local history = FormulaDataCacheBool(1) + local ret + function any(condition, N, timetag, type) + count, ret = all_c(not(condition), N, count, timetag, type, history) + return not(ret) + end + return any +end + +function c_exist() + return c_any() +end + +function c_all() + local count = 0 + local history = FormulaDataCacheBool(1) + local ret + function all(condition, N, timetag, type) + count, ret = all_c(condition, N, count, timetag, type, history) + return ret + end + return all +end + +--条件跟随函数 +function c_valuewhen() + local lastValue = 0 / 0 + local ret + local first = true + local lastTimetag = 0 + function valuewhen(condition, value, timetag) + if condition then + ret = value + else + ret = lastValue + end + if (lastTimetag ~= timetag) then + lastValue = ret + lastTimetag = timetag + end + return ret + end + return valuewhen +end + +function c_cross() + local lastV1 = 0 + local lastV2 = -1 + local lastTime = -1 + local t1 = 0 + local t2 = -1 + local count = 0 + function cross(v1, v2, timetag) + if timetag ~= lastTime then + lastTime = timetag + count = 0 + t1 = lastV1 + t2 = lastV2 + end + count = count + 1 + if count > 1 then + lastV1 = t1 + lastV2 = t2 + end + local ret = cross_c(v1, v2, lastV1, lastV2) + lastV1 = v1 + lastV2 = v2 + return ret + end + return cross +end + +function iff(condition, v1, v2) + --print(type(v1),type(v2)) + if condition then + return v1; + else + return v2; + end +end + +function ifelse(condition, v1, v2) + if condition then + return v1; + else + return v2; + end +end + +function ifn(X, A, B) + if X then + return B + else + return A + end +end + +function valid(value) + return isValid(value) +end + +--todo: 当A, B, C中出现无效值时,金字塔返回无效值,该函数返回false +--function between(A, B, C) + --if (A - B >= 1e-6 and A - C <= 1e-6) or (A - B <= 1e-6 and A - C >= 1e-6) then + --return true + --else + --return false + --end +--end + +--todo 这三个函数是隐藏的行情函数 +--function isdown(timetag, __formula) + --if close(timetag, __formula) - open(timetag, __formula) < 1e-6 then + --return true + --else + --return false + --end +--end +-- +--function isequal(timetag, __formula) + ----if close(timetag, __formula) == open(timetag, __formula) then + --if math.fabs(close(timetag, __formula) - open(timetag, __formula)) < 1e-6 then + --return true + --else + --return false + --end +--end +-- +--function isup(timetag, __formula) + --if close(timetag, __formula) - open(timetag, __formula) > 1e-6 then + --return true + --else + --return false + --end +--end + +function islastbar(timetag, __formula) + return timetag == __formula:getLastBar() +end + +function c_last() + local history = FormulaDataCacheBool(1) + local count = 0 + local ret + function last(X, A, B, timetag) + count, ret = last_c(X, A, B, timetag, count, history) + return ret + end + return last +end +--[[ +function c_longcross(A, B, N) + local historyA = FormulaDataCacheDouble(0) + local historyB = FormulaDataCacheDouble(0) + local lessCount = 0 + function longcross(A, B, N, type) + lessCount, ret = longcross_c(A, B, N, type, historyA, historyB, lessCount) + return ret + end + return longcross +end +]]-- + +function c_longcross(A, B, N) --jch + local lessCount = 0 + local tmplessCount = 0 + local lastTimetag = -1 + function longcross(A, B, N, timetag) + local ret = false + local condition = A < B + if lastTimetag ~= timetag then + tmplessCount = lessCount + lastTimetag = timetag + end + if condition then + lessCount = tmplessCount + 1 + else + if lessCount >= N then + ret = true + end + lessCount = 0 + end + return ret + end + return longcross +end + +function range(A, B, C) + if A - B > 1e-6 and A - C< 1e-6 then + return true + else + return false + end +end + +function c_orderdirection() + local cache = LastValueCache() + function orderdirection(timetag,formula) + return orderdirection_c(timetag, formula, cache) + end + return orderdirection +end + +function c_isbuyorder() + local cache = LastValueCache() + function orderdirection(timetag,formula) + local val = orderdirection_c(timetag, formula, cache) + if val == 1 then + return 1 + else + return 0 + end + return 0 + end + return orderdirection +end + +function c_issellorder() + local cache = LastValueCache() + function issellorder(timetag,formula) + local val = orderdirection_c(timetag, formula, cache) + if val == -1 then + return 1 + else + return 0 + end + return 0 + end + return issellorder +end \ No newline at end of file diff --git a/src/xtquant/config/user/root2/lua/FunMath.lua b/src/xtquant/config/user/root2/lua/FunMath.lua new file mode 100644 index 0000000..548d952 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunMath.lua @@ -0,0 +1,24 @@ +------------------------------------------------------------ +-- 数学函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author jiangchanghao +-- @since 2012-9-18 +----------------------------------------------------------- + + +function sgn(val) + if (type(val) == "boolean") + then if (val) + then return 1 + else return 0 + end + else if (val > 0) + then return 1 + else if (val == 0) + then return 0 + else return -1 + end + end + end + return -1 +end \ No newline at end of file diff --git a/src/xtquant/config/user/root2/lua/FunOther.lua b/src/xtquant/config/user/root2/lua/FunOther.lua new file mode 100644 index 0000000..25a7552 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunOther.lua @@ -0,0 +1,831 @@ +------------------------------------------------------------ +-- 指标函数--与通达信相关 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author +-- @since 2017-3-1 +----------------------------------------------------------- +function c_const() + local ret + function const(X) + if not(X) then + ret = 0 + else + ret = X + end + return ret; + end + return const +end + +function c_inblock() + local container = FormulaCacheContainer() + function inblock(sector, timetag, __formula) + return inblock_c(sector, container, timetag, __formula) + end + return inblock +end + +function c_inblock2() + local container = FormulaCacheContainer() + function inblock(sector, stockcode, timetag, __formula) + return inblock2_c(sector, stockcode, container, timetag, __formula) + end + return inblock +end + +function c_sellvol() + function sellvol(timetag, __formula) + return buysellvol_c(2, timetag, __formula) + end + return sellvol +end + +function c_buyvol() + function buyvol(timetag, __formula) + return buysellvol_c(1, timetag, __formula) + end + return buyvol +end + +function c_upnday() + local history = FormulaDataCacheDouble(0,0) + local his=FormulaDataCacheDouble(0,0) + local turn=1 + function upnday(X, M, timetag, style) + turn =1 + for i=0,M-1,1 do + if back(X,i, timetag,history,style) < back(X,i+1, timetag,his,style) then + turn = 0 + break + end + end + return turn + end + return upnday +end + +function c_downnday() + local history = FormulaDataCacheDouble(0, 0) + local his=FormulaDataCacheDouble(0, 0) + function downnday(X, M, timetag, style) + turn =1 + for i=0,M-1,1 do + if back(X,i, timetag,history,style) > back(X,i+1, timetag,his,style) then + turn = 0 + break + end + end + return turn + end + return downnday +end + +function c_nday() + local history = FormulaDataCacheDouble(0,0) + local turn=1 + function nday(X, M, timetag, style) + turn =1 + for i=0,M-1,1 do + if back(X,i, timetag,history,style)==0 then + turn = 0 + break + end + end + return turn + end + return nday +end + +function c_turn() + local cache = TurnDataCache(); + function turn(value, N, timetag, formula) + return turn_c(value,N,timetag, formula, cache) + end + return turn +end + +function c_transcationstatic() + local cache = TransactionCache(); + function transcationstatic(stockcode, type, timetag, formula) + return transcationstatic_c(stockcode, type, timetag, formula, cache) + end + return transcationstatic +end + +function c_transcationstaticl1() + local cache = TransactionCache(); + function transcationstaticl1(stockcode, type, timetag, formula) + return transcationstaticl1_c(stockcode, type, timetag, formula, cache) + end + return transcationstaticl1 +end + +function c_get_cb_convert_price() + local cache = CBConvertPriceCache(); + function getCbConvertPrice(bondCode,timetag, formula) + return get_cb_convert_price_c(bondCode,timetag, formula, cache) + end + return getCbConvertPrice +end + + +function c_external_data() + local cache = ExternalCache(); + function external_data(data_name,field,period,N,timetag, formula) + return external_data_c(data_name,field, period,N,timetag, formula, cache) + end + return external_data +end + +local __pydatacache = {} +function c_callpython() + local first = true + function callpython(script, period, stockcode, timetag, formula) + local _dckey = string.sub(script, 1, string.find(script, '%.'))..period..'.'..stockcode + local cache = __pydatacache[_dckey] + if not cache then + __pydatacache[_dckey] = DataCache() + cache = __pydatacache[_dckey] + else + first = false + end + local ret = callpython_c(script, period , stockcode, timetag, formula, first, cache) + return ret + end + return callpython +end + +function c_getfindata() + local cache = FinDataCache() + function getfindata(value1, value2, session,timetag, formula) + return getfindata_c(value1,value2,session,timetag, formula, cache) + end + return getfindata +end + +function c_getfindatabyperiod() + local container = FormulaCacheContainer() + function getfindatabyperiod(tablename, colname, year, period, announce, timetag, formula) + return getfindatabyperiod_c(container, tablename, colname, year, period, announce, timetag, formula) + end + return getfindatabyperiod +end + +function c_getfindatayear() + local cache = FormulaDataCacheDouble(0,0) + function getfindatayear(value1, value2, timetag, formula) + return getfindatayear_c(value1,value2,timetag, formula, cache) + end + return getfindatayear +end + +function c_get_longhubang() + local cache = LonghubangDataCache() + --value1:filed value2:direction value3: rank + function getlonghubang(value1, value2, value3, timetag,formula) + return get_longhubang_c(value1, value2, value3, timetag, formula, cache) + end + return getlonghubang +end + +function c_get_holderNumber() + local cache = HolderNumberCache() + --value:filed + function getholdernum(value,timetag,formula) + return get_holder_num_c(value,timetag, formula, cache) + end + return getholdernum +end + + +function c_get_top10shareholder() + local cache = Top10shareholderCache() + --value1: type ,value2 : filed value3 rank + function gettop10shareholder(value1, value2, value3, timetag,formula) + return get_top10shareholder_c(value1, value2, value3, timetag, formula, cache) + end + return gettop10shareholder +end + +function c_get_top10shareholderbyperiod() + local container = FormulaCacheContainer() + function gettop10shareholderbyperiod(tablename, colname, rank, year, period, announce, type, timetag,formula) + return get_top10shareholderbyperiod_c(container, tablename, colname, rank, year, period, announce, type, timetag, formula) + end + return gettop10shareholderbyperiod +end + +function c_gethismaincontract() + local cache = GetHisMainContractCache() + function gethismaincontract(value1, timetag, formula) + return get_his_main_contract_c(value1, timetag, formula, cache) + end + return gethismaincontract +end + + +function c_getrealcontract() + local cache = GetHisMainContractCache() + function getrealcontract(value1, timetag, formula) + return get_real_contract_c(value1, timetag, formula, cache) + end + return getrealcontract +end + +function c_maincontractchange() + local cache = GetHisMainContractCache() + function maincontractchange(value1,timetag,formula) + return main_contract_change_c(value1,timetag,formula,cache) + end + return maincontractchange +end + +function c_tickvoldistribution() + local volnum = 0 + local N = 0 + local cache = TickVolDataCache() + local ret = 0 + local stayTimetag = 0 + local ratio = 0 + local isFirst = true + function tickvoldistribution(seconds, ratio, direction, timetag, __formula, style) + if timetag==0 then + midret = findoptimumvol(0, ratio, seconds, stayTimetag,__formula, cache, isFirst) + isFirst = false + end + + if ratio<=0 or ratio >1 then + return -1 + end + if (direction==2 and close(timetag, __formula)==bidprice(timetag, __formula)) then + volnum = vol(timetag,__formula) + else + if(direction==1 and close(timetag, __formula)==askprice(timetag, __formula)) then + volnum = vol(timetag,__formula) + else + if(direction == 0) then + volnum = vol(timetag,__formula) + else + volnum = 0 + end + end + end + + --用C++找最优解,提高速度 + if volnum > 0 then + midret = findoptimumvol(volnum, ratio, seconds, stayTimetag,__formula, cache, isFirst) + end + + + if midret ~= -1 then + ret = midret + end + + if volnum > 0 then + stayTimetag = stayTimetag + 1 + end + return ret + end + return tickvoldistribution +end + +function c_finance() + local cache = FinDataCache() + function finance(value,timetag, formula) + return finance_c(value,timetag,formula,cache) + end + return finance +end + +function c_buysellvols() + local cache = QuoterDataCache() + function buysellvols(value,timetag,formula) + return buysellvols_c(value, timetag, formula, cache) + end + return buysellvols +end + +function c_iopv() + local cache = QuoterDataCache() + function iopv(timetag,formula) + return iopv_c(cache, timetag, formula) + end + return iopv +end + +function c_getopenamount() + local cache = QuoterDataCache() + function getopenamount(formula) + return getopenamount_c(cache,formula) + end + return getopenamount +end + +function c_getopenvol() + local cache = QuoterDataCache() + function getopenvol(formula) + return getopenvol_c(cache,formula) + end + return getopenvol +end + +function c_blkname() + local container = FormulaCacheContainer() + function blkname(formula) + return blkname_c(container, "申万一级行业板块", formula) + end + return blkname +end + +function c_findblock() + local container = FormulaCacheContainer() + function findblock(folder, formula) + return blkname_c(container, folder, formula) + end + return findblock +end + +function c_findindex() + local indexTable = {} + function findindex(sector, stockcode, timetag, formula) + key = sector..stockcode + for k, v in pairs(indexTable) do + if k == key then + return v + end + end + + index = findindex_c(sector, stockcode, timetag, formula) + indexTable[key] = index + return index + end + return findindex +end + +function c_switchindex() + local container = FormulaCacheContainer() + function funcimpl(stockcode, suffix, timetag, formula) + return switchindex_c(stockcode, suffix, container, timetag, formula) + end + return funcimpl +end + +function c_extdatablockrank() + local cache = ExtFormulaCache() + function extdatablockrank(name, stockcode, sector, timetag, formula) + return extdatablockrank_c(name, stockcode, sector, cache, timetag, formula) + end + return extdatablockrank +end + +function c_extdatablocksum() + local cache = ExtFormulaCache() + function extdatablocksum(name, sector, timetag, formula) + return extdatablocksum_c(name, sector, cache, timetag, formula) + end + return extdatablocksum +end + +function c_extdatablocksumrange() + local cache = ExtFormulaCache() + function funcimpl(name, sector, range, timetag, formula) + return extdatablocksumrange_c(name, sector, range, cache, timetag, formula) + end + return funcimpl +end + +function c_extblockranktocode() + local cache = ExtFormulaCache() + function funcimpl(name, sector, rate, timetag, formula) + return extblockranktocode_c(name, sector, rate, cache, timetag, formula) + end + return funcimpl +end + +function c_blocksize() + local container = FormulaCacheContainer() + function blocksize(sector, ...) + return blocksize_c(container, sector, ...) + end + return blocksize +end + +function c_stockbyblockrank() + local container = FormulaCacheContainer() + function stockbyblockrank(sector, fieldID, rate, timetag, formula) + return stockbyblockrank_c(sector, fieldID, rate, container, timetag, formula) + end + return stockbyblockrank +end + +function c_blocksum() + local container = FormulaCacheContainer() + function blocksum(sector, fieldID, timetag, formula) + return blocksum_c(sector, fieldID, container, timetag, formula) + end + return blocksum +end + +function c_blockrank() + local container = FormulaCacheContainer() + function wrapper(sector, stockcode, fieldID, timetag, formula) + return blockrank_c(sector, stockcode, fieldID, container, timetag, formula) + end + return wrapper +end + +function c_paramcombcalc() + local container = FormulaCacheContainer() + function paramcombcalc(...) + local a = -1 + local b = -1 + local c = bvector() + for k,v in ipairs({...}) do + if k == 1 then + a = v + elseif k == 2 then + b = v + else + c:push_back(v) + end + end + return paramcombcalc_c(a, b, c, container) + end + return paramcombcalc +end + +function c_getoptinfo() + local container = FormulaCacheContainer() + function wrapper(optcode, timetag, formula) + return getoptinfo_c(container, optcode, timetag, formula) + end + return wrapper +end + +function c_getoptcodebyundl() + local container = FormulaCacheContainer() + function wrapper(undlCode, index, timetag, formula) + return getoptcodebyundl_c(container, undlCode, index, timetag, formula) + end + return wrapper +end + +function c_getoptcode() + local container = FormulaCacheContainer() + function wrapper(optcode, side, price, contractType, timetag, formula) + return getoptcode_c(container, optcode, side, price, contractType, timetag, formula) + end + return wrapper +end + +function c_getoptundlcode() + local container = FormulaCacheContainer() + function wrapper(optcode, timetag, formula) + return getoptundlcode_c(container, optcode, timetag, formula) + end + return wrapper +end + +function c_getoptcodebyno() + local container = FormulaCacheContainer() + function wrapper(undlCode, side, contractType, no, day, contractType1, mode, period, timetag, formula) + local param = ivector() + param:push_back(contractType) + param:push_back(no) + param:push_back(day) + param:push_back(contractType1) + param:push_back(mode) + param:push_back(period) + param:push_back(1) + return getoptcodebyno_c(container, undlCode, side, param, timetag, formula) + end + return wrapper +end + +function c_getoptcodebyno2() + local container = FormulaCacheContainer() + function wrapper(undlCode, side, contractType, no, day, contractType1, mode, period, timetag, formula) + local param = ivector() + param:push_back(contractType) + param:push_back(no) + param:push_back(day) + param:push_back(contractType1) + param:push_back(mode) + param:push_back(period) + param:push_back(0) + return getoptcodebyno_c(container, undlCode, side, param, timetag, formula) + end + return wrapper +end + +function c_getexerciseinterval() + local container = FormulaCacheContainer() + function wrapper(undlCode, contractType, timetag, formula) + return getexerciseinterval_c(container, undlCode, contractType, timetag, formula) + end + return wrapper +end + +function c_tdate() + local container = FormulaCacheContainer() + function wrapper(timetag, formula) + return tdate_c(container, timetag, formula) + end + return wrapper +end + +function c_tweekday() + local container = FormulaCacheContainer() + function wrapper(timetag, formula) + return tweekday_c(container, timetag, formula) + end + return wrapper +end + +function c_timerat() + local container = FormulaCacheContainer() + function wrapper(dateNum, timeNum, timetag, formula) + return timerat_c(container, dateNum, timeNum, timetag, formula) + end + return wrapper +end + +function c_timerafter() + local container = FormulaCacheContainer() + function wrapper(hh, mm, ss, timetag, formula) + return timerafter_c(container, hh, mm, ss, timetag, formula) + end + return wrapper +end + +function c_deliveryinterval() + local container = FormulaCacheContainer() + function wrapper(timetag, formula) + return deliveryinterval_c(container, timetag, formula) + end + return wrapper +end + +function c_deliveryinterval2() + local container = FormulaCacheContainer() + function wrapper(stock, timetag, formula) + return deliveryinterval2_c(container, stock, timetag, formula) + end + return wrapper +end + +function c_deliveryinterval3() + local container = FormulaCacheContainer() + function wrapper(timetag, formula) + return deliveryinterval3_c(container, timetag, formula) + end + return wrapper +end + +function c_getcbconversionvalue() + local container = FormulaCacheContainer() + function wrapper(code, timetag, formula) + return getcbconversionvalue_c(container, code, timetag, formula) + end + return wrapper +end + +function c_getcbconversionpremium() + local container = FormulaCacheContainer() + function wrapper(code, timetag, formula) + return getcbconversionpremium_c(container, code, timetag, formula) + end + return wrapper +end + +function c_getorderflowdetail() + local container = FormulaCacheContainer() + function wrapper(price, index, timetag, formula) + return getorderflowdetail_c(container, price, index, timetag, formula) + end + return wrapper +end + +function c_getorderflow() + local container = FormulaCacheContainer() + function wrapper(index, timetag, formula) + return getorderflow_c(container, index, timetag, formula) + end + return wrapper +end + +function c_getorderflowunbalance() + local container = FormulaCacheContainer() + function wrapper(threshold, thresholdTimes, barcount, timetag, formula) + return getorderflowunbalance_c(container, threshold, thresholdTimes, barcount, timetag, formula) + end + return wrapper +end + +function c_getorderflowunbalancepricein() + local container = FormulaCacheContainer() + function wrapper(threshold, thresholdTimes, barcount, price1, price2, timetag, formula) + return getorderflowunbalancepricein_c(container, threshold, thresholdTimes, barcount, price1, price2, timetag, formula) + end + return wrapper +end + +function c_getorderflowpoc() + local container = FormulaCacheContainer() + function wrapper(timetag, formula) + return getorderflowpoc_c(container, timetag, formula) + end + return wrapper +end + +function c_getorderflowdelta() + local container = FormulaCacheContainer() + function wrapper(timetag, formula) + return getorderflowdelta_c(container, timetag, formula) + end + return wrapper +end + +function c_getlastfuturemonth() + local container = FormulaCacheContainer() + function wrapper(code, index, timetag, formula) + return getlastfuturemonth_c(container, code, index, timetag, formula) + end + return wrapper +end + +function c_getlastfuturecode() + local container = FormulaCacheContainer() + function wrapper(code, index, timetag, formula) + return getlastfuturecode_c(container, code, index, timetag, formula) + end + return wrapper +end + +function c_extdatablocksplitavg() + local cache = ExtFormulaCache() + function wrapper(name, sector, total, index, timetag, formula) + return extdatablocksplitavg_c(name, sector, total, index, cache, timetag, formula) + end + return wrapper +end + +function c_getcapitalflow() + local container = FormulaCacheContainer() + function wrapper(filed, rank, timetag, formula) + return getcapitalflow_c(filed, rank, timetag, formula, container) + end + return wrapper +end + +function c_getcapitalflowbyholder() + local container = FormulaCacheContainer() + function wrapper(sharedholder, filed, timetag, formula) + return getcapitalflowbyholder_c(sharedholder, filed, timetag, formula, container) + end + return wrapper +end + +function c_getfuturecode() + local container = FormulaCacheContainer() + function wrapper(code, timetag, formula) + return getfuturecode_c(container, code, timetag, formula) + end + return wrapper +end + +function c_winner() + local container = FormulaCacheContainer() + function wrapper(price,timetag,formula) + return winner_cost_c(price,0,container,timetag,formula) + end + return wrapper +end + +function c_cost() + local container = FormulaCacheContainer() + function wrapper(price,timetag,formula) + return winner_cost_c(price,1,container,timetag,formula) + end + return wrapper +end + +function c_findblocklist() + local container = FormulaCacheContainer() + function wrapper(folder, formula) + return findblocklist_c(container, folder, formula) + end + return wrapper +end + +function c_unitofquantity() + local container = FormulaCacheContainer() + function wrapper(code, formula) + return unitofquantity_c(code, container, formula) + end + return wrapper +end + +function c_equalweightindex() + local container = FormulaCacheContainer() + function wrapper(code, formula) + return equalweightindex_c(code, container, formula) + end + return wrapper +end + +function c_isindexorglr() + local container = FormulaCacheContainer() + function wrapper(code, formula) + return isindexorglr_c(code, container, formula) + end + return wrapper +end + +function c_isetfcode() + local container = FormulaCacheContainer() + function wrapper(code, formula) + return isetfcode_c(container, code, formula) + end + return wrapper +end + +function c_isindexcode() + local container = FormulaCacheContainer() + function wrapper(code, formula) + return isindexcode_c(container, code, formula) + end + return wrapper +end + +function c_isfuturecode() + local container = FormulaCacheContainer() + function wrapper(code, formula) + return isfuturecode_c(container, code, formula) + end + return wrapper +end + +function c_upstopprice() + local container = FormulaCacheContainer() + function upstopprice(stockcode, timetag, formula) + return stopprice_c(container, stockcode, 1, timetag, formula) + end + return upstopprice +end + +function c_downstopprice() + local container = FormulaCacheContainer() + function downstopprice(stockcode, timetag, formula) + return stopprice_c(container, stockcode, 2, timetag, formula) + end + return downstopprice +end + +function c_dividfactor() + local container = FormulaCacheContainer() + function func(type, timetag, formula) + return dividfactor_c(container, type, timetag, formula) + end + return func +end + +function c_getinstrumentdetail() + local container = FormulaCacheContainer() + function wrapper(stockcode, fieldname, timetag, formula) + return getinstrumentdetail_c(container, stockcode, fieldname, timetag, formula) + end + return wrapper +end + +function c_limitupperformance() + local container = FormulaCacheContainer() + function wrapper(stockcode, type, timetag, formula) + return limitupperformance_c(container, stockcode, type, timetag, formula) + end + return wrapper +end + +function c_fundnetvalue() + local container = FormulaCacheContainer() + function wrapper(stockcode, type, timetag, formula) + return fundnetvalue_c(container, stockcode, type, timetag, formula) + end + return wrapper +end + +function c_get_etf_statistics() + local container = FormulaCacheContainer() + function fun(stockcode, field, timetag, formula) + return get_etf_statistics_c(container, 1, stockcode, field, timetag, formula) + end + return fun +end + +function c_get_etf_statisticsl2() + local container = FormulaCacheContainer() + function fun(stockcode, field, timetag, formula) + return get_etf_statistics_c(container, 2, stockcode, field, timetag, formula) + end + return fun +end \ No newline at end of file diff --git a/src/xtquant/config/user/root2/lua/FunRef.lua b/src/xtquant/config/user/root2/lua/FunRef.lua new file mode 100644 index 0000000..173a871 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunRef.lua @@ -0,0 +1,657 @@ +------------------------------------------------------------ +-- 引用函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author zhangjin +-- @since 2012-9-18 +----------------------------------------------------------- + +function c_ref() + local history = FormulaDataCacheDouble(0, 0) + function ref(X, distance, timetag, style) + if not(X) then + X = 0 + end + return ref_c(X, distance, timetag, history, style) + end + return ref +end + +function c_barslast() + local lastTrue = -1 + local lastTrue_1 = -1 + local curTimetag = -1 + function barslast(condition, timetag) + if curTimetag ~= timetag then + curTimetag = timetag + lastTrue_1 = lastTrue + else + lastTrue = lastTrue_1 + end + + if not(condition) then + condition = false + end + + if condition then + lastTrue = curTimetag + end + + if lastTrue == -1 then + return 0 + else + return curTimetag - lastTrue + end + end + return barslast +end + +function c_barslasts() + local container = FormulaCacheContainer() + function wrapper(condition, N, timetag) + return barslasts_c(condition, N, container, timetag) + end + return wrapper +end + +function c_count() + local history = FormulaDataCacheBool(0, 0) + function count(condition, N, timetag, type) + if not(condition) then + condition = false + end + return count_c(condition, N, timetag, history, type) + end + return count +end + +function c_ma() + local history = FormulaDataCacheDouble(0, 0) + function ma(X, N, timetag, type) + if not(X) then + X = 0 + end + local avg = ma_c(X, N, timetag, history, type) + return avg; + end + return ma +end + +function c_xma() + local history = FormulaDataCacheDouble(0, 0) + function xma(X, N, timetag, __formula, type) + if not(X) then + X = 0 + end + local avg = xma_c(X, N, timetag, history, __formula, type) + return avg; + end + return xma +end + +function c_ima() + local history = FormulaDataCacheDouble(0, 0) + function ima(X, N, S, timetag, type) + if not(X) then + X = 0 + end + return ima_c(X, N, S, timetag, history, type) + end + return ima +end + + +--求动态移动平均 jch +function c_dma() + local last + local lasttimetag = -1 + local ret = math.huge + function dma(X, A, timetag) + if not(X) then + X = 0 + end + if lasttimetag ~= timetag then --主推数据 + last = ret + lasttimetag = timetag + end + if not(isValid(last)) then + last = X + end + if (A > 1 or A <= 0) then + A = 1 + end + ret = A * X + (1 - A) * last + return ret; + end + return dma +end + +--[[求动态移动平均 +function c_dma() + local last = 0 + local ret + function dma(X, A, timetag) + last, ret = dma_c(X, last, A, timetag); + return ret; + end + return dma +end]]-- + +--求指数平滑移动平均 jch +function c_ema() + local last + local lasttimetag = -1 + local ret = math.huge + function ema(X, N, timetag) + if not(X) then + X = 0 + end + if lasttimetag ~= timetag then --主推数据 + last = ret + lasttimetag = timetag + end + if not(isValid(last)) then + last = X + end + ret = (2 * X + (N - 1) * last) / (N + 1) + return ret; + end + return ema +end + +--[[求指数平滑移动平均 +function c_ema() + local history = FormulaDataCacheDouble(0, 0) + function ema(X, N, timetag) + ret = ema_c(X, last, N, timetag); + return ret; + end + return ema +end +function c_sma() + local last = math.huge + local lasttimetag = -1 + local ret = 0 + function sma(X, N, M, timetag) + if timetag == 0 and isValid(X) then + last = X + end + if not(isValid(X)) then + X = math.huge + end + local ret = (X * M + (N - M) * last) / N; + if isValid(X) and not(isValid(ret)) then + last = X + else + last = ret + end + return ret + end + return sma +end +]]-- +--移动平均 jch +function c_sma() + local last = math.huge + local lasttimetag = -1 + local ret = math.huge + function sma(X, N, M, timetag) + if not(X) then + X = 0 + end + if lasttimetag ~= timetag then + last = ret + lasttimetag = timetag + end + if not(isValid(last)) then + last = X + end + ret = (M * X + (N - M) * last) / N + return ret + end + return sma +end + +--递归移动平均 jch +function c_tma() + local last + local lasttimetag = -1 + local ret = math.huge + function tma(X, N, M, timetag) + if not(X) then + X = 0 + end + if lasttimetag ~= timetag then + last = ret + lasttimetag = timetag + end + if not(isValid(last)) then + last = X + end + ret = N * last + M * X + return ret + end + return tma +end +--[[递归移动平均 +function c_tma() + local last = 0 + function tma(X, N, M, timetag) + if not(isValid(X)) then + X = math.huge; + end + local ret = M * X + N * last; + last = ret + return ret + end + return tma +end]]-- + +function c_sum() + local history = FormulaDataCacheDouble(1) + function sum(X, N, timetag, type) + if not(X) then + X = 0 + end + local ret = sum_c(X, N, history, timetag, type) + return ret + end + return sum +end + +function c_hhv() + local history = FormulaDataCacheDouble(-math.huge, -1) + function hhv(X, N, timetag, style) + if not(X) then + X = 0 + end + local index, max = hhv_c(X, N, timetag, history, style) + return max + end + return hhv +end + +function c_hhvbars() + local history = FormulaDataCacheDouble(-math.huge, -1) + function hhvbars(X, N, timetag, style) + if not(X) then + X = 0 + end + local index, max = hhv_c(X, N, timetag, history, style) + return index + end + return hhvbars +end + +function c_llv() + local history = FormulaDataCacheDouble(math.huge, -1) + function llv(X, N, timetag, type) + if not(X) then + X = 0 + end + local index, min = llv_c(X, N, timetag, history, type) + return min + end + return llv +end + +function c_llvbars() + local history = FormulaDataCacheDouble(math.huge, -1) + function llvbars(X, N, timetag, type) + if not(X) then + X = 0 + end + local index, min = llv_c(X, N, timetag, history, type) + return index + end + return llvbars +end + +function c_filter() + local lastTrue = -1 + local lastTimetag = -1 + local realTimeLastTrue = -1 + function filter(val, N, timetag) + local ret = 0 + if timetag ~= lastTimetag then + lastTrue = realTimeLastTrue + end + if timetag - lastTrue > N then + ret = val + if val > 0 then + realTimeLastTrue = timetag + else + realTimeLastTrue = lastTrue + end + end + lastTimetag = timetag + return ret + end + return filter +end + +function c_sfilter() + local lastX = 0 + local lastCond = 0 + function sfilter(X, cond, timetag) + if cond then + lastCond = timetag + if X then + lastX = timetag + end + return X + else + if lastX > lastCond then + return false + else + if X then + lastX = timetag + end + return X + end + end + end + return sfilter +end + +function c_barscount() + local isValid = false + local first = 0 + function barscount(X, timetag) + if isValid then + return timetag - first + 1 + elseif valid(X) then + isValid = true + first = timetag + return 1 + else + return 0 / 0 + end + end + return barscount +end + +function c_barssincen() + local isFirst = true + local index = 0 + local ret = 0 + local indexArray = {}--存放满足条件的timetag + local indFirst = 0 --indexArray存放timetag的开始位 ,indFirst>=indLast时说明没有满足条件的timetag + local indLast = 0 --indexArray存放timetag的结束位 + function barssincen(condition,n,timetag) + if n < 2 then + return 0 + end + ret = 0 + if timetag >= n-1 and (not isFirst) then --timetag 是从0开始的 + if timetag - index > n-1 then + if indFirst < indLast then + indFirst = indFirst + 1 + index = indexArray[indFirst] + ret = timetag - index + indexArray[indFirst] = nil --释放空间 + end + else + ret = timetag - index + end + end + if condition then + indLast = indLast + 1 + indexArray[indLast] = timetag + if isFirst then + isFirst = false + index = timetag + if index == 0 then --如果第一个K线就满足条件,在此做数组删除处理(避免下个周期还读到index=0) + indexArray[indLast] = nil + indLast = indLast - 1 + end + end + end + + return ret + end + return barssincen +end + +function c_barssince() + local isFirst = false + local index = 0 + function barssince(condition, timetag) + if isFirst then + return timetag - index + elseif condition then + isFirst = true + index = timetag + return 0 + else + return 0 + end + end + return barssince +end + +function c_barssincen() + local isFirst = true + local index = 0 + local ret = 0 + local indexArray = {}--存放满足条件的timetag + local indFirst = 0 --indexArray存放timetag的开始位 ,indFirst>=indLast时说明没有满足条件的timetag + local indLast = 0 --indexArray存放timetag的结束位 + function barssincen(condition,n,timetag) + if n < 2 then + return 0 + end + ret = 0 + if timetag >= n-1 and (not isFirst) then --timetag 是从0开始的 + if timetag - index > n-1 then + if indFirst < indLast then + indFirst = indFirst + 1 + index = indexArray[indFirst] + ret = timetag - index + indexArray[indFirst] = nil --释放空间 + end + else + ret = timetag - index + end + end + if condition then + indLast = indLast + 1 + indexArray[indLast] = timetag + if isFirst then + isFirst = false + index = timetag + if index == 0 then --如果第一个K线就满足条件,在此做数组删除处理(避免下个周期还读到index=0) + indexArray[indLast] = nil + indLast = indLast - 1 + end + end + end + + return ret + end + return barssincen +end + +function currbarscount(timetag, __formula) + local endPos = __formula:getLastBar() + return endPos - timetag + 1 +end + +function drawnull() + return 0 / 0 +end + +function c_tr() + local lastClose = 0 / 0 + function tr(timetag, __formula) + local c = close(timetag, __formula) + local h = high(timetag, __formula) + local l = low(timetag, __formula) + local v1 = h - l + local v2 = h - lastClose + local v3 = lastClose - l + lastClose = c + if v1 > v2 then + if v1 > v3 then + return v1 + else + return v3 + end + else + if v2 > v3 then + return v2 + else + return v3 + end + end + end + return tr +end + +function c_wma() + local history = FormulaDataCacheDouble(2) + --local sum = 0 + --local weightSum = 0 + local avg + function wma(X, N, timetag, tp) + if not(X) then + X = 0 + end + --sum, weightSum, avg = wma_c(X, N, timetag, sum, weightSum, history) + avg = wma_c(X, N, timetag, history, tp) + return avg + end + return wma +end + +function c_trma() + local ma1 = c_ma() + local ma2 = c_ma() + function trma(X, N, timetag, type) + if not(X) then + X = 0 + end + local N1 + local temp, ret + if N % 2 == 1 then + N1 = (N + 1) / 2 + temp = ma1(X, N1, timetag, type) + ret = ma2(temp, N1, timetag, type) + else + N1 = N / 2 + temp = ma1(X, N1, timetag, type) + ret = ma2(temp, N1 + 1, timetag, type) + end + return ret + end + return trma +end + +function c_ret() + local history = FormulaDataCacheDouble(0) + local lastValue + function ret(X, A, timetag, __formula, type) + if not(X) then + X = 0 + end + lastValue = ret_c(X, A, timetag, __formula, history, type) + return lastValue + end + return ret +end + +function c_newhbars() + local history = FormulaDataCacheDouble(0) + function newhbars(X, N, timetag, type) + if not(X) then + X = 0 + end + return newhbars_c(X, N, timetag, history, type) + end + return newhbars +end + +function c_newlbars() + local history = FormulaDataCacheDouble(0) + function newlbars(X, N, timetag, type) + if not(X) then + X = 0 + end + --return newlbars_c(X, N, history) + return newhbars_c( -1 * X, N, timetag, history, type) + end + return newlbars +end + +function c_hod() + local history = FormulaDataCacheDouble(0) + function hod(X, N, timetag) + if not(X) then + X = 0 + end + return hod_c(X, N, timetag, history) + end + return hod +end + +function c_lod() + local history = FormulaDataCacheDouble(0) + function lod(X, N, timetag) + if not(X) then + X = 0 + end + return hod_c( -1 * X, N, timetag, history) + end + return lod +end +--[[ +function c_sumbars() + local history = FormulaDataCacheDouble(2) + local sum = 0.0 + local period = 0 + function sumbars(X, A) + sum, period = sumbars_c(X, A, sum, period, history) + return period + end + return sumbars +end]]-- +function c_sumbars() + local history = FormulaDataCacheDouble(0,0) + function sumbars(X, A, timetag) + if not(X) then + X = 0 + end + local ret = sumbars_c(X, A, timetag, history) + return ret + end + return sumbars +end + +function c_barslastcount() + local container = FormulaCacheContainer() + function wrapper(condition, timetag, __formula) + return barslastcount_c(container, condition, timetag, __formula) + end + return wrapper +end + +function c_mema() + local last + local lasttimetag = -1 + local ret = math.huge + function mema(X, N, timetag) + if not(X) then + X = 0 + end + if lasttimetag ~= timetag then --主推数据 + last = ret + lasttimetag = timetag + end + if not(isValid(last)) then + last = X + end + ret = (X + (N - 1) * last) / N + return ret; + end + return mema +end + diff --git a/src/xtquant/config/user/root2/lua/FunStatistic.lua b/src/xtquant/config/user/root2/lua/FunStatistic.lua new file mode 100644 index 0000000..ead335c --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunStatistic.lua @@ -0,0 +1,395 @@ +------------------------------------------------------------ +-- 统计函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author zhangjin +-- @since 2012-9-18 +----------------------------------------------------------- + +--判别调用 +function poisson(v1,v2,v3,timetag,formula) + if (type(v3) == "number") + then if (v3>0) + then return poisson_c(v1,v2,true,timetag,formula) + else return poisson_c(v1,v2,false,timetag,formula) + end + end + return poisson_c(v1,v2,v3,timetag,formula) +end + +function weibull(v1,v2,v3,v4,timetag,formula) + return weibull_c(v1,v2,v3,v4,timetag,formula) +end + +function expondist(v1,v2,v3,timetag,formula) + return expondist_c(v1,v2,v3,timetag,formula) +end + +function binomdist(v1,v2,v3,v4,timetag,formula) + return binomdist_c(v1,v2,v3,v4,timetag,formula) +end + + +cacheDoubleNum = 4 +--drl2 曲线回归偏离度 +function c_drl2() + local cache1 = FormulaDataCacheDouble(15) + local cache2 = FormulaDataCacheDouble(15) + local cache3 = FormulaDataCacheDouble(15) + function drl2_func(value, N, timetag, __formula) + local ret = drl2(value, cache1, cache2, cache3, N, timetag, __formula) + return ret + end + return drl2_func +end +--forecast2 二次曲线回归预测值。 +function c_forecast2() + local cache1 = FormulaDataCacheDouble(10) + local cache2 = FormulaDataCacheDouble(10) + local cache3 = FormulaDataCacheDouble(10) + function forecast2_func(value, N, timetag, __formula) + local ret = forecast2(value, cache1, cache2, cache3, N, timetag, __formula) + return ret + end + return forecast2_func +end +--slope 曲线回归相关系数 +function c_slope20() + local cache1 = FormulaDataCacheDouble(10) + local cache2 = FormulaDataCacheDouble(10) + local cache3 = FormulaDataCacheDouble(10) + function slope20_func(value, N, timetag, __formula) + local ret = slope20(value, cache1, cache2, cache3,N, timetag, __formula) + return ret + end + return slope20_func +end +function c_slope21() + local cache1 = FormulaDataCacheDouble(10) + local cache2 = FormulaDataCacheDouble(10) + local cache3 = FormulaDataCacheDouble(10) + function slope21_func(value, N, timetag, __formula) + local ret = slope21(value, cache1, cache2, cache3, N, timetag, __formula) + return ret + end + return slope21_func +end +function c_slope22() + local cache1 = FormulaDataCacheDouble(10) + local cache2 = FormulaDataCacheDouble(10) + local cache3 = FormulaDataCacheDouble(10) + function slope22_func(value, N, timetag, __formula) + local ret = slope22(value, cache1, cache2, cache3, N, timetag, __formula) + return ret + end + return slope22_func +end +--drl 直线回归偏离度 +function c_drl() + local cachey = FormulaDataCacheDouble(cacheDoubleNum) + local cachex = FormulaDataCacheDouble(cacheDoubleNum) + function drl_func(value, N, timetag, __formula) + local ret = drl(value, cachey, cachex, N, timetag, __formula) + return ret + end + return drl_func +end +--forecast 线性回归预测值。 +function c_forecast() + local cachey = FormulaDataCacheDouble(cacheDoubleNum) + local cachex = FormulaDataCacheDouble(cacheDoubleNum) + function forecast_func(value, N, timetag, __formula) + local ret = forecast(value, cachey, cachex, N, timetag, __formula) + return ret + end + return forecast_func +end +--slope 线性回归斜率 +function c_slope() + local cachey = FormulaDataCacheDouble(cacheDoubleNum) + local cachex = FormulaDataCacheDouble(cacheDoubleNum) + function slope_func(value, N, timetag, __formula) + local ret = slope(value, cachey, cachex, N, timetag, __formula) + return ret + end + return slope_func +end +--percentrank 返回特定数值在数据集中的百分比排位 +function c_percentrank() + local cache = FormulaOrderCache() + function percentrank_func(value, N, x, significance, timetag, __formula) + local ret = percentrank(value, cache, N, x, significance, timetag, __formula) + return ret + end + return percentrank_func +end +--percentile 返回区域中数值的第 K 个百分点的值 +function c_percentile() + local cache = FormulaOrderCache() + function percentile_func(value, N, k, timetag, __formula) + local ret = percentile(value, cache, N, k, timetag, __formula) + return ret + end + return percentile_func +end +--median 返回区域中数值的中位数 +function c_median() + local cache = FormulaOrderCache() + function median_func(value, N, timetag, __formula) + local ret = percentile(value, cache, N, 0.5, timetag, __formula) + return ret + end + return median_func +end +--trimmean 返回数据的内部平均值 +function c_trimmean() + local cache = FormulaOrderCache() + function trimmean_func(value, N, percent, timetag, __formula) + local ret = trimmean(value, cache, N, percent, timetag, __formula) + return ret + end + return trimmean_func +end +--quartile 返回数据的四分位数 +function c_quartile() + local cache = FormulaOrderCache() + function quartile_func(value, N, quart, timetag, __formula) + local ret = quartile(value, cache, N, quart, timetag, __formula) + return ret + end + return quartile_func +end +--large 数据集中第 k 个最大值 +function c_large() + local cache = FormulaOrderCache() + function large_func(value, N, k, timetag, __formula) + local ret = large(value, cache, N, k, timetag, __formula) + return ret + end + return large_func +end +--small数据集中第 k 个最小值 +function c_small() + local cache = FormulaOrderCache() + function small_func(value, N, k, timetag, __formula) + local ret = small(value, cache, N, k, timetag, __formula) + return ret + end + return small_func +end +--skew分布的偏斜度 +function c_skew() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function skew_func(value, N, timetag, __formula) + local ret = skew(value, cache, N, timetag, __formula) + return ret + end + return skew_func +end +--ftest +function c_ftest() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function ftest_func(value1, value2, N, timetag, __formula) + local ret = ftest(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return ftest_func +end + +--数据集的峰值 +function c_kurt() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function kurt_func(value, N, timetag, __formula) + local ret = kurt(value, cache, N, timetag, __formula) + return ret + end + return kurt_func +end +--几何平均值 +function c_geomean() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function geomean_func(value, N, timetag, __formula) + local ret = geomean(value, cache, N, timetag, __formula) + return ret + end + return geomean_func +end +--调和平均值 +function c_harmean() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function harmean_func(value, N, timetag, __formula) + local ret = harmean(value, cache, N, timetag, __formula) + return ret + end + return harmean_func +end + +-- INTERCEPT(Y,X,N),求序列Y,X的线性回归线截距 +function c_intercept() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function intercept_func(value1, value2, N, timetag, __formula) + local ret = intercept(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return intercept_func +end +-- RSQ(A,B,N),计算A,B序列的N周期乘积矩相关系数的平方. +function c_rsq() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function rsq_func(value1, value2, N, timetag, __formula) + local ret = rsq(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return rsq_func +end + +-- Pearson(皮尔生)乘积矩相关系数 +function c_pearson() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function pearson_func(value1, value2, N, timetag, __formula) + local ret = pearson(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return pearson_func +end +--通过线性回归法计算每个 x 的 y 预测值时所产生的标准误差 +function c_steyx() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function steyx_func(value1, value2, N, timetag, __formula) + local ret = steyx(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return steyx_func +end + +function c_mode() + local dcache = FormulaDataCacheDouble(cacheDoubleNum) + local ccache = FormulaCountCache() + function mode_func(value, N, timetag, __formula) + local ret = mode(value, dcache, ccache, N, timetag, __formula) + return ret + end + return mode_func +end + +function c_covar() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function covar_func(value1, value2, N, timetag, __formula) + local ret = covar(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return covar_func +end + +function c_beta2() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + local cache3 = FormulaDataCacheDouble(cacheDoubleNum) + function beta2_func(value1, value2, N, timetag, __formula) + local ret = beta2(value1, value2, cache1, cache2,cache3, N, timetag, __formula) + return ret + end + return beta2_func +end + +function c_avedev() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + --print("hello") + function avedev_func(value, N, timetag, __formula) + local ret = avedev(value, cache, N, timetag, __formula) + return ret + end + return avedev_func +end + +function c_devsq() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + --print("hello") + function devsq_func(value, N, timetag, __formula) + local ret = devsq(value, cache, N, timetag, __formula) + return ret + end + return devsq_func +end + +function c_relate() + local cache1 = FormulaDataCacheDouble(cacheDoubleNum) + local cache2 = FormulaDataCacheDouble(cacheDoubleNum) + function relate_func(value1, value2, N, timetag, __formula) + local ret = relate(value1, value2, cache1, cache2, N, timetag, __formula) + return ret + end + return relate_func +end + +function c_std() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function std_func(value, N, timetag, __formula, type) + local ret = std(value, cache, N, timetag, __formula, type) + return ret + end + return std_func +end + +function c_var() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function var_func(value, N, timetag, __formula) + local ret = var(value, cache, N, timetag, __formula) + return ret + end + return var_func +end + +function c_stdp() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function stdp_func(value, N, timetag, __formula) + local ret = stdp(value, cache, N, timetag, __formula) + return ret + end + return stdp_func +end + +function c_varp() + local cache = FormulaDataCacheDouble(cacheDoubleNum) + function varp_func(value, N, timetag, __formula) + local ret = varp(value, cache, N, timetag, __formula) + return ret + end + return varp_func +end + +function c_std3() + local history = List.new() + function std_func(value, N, timetag, __formula) + List.pushright(history, value); + local sz = history.last - history.first + 1; + if (sz > N) then + List.popleft(history); + sz = sz - 1 + end + if (sz < N) then + return 0 / 0; + end + sum1 = 0.0; + sum2 = 0.0; + count = 0 + for i = history.first, history.last, 1 do + temp = history[i]; + sum1 = sum1 + temp; + sum2 = sum2 + temp * temp; + count = count + 1; + end + sum1 = sum1 * sum1; + sum1 = sum1 / N; + ret = math.sqrt((sum2-sum1) / (N-1)); + return ret; + end + return std_func; +end + + diff --git a/src/xtquant/config/user/root2/lua/FunString.lua b/src/xtquant/config/user/root2/lua/FunString.lua new file mode 100644 index 0000000..a01016d --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunString.lua @@ -0,0 +1,164 @@ +------------------------------------------------------------ +-- 字符串函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author jiangchanghao +-- @since 2012-10-11 +----------------------------------------------------------- +function lowerstr(str) + return string.lower(str) +end + +function upperstr(str) + return string.upper(str) +end + +function strlen(str) + return string.len(str) +end + +function strleft(str, n) + return string.sub(str, 1, n) +end + +function strright(str, n) + if (n < string.len(str)) + then + return string.sub(str, string.len(str)-n+1, -1) + else + return str + end +end + +function strmid(str, i,j) + if (i <= 0) + then return "" + end + return string.sub(str, i,j+i-1) +end + +function ltrim(str) + s,_ = string.gsub(str,'^ +','') + return s +end + +function rtrim(str) + s, _ = string.gsub(str,' +$','') + return s +end + +function numtostr(num, N) + return string.format(string.format('%s.%if','%',N),num) +end + +function strcat(des,str) + return string.format('%s%s', des, str) +end + +function strtonum(str) + return tonumber(str) +end + +function strtonumex(str, default) + local num = tonumber(str) + if isvalid(num) then + return num + else + return default + end +end + +function strinsert(str, index, str1) + return string.format('%s%s%s',string.sub(str,1,index),str1,string.sub(str,index+1,-1)) +end + +function strremove(str, index, cound) + return string.format('%s%s',string.sub(str,1,index),string.sub(str,index+cound+1,-1)) +end + +function strfind(str, s1, n, timetag) + i,_ = string.find(str,s1,n) + if (i == nil) + then return 0 + else return i + end +end + +function strreplace(str, strold, strnew) + s, _ = string.gsub(str, strold, strnew) + return s +end + +function strtrimleft(str, str1) + s, _ = string.gsub(str,string.format('%s%s%s','^',str1,'+'),'') + return s +end + +function strtrimright(str, str1) + s, _ = string.gsub(str,string.format('%s%s',str1,'+$'),'') + return s +end + +function strcmp(str1,str2) + if (str1 < str2) + then return -1 + else if (str1 == str2) + then return 0 + else return 1 + end + end +end + +function stricmp(str1,str2) + s1 = string.upper(str1) + s2 = string.upper(str2) + if (s1 < s2) + then return -1 + else if (s1 == s2) + then return 0 + else return 1 + end + end +end + +function strncmp(str1,str2,n) + s1 = string.sub(str1,1,n) + s2 = string.sub(str2,1,n) + if (s1 < s2) + then return -1 + else if (s1 == s2) + then return 0 + else return 1 + end + end +end + +function fmt(...) + local tt = {...} + local len = #tt + if (len == 1) then + return tostring(tt[1]) + end + + fc = FmtCache() + fc:setFmtString(tostring(tt[1])) + local i = 2 + repeat + local v = tt[i] + if (type(v) == "number") then + fc:pushDouble(i, v) + elseif (type(v) == "string") then + fc:pushString(i, v) + elseif (type(v) == "boolean") then + if (v) then + fc:pushDouble(i, 1) + else + fc:pushDouble(i, 0) + end + else + fc:pushString(i, "nil") + end + i = i + 1 + until i > len + return fc:getFmtString() +end + diff --git a/src/xtquant/config/user/root2/lua/FunSystem.lua b/src/xtquant/config/user/root2/lua/FunSystem.lua new file mode 100644 index 0000000..e6ea9be --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunSystem.lua @@ -0,0 +1,75 @@ +------------------------------------------------------------ +-- 系统函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author jiangchanghao +-- @since 2012-10-11 +----------------------------------------------------------- + +function c_print() + local pc = PrintCache() + function printout(...) + local tt = {...} + local len = #tt + timetag = tt[len - 1] + formula = tt[len] + if (len == 3 and type(tt[1]) == "nil") then + printOut(pc, formula) + return + end + local i = 1 + repeat + local v = tt[i] + if (type(v) == "string") then + printStr(v, tt[i+1], pc, timetag, formula) + else + if (type(v) == "boolean") then + printBool(v, tt[i+1], pc, timetag, formula) + else + printNum(v, tt[i+1], pc, timetag, formula) + end + end + i = i + 2 + until i >= len - 1 + end + return printout +end + +function c_serialize() + local cc = FormulaCacheContainer() + function ff(...) + local tt = {...} + local len = #tt + + timetag = tt[len - 1] + formula = tt[len] + + serialize_c(-1, 0, 0, cc, timetag, formula) + + if len == 3 then + serialize_c(0, 0, tt[1], cc, timetag, formula) + return serialize_c(1, 0, 0, cc, timetag, formula) + end + + if tt[1] == 'list' then + for i = 2, len - 2, 1 do + serialize_c(0, i - 2, tt[i], cc, timetag, formula) + end + return '[' .. serialize_c(1, 0, 0, cc, timetag, formula) .. ']' + end + + if tt[1] == 'dict' then + for i = 2, len - 2, 2 do + if i + 1 <= len - 2 then + serialize_c(0, tt[i], tt[i + 1], cc, timetag, formula) + end + end + return '{' .. serialize_c(1, 0, 0, cc, timetag, formula) .. '}' + end + + for i = 2, len - 2, 1 do + serialize_c(0, i - 2, tt[i], cc, timetag, formula) + end + return serialize_c(1, 0, 0, cc, timetag, formula) + end + return ff +end diff --git a/src/xtquant/config/user/root2/lua/FunTrader.lua b/src/xtquant/config/user/root2/lua/FunTrader.lua new file mode 100644 index 0000000..8cfdb06 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/FunTrader.lua @@ -0,0 +1,182 @@ +------------------------------------------------------------ +-- 程序化交易函数 +-- 由脚本引擎预先定义,如果有性能问题,可用C++改写 +-- @author zhangjin +-- @since 2012-10-18 +----------------------------------------------------------- +function c_order() + local history = FormulaDataCacheDouble(0, 0); + local lastBasket = '' + function order(opType, chanel, addr, basket, timetag, formula) + if basket == nil then + basket = lastBasket + end + local ret = placeorder_c(opType, chanel, addr, basket, timetag, formula, history) + return ret + end + return order +end + +function c_passorder() + local history = FormulaDataCacheDouble(0, 0); + --orderCode:basketName or stockID + function passorder(opType, orderType, accountid, orderCode, prType, price, volume, quickTrade, strategyName, userOrderId, timetag, formula) + --由于luabind的限制不能处理超过10个参数,这里把accountid和strategyName合并在一起,到了C++里再拆分 + accidAndstrName = accountid.."#"..strategyName.."#"..tostring(quickTrade).."#"..userOrderId + local ret = passorder_c(opType, orderType, accidAndstrName, orderCode, prType, price, volume, timetag, formula, history) + return ret + end + return passorder +end + +function passorder( + optype, ordertype, accountid, accounttype + , marketstock, pricetype, price, volume + , strategyname, quicktrade, remark + , timetag, formula +) + ptable = { + quicktrade = quicktrade + , strategyname = strategyname + , remark = remark + , barpos = timetag + } + + return passorder2_c( + optype, ordertype, accountid, accounttype + , marketstock, pricetype, price, volume + , ptable, formula + ) +end + +function c_trade() + local history = FormulaDataCacheDouble(0, 0); + local tp = tradeparam() + function trade_c(param, address, timetag, formula) + if param then + tp = copyParam(param) + trade(param, 0, timetag, formula, history, address) + else + trade(tp, 1, timetag, formula, history, address) + end + end + return trade_c +end + +function c_hedgestocktrade() + local history = FormulaDataCacheDouble(0, 0); + local tp = tradeparam() + function hedgestocktrade_c(param, address, timetag, formula) + if param then + tp = copyParam(param) + hedgestocktrade(param, 0, timetag, formula, history, address) + else + hedgestocktrade(tp, 1, timetag, formula, history, address) + end + end + return hedgestocktrade_c +end + +function c_cancel() + local history = FormulaDataCacheDouble(0, 0) + function cancel_c(codeNumber, timetag) + cancel(codeNumber, history) + end + return cancel_c +end + +function c_writeorder() + local history = FormulaDataCacheDouble(0, 0) + function writeorder_c(filepath, content, timetag, formula) + return writeorder(filepath, content, timetag, formula, history) + end + return writeorder_c +end + +function positionadjust(positions, weight, channel) + local s = '35,'..channel..'\n' + for i = 0, positions:size() - 1, 1 do + local detail = positions:at(i) + local adjustedVol = detail.m_nVolume * weight + s = s..detail.m_strInstrumentID..'\t'..adjustedVol..'\n' + end + return s +end + +function c_portfoliosell(type) + local history = FormulaDataCacheDouble(0, 0) + function portfoliosell_c(type, timetag, formula) + return portfoliosell(type, timetag, formula, history) + end + return portfoliosell_c +end + +function c_portfoliobuy() + local history = FormulaDataCacheDouble(0, 0); + local lastBasket = '' + function portfoliobuy(opType, chanel, addr, basket, timetag, formula) + if basket == nil then + basket = lastBasket + end + return portfoliobuy_c(opType, chanel, addr, basket, timetag, formula, history) + end + return portfoliobuy +end + +function algo_passorder( + optype, ordertype, accountid, accounttype + , marketstock, pricetype, price, volume + , strategyname, quicktrade, remark + , algoname + , timetag, formula +) + ptable = { + quicktrade = quicktrade + , strategyname = strategyname + , remark = remark + , barpos = timetag + , algoname = algoname + } + + return algo_passorder_c( + optype, ordertype, accountid, accounttype + , marketstock, pricetype, price, volume + , ptable, formula + ) +end + +function cancel_task(taskID, accountID, accountType) + return cancel_task_c(taskID, accountID, accountType, timetag, formula) +end + +function c_readsignal() + local container = FormulaCacheContainer() + function wrapper(filePath, stockCode, timetag, formula) + return readsignal_c(filePath, stockCode, container, timetag, formula) + end + return wrapper +end + +function c_drawsignal() + local container = FormulaCacheContainer() + function wrapper(cond, signalType, drawPrice, timetag, formula) + return drawsignal_c(container, cond, signalType, drawPrice, timetag, formula) + end + return wrapper +end + +function c_cmdprogress() + local container = FormulaCacheContainer() + function wrapper(cmdID, timetag, formula) + return cmdprogress_c(container, cmdID, timetag, formula) + end + return wrapper +end + +function c_cmdstatus() + local container = FormulaCacheContainer() + function wrapper(cmdID, timetag, formula) + return cmdstatus_c(container, cmdID, timetag, formula) + end + return wrapper +end diff --git a/src/xtquant/config/user/root2/lua/MetaType.lua b/src/xtquant/config/user/root2/lua/MetaType.lua new file mode 100644 index 0000000..af70654 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/MetaType.lua @@ -0,0 +1,10 @@ +-------------------------------------------------------------- +-- lua与C++兼容的常量定义,常量值目前为"MetaId_FieldId" +-- @author zhangjin +-- @since 2012-7-17 +--------------------------------------------------------------- + +--K线 +META_FIELD_KLINE_HIGH_PRICE = "1001_1" --最高价 +META_FIELD_KLINE_LOW_PRICE = "1001_2" --最低价 +META_FIELD_KLINE_CLOSE_PRICE = "1001_3" --收盘价 \ No newline at end of file diff --git a/src/xtquant/config/user/root2/lua/config.lua b/src/xtquant/config/user/root2/lua/config.lua new file mode 100644 index 0000000..92b5f61 --- /dev/null +++ b/src/xtquant/config/user/root2/lua/config.lua @@ -0,0 +1,1485 @@ +--lua脚本相对于运行路径的相对路径 +luaScriptPath = "../script/systemlua" +--vb脚本相对于运行路径的相对路径 +vbScriptPath = "../script/vb" + +--[[--------------------------------------------------------------- + 金字塔和lua中的关键词 +-----------------------------------------------------------------]] +keyword = { + {key = "if", value = 1}, + {key = "then", value = 1}, + {key = "else", value = 1}, + {key = "while", value = 1}, + {key = "for", value = 1}, + {key = "to", value = 1}, + {key = "do", value = 1}, + {key = "input", value = 1}, + {key = "begin", value = 1}, + {key = "end", value = 1}, + {key = "variable", value = 1}, + {key = "true", value = 1}, + {key = "false", value = 1}, + {key = "break", value = 1}, + {key = "continue", value = 1}, + {key = "repeat", value = 1}, + {key = "until", value = 1}, + {key = "goto", value = 1}, + {key = "exit", value = 1}, + {key = "global", value = 1}, + --color -- + {key = "colorblack", value = 1}, + {key = "colorblue", value = 1}, + {key = "colorbrown", value = 1}, + {key = "colorcyan", value = 1}, + {key = "colorgray", value = 1}, + {key = "colorgreen", value = 1}, + {key = "colormagenta",value = 1}, + {key = "colorred", value = 1}, + {key = "colorwhite", value = 1}, + {key = "coloryellow",value = 1}, + {key = "colorblack", value = 1}, + {key = "colorblack", value = 1}, + {key = "colorblack", value = 1}, + {key = "colorblack", value = 1}, + {key = "colorlired", value = 1}, + {key = "colorlicyan", value = 1}, + + --only in lua-- + {key = "return", value = 1}, + {key = "nil", value = 1}, + {key = "local", value = 1}, + {key = "in", value = 1}, + {key = "function", value = 1}, + {key = "elseif", value = 1}, + --系统保留的关键词,用于翻译时生成的一些中间变量-- + {key = "_ret", value = 11}, + {key = "func", value = 11}, + {key = "timetag", value = 11}, + {key = "", value = 0}, +} +--[[-------------------------------------------------------------- + 金字塔支持的数据引用周期,需要根据我们的实际情况进行调整 + stkindex是stkindi中用到的period index,其中缺失的是 16:节气线 +----------------------------------------------------------------]] +period = { + {name = "tick", time = 0, cycindex = 0, stkindex = 0}, + {name = "sec1", time = 1000, cycindex = 100, stkindex = -1}, + {name = "sec5", time = 5000, cycindex = 101, stkindex = -1}, + {name = "min1", time = 60000, cycindex = 1, stkindex = 1}, + {name = "min3", time = 180000, cycindex = 17, stkindex = 17}, + {name = "min5", time = 300000, cycindex = 2, stkindex = 2}, + {name = "min10",time = 600000, cycindex = 18, stkindex = 18}, + {name = "min15",time = 900000, cycindex = 3, stkindex = 3}, + {name = "min30",time = 1800000, cycindex = 4, stkindex = 4}, + {name = "min60",time = 3600000, cycindex = 5, stkindex = 5}, + {name = "hour", time = 3600000, cycindex = 102, stkindex = -1}, + {name = "day" , time = 86400000, cycindex = 6, stkindex = 6}, + {name = "week", time = 604800000, cycindex = 7, stkindex = 7}, + {name = "month",time = 2592000000, cycindex = 8, stkindex = 8}, + {name = "quarter",time = 7776000000, cycindex = 14, stkindex = 14}, + {name = "semiyear",time = 15552000000, cycindex = 15, stkindex = 15}, + {name = "year",time = 31536000000, cycindex = 9, stkindex = 9}, + {name = "multimin", time = 5400000, cycindex = 11, stkindex = 11}, + {name = "multihour", time = 7200000, cycindex = 13, stkindex = 13}, + {name = "multisec", time = 30000, cycindex = 12, stkindex = 12}, + {name = "multitick", time = 10, cycindex = 19, stkindex = 19}, + {name = "multiday", time = 0, cycindex = 10, stkindex = 10}, + {name = "default", time = -1, cycindex = -1, stkindex = -1}, +} + +--[[------------------------------------------------------------------ + 系统预定义的公式 + 参数类型说明: + 0 普通参数 + 10 普通参数-数字类型 + 20 普通参数-布尔类型 + 1 引用参数,需要解析为函数 + 2 颜色描述符 + 3 线型描述符 + 100 不定长 + 函数类型(type)说明: + 0 行情函数 + 1 数学函数 + 2 逻辑函数 + 3 控制函数 + 4 引用函数 + 5 统计函数 + 6 绘图函数 + 7 时间函数 + 8 常数函数 + 9 字符串函数 + 10 交易系统 + 11 指标函数 + 12 动态行情 + 13 系统函数 + 14 扩展数据函数 + 15 组合模型参数设置 + 16 组合模型运行函数 + 17 财务数据函数 + 18 分级基金数据函数 + 100 用户自定义 + 函数附加参数类型 (epType) 说明: + 0 不附加参数 + 1 只附加timetag一个参数 + 2 附加timetag和formula两个参数 + 3 只附加formula一个参数 + 返回值类型说明: + 0 double + 1 int + 2 bool + 3 string + 4 vector + 5 vector + 6 vector + 7 vector + 100 void + 200 uncertain + 1001 LuaStruct-ChildResult + 1002 LuaStruct-StockHoldingInfo + 1003 LuaStruct-CPositionDetail + 1004 LuaStruct-CDealDetail + 1005 LuaStruct-COrderDetail + 1006 LuaStruct-paramResult + 1007 LuaStruct-StockGroup + 1008 LuaStruct-priceVolumeData + 1009 LuaStruct-OrderSignal + +--------------------------------------------------------------------]] +formula = { + -------------------------type = 0, 行情函数--------------------------------- + {name = "open", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "o", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "close", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "c", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "low", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "l", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "high", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "h", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "vol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "v", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "iperiod", argus = {}, ret = 0, type = 11, epType = 2, leastParam = 0}, + {name = "period", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "settleprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "settlement", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "amount", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "askprice", argus = {10}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "askvol", argus = {10}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "bidprice", argus = {10}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "bidvol", argus = {10}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "bvol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "svol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "indexc", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "indexo", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "indexh", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "indexl", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "indexv", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "indexa", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "oopen", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "oclose", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "ohigh", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "olow", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "ovol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "oamount", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "osettleprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + --{name = "opena", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "openint", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + --{name = "openv", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "qt", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "callstock",argus = {0,0,0,0}, ret = 0, type = 0, epType = 2, leastParam = 2}, + {name = "callstock2",argus = {0,0,0,0}, ret = 0, type = 100, epType = 2, leastParam = 4}, + {name = "rtclose", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "rtvol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "estimatedprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + ---------------获取当日最新数据的函数-------------------- + {name = "tickopen", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "ticklast", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "tickhigh", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "ticklow", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "tickamount", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "tickvol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "ticklastclose", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "tickopenint", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "tickpe", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "transaction", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "ticktransaction", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + -------------------------type = 1, 数学函数--------------------------------- + {name = "max", argus = {10, 10}, ret = 0, type = 1, epType = 0, leastParam = 2}, + {name = "min", argus = {10, 10}, ret = 0, type = 1, epType = 0, leastParam = 2}, + {name = "abs", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "intpart", argus = {10}, ret = 1, type = 1, epType = 0, leastParam = 1}, + {name = "log", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "rounds", argus = {10, 10}, ret = 0, type = 1, epType = 0, leastParam = 2}, + {name = "acos", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "asin", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "atan", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "cos", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "sin", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "tan", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "sqrt", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "ceiling", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "exp", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "floor", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "ln", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "fracpart", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "mod", argus = {10,10}, ret = 0, type = 1, epType = 0, leastParam = 2}, + {name = "pow", argus = {10,10}, ret = 0, type = 1, epType = 0, leastParam = 2}, + {name = "reverse", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "round", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "sgn", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "rand", argus = {10}, ret = 0, type = 1, epType = 0, leastParam = 1}, + {name = "combin", argus = {10,10}, ret = 0, type = 1, epType = 1, leastParam = 2}, + -------------------------type = 2, 逻辑函数--------------------------------- + {name = "all", argus = {20, 10}, ret = 2, type = 2, epType = 1, leastParam = 2}, + {name = "every", argus = {20, 10}, ret = 2, type = 2, epType = 1, leastParam = 2}, + {name = "iff", argus = {20,0,0}, ret = 200, type = 2, epType = 0, leastParam = 3}, + {name = "ifelse", argus = {20,0,0}, ret = 200, type = 2, epType = 0, leastParam = 3}, + {name = "not", argus = {20}, ret = 2, type = 2, epType = 2, leastParam = 1},--lua 有个not运算符 + {name = "valuewhen",argus = {20,0}, ret = 0, type = 2, epType = 1, leastParam = 2}, + {name = "any", argus = {20,10}, ret = 2, type = 2, epType = 1, leastParam = 2}, + {name = "exist", argus = {20,10}, ret = 2, type = 2, epType = 1, leastParam = 2}, + {name = "cross", argus = {10,10}, ret = 2, type = 2, epType = 1, leastParam = 2}, + {name = "valid", argus = {0}, ret = 2, type = 2, epType = 0, leastParam = 1}, + {name = "between", argus = {10,10,10}, ret = 2, type = 2, epType = 0, leastParam = 3}, + {name = "ifn", argus = {20,0,0}, ret = 200, type = 2, epType = 0, leastParam = 3}, + {name = "isdown", argus = {}, ret = 2, type = 2, epType = 2, leastParam = 0}, + {name = "isequal", argus = {}, ret = 2, type = 2, epType = 2, leastParam = 0}, + {name = "isup", argus = {}, ret = 2, type = 2, epType = 2, leastParam = 0}, + {name = "longcross",argus = {10,10,10}, ret = 2, type = 2, epType = 1, leastParam = 3}, + {name = "islastbar", argus = {}, ret = 2, type = 2, epType = 2, leastParam = 0}, + {name = "last", argus = {20,10,10}, ret = 2, type = 2, epType = 1, leastParam = 3}, + {name = "range", argus = {10,10,10}, ret = 2, type = 2, epType = 0, leastParam = 3}, + {name = "suspend", argus = {10}, ret = 0, type = 2, epType = 2, leastParam = 0}, + {name = "setdataalignmode", argus = {10}, ret = 100, type = 2, epType = 3, leastParam = 1}, + {name = "unitofquantity", argus = {0}, ret = 1, type = 2, epType = 3, leastParam = 1}, + {name = "equalweightindex", argus = {0}, ret = 3, type = 2, epType = 3, leastParam = 1}, + {name = "isindexorglr", argus = {0}, ret = 1, type = 2, epType = 3, leastParam = 1}, + {name = "isetfcode", argus = {0}, ret = 1, type = 2, epType = 3, leastParam = 1}, + {name = "isindexcode", argus = {0}, ret = 1, type = 2, epType = 3, leastParam = 1}, + {name = "isfuturecode", argus = {0}, ret = 1, type = 2, epType = 3, leastParam = 1}, + -------------------------type = 4, 引用函数--------------------------------- + {name = "sma", argus = {10, 10, 10}, ret = 0, type = 4, epType = 1, leastParam = 3}, + {name = "ref", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "barslast", argus = {20}, ret = 0, type = 4, epType = 1, leastParam = 1}, + {name = "barslasts", argus = {20, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "sum", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "hhv", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "count", argus = {20, 10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "ma", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "xma", argus = {1, 10}, ret = 0, type = 4, epType = 2, leastParam = 2}, + {name = "ima", argus = {10,10,10}, ret = 0, type = 4, epType = 1, leastParam = 3}, + {name = "dma", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "ema", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "tma", argus = {10, 10, 10}, ret = 0, type = 4, epType = 1, leastParam = 3}, + {name = "filter", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "llv", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "barscount",argus = {10}, ret = 1, type = 4, epType = 1, leastParam = 1}, + {name = "barssince",argus = {20}, ret = 1, type = 4, epType = 1, leastParam = 1}, + {name = "barssincen",argus = {20,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "currbarscount", argus= {}, ret = 1, type = 4, epType = 2, leastParam = 0}, + {name = "hhvbars", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "llvbars", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "sfilter", argus = {20,20}, ret = 2, type = 4, epType = 1, leastParam = 2}, + {name = "tr", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "trma", argus = {10,10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "wma", argus = {10,10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "todaybar", argus = {}, ret = 1, type = 4, epType = 2, leastParam = 0}, + {name = "ret", argus = {10,10}, ret = 0, type = 4, epType = 2, leastParam = 2}, + {name = "newhbars", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "newlbars", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "refdate", argus = {1,10,10}, ret = 0, type = 4, epType = 2, leastParam = 2}, + {name = "hod", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "lod", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "sumbars", argus = {10,10}, ret = 1, type = 4, epType = 1, leastParam = 2}, + {name = "drawnull", argus = {}, ret = 0, type = 4, epType = 0, leastParam = 0}, + {name = "barpos", argus = {}, ret = 1, type = 4, epType = 2, leastParam = 0}, + {name = "market", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "refx", argus = {1,10}, ret = 0, type = 4, epType = 2, leastParam = 2}, + {name = "refparam", argus = {0,0}, ret = 0, type = 4, epType = 2, leastParam = 1}, + {name = "median", argus = {10,10}, ret = 0, type = 4, epType = 2, leastParam = 2}, + {name = "stkindi", argus = {0,0,10,10,10,10}, ret = 0, type = 4, epType = 0, leastParam = 4}, + {name = "backset", argus = {20,10}, ret = 0, type = 4, epType = 2, leastParam = 2}, + {name = "backsetx", argus = {20,10,0}, ret = 0, type = 4, epType = 2, leastParam = 3}, + --{name = "fliterx", argus = {1,0}, ret = 0, type = 4, epType = 2, leastParam = 2}, -- problems + --{name = "setval", argus = {1,0}, ret = 0, type = 4, epType = 2, leastParam = 2}, -- problems + {name = "setrefxnum", argus = {0}, ret = 100, type = 4, epType = 2, leastParam = 1}, + {name = "barsnext", argus = {20}, ret = 1, type = 4, epType = 2, leastParam = 1}, + {name = "dopen", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "dhigh", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "dlow", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "dclose", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "dvol", argus = {}, ret = 0, type = 4, epType = 2, leastParam = 0}, + {name = "barslastcount", argus = {20}, ret = 1, type = 4, epType = 2, leastParam = 1}, + {name = "mema", argus = {10, 10}, ret = 0, type = 4, epType = 1, leastParam = 2}, + {name = "hod2", argus = {0, 10, 10}, ret = 1, type = 4, epType = 0, leastParam = 3}, + -------------------------type = 6, 绘图函数--------------------------------- + {name = "kline", argus = {10,10,10,10,0}, ret = 100, type = 6, epType = 0, leastParam = 5}, + {name = "drawtext", argus = {20,10,0,2,0}, ret = 100, type = 6, epType = 0, leastParam = 3}, + --{name = "drawtextex",argus = {20,10,10,10,0,2}, ret = 100, type = 6, epType = 0, leastParam = 5}, + {name = "barsset", argus = {20,10,10,10}, ret = 100, type = 6, epType = 0, leastParam = 4}, + --{name = "drawarc", argus = {20,10,20,10,0,0,2,0,3}, ret = 100, type = 6, epType = 0, leastParam = 6}, + {name = "drawbmp", argus = {20,10,0,0}, ret = 100, type = 6, epType = 0, leastParam = 3}, + {name = "drawline", argus = {20,10,20,10,0,2,0,3}, ret = 100, type = 6, epType = 0, leastParam = 5}, + {name = "vertline", argus = {20,10,10,2,4,3},ret = 100, type = 6, epType = 0, leastParam = 1}, + --{name = "stickline",argus = {20,10,10,0,0,2},ret = 100, type = 6, epType = 0, leastParam = 5}, + --{name = "partline", argus = {20,10,2,0,3}, ret = 100, type = 6, epType = 0, leastParam = 2}, + {name = "colorrgb", argus = {10,10,10}, ret = 1, type = 6, epType = 0, leastParam = 3}, + {name = "drawnumber",argus= {20,10,10,10,2,0},ret =100, type = 6, epType = 0, leastParam = 4}, + {name = "drawicon", argus = {20,10,0,0}, ret = 100, type = 6, epType = 0, leastParam = 3}, + {name = "drawband", argus = {10,2,10,2}, ret = 100, type = 6, epType = 0, leastParam = 4}, + {name = "drawgbk_div", argus = {20,2,2,0,0}, ret = 100, type = 6, epType = 0, leastParam = 5}, + {name = "drawstick", argus = {0, 0, 10, 2, 2}, ret = 100, type = 6, epType = 0, leastParam = 5}, + {name = "drawarrow", argus = {0, 0, 0, 0, 0, 0, 2}, ret = 100, type = 6, epType = 0, leastParam = 7}, + {name = "drawrectangle", argus = {0, 0, 0, 0, 0, 0, 2}, ret = 100, type = 6, epType = 0, leastParam = 7}, + {name = "drawtext_fix", argus = {20,10,10,10,0}, ret = 100, type = 6, epType = 0, leastParam = 5}, + {name = "stickline", argus = {20,10,10,10,10}, ret = 100, type = 6, epType = 0, leastParam = 5}, + -------------------------type = 7, 时间函数--------------------------------- + {name = "date", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "ndate", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "tdate", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "hour", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "year", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "day", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "minute", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "month", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "quarter", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "time", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "ntime", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "weekday", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "tweekday", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "timerat", argus = {10,10}, ret = 0, type = 7, epType = 2, leastParam = 2}, + {name = "timerafter", argus = {10,10,10}, ret = 0, type = 7, epType = 2, leastParam = 3}, + {name = "currentdate",argus = {}, ret = 1, type = 7, epType = 0, leastParam = 0}, + {name = "currenttime",argus = {}, ret = 1, type = 7, epType = 0, leastParam = 0}, + {name = "todaymilliseconds",argus = {}, ret = 1, type = 7, epType = 0, leastParam = 0}, + {name = "datediff", argus = {10,10}, ret = 1, type = 7, epType = 0, leastParam = 2}, + {name = "datetod1970",argus = {10}, ret = 1, type = 7, epType = 0, leastParam = 1}, + {name = "dayofweek",argus = {10}, ret = 1, type = 7, epType = 0, leastParam = 1}, + {name = "days1970", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "t0totime", argus = {10}, ret = 1, type = 7, epType = 0, leastParam = 1}, + {name = "timetot0", argus = {10}, ret = 1, type = 7, epType = 0, leastParam = 1}, + {name = "time0", argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "barpos", argus = {}, ret = 1, type = 7, epType = 1, leastParam = 0}, + {name = "barstatus",argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "d1970todate",argus = {10}, ret = 1, type = 7, epType = 0, leastParam = 1}, + {name = "datepos", argus = {0}, ret = 1, type = 7, epType = 2, leastParam = 1}, + {name = "openminutes",argus = {10}, ret = 1, type = 7, epType = 2, leastParam = 1}, + {name = "nextholidaydif",argus = {0}, ret = 1, type = 7, epType = 2, leastParam = 1}, + {name = "nextholidaydifspec",argus = {0,0}, ret = 1, type = 7, epType = 2, leastParam = 1}, + {name = "nextmonthdaydif",argus = {0}, ret = 1, type = 7, epType = 2, leastParam = 1}, + {name = "timefromstart",argus = {}, ret = 1, type = 7, epType = 2, leastParam = 0}, + {name = "currenttradedate",argus = {0}, ret = 1, type = 7, epType = 2, leastParam = 1}, + {name = "inbar", argus = {10,10}, ret = 2, type = 7, epType = 2, leastParam = 2}, + {name = "datetoday",argus = {10}, ret = 1, type = 7, epType = 0, leastParam = 1}, + -------------------------type = 8, 常数函数--------------------------------- + {name = "capital", argus = {}, ret = 0, type = 8, epType = 2, leastParam = 0}, + {name = "capitalTotal", argus = {}, ret = 0, type = 8, epType = 2, leastParam = 0}, + {name = "datacount", argus = {}, ret = 1, type = 8, epType = 2, leastParam = 0}, + {name = "closetime", argus = {10}, ret = 1, type = 8, epType = 2, leastParam = 1}, + {name = "datatype", argus = {}, ret = 1, type = 8, epType = 2, leastParam = 0}, + {name = "datatypemore",argus={10}, ret = 0, type = 8, epType = 0, leastParam = 1}, + {name = "findindexbytime",argus={0}, ret = 0, type = 8, epType = 2, leastParam = 1}, + {name = "mindiff", argus = {}, ret = 0, type = 8, epType = 2, leastParam = 0}, + {name = "opentime", argus = {10}, ret = 1, type = 8, epType = 2, leastParam = 1}, + {name = "volunit", argus = {}, ret = 0, type = 8, epType = 2, leastParam = 0}, + {name = "getinstrumentdetail", argus = {0, 0}, ret = 3, type = 8, epType = 2, leastParam = 2}, + {name = "limitupperformance", argus = {0, 0}, ret = 0, type = 8, epType = 2, leastParam = 2}, + {name = "fundnetvalue", argus = {0, 0}, ret = 0, type = 8, epType = 2, leastParam = 2}, + -------------------------type = 9, 字符串函数-------------------------------- + {name = "lowerstr", argus = {0}, ret = 3, type = 9, epType = 0, leastParam = 1}, + {name = "upperstr", argus = {0}, ret = 3, type = 9, epType = 0, leastParam = 1}, + {name = "strlen", argus = {0}, ret = 1, type = 9, epType = 0, leastParam = 1}, + {name = "strleft", argus = {0,0}, ret = 3, type = 9, epType = 0, leastParam = 2}, + {name = "strmid", argus = {0,0,0}, ret = 3, type = 9, epType = 0, leastParam = 3}, + {name = "strright", argus = {0,0}, ret = 3, type = 9, epType = 0, leastParam = 2}, + {name = "ltrim", argus = {0}, ret = 3, type = 9, epType = 0, leastParam = 1}, + {name = "rtrim", argus = {0}, ret = 3, type = 9, epType = 0, leastParam = 1}, + {name = "numtostr", argus = {0,0}, ret = 3, type = 9, epType = 0, leastParam = 2}, + {name = "strcat", argus = {0,0}, ret = 3, type = 9, epType = 0, leastParam = 2}, + {name = "strtonum", argus = {0}, ret = 0, type = 9, epType = 0, leastParam = 1}, + {name = "strtonumex", argus = {0,0}, ret = 0, type = 9, epType = 0, leastParam = 2}, + {name = "strinsert",argus = {0,0,0}, ret = 3, type = 9, epType = 0, leastParam = 3}, + {name = "strremove",argus = {0,0,0}, ret = 3, type = 9, epType = 0, leastParam = 3}, + {name = "strfind", argus = {0,0,0}, ret = 1, type = 9, epType = 0, leastParam = 3}, + {name = "strreplace",argus = {0,0,0}, ret = 3, type = 9, epType = 0, leastParam = 3}, + {name = "strtrimleft",argus = {0,0}, ret = 3, type = 9, epType = 0, leastParam = 2}, + {name = "strtrimright",argus = {0,0}, ret = 3, type = 9, epType = 0, leastParam = 2}, + {name = "strcmp", argus = {0,0}, ret = 1, type = 9, epType = 0, leastParam = 2}, + {name = "stricmp", argus = {0,0}, ret = 1, type = 9, epType = 0, leastParam = 2}, + {name = "strncmp", argus = {0,0,0}, ret = 1, type = 9, epType = 0, leastParam = 3}, + {name = "stringtofile", argus = {0,0}, ret = 100, type = 9, epType = 0, leastParam = 2}, + {name = "stklabel", argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "marketlabel",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "formulaname",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "blkname", argus = {}, ret = 3, type = 9, epType = 3, leastParam = 0}, + {name = "findblock", argus = {0}, ret = 3, type = 9, epType = 3, leastParam = 1}, + {name = "findindex", argus = {0, 0}, ret = 3, type = 9, epType = 2, leastParam = 2}, + {name = "switchindex", argus = {0, 0}, ret = 3, type = 9, epType = 2, leastParam = 2}, + {name = "convfuture", argus = {0, 0}, ret = 3, type = 9, epType = 3, leastParam = 2}, + {name = "marketname",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "marketlabel1",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "stkname", argus = {0}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "timestamptostr",argus = {10}, ret = 3, type = 9, epType = 0, leastParam = 1}, + {name = "strtotimestamp",argus = {0}, ret = 1, type = 9, epType = 0, leastParam = 1}, + {name = "findblocklist", argus = {0}, ret = 1007, type = 9, epType = 3, leastParam = 1}, + {name = "stockcode",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "stgname",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + --------------------to do fomula----------------------- + --{name = "enginecode",argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + --{name = "username", argus = {}, ret = 3, type = 9, epType = 2, leastParam = 0}, + {name = "inblock", argus = {0}, ret = 1, type = 9, epType = 2, leastParam = 1}, + {name = "inblock2", argus = {0,0}, ret = 1, type = 9, epType = 2, leastParam = 1}, + {name = "get_external_data_single_number", argus = {0,0,0}, ret = 0, type = 9, epType = 0, leastParam = 3}, + {name = "get_external_data_single_string", argus = {0,0,0}, ret = 3, type = 9, epType = 0, leastParam = 3}, + {name = "get_external_data_kline", argus = {0,0,0,0}, ret = 0, type = 9, epType = 0, leastParam = 4}, + {name = "blocksize", argus = {0,0}, ret = 1, type = 9, epType = 2, leastParam = 1}, + {name = "stockbyblockrank", argus = {0,0,0}, ret = 3, type = 9, epType = 2, leastParam = 3}, + {name = "blocksum", argus = {0,0}, ret = 0, type = 9, epType = 2, leastParam = 2}, + {name = "fmt", argus = {100}, ret = 3, type = 9, epType = 0, leastParam = 1}, + -------------------------type = 5, 统计函数--------------------------------- + {name = "deliveryinterval", argus = {}, ret = 1, type = 5, epType = 2, leastParam = 0}, + {name = "deliveryinterval2", argus = {0}, ret = 1, type = 5, epType = 2, leastParam = 0}, + {name = "deliveryinterval3", argus = {}, ret = 1, type = 5, epType = 2, leastParam = 0}, + {name = "expiredate", argus = {0}, ret = 1, type = 5, epType = 3, leastParam = 1}, + {name = "mainexpiredate", argus = {0}, ret = 1, type = 5, epType = 2, leastParam = 1}, + {name = "standardize",argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "avedev", argus = {10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "beta2", argus = {10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "relate", argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "covar", argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "mode", argus ={0,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, --可以考虑建立另一种层面的优化,以map为cache + {name = "std", argus = {10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "var", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "varp", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "stdp", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "devsq", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "steyx", argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "pearson", argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "rsq", argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "intercept",argus ={10,10,10}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "harmean", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "geomean", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "kurt", argus ={10,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "weibull", argus ={0,0,0,20}, ret = 0, type = 5, epType = 2, leastParam = 4}, + {name = "binomdist",argus = {0,0,0,20}, ret = 0, type = 5, epType = 2, leastParam = 4}, + {name = "expondist",argus ={0,0,20}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "fisher", argus ={10}, ret = 0, type = 5, epType = 2, leastParam = 1}, + {name = "fisherinv",argus ={10}, ret = 0, type = 5, epType = 2, leastParam = 1}, + {name = "hypgeomdist",argus ={0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 4}, + {name = "negbinomdist",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "permut",argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "poisson",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "critbinom",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "ftest", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "skew", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "small", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "large", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "quartile",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "trimmean", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "percentile",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + {name = "percentrank",argus ={0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 4}, + {name = "slope", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "forcast", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "drl", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "slope20", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "slope21", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "slope22", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "forcast2", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "drl2", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + {name = "nolot", argus ={0,10}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --------------------------to do formula ------------------------------------- + --{name = "finv", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "beta", argus = {0}, ret = 0, type = 5, epType = 2, leastParam = 1}, + --{name = "betadist", argus = {0,0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 5}, + --{name = "betainf", argus = {0,0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 5}, + --{name = "chidist", argus = {0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "chiinv", argus = {0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "confidence",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "fdist", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "gammadist",argus ={0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 4}, + --{name = "gammainv", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "gammainv", argus ={0}, ret = 0, type = 5, epType = 2, leastParam = 1}, + --{name = "loginv", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "lognormdist",argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "normdist", argus ={0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 4}, + --{name = "norminv", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "normsdist",argus ={0}, ret = 0, type = 5, epType = 2, leastParam = 1}, + --{name = "normsinv", argus ={0}, ret = 0, type = 5, epType = 2, leastParam = 1}, + --{name = "tdist", argus ={0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "alike", argus = {1,1,0}, ret = 0, type = 5, epType = 2, leastParam = 3}, + --{name = "tinv", argus ={0,0}, ret = 0, type = 5, epType = 2, leastParam = 2}, + --{name = "ttest", argus ={1,1,0,0}, ret = 0, type = 5, epType = 2, leastParam = 4}, + --{name = "ztest", argus ={1,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 4}, + --{name = "prob", argus ={0,0,0,0,0}, ret = 0, type = 5, epType = 2, leastParam = 5}, + + -------------------------type = 10, 交易系统-------------------------------- + {name = "order", argus = {0,0,0,0}, ret = 100, type = 10, epType = 2, leastParam = 2}, + -- {name = "passorder", argus = {0,0,0,0,0,10,0,10,0,0}, ret = 1, type = 10, epType = 2, leastParam = 7}, + {name = "passorder", argus = {0,0,0,0,0,0,0,0,0,0,0}, ret = 100, type = 10, epType = 2, leastParam = 11}, + --{name = "trade", argus = {0,0}, ret = 100, type = 10, epType = 2, leastParam = 1}, + {name = "hedgestocktrade", argus = {0,0}, ret = 100, type = 10, epType = 2, leastParam = 1}, + {name = "sleep", argus = {0}, ret = 100, type = 10, epType = 0, leastParam = 1}, + {name = "holding", argus = {0,0,0,0}, ret = 1, type = 10, epType = 3, leastParam = 4}, + {name = "holdings", argus = {0}, ret = 1003, type = 10, epType = 3, leastParam = 1}, + {name = "ordering", argus = {0,0,0,0,0}, ret = 1, type = 10, epType = 3, leastParam = 4}, + {name = "orderings", argus = {0,0}, ret = 1005, type = 10, epType = 3, leastParam = 1}, + {name = "deal", argus = {0,0,0,10,0,0}, ret = 1, type = 10, epType = 3, leastParam = 4}, + {name = "deals", argus = {0,0}, ret = 1004, type = 10, epType = 3, leastParam = 1}, + {name = "account", argus = {}, ret = 3, type = 10, epType = 3, leastParam = 0}, + {name = "accounttype", argus = {}, ret = 3, type = 10, epType = 3, leastParam = 0}, + {name = "taccount", argus = {0,0}, ret = 0, type = 10, epType = 3, leastParam = 2}, + {name = "cancel", argus = {0,0,0}, ret = 100, type = 10, epType = 3, leastParam = 3}, + --{name = "writeorder", argus = {0,0}, ret = 100, type = 10, epType = 2, leastParam = 2}, + {name = "positionadjust", argus = {0,0,0}, ret = 3, type = 10, epType = 0, leastParam = 3}, + {name = "marketvalue", argus = {0,0}, ret = 0, type = 10, epType = 3, leastParam = 2}, + --{name = "run", argus = {}, ret = 100, type = 10, epType = 0, leastParam = 0}, + {name = "loadbasket", argus = {0,0,0}, ret = 1, type = 10, epType = 3, leastParam = 3}, + {name = "stopprice", argus = {10,0,0}, ret = 0, type = 10, epType = 3, leastParam = 1}, + {name = "contractmultiplier", argus = {0}, ret = 1, type = 10, epType = 3, leastParam = 1}, + {name = "dealamounts", argus = {0,0,10}, ret = 0, type = 10, epType = 2, leastParam = 3}, + {name = "algo_passorder", argus = {0,0,0,0,0,0,0,0,0,0,0,0}, ret = 100, type = 10, epType = 2, leastParam = 12}, + {name = "cancel_task", argus = {0,0,0}, ret = 100, type = 10, epType = 3, leastParam = 3}, + {name = "readsignal", argus = {0,0}, ret = 1009, type = 10, epType = 2, leastParam = 2}, + {name = "drawsignal", argus = {20,10,10}, ret = 100, type = 10, epType = 2, leastParam = 3}, + {name = "cmdprogress", argus = {10}, ret = 0, type = 10, epType = 2, leastParam = 1}, + {name = "cmdstatus", argus = {10}, ret = 0, type = 10, epType = 2, leastParam = 1}, + -------------------------type = 11, 指标函数-------------------------------- + {name = "sar", argus = {0,0,0}, ret = 0, type = 11, epType = 2, leastParam = 3}, + {name = "sarturn", argus = {0,0,0}, ret = 0, type = 11, epType = 2, leastParam = 3}, + {name = "getcurrenttrendlinevalue", argus = {0,0,0,0,0}, ret = 0, type = 11, epType = 3, leastParam = 5}, + -------------------------type = 12, 动态行情函数-------------------------------- + {name = "condition", argus = {0,0}, ret = 0, type = 12, epType = 3, leastParam = 2}, + {name = "dynainfo", argus = {0,0,0}, ret = 0, type = 12, epType = 3, leastParam = 1}, + {name = "markettime", argus = {0}, ret = 0, type = 12, epType = 3, leastParam = 0}, + {name = "orderdirection", argus = {}, ret = 1, type = 2, epType = 2, leastParam = 0}, + --{name = "dbidvol", argus = {0}, ret = 0, type = 12, epType = 3, leastParam = 1}, + {name = "blockrank", argus = {0,0,0}, ret = 0, type = 12, epType = 2, leastParam = 3}, + -------------------------type = 13, 系统函数-------------------------------- + {name = "printout", argus = {100}, ret = 100, type = 13, epType = 2, leastParam = 1}, + {name = "setoutput", argus = {0}, ret = 100, type = 13, epType = 2, leastParam = 1}, + {name = "md5", argus = {0}, ret = 3, type = 13, epType = 2, leastParam = 1}, + {name = "crc64", argus = {0,0}, ret = 0, type = 13, epType = 2, leastParam = 2}, + {name = "crc64num", argus = {0,0}, ret = 0, type = 13, epType = 2, leastParam = 2}, + {name = "reqid", argus = {}, ret = 3, type = 13, epType = 2, leastParam = 0}, + {name = "uuid", argus = {}, ret = 1, type = 13, epType = 2, leastParam = 0}, + {name = "isequalv", argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "isgreater",argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "isgreaterequal", argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "isless", argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "islessequal", argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "isvalid", argus = {0}, ret = 2, type = 13, epType = 0, leastParam = 1}, + --{name = "nosorted", argus = {0}, ret = 2, type = 13, epType = 0, leastParam = 1}, + {name = "setdrtype", argus = {0}, ret = 100, type = 13, epType = 0, leastParam = 1}, + {name = "exist1", argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "existrange", argus = {0,0,0}, ret = 2, type = 13, epType = 0, leastParam = 3}, + {name = "removekey", argus = {0,0}, ret = 100, type = 13, epType = 0, leastParam = 2}, + {name = "holdingornot", argus = {0,0}, ret = 2, type = 13, epType = 0, leastParam = 2}, + {name = "tohold", argus = {0,0}, ret = 100, type = 13, epType = 0, leastParam = 2}, + {name = "toabandon", argus = {0,0}, ret = 100, type = 13, epType = 0, leastParam = 2}, + {name = "multisort", argus ={0,0}, ret = 100, type = 13, epType = 0, leastParam = 2}, + {name = "playsound", argus = {20,0,0}, ret = 100, type = 13, epType = 2, leastParam = 3}, + {name = "sendmail", argus={0,0,0,0,0,0,0}, ret = 2, type =13, epType=2, leastParam = 7}, + {name = "customarg", argus = {0}, ret = 3, type = 13, epType = 2, leastParam = 1}, + {name = "setcustomarg", argus = {0,0}, ret = 100, type = 13, epType = 2, leastParam = 2}, + {name = "setshareddata", argus = {0,0}, ret = 100, type = 13, epType = 2, leastParam = 2}, + {name = "getshareddata", argus = {0}, ret = 3, type = 13, epType = 2, leastParam = 1}, + {name = "serialize", argus = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, ret = 3, type = 13, epType = 2, leastParam = 1}, + {name = "speak", argus = {0,0,0}, ret = 100, type = 13, epType = 2, leastParam = 3}, + + -------------------------type = 14, 扩展数据函数-------------------------------- + {name = "extdata", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 1}, + {name = "extdatarange", argus = {0,0,0}, ret = 4, type = 14, epType = 2, leastParam = 1}, + {name = "extdatamatch", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 3}, + {name = "extdatarank", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 2}, + {name = "extindexdata", argus = {0,0,0,10,10}, ret = 4, type = 14, epType = 3, leastParam = 5}, + {name = "testrank", argus = {0,0,0}, ret =0, type =14, epType =2, leastParam =2}, + {name = "extdatabigger", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 2}, + {name = "extranktovalue", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 3}, + {name = "extranktocode", argus = {0,0,0}, ret = 3, type = 14, epType = 2, leastParam = 3}, + {name = "extblockranktocode", argus = {0,0,0}, ret = 3, type = 14, epType = 2, leastParam = 3}, + {name = "selfcacheptr", argus = {0}, ret = 0, type =14 ,epType = 3, leastParam = 1}, + {name = "extdatablockrank", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 3}, + {name = "extdatablocksum", argus = {0,0}, ret = 0, type = 14, epType = 2, leastParam = 2}, + {name = "extdatablocksumrange", argus = {0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 3}, + {name = "extdatablocksplitavg", argus = {0,0,0,0}, ret = 0, type = 14, epType = 2, leastParam = 4}, + -------------------------type = 15, 组合模型函数-------------------------------- + {name = "setgroupmaxholding", argus = {0}, ret = 100,type = 15, epType = 3, leastParam = 1}, + {name = "setgroupmode", argus = {0}, ret = 100, type = 15, epType = 3, leastParam = 1}, + {name = "setgroupindex", argus = {0}, ret = 100, type = 15, epType = 3, leastParam = 1}, + {name = "creategroup", argus = {}, ret = 1007, type = 15, epType = 2, leastParam = 0}, + {name = "groupadd", argus = {0,0}, ret = 1, type = 15, epType = 2, leastParam = 2}, + {name = "groupdel", argus = {0,0}, ret = 1, type = 15, epType = 2, leastParam = 2}, + {name = "groupfind", argus = {0,0}, ret = 1, type = 15, epType = 2, leastParam = 2}, + {name = "groupclear", argus = {0}, ret = 100, type = 15, epType = 2, leastParam = 1}, + {name = "groupcount", argus = {0}, ret = 1, type = 15, epType = 2, leastParam = 1}, + {name = "groupat", argus = {0,0}, ret = 3, type = 15, epType = 2, leastParam = 2}, + {name = "getgroupbuy", argus = {0}, ret = 1007, type = 15, epType = 2, leastParam = 1}, + {name = "getgroupsell", argus = {0}, ret = 1007, type = 15, epType = 2, leastParam = 1}, + {name = "getgroupholdings", argus = {0}, ret = 1007, type = 15, epType = 2, leastParam = 1}, + {name = "groupdebug", argus = {0}, ret = 3, type = 15, epType = 2, leastParam = 1}, + {name = "splitgroupbyextdata", argus = {0,0,0,0,0}, ret = 1007, type = 15, epType = 2, leastParam = 5}, + {name = "splitgroupbyextdatatoprank", argus = {0,0,0,0,0}, ret = 1007, type = 15, epType = 2, leastParam = 5}, + {name = "groupadjust", argus = {0}, ret = 1, type = 15, epType = 2, leastParam = 1}, + {name = "getstocklist", argus = {0}, ret = 1007, type = 15, epType = 2, leastParam = 1}, + {name = "getstocklistadjust", argus = {0}, ret = 1007, type = 15, epType = 2, leastParam = 1}, + {name = "getinitgroup", argus = {}, ret = 1007, type = 15, epType = 2, leastParam = 0}, + -------------------------type = 16, 组合模型运行函数-------------------------------- + {name = "getstockinfo", argus = {0,0}, ret = 1001, type = 16, epType = 2, leastParam = 1}, + {name = "getstockinfobyindex", argus = {0,0}, ret = 1001, type = 16, epType = 2, leastParam = 1}, + {name = "isstockinholding", argus = {0}, ret = 2, type = 16, epType = 2, leastParam = 1}, + {name = "isstockinholdingbyindex", argus = {0}, ret = 2, type = 16, epType = 2, leastParam = 1}, + {name = "groupbuy", argus = {0}, ret = 100, type = 16, epType = 2, leastParam = 1}, + {name = "groupbuybyindex", argus = {0}, ret = 100, type = 16, epType = 2, leastParam = 1}, + {name = "groupsell", argus = {0}, ret = 2, type = 16, epType = 2, leastParam = 1}, + {name = "groupsellbyindex", argus = {0}, ret = 2, type = 16, epType = 2, leastParam = 1}, + {name = "grouppossiblebuy", argus = {0}, ret = 100, type = 16, epType = 2, leastParam = 1}, + {name = "grouppossiblebuybyindex", argus = {0}, ret = 100, type = 16, epType = 2, leastParam = 1}, + {name = "grouppossiblesell", argus = {0}, ret = 100, type = 16, epType = 2, leastParam = 1}, + {name = "grouppossiblesellbyindex", argus = {0}, ret = 100, type = 16, epType = 2, leastParam = 1}, + {name = "getholdinginfo", argus = {0}, ret = 1002, type = 16, epType = 2, leastParam = 1}, + {name = "getholdinginfobyindex", argus = {0}, ret = 1002, type = 16, epType = 2, leastParam = 1}, + {name = "getholdingprofit", argus = {0}, ret = 0, type = 16, epType = 2, leastParam = 1}, + {name = "getholdingrise", argus = {0}, ret = 0, type = 16, epType = 2, leastParam = 1}, + {name = "getgrouprise", argus = {0,0}, ret = 0, type = 16, epType = 2, leastParam = 2}, + {name = "getweight", argus = {0}, ret = 0, type = 16, epType = 0, leastParam = 1}, + {name = "setweight", argus = {0}, ret = 100, type = 16, epType = 0, leastParam = 1}, + {name = "weightsum", argus = {0,0}, ret = 0, type = 16, epType = 2, leastParam = 2}, + {name = "groupdealcount", argus = {}, ret = 0, type = 16, epType = 2, leastParam = 0}, + {name = "indynamicbasket", argus = {0}, ret = 2, type = 16, epType = 2, leastParam = 1}, + {name = "checkgroupresult", argus = {}, ret = 0, type = 16, epType = 2, leastParam = 0}, + {name = "getstockdatabyname", argus = {0,0,0}, ret = 0, type = 16, epType = 2, leastParam = 3}, + {name = "getstockdatabyid", argus = {0,0,0}, ret = 0, type = 16, epType = 2, leastParam = 3}, + {name = "setwriteholdings", argus = {0}, ret = 0, type = 16, epType = 2, leastParam = 1}, + -------------------------type = 0, 金融数据库函数-------------------------------- + --{name = "fdbfinancedata", argus = {10,10}, ret = 0, type = 17, epType = 2, leastParam = 2}, + --{name = "fdbfindata", argus = {0,0,10,10}, ret = 0, type = 17, epType = 2, leastParam = 4}, + --{name = "fdbldbdatabyst", argus = {0,0}, ret = 0, type = 17, epType = 2, leastParam = 2}, + + -------------------------type = 0, 投资组合相关函数--------------------------------- + {name = "marketprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "marketavgprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "algoprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "limitprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "marketvol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "algovol", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + {name = "initprice", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + -------------------------type = 17, 财务数据相关函数--------------------------------- + --{name = "", argus = {}, ret = 0, type = 0, epType = 2, leastParam = 0}, + -------------------------type = 18, 分级基金数据相关函数--------------------------------- + {name = "strufund", argus = {0, 0, 10}, ret = 0, type = 18, epType = 2, leastParam = 1}, + --{name = "gradedfund", argus = {0, 0, 10}, ret = 0, type = 18, epType = 2, leastParam = 1}, + + -------------------------type = 19, Sap相关函数--------------------------------- + --{name = "mongodata", argus = {0}, ret = 3, type = 19, epType = 2, leastParam = 1}, + --{name = "mongodata", argus = {0, 0}, ret = 3, type = 19, epType = 2, leastParam = 1}, + --{name = "mongodata", argus = {0, 0, 0}, ret = 3, type = 19, epType = 2, leastParam = 1}, + --{name = "statistic", argus = {0, 0, 0, 10}, ret = 1, type = 19, epType = 3, leastParam = 1}, + --{name = "statistic", argus = {0, 0, 0, 0, 10}, ret = 1, type = 19, epType = 3, leastParam = 1}, + --{name = "getmongoids", argus = {0}, ret = 7, type = 19, epType = 3, leastParam = 1}, + --{name = "getmongoids", argus = {0, 0}, ret = 7, type = 19, epType = 3, leastParam = 1}, + --{name = "mongodatabyid", argus = {0, 0, 0}, ret = 3, type = 19, epType = 3, leastParam = 1}, + --{name = "mongodatabyid", argus = {0, 0, 0, 0}, ret = 3, type = 19, epType = 3, leastParam = 1}, + --{name = "getdouvector", argus = {}, ret = 4, type = 19, epType = 0, leastParam = 0}, + --{name = "getintvector", argus = {}, ret = 5, type = 19, epType = 0, leastParam = 0}, + --{name = "getboovector", argus = {}, ret = 6, type = 19, epType = 0, leastParam = 0}, + --{name = "getstrvector", argus = {}, ret = 7, type = 19, epType = 0, leastParam = 0}, + + -------------------------type = 20, 通达信相关函数过后来加的函数----------------------------------- + {name = "fromopen", argus={}, ret = 1, type = 20, epType = 2, leastParam = 0}, + {name = "buyvol", argus={}, ret = 0, type = 20, epType = 2, leastParam = 0}, + {name = "sellvol", argus={}, ret = 0, type = 20, epType = 2, leastParam = 0}, + {name = "isbuyorder", argus={}, ret = 1, type = 20, epType = 2, leastParam = 0}, + {name = "issellorder", argus={}, ret = 1, type = 20, epType = 2, leastParam = 0}, + + {name = "const", argus = {10}, ret = 0, type = 20, epType = 0, leastParam = 1}, + {name = "zig", argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "peak", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "trough", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "upnday", argus = {10,10}, ret = 1, type = 20, epType = 1, leastParam = 2}, + {name = "downnday", argus = {10,10}, ret = 1, type = 20, epType = 1, leastParam = 2}, + {name = "nday", argus = {10,10}, ret = 1, type = 20, epType = 1, leastParam = 2}, + {name = "turn", argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "callpython", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 3}, + {name = "getfindata", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "getfindatabyperiod", argus = {0,0,10,10,10}, ret = 0, type = 20, epType = 2, leastParam = 5}, + {name = "getfindatayear", argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "contract", argus = {0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "getlonghubang", argus = {0,0,0}, ret = 3, type = 20, epType = 2, leastParam = 3}, + {name = "gettop10shareholder", argus = {0,0,10}, ret = 3, type = 20, epType = 2, leastParam = 3}, + {name = "gettop10shareholderbyperiod", argus = {0,0,0,0,0,0,0}, ret = 3, type = 20, epType = 2, leastParam = 7}, + {name = "getholdernum", argus = {0}, ret = 1, type = 20, epType = 2, leastParam = 1}, + {name = "gettreasury10y", argus = {0,0}, ret = 0, type = 20, epType = 1, leastParam = 1}, + {name = "finance", argus = {10}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "tickvoldistribution", argus = {10,10,10}, ret = 0, type = 20, epType = 2, leastParam = 3}, + {name = "buysellvols",argus = {10}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "transcationstatic",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "transactionstatistic",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "transcationstaticl1",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "transactionstatisticl1",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "northfinancechange",argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "hktstatistics",argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "hktdetails",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "getliangrongtrade",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "gethighlowstat",argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "getquoteaux",argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "external_data",argus = {0,0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 4}, + {name = "iopv", argus = {}, ret = 0, type = 20, epType = 2, leastParam = 0}, + {name = "get_cb_info", argus = {0,0}, ret = 3, type = 20, epType = 3, leastParam = 2}, + {name = "get_cb_info_num", argus = {0,0}, ret = 0, type = 20, epType = 3, leastParam = 2}, + {name = "get_cb_code", argus = {0,10}, ret = 3, type = 20, epType = 3, leastParam = 1}, + {name = "get_cb_convert_price", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "getopendate", argus = {0}, ret = 1, type = 20, epType = 3, leastParam = 1}, + {name = "gethismaincontract", argus = {0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "maincontractchange", argus = {0}, ret = 1, type = 20, epType = 2, leastParam = 1}, + {name = "getrealcontract", argus = {0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "getopenamount", argus = {}, ret = 0, type = 20, epType = 3, leastParam = 0}, + {name = "getopenvol", argus = {}, ret = 0, type = 20, epType = 3, leastParam = 0}, + {name = "getcapitalflow", argus = {0, 0}, ret = 3, type = 20, epType = 2, leastParam = 2}, + {name = "getcapitalflowbyholder", argus = {0, 0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "winner", argus = {10}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "cost", argus = {10}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "upstopprice", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "downstopprice", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "get_etf_statistics", argus = {0, 0}, ret = 0, type = 12, epType = 2, leastParam = 2}, + {name = "get_etf_statisticsl2", argus = {0, 0}, ret = 0, type = 12, epType = 2, leastParam = 2}, + -------------------------type = 21, 因子数据函数-------------------------------- + {name = "multifactor", argus = {0,0,0}, ret = 0, type = 21, epType = 2, leastParam = 1}, + {name = "multifactorrank", argus = {0,0,0}, ret = 0, type = 21, epType = 2, leastParam = 1}, + {name = "paramcombcalc", argus = {100}, ret = 1006, type = 20, epType = 0, leastParam = 1}, + {name = "get_ah_code", argus = {0}, ret = 3, type = 20, epType = 3, leastParam = 1}, + {name = "getoptinfo", argus = {0}, ret = 1006, type = 20, epType = 2, leastParam = 1}, + {name = "getoptlistbyundl", argus = {0, 0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "getoptcode", argus = {0, 0, 0, 0}, ret = 3, type = 20, epType = 2, leastParam = 4}, + {name = "getoptundlcode", argus = {0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "getoptcodebyno", argus = {0, 0, 0, 0, 0, 0, 0, 0}, ret = 3, type = 20, epType = 2, leastParam = 8}, + {name = "getoptcodebyno2", argus = {0, 0, 0, 0, 0, 0, 0, 0}, ret = 3, type = 20, epType = 2, leastParam = 8}, + {name = "getexerciseinterval", argus = {0, 0}, ret = 1, type = 20, epType = 2, leastParam = 2}, + {name = "getoptiv", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 3}, + {name = "getoptivgreek", argus = {0,0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 4}, + {name = "getcbconversionvalue", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "getcbconversionpremium", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "getorderflowdetail", argus = {0, 0}, ret = 1008, type = 20, epType = 2, leastParam = 2}, + {name = "getorderflow", argus = {0}, ret = 1, type = 20, epType = 2, leastParam = 1}, + {name = "getorderflowunbalance", argus = {0, 0, 0}, ret = 1, type = 20, epType = 2, leastParam = 3}, + {name = "getorderflowunbalancepricein", argus = {0, 0, 0, 0, 0}, ret = 1, type = 20, epType = 2, leastParam = 3}, + {name = "getorderflowpoc", argus = {}, ret = 0, type = 20, epType = 2, leastParam = 0}, + {name = "getorderflowdelta", argus = {}, ret = 1, type = 20, epType = 2, leastParam = 0}, + {name = "getlastfuturemonth", argus = {0, 0}, ret = 1, type = 20, epType = 2, leastParam = 2}, + {name = "getlastfuturecode", argus = {0, 0}, ret = 3, type = 20, epType = 2, leastParam = 2}, + {name = "getspotprodgroup", argus = {0}, ret = 1007, type = 20, epType = 2, leastParam = 1}, + {name = "getspotprodinst", argus = {0,0}, ret = 3, type = 20, epType = 2, leastParam = 2}, + {name = "getwarehousereceipt", argus = {0,0}, ret = 0, type = 20, epType = 2, leastParam = 2}, + {name = "getwarehousename", argus = {0,0}, ret = 3, type = 20, epType = 2, leastParam = 2}, + {name = "getfutureseats", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 3}, + {name = "getfutureseatsname", argus = {0,0,0}, ret = 3, type = 20, epType = 2, leastParam = 3}, + {name = "findfutureseats", argus = {0,0,0}, ret = 0, type = 20, epType = 2, leastParam = 3}, + {name = "productcode", argus = {0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "getfuturecode", argus = {0}, ret = 3, type = 20, epType = 2, leastParam = 1}, + {name = "convindex", argus = {0,10}, ret = 3, type = 20, epType = 2, leastParam = 2}, + {name = "isdividdate", argus = {0}, ret = 2, type = 20, epType = 2, leastParam = 1}, + {name = "markettradestatus", argus = {0}, ret = 1, type = 20, epType = 2, leastParam = 1}, + {name = "dividfactor", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, + {name = "stocktype", argus = {0}, ret = 0, type = 20, epType = 2, leastParam = 1}, +} + +index = { + --{name = "kdj", argus = {0, 0, 0}, ret = {"k", "d", "j"}, type = 3, leastParam = 3}, + --{name = "sjyy", argus = {}, ret = {"close1", "open1", "close2", "up1", "ma5"}, type = 3, leastParam = 0}, + --{name = "", argus = {}, ret = {}, type = 0, leastParam = 0}, +} + +--[[ + 系统预定义证券数据引用类型 +--]] +stocktype = { + {name = "vtopen", index = "open"}, + {name = "vthigh", index = "high"}, + {name = "vtlow", index = "low"}, + {name = "vtclose", index = "close"}, + {name = "vtvol", index = "vol"}, + {name = "vtbvol", index = "bvol"}, + {name = "vtsvol", index = "svol"}, + {name = "vtamount", index = "amount"}, + {name = "vtopenint", index = "openint"}, + {name = "vtsettleprice", index = "settleprice"}, + {name = "vtrise", index = "rise"}, + {name = "vtgclose", index = "gclose"}, + {name = "vtestimatedprice", index = "estimatedprice"}, + + {name = "vtadvance", index = ""}, --imposible... + {name = "vtdecline", index = ""}, --imposible... + + {name = "iopvopen", index = "iopvopen"}, + {name = "iopvo", index = "iopvopen"}, + {name = "iopvhigh", index = "iopvhigh"}, + {name = "iopvh", index = "iopvhigh"}, + {name = "iopvlow", index = "iopvlow"}, + {name = "iopvl", index = "iopvlow"}, + {name = "iopvclose", index = "iopvclose"}, + {name = "iopvc", index = "iopvclose"}, +} + +--[[------------------------------------------------------------ + 原始行情数据 +--------------------------------------------------------------]] +marketData = { + {name = "oopen", meta = 3001, field = "00"}, + {name = "ohigh", meta = 3001, field = "01"}, + {name = "olow", meta = 3001, field = "02"}, + {name = "oclose", meta = 3001, field = "03"}, + {name = "ovol", meta = 3001, field = "5"}, + {name = "oamount", meta = 3001, field = "6"}, + {name = "osettleprice", meta = 3001, field = "d"}, + {name = "amount", meta = 3001, field = "6"}, + {name = "indexa", meta = 3001, field = "6"}, + {name = "close", meta = 3001, field = "3"}, + {name = "c", meta = 3001, field = "3"}, + {name = "indexc", meta = 3001, field = "3"}, + {name = "high", meta = 3001, field = "1"}, + {name = "h", meta = 3001, field = "1"}, + {name = "indexh", meta = 3001, field = "1"}, + {name = "low", meta = 3001, field = "2"}, + {name = "l", meta = 3001, field = "2"}, + {name = "indexl", meta = 3001, field = "2"}, + {name = "open", meta = 3001, field = "0"}, + {name = "o", meta = 3001, field = "0"}, + {name = "indexo", meta = 3001, field = "0"}, + {name = "vol", meta = 3001, field = "5"}, + {name = "v", meta = 3001, field = "5"}, + {name = "indexv", meta = 3001, field = "5"}, + {name = "rise", meta = 0, field = "rise"}, + {name = "r", meta = 0, field = "rise"}, + {name = "gclose", meta = 0, field = "gclose"}, + {name = "settleprice", meta = 3001, field = "d"}, + {name = "settlement", meta = 3001, field = "d"}, + {name = "askprice", meta = 3000, field = "f"}, + {name = "askvol", meta = 3000, field = "g"}, + {name = "bidprice", meta = 3000, field = "d"}, + {name = "bidvol", meta = 3000, field = "e"}, + --{name = "opena", meta = 3001, field = "a"}, + {name = "openint", meta = 3001, field = "7"}, + --{name = "openv", meta = 3001, field = "c"}, + {name = "tickopen", meta = 3000, field = "8"}, + {name = "ticklast", meta = 3000, field = "0"}, + {name = "tickhigh", meta = 3000, field = "9"}, + {name = "ticklow", meta = 3000, field = "a"}, + {name = "tickamount", meta = 3000, field = "2"}, + {name = "tickvol", meta = 3000, field = "1"}, + {name = "ticklastclose", meta = 3000, field = "c"}, + {name = "tickopenint", meta = 3000, field = "3"}, + {name = "tickpe", meta = 3000, field = "6"}, + {name = "transaction", meta = 3000, field = "5"}, + {name = "ticktransaction", meta = 3000, field = "5"}, + {name = "qt", meta = 3000, field = "qt"}, --parser is using field, but what info is really request, written in formula::registerRequest + {name = "callstock", meta = 0, field = ""}, --for ease. tmp. jch + {name = "marketprice", meta = 1111, field = "0"}, + {name = "marketavgprice", meta = 1111, field = "1"}, + {name = "algoprice", meta = 1111, field = "2"}, + {name = "limitprice", meta = 1111, field = "3"}, + {name = "marketvol", meta = 1111, field = "4"}, + {name = "algovol", meta = 1111, field = "5"}, + {name = "initprice", meta = 1111, field = "6"}, + {name = "bvol", meta = 4002, field = "1"}, + {name = "svol", meta = 4002, field = "0"}, + {name = "estimatedprice", meta = 3000, field = "q"}, + + {name = "", meta = 1001, field = ""}, + + + {name = "iopvopen", meta = 4011, field = "0"}, + {name = "iopvhigh", meta = 4011, field = "1"}, + {name = "iopvlow", meta = 4011, field = "2"}, + {name = "iopvclose", meta = 4011, field = "3"}, + +} + +hiddenDataNeed = { + {name = "sar", needs = {"high", "low", "close"}}, + {name = "sarturn", needs = {"high", "low", "close"}}, + {name = "tr", needs = {"high", "low", "close"}}, + {name = "isdown", needs = {"open", "close"}}, + {name = "isequal", needs = {"open", "close"}}, + {name = "isup", needs = {"open", "close"}}, + {name = "tickvoldistribution", needs = {"close", "askprice","bidprice","vol"}}, +} + +--[[-------------------------------------------------------------- + 界面画线的类型 +----------------------------------------------------------------]] +drawtype = { + {name = "index", shape = 0 }, --指标线 + {name = "vtsolid", shape = 0 }, --普通线 + {name = "circledot", shape = 1 }, --小圆圈线 + {name = "colorstick", shape = 2 }, --彩色棒状线 + {name = "crossdot", shape = 3 }, --叉状线 + {name = "linedash", shape = 4 }, --长虚线 + {name = "linedashdot", shape = 5 }, --短虚线 + {name = "linedot", shape = 6 }, --虚线 + {name = "nodraw", shape = 7 }, --不画该线,可供调试用 + {name = "pointdot", shape = 8 }, --点状线 + {name = "stick", shape = 9 }, --棒状线 + {name = "volstick", shape = 10}, --成交量棒状线 + {name = "main", shape = 11}, --主图指标线 + {name = "kline", shape = 12}, --K线 + {name = "drawtext", shape = 13}, --输出文字 + {name = "vtslolid", shape = 14}, --垂直线:普通线 + {name = "vtdot", shape = 15}, --垂直线:点线 + {name = "vtdashdot", shape = 16}, --垂直线:虚线和点交替 + {name = "vtdashdotdot", shape = 17}, --垂直线:虚线和两点交替 + {name = "vtdash", shape = 18}, --垂直线:虚线 + {name = "vertline", shape = 19}, + {name = "barset", shape = 20}, + --{name = "drawarc", shape = 21}, + {name = "drawbkbmp", shape = 22}, + {name = "drawbmp", shape = 23}, + {name = "drawellipse", shape = 24}, + {name = "drawgbk", shape = 25}, + {name = "drawicon", shape = 26}, + {name = "drawline", shape = 27}, + {name = "drawnumber", shape = 28}, + {name = "drawrect", shape = 29}, + {name = "drawsl", shape = 30}, + --{name = "drawtextex", shape = 31}, + {name = "explain", shape = 32}, + {name = "fillrgn", shape = 33}, + --{name = "partline", shape = 34}, + {name = "polyline", shape = 35}, + --{name = "stickline", shape = 36}, + {name = "indexBool", shape = 37}, --bool型的指标线 + {name = "noaxis", shape = 38}, + {name = "nodraw", shape = 39}, + {name = "colorstickvol",shape = 40}, + {name = "segmentline", shape = 41}, + {name = "stackvolstick",shape = 42}, + {name = "waibushuju" ,shape = 43}, + {name = "drawband" ,shape = 45}, + {name = "drawgbk_div" ,shape = 46}, + {name = "drawstick" , shape = 47}, + {name = "drawarrow" , shape = 48}, + {name = "drawrectangle",shape = 49}, + + --{name = "precision0", shape = 20}, --todo + {name = "", shape = 0}, +} + +--[[ + 系统预定义颜色 +--]] +color = { + {name = "colorblack", rgb = 0}, + {name = "colorblue", rgb = 16711680}, + {name = "colorbrown", rgb = 16512}, + {name = "colorcyan", rgb = 16777044}, + {name = "colorgray", rgb = 8421504}, + {name = "colorgreen", rgb = 65280}, + {name = "colormagenta", rgb = 16711935}, + {name = "colorred", rgb = 255}, + {name = "colorwhite", rgb = 16777215}, + {name = "coloryellow", rgb = 65535}, + {name = "colorblack", rgb = 0}, + {name = "colorblack", rgb = 0}, + {name = "colorblack", rgb = 0}, + {name = "colorblack", rgb = 0}, + {name = "colorlired", rgb = 6384127}, + {name = "colorlicyan", rgb = 16307079}, +} + + +--[[-------------------------------------------------------------- + 用户未指定颜色时的系统自定义颜色 +----------------------------------------------------------------]] +--[[ +defaultColor = { + 0xff0000, 0xff00ff, 0x808080,0x008000, 0x808000, 0x800080, 0xc0c0c0, 0x008080 +} +--]] +defaultColor = { + 0xffffff, 0x00ffff, 0xff00ff,0x00ff00, 0xff0000, 0x0080ff, 0xff8000, 0x008000, 0x800080, 0xffff00 +} + +--[[-------------------------------------------------------------- + 提供闭包优化的函数 +----------------------------------------------------------------]] +ClosureFormula = { + {formula = "printout", closure = "c_print", closureIndex = 0,everyPeriod = true}, + {formula = "hhv", closure = "c_hhv", closureIndex = 2,everyPeriod = true}, + {formula = "llv", closure = "c_llv", closureIndex = 2,everyPeriod = true}, + {formula = "ma", closure = "c_ma", closureIndex = 2,everyPeriod = true}, + {formula = "ima", closure = "c_ima", closureIndex = 2,everyPeriod = true}, + {formula = "wma", closure = "c_wma", closureIndex = 2,everyPeriod = true}, + {formula = "sma", closure = "c_sma", closureIndex = 0,everyPeriod = true}, + {formula = "dma", closure = "c_dma", closureIndex = 0,everyPeriod = true}, + {formula = "ema", closure = "c_ema", closureIndex = 0,everyPeriod = true}, + {formula = "tma", closure = "c_tma", closureIndex = 0,everyPeriod = true}, + {formula = "count", closure = "c_count", closureIndex = 2,everyPeriod = true}, + {formula = "cross", closure = "c_cross", closureIndex = 0,everyPeriod = true}, + {formula = "any", closure = "c_any", closureIndex = 2,everyPeriod = true}, + {formula = "exist", closure = "c_exist", closureIndex = 2,everyPeriod = true}, + {formula = "valuewhen", closure = "c_valuewhen", closureIndex = 0,everyPeriod = true}, + {formula = "barslast", closure = "c_barslast", closureIndex = 0,everyPeriod = true}, + {formula = "barslasts", closure = "c_barslasts", closureIndex = 0,everyPeriod = true}, + {formula = "filter", closure = "c_filter", closureIndex = 2,everyPeriod = true}, + {formula = "ref", closure = "c_ref", closureIndex = 2,everyPeriod = true}, + {formula = "inblock", closure = "c_inblock", closureIndex = 2,everyPeriod = true}, + {formula = "inblock2", closure = "c_inblock2", closureIndex = 2,everyPeriod = true}, + {formula = "sum", closure = "c_sum", closureIndex = 2,everyPeriod = true}, + {formula = "longcross", closure = "c_longcross", closureIndex = 3,everyPeriod = true}, + {formula = "all", closure = "c_all", closureIndex = 2,everyPeriod = true}, + {formula = "every", closure = "c_all", closureIndex = 2,everyPeriod = true}, + {formula = "barscount", closure = "c_barscount", closureIndex = 0,everyPeriod = true}, + {formula = "barssince", closure = "c_barssince", closureIndex = 0,everyPeriod = true}, + {formula = "barssincen", closure = "c_barssincen", closureIndex = 0,everyPeriod = true}, + {formula = "beta2", closure = "c_beta2", closureIndex = 2,everyPeriod = true}, + {formula = "hhvbars", closure = "c_hhvbars", closureIndex = 2,everyPeriod = true}, + {formula = "llvbars", closure = "c_llvbars", closureIndex = 2,everyPeriod = true}, + {formula = "last", closure = "c_last", closureIndex = 2,everyPeriod = true},--两个参数 + {formula = "sfilter", closure = "c_sfilter", closureIndex = 0,everyPeriod = true}, + {formula = "tr", closure = "c_tr", closureIndex = 0,everyPeriod = true}, + {formula = "trma", closure = "c_trma", closureIndex = 2,everyPeriod = true}, + {formula = "ret", closure = "c_ret", closureIndex = 2,everyPeriod = true}, + {formula = "hod", closure = "c_hod", closureIndex = 2,everyPeriod = true}, + {formula = "lod", closure = "c_lod", closureIndex = 2,everyPeriod = true}, + {formula = "newhbars", closure = "c_newhbars", closureIndex = 2,everyPeriod = true}, + {formula = "newlbars", closure = "c_newlbars", closureIndex = 2,everyPeriod = true}, + {formula = "sumbars", closure = "c_sumbars", closureIndex = 2,everyPeriod = true}, + {formula = "sar", closure = "c_sar", closureIndex = 1,everyPeriod = true}, + {formula = "sarturn", closure = "c_sarturn", closureIndex = 2,everyPeriod = true}, + {formula = "order", closure = "c_order", closureIndex = 0,everyPeriod = false}, + -- {formula = "passorder", closure = "c_passorder", closureIndex = 0,everyPeriod = false}, + --{formula = "trade", closure = "c_trade", closureIndex = 0, everyPeriod = false}, + {formula = "hedgestocktrade", closure = "c_hedgestocktrade", closureIndex = 0, everyPeriod = false}, + {formula = "avedev", closure = "c_avedev", closureIndex = 2,everyPeriod = true}, + {formula = "relate", closure = "c_relate", closureIndex = 2,everyPeriod = true}, + {formula = "mode", closure = "c_mode", closureIndex = 2,everyPeriod = true}, + {formula = "covar", closure = "c_covar", closureIndex = 2,everyPeriod = true}, + {formula = "std", closure = "c_std", closureIndex = 2,everyPeriod = true}, + {formula = "var", closure = "c_var", closureIndex = 2,everyPeriod = true}, + {formula = "varp", closure = "c_varp", closureIndex = 2,everyPeriod = true}, + {formula = "stdp", closure = "c_stdp", closureIndex = 2,everyPeriod = true}, + {formula = "devsq", closure = "c_devsq", closureIndex = 2,everyPeriod = true}, + {formula = "trimmean", closure = "c_trimmean", closureIndex = 2,everyPeriod = true}, + {formula = "steyx", closure = "c_steyx", closureIndex = 2,everyPeriod = true}, + {formula = "pearson", closure = "c_pearson", closureIndex = 2,everyPeriod = true}, + {formula = "rsq", closure = "c_rsq", closureIndex = 2,everyPeriod = true}, + {formula = "intercept", closure = "c_intercept", closureIndex = 2,everyPeriod = true}, + --{formula = "harmean", closure = "c_harmean", closureIndex = 2,everyPeriod = true}, + --{formula = "geomean", closure = "c_geomean", closureIndex = 2,everyPeriod = true}, + {formula = "kurt", closure = "c_kurt", closureIndex = 2,everyPeriod = true}, + {formula = "ftest", closure = "c_ftest", closureIndex = 2,everyPeriod = true}, + {formula = "skew", closure = "c_skew", closureIndex = 2,everyPeriod = true}, + {formula = "small", closure = "c_small", closureIndex = 2,everyPeriod = true}, + {formula = "large", closure = "c_large", closureIndex = 2,everyPeriod = true}, + {formula = "quartile", closure = "c_quartile", closureIndex = 2,everyPeriod = true}, + {formula = "percentile", closure = "c_percentile", closureIndex = 2,everyPeriod = true}, + {formula = "median", closure = "c_median", closureIndex = 2,everyPeriod = true}, + {formula = "trimmean", closure = "c_trimmean", closureIndex = 2,everyPeriod = true}, + {formula = "percentrank", closure = "c_percentrank", closureIndex = 2,everyPeriod = true}, + {formula = "slope", closure = "c_slope", closureIndex = 2,everyPeriod = true}, + {formula = "forcast", closure = "c_forecast", closureIndex = 2,everyPeriod = true}, + {formula = "drl", closure = "c_drl", closureIndex = 2,everyPeriod = true}, + --{formula = "slope20", closure = "c_slope20", closureIndex = 2,everyPeriod = true}, + --{formula = "slope21", closure = "c_slope21", closureIndex = 2,everyPeriod = true}, + --{formula = "slope22", closure = "c_slope22", closureIndex = 2,everyPeriod = true}, + {formula = "forcast2", closure = "c_forecast2", closureIndex = 2,everyPeriod = true}, + {formula = "drl2", closure = "c_drl2", closureIndex = 2,everyPeriod = true}, + {formula = "const", closure = "c_const", closureIndex = 0,everyPeriod = false}, + {formula = "issellorder", closure = "c_issellorder", closureIndex = 1,everyPeriod = true}, + {formula = "isbuyorder", closure = "c_isbuyorder", closureIndex = 1,everyPeriod = true}, + {formula = "sellvol", closure = "c_sellvol", closureIndex = 0,everyPeriod = true}, + {formula = "buyvol", closure = "c_buyvol", closureIndex = 0,everyPeriod = true}, + {formula = "upnday", closure = "c_upnday", closureIndex = 2,everyPeriod = true}, + {formula = "downnday", closure = "c_downnday", closureIndex = 2,everyPeriod = true}, + {formula = "nday", closure = "c_nday", closureIndex = 2,everyPeriod = true}, + {formula = "turn", closure = "c_turn", closureIndex = 1,everyPeriod = true}, + {formula = "callpython", closure = "c_callpython", closureIndex = 1,everyPeriod = true}, + {formula = "getfindatayear", closure = "c_getfindatayear", closureIndex = 1,everyPeriod = true}, + {formula = "getfindata", closure = "c_getfindata", closureIndex = 1,everyPeriod = true}, + {formula = "getfindatabyperiod", closure = "c_getfindatabyperiod", closureIndex = 1,everyPeriod = true}, + {formula = "getlonghubang", closure = "c_get_longhubang", closureIndex = 1,everyPeriod = true}, + {formula = "getholdernum", closure = "c_get_holderNumber", closureIndex = 1,everyPeriod = true}, + {formula = "gettop10shareholder", closure = "c_get_top10shareholder", closureIndex = 1,everyPeriod = true}, + {formula = "gettop10shareholderbyperiod", closure = "c_get_top10shareholderbyperiod", closureIndex = 1,everyPeriod = true}, + {formula = "finance", closure = "c_finance", closureIndex = 1,everyPeriod = true}, + {formula = "tickvoldistribution", closure = "c_tickvoldistribution", closureIndex = 0,everyPeriod = true}, + {formula = "buysellvols", closure = "c_buysellvols", closureIndex = 0,everyPeriod = true}, + {formula = "transcationstatic", closure = "c_transcationstatic", closureIndex = 1,everyPeriod = true}, + {formula = "transactionstatistic", closure = "c_transcationstatic", closureIndex = 1,everyPeriod = true}, + {formula = "transcationstaticl1", closure = "c_transcationstaticl1", closureIndex = 1,everyPeriod = true}, + {formula = "transactionstatisticl1", closure = "c_transcationstaticl1", closureIndex = 1,everyPeriod = true}, + {formula = "external_data", closure = "c_external_data", closureIndex = 1,everyPeriod = true}, + {formula = "iopv", closure = "c_iopv", closureIndex = 0,everyPeriod = true}, + {formula = "get_cb_convert_price", closure = "c_get_cb_convert_price", closureIndex = 0,everyPeriod = true}, + {formula = "gethismaincontract", closure = "c_gethismaincontract",closureIndex = 1,everyPeriod = true}, + {formula = "maincontractchange", closure = "c_maincontractchange",closureIndex = 1,everyPeriod = true}, + {formula = "getrealcontract", closure = "c_getrealcontract",closureIndex = 1,everyPeriod = true}, + {formula = "getopenamount", closure = "c_getopenamount",closureIndex = 1,everyPeriod = true}, + {formula = "getopenvol", closure = "c_getopenvol",closureIndex = 1,everyPeriod = true}, + {formula = "blkname", closure = "c_blkname",closureIndex = 0,everyPeriod = true}, + {formula = "findblock", closure = "c_findblock",closureIndex = 0,everyPeriod = true}, + {formula = "orderdirection", closure = "c_orderdirection",closureIndex = 0,everyPeriod = true}, + {formula = "findindex", closure = "c_findindex",closureIndex = 0,everyPeriod = true}, + {formula = "switchindex", closure = "c_switchindex",closureIndex = 0,everyPeriod = true}, + {formula = "extdatablockrank", closure = "c_extdatablockrank",closureIndex = 0,everyPeriod = true}, + {formula = "extdatablocksum", closure = "c_extdatablocksum",closureIndex = 0,everyPeriod = true}, + {formula = "extdatablocksumrange", closure = "c_extdatablocksumrange",closureIndex = 0,everyPeriod = true}, + {formula = "extblockranktocode", closure = "c_extblockranktocode",closureIndex = 0,everyPeriod = true}, + {formula = "blocksize", closure = "c_blocksize",closureIndex = 0,everyPeriod = true}, + {formula = "stockbyblockrank", closure = "c_stockbyblockrank",closureIndex = 0,everyPeriod = true}, + {formula = "blocksum", closure = "c_blocksum",closureIndex = 0,everyPeriod = true}, + {formula = "blockrank", closure = "c_blockrank",closureIndex = 0,everyPeriod = true}, + {formula = "paramcombcalc", closure = "c_paramcombcalc", closureIndex = 0,everyPeriod = true}, + {formula = "serialize", closure = "c_serialize", closureIndex = 0,everyPeriod = true}, + {formula = "getstocklist", closure = "getstocklist", closureIndex = 0,everyPeriod = true}, + {formula = "getinitgroup", closure = "getinitgroup", closureIndex = 0,everyPeriod = true}, + {formula = "getoptinfo", closure = "c_getoptinfo", closureIndex = 0,everyPeriod = true}, + {formula = "getoptlistbyundl", closure = "c_getoptcodebyundl", closureIndex = 0,everyPeriod = true}, + {formula = "getoptcode", closure = "c_getoptcode", closureIndex = 0,everyPeriod = true}, + {formula = "getoptundlcode", closure = "c_getoptundlcode", closureIndex = 0,everyPeriod = true}, + {formula = "getoptcodebyno", closure = "c_getoptcodebyno", closureIndex = 0,everyPeriod = true}, + {formula = "getoptcodebyno2", closure = "c_getoptcodebyno2", closureIndex = 0,everyPeriod = true}, + {formula = "getexerciseinterval", closure = "c_getexerciseinterval", closureIndex = 0,everyPeriod = true}, + {formula = "tdate", closure = "c_tdate", closureIndex = 0,everyPeriod = true}, + {formula = "tweekday", closure = "c_tweekday", closureIndex = 0,everyPeriod = true}, + {formula = "timerat", closure = "c_timerat", closureIndex = 0,everyPeriod = true}, + {formula = "timerafter", closure = "c_timerafter", closureIndex = 0,everyPeriod = true}, + {formula = "deliveryinterval", closure = "c_deliveryinterval", closureIndex = 0,everyPeriod = true}, + {formula = "deliveryinterval2", closure = "c_deliveryinterval2", closureIndex = 0,everyPeriod = true}, + {formula = "deliveryinterval3", closure = "c_deliveryinterval3", closureIndex = 0,everyPeriod = true}, + {formula = "getcbconversionvalue", closure = "c_getcbconversionvalue", closureIndex = 0,everyPeriod = true}, + {formula = "getcbconversionpremium", closure = "c_getcbconversionpremium", closureIndex = 0,everyPeriod = true}, + {formula = "getorderflowdetail", closure = "c_getorderflowdetail", closureIndex = 0,everyPeriod = true}, + {formula = "getorderflow", closure = "c_getorderflow", closureIndex = 0,everyPeriod = true}, + {formula = "getorderflowunbalance", closure = "c_getorderflowunbalance", closureIndex = 0,everyPeriod = true}, + {formula = "getorderflowunbalancepricein", closure = "c_getorderflowunbalancepricein", closureIndex = 0,everyPeriod = true}, + {formula = "getorderflowpoc", closure = "c_getorderflowpoc", closureIndex = 0,everyPeriod = true}, + {formula = "getorderflowdelta", closure = "c_getorderflowdelta", closureIndex = 0,everyPeriod = true}, + {formula = "getlastfuturemonth", closure = "c_getlastfuturemonth", closureIndex = 0,everyPeriod = true}, + {formula = "getlastfuturecode", closure = "c_getlastfuturecode", closureIndex = 0,everyPeriod = true}, + {formula = "extdatablocksplitavg", closure = "c_extdatablocksplitavg", closureIndex = 0,everyPeriod = true}, + {formula = "getcapitalflow", closure = "c_getcapitalflow", closureIndex = 0,everyPeriod = true}, + {formula = "getcapitalflowbyholder", closure = "c_getcapitalflowbyholder", closureIndex = 0,everyPeriod = true}, + {formula = "getspotprodgroup", closure = "c_getspotprodgroup", closureIndex = 0,everyPeriod = true}, + {formula = "getspotprodinst", closure = "c_getspotprodinst", closureIndex = 0,everyPeriod = true}, + {formula = "getwarehousereceipt", closure = "c_getwarehousereceipt", closureIndex = 0,everyPeriod = true}, + {formula = "getwarehousename", closure = "c_getwarehousename", closureIndex = 0,everyPeriod = true}, + {formula = "getfutureseats", closure = "c_getfutureseats", closureIndex = 0,everyPeriod = true}, + {formula = "getfutureseatsname", closure = "c_getfutureseatsname", closureIndex = 0,everyPeriod = true}, + {formula = "findfutureseats", closure = "c_findfutureseats", closureIndex = 0,everyPeriod = true}, + {formula = "getfuturecode", closure = "c_getfuturecode", closureIndex = 0,everyPeriod = true}, + {formula = "winner", closure = "c_winner", closureIndex = 1, everyPeriod = true}, + {formula = "cost", closure = "c_cost", closureIndex = 1, everyPeriod = true}, + {formula = "findblocklist", closure = "c_findblocklist", closureIndex = 0, everyPeriod = true}, + {formula = "unitofquantity", closure = "c_unitofquantity", closureIndex = 0, everyPeriod = true}, + {formula = "equalweightindex", closure = "c_equalweightindex", closureIndex = 0, everyPeriod = true}, + {formula = "isindexorglr", closure = "c_isindexorglr", closureIndex = 0, everyPeriod = true}, + {formula = "isetfcode", closure = "c_isetfcode", closureIndex = 0, everyPeriod = true}, + {formula = "isindexcode", closure = "c_isindexcode", closureIndex = 0, everyPeriod = true}, + {formula = "isfuturecode", closure = "c_isfuturecode", closureIndex = 0, everyPeriod = true}, + {formula = "upstopprice", closure = "c_upstopprice", closureIndex = 1,everyPeriod = true}, + {formula = "downstopprice", closure = "c_downstopprice", closureIndex = 1,everyPeriod = true}, + {formula = "barslastcount", closure = "c_barslastcount", closureIndex = 0,everyPeriod = true}, + {formula = "dividfactor", closure = "c_dividfactor", closureIndex = 0,everyPeriod = true}, + {formula = "readsignal", closure = "c_readsignal", closureIndex = 0, everyPeriod = true}, + {formula = "drawsignal", closure = "c_drawsignal", closureIndex = 0, everyPeriod = true}, + {formula = "cmdprogress", closure = "c_cmdprogress", closureIndex = 0, everyPeriod = true}, + {formula = "cmdstatus", closure = "c_cmdstatus", closureIndex = 0, everyPeriod = true}, + {formula = "stocktype", closure = "c_stocktype", closureIndex = 0, everyPeriod = true}, + {formula = "convindex", closure = "c_convindex", closureIndex = 0, everyPeriod = true}, + {formula = "mema", closure = "c_mema", closureIndex = 0,everyPeriod = true}, + {formula = "getinstrumentdetail", closure = "c_getinstrumentdetail", closureIndex = 0,everyPeriod = true}, + {formula = "limitupperformance", closure = "c_limitupperformance", closureIndex = 0,everyPeriod = true}, + {formula = "fundnetvalue", closure = "c_fundnetvalue", closureIndex = 0,everyPeriod = true}, + {formula = "get_etf_statistics", closure = "c_get_etf_statistics", closureIndex = 0,everyPeriod = true}, + {formula = "get_etf_statisticsl2", closure = "c_get_etf_statisticsl2", closureIndex = 0,everyPeriod = true}, +} + +ClosureFormula2 = { + {formula = "callstock2", closure = "callstock2", closureIndex = 0,everyPeriod = true}, +} + +--[[-------------------------------------------------------------- + 股票代码的匹配的正则表达式集合 +----------------------------------------------------------------]] +MarketRegex = { + {market = "IF", regex = "(((if|ih|ic|tf|ts|t)([0,1,l,L][0-9]))|((IF|IH|IC|TF|TS|T)([0,1,l,L][0-9])))"}, + {market = "SH", regex = "sh(((60|90|50|58)[0-9]{4})|[0-9]{6}|000300[0-1]{2})"}, + {market = "SH", regex = "SH(((60|90|50|58)[0-9]{4})|([0-9]{6})|000300[0-1]{2})"}, + {market = "SHO", regex = "sho(1000[0-9]{4})"}, + {market = "SHO", regex = "SHO(1000[0-9]{4})"}, + {market = "SZ", regex = "sz(((00|30|20|39|03|18|16|15)[0-9]{4})|([0-9]{6}))"}, + {market = "SZ", regex = "SZ(((00|30|20|39|03|18|16|15)[0-9]{4})|([0-9]{6}))"}, + {market = "SH", regex = "204[0-9]{3}"}, + {market = "SZ", regex = "(((00|30|20|39|03|18|16|15)[0-9]{4})|([0-9]{6}))"}, + {market = "SH", regex = "(((60|90|50|58)[0-9]{4})|([0-9]{6})|000300[0-1]{2})"}, + {market = "SF", regex = "(((CU|AL|RU|FU|ZN|AU|RB|WR|BU|PB|AG|SN|NI|HC|SC|SP)[0-9]{2,4})|H30009.CSI)"}, + {market = "SF", regex = "(((cu|al|ru|fu|zn|au|rb|wr|bu|pb|ag|sn|ni|hc|sc|SP)[0-9]{2,4})|h30009.csi)"}, + {market = "DF", regex = "((a|b|m|c|y|l|v|p|i|bb|fb|pp|cs|j|jd|jm|eg)[0-9]{2,4})"}, + {market = "DF", regex = "((A|B|M|C|Y|L|V|P|I|BB|FB|PP|CS|J|JD|JM|EG)[0-9]{2,4})"}, + {market = "ZF", regex = "((AP|CF|CJ|CY|FG|JR|LR|MA|OI|PM|RI|RM|RS|SF|SM|SR|TA|WH|ZC)[0-9]{2,3})"}, + {market = "ZF", regex = "((ap|cf|cj|cy|fg|jr|lr|ma|oi|pm|ri|rm|rs|sf|sm|sr|ta|wh|zc)[0-9]{2,3})"}, + {market = "OF", regex = "OF(([0-9]{6})|(XT[0-9]{6}))"}, + {market = "OF", regex = "of(([0-9]{6})|(XT[0-9]{6}))"}, + {market = "ED", regex = "wd([0-9]{6}.(OF))"}, + {market = "ED", regex = "WD([0-9]{6}.(OF))"}, + {market = "NASDAQ", regex = "NASDAQ([a-z\\-0-9A-Z_]{1,15})"}, + {market = "NASDAQ", regex = "nasdaq([a-z\\-0-9A-Z_]{1,15})"}, + {market = "NYSE", regex = "NYSE([a-z\\-0-9A-Z_]{1,15})"}, + {market = "NYSE", regex = "nyse([a-z\\-0-9A-Z_]{1,15})"}, + {market = "SEHK", regex = "SEHK((0[0-9]{4}|84602)|([A-Z]{3,6}[0-9]{0,3}))"}, + {market = "SEHK", regex = "sehk((0[0-9]{4}|84602)|([A-Z]{3,6}[0-9]{0,3}))"}, + {market = "YSWP", regex = "yswp(cn|cn[0-9]{4}|cnindex)"}, + {market = "YSWP", regex = "YSWP(CN|CN[0-9]{4}|CNINDEX)"}, + {market = "", regex = ""}, +} + +--[[-------------------------------------------------------------- + 交易所的基本信息 + cnname : 交易所中文名称 +----------------------------------------------------------------]] +MarketBasicInfo = { + {market = "IF", opentime = {093000, 130000}, closetime = {113000, 150000}, mindiff = 0.2, volunit = 1, cnname = "中国金融期货交易所"}, + {market = "SH", opentime = {093000, 130000}, closetime = {113000, 150000}, mindiff = 0.01, volunit = 100, cnname = "上海证券交易所"}, + {market = "SZ", opentime = {093000, 130000}, closetime = {113000, 150000}, mindiff = 0.01, volunit = 100, cnname = "深圳证券交易所"}, + {market = "SHO", opentime = {093000, 130000}, closetime = {113000, 150000}, mindiff = 0.01, volunit = 100, cnname = "上海证券交易所期权"}, + {market = "HGT", opentime = {090000, 130000}, closetime = {120000, 160000}, mindiff = 0.01, volunit = 100, cnname = "沪港通"}, + {market = "SGT", opentime = {090000, 130000}, closetime = {120000, 160000}, mindiff = 0.01, volunit = 100, cnname = "深港通"}, + {market = "NEEQ", opentime = {093000, 130000}, closetime = {113000, 150000}, mindiff = 0.01, volunit = 100, cnname = "新三板"}, + {market = "SF", opentime = {090000, 103000, 133000}, closetime = {101500, 113000, 150000}, nightopentime = {210000, 000000}, nightclosetime = {235959, 023000}, mindiff = 0.1, volunit = 100, cnname = "上海期货交易所"}, + {market = "DF", opentime = {090000, 103000, 133000}, closetime = {101500, 113000, 150000}, nightopentime = {210000}, nightclosetime = {233000}, mindiff = 0.1, volunit = 100, cnname = "大连期货交易所"}, + {market = "ZF", opentime = {090000, 103000, 133000}, closetime = {101500, 113000, 150000}, nightopentime = {210000}, nightclosetime = {233000}, mindiff = 0.1, volunit = 100, cnname = "郑州期货交易所"}, + {market = "YSWP", opentime = {090000}, closetime = {155500}, nightopentime = {164000,000000}, nightclosetime = {235959, 020000}, indexopentime = {093000, 130000}, indexclosetime = {113000, 150000}, mindiff = 0.1, volunit = 100, cnname = "易盛外盘商品期货"}, + {market = "INE", opentime = {090000, 103000, 133000}, closetime = {101500, 113000, 150000}, nightopentime = {210000, 000000}, nightclosetime = {235959, 023000}, mindiff = 0.01, volunit = 100, cnname = "能源中心"}, +} + +MarketNameConfig = { + {market = "CFFEX", cnname = "中国金融期货交易所(CFFEX)"}, + {market = "CZCE", cnname = "郑州期货交易所(CZCE)"}, + {market = "DCE", cnname = "大连商品交易所(DCE)"}, + {market = "SH", cnname = "上海证券交易所(SSE)"}, + {market = "SHFE", cnname = "上海期货交易所(SHFE)"}, + {market = "SZ", cnname = "深圳证劵交易所(SZSE)"}, + {market = "OF", cnname = "开放式基金(OEF)"}, + {market = "SHO", cnname = "上海证券交易所期权(SHO)"}, + {market = "SZO", cnname = "深圳证劵交易所期权(SZO)"}, + {market = "HGT", cnname = "沪港通(HGT)"}, + {market = "SGT", cnname = "深港通(SGT)"}, + {market = "INE", cnname = "能源中心(INE)"}, + {market = "HK", cnname = "香港联合交易所(HK)"}, + {market = "BKZS", cnname = "板块指数(BKZS)"}, + {market = "GI", cnname = "全球市场(GI)"}, + {market = "LSE", cnname = "伦敦证券交易所(LSE)"}, + {market = "BJ", cnname = "北京证劵交易所(BJ)"}, + {market = "GF", cnname = "广州期货交易所(GFEX)"}, +} +--[[-------------------------------------------------------------- + 内部的变量结构 + keyword : param的名称 + items : param的具体内容及其默认值 +----------------------------------------------------------------]] +LuaStructs = { + {keyword = "tradeparam", items = { + {name="ac", isString=true, default=""}, --//账号组名 + {name="potype", isString=false, default=0}, --//分单模式 + {name="market", isString=true, default=""}, --//市场 + {name="stcode", isString=true, default=""}, --//股票代码 + {name="optype", isString=false, default=0}, --//下单方向 + {name="ortype", isString=false, default=0}, --//算法交易类型 + {name="prtype", isString=false, default=0}, --//报价方式 + {name="suprice", isString=false, default=0}, --//单笔超价 + {name="sptype", isString=false, default=0}, --//单笔超价类型 + {name="fiprice", isString=false, default=0}, --//基准价格 + {name="vol", isString=false, default=0}, --//交易总量 + {name="svtype", isString=false, default=0}, --//单笔基准量 + {name="svrate", isString=false, default=0}, --//基准量比例 + {name="orinterval", isString=false, default=0}, --//下单间隔 + {name="delinterval", isString=false, default=0}, --//撤单间隔 + {name="lvmin", isString=false, default=0}, --//尾单最小量 + {name="lvmtype", isString=false, default=0}, --//尾单最小量类型,缺省比例 + {name="spenable", isString=false, default=0}, --//超价启用笔数 + {name="prange", isString=false, default=0}, --//波动区间 + {name="prtype", isString=false, default=0}, --//波动区间类型 + {name="svmax", isString=false, default=0}, --//单笔最大量 + {name="vatime", isString=false, default=0}, --//有效时间,两种格式比如164820, + {name="mocount", isString=false, default=0}, --//最大委托次数 + {name="usernum", isString=true, default="00"}, --//用户自定义的下单编号 + },}, + {keyword = "childresult", items = { + {name = "sell", isString = false, default = 0}, + {name = "buy", isString = false, default = 0}, + {name = "price", isString = false, default = 0}, + {name = "holding", isString = false, default = 0}, + {name = "suspend", isString = false, default = 0}, + {name = "oprice", isString = false, default = 0}, + {name = "ocloseprice", isString = false, default = 0}, + },}, + {keyword = "stockholdinginfo", items = { + {name = "holding", isString = false, default = 0}, + {name = "buyprice", isString = false, default = 0}, + {name = "buydate", isString = false, default = 0}, + {name = "profit", isString = false, default = 0}, + {name = "price", isString = false, default = 0}, + {name = "holdingperiods", isString = false, default = 0}, + {name = "profitrank", isString = false, default = 0}, + {name = "position", isString = false, default = 0}, + },}, + {keyword = "positiondetail", items = { + {name = "exchangeid", isString = true, default = ""}, + {name = "exchangename", isString = true, default = ""}, + {name = "productid", isString = true, default = ""}, + {name = "productname", isString = true, default = ""}, + {name = "instrumentid", isString = true, default = ""}, + {name = "instrumentname", isString = true, default = ""}, + {name = "hedgeflag", isString = false, default = 0}, + {name = "direction", isString = false, default = 0}, + {name = "opendate", isString = true, default = ""}, + {name = "tradeid", isString = true, default = ""}, + {name = "volume", isString = false, default = 0}, + {name = "openprice", isString = false, default = 0}, + {name = "tradingday", isString = true, default = ""}, + {name = "margin", isString = false, default = 0}, + {name = "opencost", isString = false, default = 0}, + {name = "settlementprice", isString = false, default = 0}, + {name = "closevolume", isString = false, default = 0}, + {name = "closeamount", isString = false, default = 0}, + {name = "dloatprofit", isString = false, default = 0}, + {name = "closeprofit", isString = false, default = 0}, + {name = "marketvalue", isString = false, default = 0}, + {name = "positioncost", isString = false, default = 0}, + {name = "positionprofit", isString = false, default = 0}, + {name = "lastsettlementprice", isString = false, default = 0}, + {name = "instrumentvalue", isString = false, default = 0}, + {name = "istoday", isString = false, default = 0}, + {name = "xttag", isString = false, default = 0}, + {name = "stockholder", isString = true, default = ""}, + {name = "frozenvolume", isString = false, default = 0}, + {name = "canusevolume", isString = false, default = 0}, + {name = "onroadvolume", isString = false, default = 0}, + {name = "yesterdayvolume", isString = false, default = 0}, + {name = "lastprice", isString = false, default = 0}, + {name = "profitrate", isString = false, default = 0}, + {name = "futuretradetype", isString = false, default = 0}, + {name = "expiredate", isString = true, default = ""}, + {name = "comtradeid", isString = true, default = ""}, + {name = "legid", isString = false, default = 0}, + {name = "totalcost", isString = false, default = 0}, + {name = "singlecost", isString = false, default = 0}, + {name = "coveredvolume", isString = false, default = 0}, + {name = "sideflag", isString = true, default = ""}, + {name = "referencerate", isString = false, default = 0}, + {name = "structfundvol", isString = false, default = 0}, + {name = "redemptionvolume", isString = false, default = 0}, + {name = "prenablevoume", isString = false, default = 0}, + {name = "realusedmargin", isString = false, default = 0}, + {name = "royalty", isString = false, default = 0}, + },}, + {keyword = "orderdetail", items = { + {name = "exchangeid", isString = true, default = ""}, + {name = "exchangename", isString = true, default = ""}, + {name = "productid", isString = true, default = ""}, + {name = "productname", isString = true, default = ""}, + {name = "instrumentid", isString = true, default = ""}, + {name = "instrumentname", isString = true, default = ""}, + {name = "sessionid", isString = false, default = 0}, + {name = "frontid", isString = false, default = 0}, + {name = "orderref", isString = true, default = ""}, + {name = "orderpricetype", isString = false, default = 0}, + {name = "direction", isString = false, default = 0}, + {name = "offsetflag", isString = false, default = 0}, + {name = "hedgeflag", isString = false, default = 0}, + {name = "limitprice", isString = false, default = 0}, + {name = "volumetotaloriginal", isString = false, default = 0}, + {name = "ordersubmitstatus", isString = false, default = 0}, + {name = "ordersysid", isString = true, default = ""}, + {name = "orderstatus", isString = false, default = 0}, + {name = "volumetraded", isString = false, default = 0}, + {name = "volumetotal", isString = false, default = 0}, + {name = "errorid", isString = false, default = 0}, + {name = "errormsg", isString = true, default = ""}, + {name = "taskid", isString = false, default = 0}, + {name = "frozenmargin", isString = false, default = 0}, + {name = "frozencommission", isString = false, default = 0}, + {name = "insertdate", isString = true, default = ""}, + {name = "inserttime", isString = true, default = ""}, + {name = "xttag", isString = false, default = 0}, + {name = "tradeprice", isString = false, default = 0}, + {name = "cancelamount", isString = false, default = 0}, + {name = "optname", isString = true, default = ""}, + {name = "tradeamount", isString = false, default = 0}, + {name = "entrusttype", isString = false, default = 0}, + {name = "cancelinfo", isString = true, default = ""}, + {name = "undercode", isString = true, default = ""}, + {name = "covereflag", isString = false, default = 0}, + {name = "orderpricermb", isString = false, default = 0}, + {name = "tradeamountrmb", isString = false, default = 0}, + {name = "referencerate", isString = false, default = 0}, + {name = "compactno", isString = true, default = ""}, + {name = "cashgroupprop", isString = false, default = 0}, + {name = "shortoccupedmargin", isString = false, default = 0}, + {name = "xttrade", isString = true, default = ""}, + },}, + {keyword = "dealdetail", items = { + {name = "exchangeid", isString = true, default = ""}, + {name = "exchangename", isString = true, default = ""}, + {name = "productid", isString = true, default = ""}, + {name = "productname", isString = true, default = ""}, + {name = "instrumentid", isString = true, default = ""}, + {name = "instrumentname", isString = true, default = ""}, + {name = "tradeid", isString = true, default = ""}, + {name = "orderref", isString = true, default = ""}, + {name = "ordersysid", isString = true, default = ""}, + {name = "direction", isString = false, default = 0}, + {name = "offsetflag", isString = false, default = 0}, + {name = "hedgeflag", isString = false, default = 0}, + {name = "price", isString = false, default = 0}, + {name = "volume", isString = false, default = 0}, + {name = "tradedate", isString = true, default = ""}, + {name = "tradetime", isString = true, default = ""}, + {name = "comssion", isString = false, default = 0}, + {name = "tradeamount", isString = false, default = 0}, + {name = "taskid", isString = false, default = 0}, + {name = "xttag", isString = false, default = 0}, + {name = "orderpricetype", isString = false, default = 0}, + {name = "optname", isString = true, default = ""}, + {name = "entrusttype", isString = false, default = 0}, + {name = "futuretradetype", isString = false, default = 0}, + {name = "realoffsetflag", isString = false, default = 0}, + {name = "coveredflag", isString = false, default = 0}, + {name = "closetodayvolume", isString = false, default = 0}, + {name = "orderpricermb", isString = false, default = 0}, + {name = "pricermb", isString = false, default = 0}, + {name = "tradeamountrmb", isString = false, default = 0}, + {name = "referencerate", isString = false, default = 0}, + {name = "xttrade", isString = false, default = 0}, + {name = "compactno", isString = true, default = ""}, + {name = "closeprofit", isString = false, default = 0}, + },}, + {keyword = "paramResult", items = { + {name = "zh", isString = true, default = ""}, + {name = "result", isString = false, default = 0}, + {name = "total", isString = false, default = 0}, + {name = "conds", isString = false, default = 0}, + {name = "undlcode", isString = true, default = ""}, + {name = "exerciseprice", isString = false, default = 0}, + {name = "side", isString = true, default = ""}, + {name = "delivdate", isString = false, default = 0}, + {name = "exercisedate", isString = false, default = 0}, + {name = "contracttype", isString = false, default = 0}, + },}, + {keyword = "priceVolumeData", items = { + {name = "time", isString = true, default = ""}, + {name = "size", isString = false, default = 0}, + {name = "index", isString = false, default = 0}, + {name = "price", isString = false, default = 0}, + {name = "buynum", isString = false, default = 0}, + {name = "sellnum", isString = false, default = 0}, + },}, + {keyword = "ordersignal", items = { + {name = "timetag", isString = false, default = 0}, + {name = "time", isString = true, default = ""}, + {name = "date", isString = true, default = ""}, + {name = "stockcode", isString = true, default = ""}, + {name = "operation", isString = true, default = ""}, + {name = "price", isString = false, default = 0}, + {name = "volume", isString = false, default = 0}, + },}, +} diff --git a/src/xtquant/config/user/root2/lua/util.lua b/src/xtquant/config/user/root2/lua/util.lua new file mode 100644 index 0000000..10b631b --- /dev/null +++ b/src/xtquant/config/user/root2/lua/util.lua @@ -0,0 +1,292 @@ +------------------------------------------------------------- +-- 脚本引擎工作期间用到的辅助函数 +-- @author zhangjin +-- @since 2012-7-17 +------------------------------------------------------------- + + +function unpackEx(arglist) + local arg = {} + for k, v in pairs(arglist) do + print(k, v) + table.insert(arg, v) + end + return unpack(arg) +end + +function pack(func, arglist) + f = _G[func] + --print(func, type(f)) + return f(unpack(arglist)) +end + +List = {} +function List.new () + return {first = 0, last = -1} +end + +function List.pushleft (list, value) + local first = list.first - 1 + list.first = first + list[first] = value +end + +function List.pushright (list, value) + local last = list.last + 1 + list.last = last + list[last] = value +end + +function List.popright (list) + local last = list.last + if list.first > last then error("list is empty") end + local value = list[last] + list[last] = nil -- to allow garbage collection + list.last = last - 1 + return value +end + +function List.popleft(list) + local first = list.first + local value = list[first] + list[first] = nil + list.first = first + 1 + return value +end + +function isValid(v) + if type(v) == "number" then + return v == v and -1.7*10^308 < v and v < 1.7*10^308 + else + if type(v) == "nil" then + return false + else + return true + end + end +end + +function isvalid(v) + return isValid(v) +end + +function d2b(v) + return v ~= 0 --此处应该是 double值为正的时候返回true,还是double不为0的时候返回true +end + +function b2d(v) + if v then + return 1 + else + return 0 + end +end + +FLOAT_ERROR = 1e-6; +function isZero(value) + return math.abs(value) <= FLOAT_ERROR; +end + +function isGreaterThanZero(value) + return value > FLOAT_ERROR +end + +function isLessThanZero(value) + return value < -1 * FLOAT_ERROR +end + +function isequalv(left, right) + if type(left)=='string' and type(right)=='string' then + if left==right then + return true + else + return false + end + end + return isZero(left - right) +end + +function isgreater(left, right) + return isGreaterThanZero(left - right) +end + +function isgreaterequal(left, right) + return not(isLessThanZero(left - right)) +end + +function isless(left, right) + return isLessThanZero(left - right) +end + +function islessequal(left, right) + return not(isGreaterThanZero(left - right)) +end + +function isTrue(v) + local s = type(v) + if s == 'boolean' then + return v + else + return v ~= 0 + end +end + +function sortedpairs(t,comparator) + local sortedKeys = {}; + table.foreach(t, function(k,v) table.insert(sortedKeys,k) end); + table.sort(sortedKeys,comparator); + local i = 0; + local function _f(_s,_v) + i = i + 1; + local k = sortedKeys[i]; + if (k) then + return k,t[k]; + end + end + return _f,nil,nil; +end + +function getweight(stock) + local v = __stock2Weight[stock] + if v == nil then + v = 0 + end + return v +end + +function setweight(weight) + __stock2Weight = {} + for k, v in pairs(weight) do + __stock2Weight[k] = v + end +end + +function gettotalweight() + local total = 0 + for k, v in pairs(__stock2Weight) do + if k ~= 0 then + total = total + v; + end + end + return total +end + +function exist1(t, key) + return t[key] ~= nil +end + +function existrange(t, N, key) + local size = #t + return size - N < key +end + +function removekey(t, key) + t[key] = nil +end + +function toabandon(t, key) + t[key] = nil +end + +function tohold(t, key) + t[key] = 1 +end + +function holdingornot(t, val) + for _, v in pairs(t) do + if v == val then + return true + end + end + return false +end + +function sortedByKey(test_table) + local key_table = {} + local tt={} + + for key,_ in pairs(test_table) do + table.insert(key_table,key) + end + + table.sort(key_table) + + return key_table +end + + + +function multi(tbl, keytbl, num, total) + + local localTbl=tbl[num] + local t={} + local tt={} + local ttt={} + + for _,v in pairs(keytbl) do + if t[localTbl[v]] == nil then + t[localTbl[v]]={} + end + table.insert(t[localTbl[v]],v) + end + + for i,v in pairs(t) do + if #(v) > 1 and num+1 <= total then + m=multi(tbl,v,num+1,total) + t[i]=m + end + end + + tt=sortedByKey(t) + + for _,v in pairs(tt) do + n=t[v] + for ii,vv in pairs(n) do + table.insert(ttt,vv) + end + end + return ttt +end + +function oneTable(tab) + local tbl={} + function printTable(tab) + for i,v in pairs(tab) do + if type(v) == "table" then + printTable(v) + else + table.insert(tbl,v) + end + end + end + printTable(tab) + return tbl +end + +function getKeys(tbl) + k={} + for i,v in pairs(tbl) do + for ii,vv in pairs(v) do + k[ii]=0 + end + end + key={} + for i,v in pairs(k) do + table.insert(key,i) + end + return key +end + +function multisort(...) + local tttt={} + local numArgs=select("#", ...) + local tbl={} + for i=1 ,numArgs do + local arg=select(i, ...) + table.insert(tbl,arg) + end + key = getKeys(tbl) + + final = multi(tbl,key,1,#tbl) + return final +end \ No newline at end of file diff --git a/src/xtquant/config/xtquantservice.log4cxx b/src/xtquant/config/xtquantservice.log4cxx new file mode 100644 index 0000000..3ee9372 --- /dev/null +++ b/src/xtquant/config/xtquantservice.log4cxx @@ -0,0 +1,19 @@ +log4j.logger.TTConsole=INFO,ca +log4j.logger.TTStdFile=INFO,fa1 +log4j.logger.TTDbgFile=INFO,fa1 +log4j.logger.datasource=INFO,fa1 +log4j.logger.TTPerformanceFile=INFO,fa1 + +# 文件输出1 +log4j.appender.fa1=org.apache.log4j.DailyRollingFileAppender +log4j.appender.fa1.MaxFileSize=500MB +log4j.appender.fa1.MaxBackupIndex=10 +log4j.appender.fa1.DatePattern='{{XTQAUNT_LOG_DATEPATTERN}}' +log4j.appender.fa1.Append=true +log4j.appender.fa1.layout=org.apache.log4j.PatternLayout +log4j.appender.fa1.layout.ConversionPattern=%d [%p] [%t] %m%n + +# 控制台输出 +log4j.appender.ca=org.apache.log4j.ConsoleAppender +log4j.appender.ca.layout=org.apache.log4j.PatternLayout +log4j.appender.ca.layout.ConversionPattern=%d [%p] [%t] %m%n diff --git a/src/xtquant/config/xtquantservice.lua b/src/xtquant/config/xtquantservice.lua new file mode 100644 index 0000000..6789b72 --- /dev/null +++ b/src/xtquant/config/xtquantservice.lua @@ -0,0 +1,116 @@ +-- ȡClient + +function() + local ret = { + app = { + appName = "XtQuantService", + netThreadNum = 5, + netProcessThreadNum = 1, + dispatcherThreadNum = 5, + reportSeconds = 60, + logPath = "../config/xtquantservice.log4cxx", + logWatch = 1, + appendDate = 1, + timeoutSec = 0, + requestTimeoutSec = 150, + }, + threadPools = { + --datasource + datasource_callback = 10, + datasource_req = 10, + datasource_other = 5, + datasource_tradedate_change = 1, + whole_quote = 2, + -- trade linkage + linkage = 1, + accounts = 5, + persistmini = 1, + subquote = 3, + --python + pystrategy_run = 3, + --msgservice + msg_service = 1, + uicontrol_hpf_data_model = 1, + server_miniquote = 1, + server_vbaservice = 1, + --ָȫ + index_quote = 2, + }, + client_xtservice = { + tagTemplate = "xtservice", + address = g_xtservice_address, + isGetdAddressFromNameServer = 0, + reconnectSecond = -1, + timeoutSecond = 120, + requestTimeoutSecond = 150, + isUseSSL = 0, + sslCaPath = "../data/server.crt", + }, + client_xtmarketinfo = { + tagTemplate = "xtmarketinfo", + isGetdAddressFromNameServer=0, + proxyType=0, + requestTimeoutSecond=150, + proxyNeedCheck=0, + isUsedAloneIO=0, + isUseSSL=0, + address = g_defaultPorts["xtmarketinfo"], + keepAliveCheckSecond=5, + proxyPort=80, + reconnectSecond = 3, + timeoutSecond=120, + }, + server_xtquant = { + tag = "server_miniquote", + address = "0.0.0.0:58610", + isGetdAddressFromNameServer=0, + timeoutSecond=0, + keepAliveCheckSecond=0, + maxConnectionNum = 10, + isAutoBind = 0, + isUseSSL=0, + }, + metaInfo = { + ["2"] = "86400000", + ["1008"] = "0", + ["1009"] = "0", + ["1010"] = "0", + ["1011"] = "0", + ["1801"] = "0", + ["1802"] = "0", + ["1803"] = "60000", + ["1804"] = "0", + ["1806"] = "0", + ["1808"] = "60000,86400000", + ["1820"] = "0", + ["1830"] = "0", + ["2000"] = "86400000", + ["2001"] = "86400000", + ["2002"] = "86400000", + ["2002"] = "86400000", + ["2003"] = "86400000", + ["2004"] = "86400000", + ["2006"] = "86400000", + ["3000"] = "0", + ["3001"] = "60000,300000,3600000,86400000", + ["3002"] = "60000", + ["3004"] = "60000", + ["3013"] = "86400000", + ["3030"] = "0", + ["4000"] = "86400000", + ["4002"] = "60000,300000,3600000,86400000", + ["4011"] = "60000,86400000", + ["4999"] = "86400000", + ["5000"] = "0", + ["5002"] = "86400000", + ["5003"] = "0", + ["9000"] = "0", + }, + config = { + configdir = "../config", + datadir = "../userdata/xtquant", + modeldir = "../config/user", + } + } + return ret +end diff --git a/src/xtquant/config/xtquoterconfig.xml b/src/xtquant/config/xtquoterconfig.xml new file mode 100644 index 0000000..f41c28c --- /dev/null +++ b/src/xtquant/config/xtquoterconfig.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/xtquant/config/xtstocktype.lua b/src/xtquant/config/xtstocktype.lua new file mode 100644 index 0000000..739b140 --- /dev/null +++ b/src/xtquant/config/xtstocktype.lua @@ -0,0 +1,420 @@ +-- 取分类配置 + +-- 全部配置都必须用英文半角标点,不支持中文标点,不支持全角 + +g_stocktype_info = { + -- 存放基础类型 + -- 基础类型必须在同一个市场,跨市场的请用扩展类型,最后两位是市场和对应枚举值,前面随便扩展 + -- 目前enum_EXTRcCategoryID里头已经有的,必须和其保持一致 + -- 格式说明:每个类型有一个英文名,含义,市场,以及序号组成,每行写做: 英文名 = "含义,市场,序号",--注释 + -- 含义是指类型对应的代码段,比如600代码段,就是600***,“|”符号表示或,比如510XXX|520XXX 就是510代码段或者520代码段 当然,也可以直接写死代码,不用号段掩码 + -- 市场目前只有SH,SZ等,必须大写,和目前的MarketType.h定义保持一致 + -- 除开紧急情况,序号和英文名应当保持一致性,一个是枚举的字符串,一个是枚举的值 + baseTypes = { + XT_GE_MARKET_SH = "******,SH,1",--沪市 + XT_GE_MARKET_SZ = "******,SZ,2",--深市 + XT_GE_MARKET_ZJ = "******,IF,3",--中金 + XT_GE_MARKET_SQ = "******,SF,4",--上期 + XT_GE_MARKET_DS = "******,DF,5",--大商 + XT_GE_MARKET_ZS = "******,ZF,6",--郑商 + XT_GE_MARKET_OF = "******,OF,7",--开放基金 + XT_GE_MARKET_OP = "******,SHO,8",--股票期权 + XT_GE_MARKET_NEW3BOARD = "******,NEEQ,9",--新三板 + + XT_GE_SH_A = "60****|65****|688***|689***,SH,101",--沪市A股 + XT_GE_SH_B = "90****,SH,102",--沪市B股 + XT_GE_SH_FUND = "50****,SH,103",--沪市封基 + XT_GE_SH_INDEX = "000***,SH,104", --沪市指数 + XT_GE_SH_ETF = "510***|511***|512***|513***|515***|516***|517***|518***|560***|561***|562***|563***|588***,SH,105", --沪市ETF + XT_GE_SH_WARRANT = "000000,SH,106", --沪市权证 + XT_GE_SH_SUBSCRIBE = "73****|78****|712***|715***|795***,SH,107", --沪市申购 + XT_GE_SH_EXCHANGEABLE_LOAN = "132***|1370**|1371**|1372**|1373**|1374**,SH,108", --沪市可交换公司债券 + XT_GE_SH_EXCHANGEABLE_LOAN_PLEDGE = "133***,SH,109", --沪市可交换公司债券质押券出入库 + XT_GE_SH_EXCHANGEABLE_LOAN_SWAP = "192***,SH,110", --沪市可交换公司债券换股 + XT_GE_SH_PRIVATELY_LOAN_TRANSFER = "1355**|1356**|1357**|1358**|1359**,SH,111", --沪市并购重组私募债券挂牌转让 + XT_GE_SH_SHORTTERM_CORPORATE_LOAN_TRANSFER = "1350**|1351**|1352**|1353**|1354**|1175**|1176**|1177**|1178**|1179**,SH,112", --沪市证券公司短期债券挂牌转让 + XT_GE_SH_ABS = "128***,SH,113", --信贷资产支持证券 + XT_GE_SH_CORPORATE_LOAN_PLEDGE = "102***|134***|154***|164***,SH,114", --沪市公司债券质押券入库 + XT_GE_SH_CORPORATE_BOND = "1230**|1231**|1232**|1233**|1234**|136***|143***|1220**|1221**|1222**|1223**|1224**|155***|163***|175***|185***|188***|1375**|1376**|1377**|1378**|1379**|1385**|1386**|1387**|1388**|1389**|115***|240***|241***,SH,115", --沪市公司债 + XT_GE_SH_PUBLIC_PREFERED_SHARES = "330***,SH,116", --沪市公开发行优先股交易 + XT_GE_SH_NON_PUBLIC_PREFERED_SHARES_TRANSFER = "360***,SH,117",--沪市非公开发行优先股转让 + XT_GE_SH_PUBLIC_PREFERED_SHARES_SUBSCRIBE = "770***,SH,118", --沪市公开发行优先股申购 + XT_GE_SH_PUBLIC_PREFERED_SHARES_PLACEMENTS = "771***,SH,119", --沪市公开发行优先股配股/配售 + XT_GE_SH_PUBLIC_PREFERED_SHARES_SUBSCRIBE_PRICE = "772***,SH,120", --沪市公开发行优先股申购款分配 + XT_GE_SH_PUBLIC_PREFERED_SHARES_SUBSCRIBE_DISTRIBUTION = "773***,SH,121", --沪市公开发行优先股申购配号 + XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_TRUSTEE_SHIP = "201***,SH,122", --沪市国债回购(席位托管方式) + XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_ENTERPRISE = "202***,SH,123", --沪市企业债回购 + XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_BUYOUT = "203***,SH,124", --沪市国债买断式回购 + XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_IMPAWN = "204***,SH,125", --沪市新质押式国债回购 + XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE = "201***|202***|203***|204***,SH,126", -- + XT_GE_SH_GOVERNMENT_LOAN_INTEREST_BEARING = "010***|019***,SH,127", --沪市附息国债 + XT_GE_SH_FINANCIAL_BONDS = "018***,SH,128", --沪市金融债 + XT_GE_SH_GOVERNMENT_LOAN_DISCOUNT = "020***,SH,129", --沪市贴现国债 + XT_GE_SH_CENTRAL_GOVERNMENT_LOAN = "010***|019***|020***,SH,130", --沪市中央政府债(国债) + XT_GE_SH_SEPERATION_BOND = "126***,SH,131", --沪市分离债 + XT_GE_SH_ASSET_SECURITIZATION = "121***,SH,132", --沪市资产证券化 + XT_GE_SH_CREDIT_ASSET_SUPPORTED = "128***,SH,133", --信贷资产支持证券 + XT_GE_SH_ENTERPRISE_BOND = "120***|124***|1270**|1271**|1272**|1273**|1274**|1275**|1276**|1277**|1278**|129***|139***|1225**|1226**|1227**|1228**|1229**|152***|1840**|1841**|1842**|1843**|1844**|1845**|1846**|1847**|270***|271***|272***,SH,134", --沪市企业债(席位托管方式) + XT_GE_SH_CONVERTIBALE_BOND = "1000**|1001**|1002**|1003**|1004**|1005**|1006**|1007**|1008**|110***|112***|113***|1110**|1111**|1112**|1113**|1114**|1180**|1181**|1182**|1183**|1184**,SH,135", --沪市可转债 + XT_GE_SH_LOCAL_GOVERNMENT_LOAN = "130***|140***|147***|157***|160***|173***|171***|186***|101***|109***|198***|230***|231***,SH,136", --沪市地方债 + XT_GE_SH_GOVERNMENT_LOAN = "010***|019***|020***|130***|160***|171***|009***|140***|147***|157***|173***|186***|101***|109***|198***|230***|231***,SH,137", --沪市政府债(国债+地方债) + XT_GE_SH_CPB = "1370**|1371**|1372**|1373**|1374**,SH,138",--上海可交换私募债 + XT_GE_SH_STANDARD_BOND = "888880|SHRQ88,SH,139", --沪市标准券 + XT_GE_SH_CLOSED_ENDED_FUNDS = "500***|5058**,SH,140", --沪市封闭式基金 + XT_GE_SH_POLICY_JRZ = "018***|028***|038***,SH,141", --沪市政策性金融债 + XT_GE_SH_PLEDGE = "09****|102***|103***|104***|105***|106***|107***|108***|133***|134***|141***|144***|148***|153***|154***|158***|161***|164***|172***|174***|176***|187***,SH,142", --沪市上海质押代码 + XT_GE_SH_OLD_GOVERNMENT_LOAN = "009***,SH,143", --2000年前发行国债 + XT_GE_SH_GOVERNMENT_LOAN_DISCOUNT_REPURCHASE = "107***,SH,144", --记账式贴现国债质押式回购标准券入库 + XT_GE_SH_CORPORATE_BOND_REPURCHASE = "1040**|1041**|1042**|1043**|1044**,SH,145", --公司债质押式回购标准券入库 + XT_GE_SH_GOVERNMENT_LOAN_DISTRIBUTE_SALE = "7510**|7511**|7516**|7517**,SH,146", --国债分销 + XT_GE_SH_LOCAL_GOVERNMENT_LOAN_REPURCHASE = "106***|141***|148***|158***|161***|172***|174***,SH,147", --地方政府债质押式回购标准券入库 + XT_GE_SH_LOCAL_GOVERNMENT_LOAN_DISTRIBUTE_SALE = "7514**|7515**,SH,148", --地方政府债分销 + XT_GE_SH_SEPERATION_BOND_REPURCHASE = "1050**|1051**|1052**|1053**|1054**|1055**|1056**|1057*|1058**,SH,149", --分离债质押式回购标准券入库 + XT_GE_SH_BOND_OFFER_REPURCHASE = "205***,SH,150", --债券质押式报价回购 + XT_GE_SH_MS_PRIVATE_PLACEMENT_BOND = "125***|145***|150***|151***,SH,151", --中小企业私募债券在固定收益平台转让 + XT_GE_SH_CROSS_BORDER_ETF = "513**0|5109*0,SH,152", --跨境ETF + XT_GE_SH_CROSS_BORDER_LOF = "501018|501021|501023|501025|50130*|501310|501311|501313,SH,153", --跨境LOF + XT_GE_SH_INNOVATION_CLOSED_ENDED_FUNDS = "5058**,SH,154", --上海创新型封闭式基金 + XT_GE_SF_FIXED_INCOME_ETF = "511***,SH,155",--上海的固定收益类 + XT_GE_SH_GOLD = "518**0,SH,156",--上海黄金 + XT_GE_SH_RTMF = "5198**,SH,157",--上海实时申赎货币基金 + XT_GE_SH_TMF = "5116**|5117**|5118**|5119**,SH,158",--上海交易型货币基金 + XT_GE_SH_STOCK_IPO = "730***|732***|780***|712***|795***|787***|707***,SH,159",--上海股票申购代码 + XT_GE_SH_LOAN_IPO = "733***|783***|754***|7590**|713***|718***,SH,160",--上海债券申购代码 + XT_GE_SH_FUND_IPO = "735***,SH,161",--上海基金申购代码 + XT_GE_SH_NEW_SHARES_DISTRIBUTION = "741***|791***|736***|713***|716***|789***|796***|708***,SH,162",--上海新股配号 + XT_GE_SH_PLACING_FIRST_DISTRIBUTION = "747***|797***,SH,163",--上海配售首发配号 + XT_GE_SH_CONVERTIBLE_BOUND_DISTRIBUTION = "744***|794***|756***|714***|719***,SH,164",--上海可转债资金申购配号 + XT_GE_SH_SUBSCRIPTION_PRICE = "740***|790***|734***,SH,165",--上海申购款 + XT_GE_SH_BONDS_FUNDS = "743***|793***|755***,SH,166",--上海发债款 + XT_GE_SH_SHARES_ALLOTMEN = "700***|701***|702***|760***|742***|717***|762***|785***|797***,SH,167",--上海配股代码 + XT_GE_SH_SHARES_CONVERTIBLE_BOND = "704***|764***|753***|715***|726***,SH,168",--上海配转债代码 + XT_GE_SH_LOF = "501***|502***|506***,SH,169", --上海LOF + XT_GE_SH_GF = "502***,SH,170", --上海分级基金 + XT_GE_SH_XGED = "SHXGED,SH,171", --沪新股额 + XT_GE_SH_SEO = "730***|731***|780***|781***,SH,172",--沪增发股 + XT_GE_SH_PR_CB_ETF = "513031|513501|513101|5109*1|513601|513661|513051,SH,173",--上海跨境ETF申赎代码 + XT_GE_SH_LOAN_ETF = "5110**|5111**|5112**|5113**|5114**|5115**,SH,174",--上海债券ETF + XT_GE_SH_EPB_TRANSFER = "139***,SH,175",--上海企业债券挂牌转让 + XT_GE_SH_CPB_LOAN = "1370**|1371**|1372**|1373**|1374**,SH,176",--上海可交换私募债 + XT_GE_SH_LOAN_REPURCHASE_DAY_1 = "204001,SH,177", --沪市1天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_2 = "204002,SH,178", --沪市2天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_3 = "204003,SH,179", --沪市3天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_4 = "204004,SH,180", --沪市4天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_7 = "204007,SH,181", --沪市7天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_14 = "204014,SH,182", --沪市14天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_28 = "204028,SH,183", --沪市28天回购 + XT_GE_SH_LOAN_REPURCHASE_DAY_28_UPPER = "204091|204182,SH,184", --沪市28天以上回购 + XT_GE_SH_GSF = "502**1|502**2|502**4|502**5|502**7|502008|502018|502028|502038|502058|502049|502050,SH,185", --上海分级基金子基金 + XT_GE_SH_ASS = "121***|1235**|1236**|1237**|1238**|1239**|128***|131***|142***|146***|149***|156***|159***|165***|168***|169***|179***|180***|183***|189***|1931**|1932**|1933**|1934**|1935**|1936**|1937**|1938**|1939**|112***|199***|260***|261***,SH,186",--上海资产支持证券 + XT_GE_SH_LOAN_CBB_SCB_NEW = "733***|783***|754***|7590**|713***|718***,SH,187",--上海可转债可交换债新债申购代码 + --XT_GE_SH_EXCHANGEABLE_BOND = "759***,SH,188",--上海可交换债券 + XT_GE_SH_OPEN_END_FUND = "5190**|5191**|5192**|5193**|5194**|5195**|5196**|5197**|5199**,SH,189",--上海开放式基金申赎代码 + XT_GE_SH_OTHER_MF = "5195**|5199**,SH,190",--上海除交易型和实时申赎型之外的货币市场基金 + XT_GE_SH_ENTERPROSE_SUPPORT_BOND = "142***|131***|149***,SH,191",--企业支持债券(固收系统可交易) + --XT_GE_SH_INNOVATE = "605***,SH,192",--上海创新企业股票 + XT_GE_SH_INNOVATE_DISTRIBUTION = "716***,SH,193",--上海创新企业配号 + --XT_GE_SH_INNOVATE_SUBSCRIBE = "715***,SH,194", --上海创新企业申购 + XT_GE_SH_INNOVATE_ALLOTMEN = "717***,SH,195", --上海创新企业配股 + XT_GE_SH_CDR = "6091**|6092**|6093**|6094**|6095**|6096**|6097**|6098**|6099**|689***,SH,196",--上海CDR + XT_GE_SH_CDR_DISTRIBUTION = "713***|796***,SH,197",--上海CDR配号 + XT_GE_SH_CDR_SUBSCRIBE = "712***|795***,SH,198", --上海CDR申购 + XT_GE_SH_CDR_ALLOTMEN = "714***|797***,SH,199", --上海CDR配股 + XT_GE_SH_LOAN_CR_ETF = "511011|511021|511031|511051|511061|511181|511221|511261|511271|511281|511311|511361|511381|5114*1|5115*1,SH,200", --上海债券etf申赎 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_1 = "205001,SH,201", --沪市1天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_7 = "205007,SH,202", --沪市7天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_14 = "205008,SH,203", --沪市14天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_28 = "205010,SH,204", --沪市28天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_42 = "205042,SH,205", --沪市42天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_63 = "205063,SH,206", --沪市64天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_91 = "205030,SH,207", --沪市91天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_119 = "205119,SH,208", --沪市119天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_154 = "205154,SH,209", --沪市154天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_182 = "205182,SH,210", --沪市182天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_273 = "205273,SH,211", --沪市273天报价回购 + XT_GE_SH_PUBLIC_LOAN_PLEDGE = "144***|176***|187***,SH,212", --沪市公开发行公司债券出入库 + XT_GE_SH_CONVERTIBLE_BOND_STOCK = "181***|190***|191***|1950**|1951**|1952**|1953**|1954**,SH,213", --上海可转债转股 + XT_GE_SH_BOND_RESALE = "1820**|1821**|1822**|1009**,SH,214", --上海债券回售 + XT_GE_SH_BOND_PROTOCOL_REPURCHASE = "206***,SH,215", --债券质押式协议回购 + XT_GE_SH_BOND_TRIPARTITE_REPURCHASE = "207***,SH,216", --债券质押式三方回购 + XT_GE_SH_GOVERNMENT_LOAN_FUTURES = "310***,SH,217", --上海国债期货 + XT_GE_SH_OPEN_GF_LOF = "503***,SH,218", --上海多空分级LOF开放式基金 + XT_GE_SH_OPEN_END_FUND_SUBSCRIPTION = "521***,SH,219", --上海开放式基金认购 + XT_GE_SH_OPEN_END_FUND_CROSS_MARKET = "522***,SH,220", --上海开放式基金跨市场转托管 + XT_GE_SH_OPEN_END_FUND_DIVIDEND = "523***,SH,221", --上海开放式基金分红 + XT_GE_SH_OPEN_END_FUND_CONVERSION = "524***,SH,222", --上海开放式基金基金转换 + XT_GE_SH_FUND_RAISING = "705***,SH,223", --上海基金扩募 + XT_GE_SH_TENDER_OFFER = "706***,SH,224", --上海要约收购 + XT_GE_SH_ONLINE_VOTING = "738***|752***|788***,SH,225", --上海网上投票 + XT_GE_SH_ONLINE_VOTING_B = "938***,SH,226", --上海网上投票(B股) + XT_GE_SH_FUND_SUBSCRIPTION = "745***,SH,227", --上海基金申购款 + XT_GE_SH_FUND_SUBSCRIPTION_DISTRIBUTION = "746***,SH,228", --上海基金申购配号 + XT_GE_SH_INTEREST_RATE_GOVERNMENT_LOAN = "75180*,SH,229", --上海利率招标国债预发行 + XT_GE_SH_PRICE_GOVERNMENT_LOAN = "75181*,SH,230", --上海价格招标国债预发行 + XT_GE_SH_PUBLIC_LOAN_DISTRIBUTE_SALE = "75185*|75186*|75187*|75188*|75189*,SH,231", --上海公开发行公司债券网上分销 + XT_GE_SH_LOAN_ISSUANCE_DISTRIBUTE_SALE = "75197*|75198*|75199*,SH,232", --上海公司债发行分销 + XT_GE_SH_EXCHANGEABLE_BOND_DISTRIBUTION = "7580**,SH,233", --上海可交换债配号 + XT_GE_SH_DESIGNATED_TRANSACTION = "799***,SH,234", --上海指定交易 + XT_GE_SH_NON_PUBLIC_CONVERTIBLE_BOND_STOCK = "1930**,SH,235", --创新创业公司非公开发行可转换公司债券转股 + XT_GE_SH_ONLINE_VOTING_PASSWORD_SERVICE_B = "939***,SH,236", --上海网上投票密码服务(B股) + XT_GE_SH_GOVERNMENT_LOAN_PLEDGE = "090***,SH,237", --上海新国债质押式回购质押券出入库 + XT_GE_SH_COUPON_GOVERNMENT_LOAN_PLEDGE = "091***|099***,SH,238", --上海附息国债出入库 + XT_GE_SH_CONVERTIBALE_BOND_RESALE = "1009**|1820**|1821**,SH,239", --上海可转债回售 + XT_GE_SH_ENTERPRISE_LOAN_PLEDGE = "1059**,SH,240", --沪市企业债出入库 + XT_GE_SH_LOW_CORPORATE_BOND = "1230**|1231**|1232**|1233**|1234**,SH,241", --沪市非担保交收公司债低等级公司债券和定向发行的次级债券等 + XT_GE_SH_ASSET_BACKED_SECURITIES = "1235**|1236**|1237**|1238**|1239**|168***|169***|1931**|1932**|1933**|1934**|1935**|1936**|1937**|1938**|1939**,SH,242", --沪市资产支持证券 + XT_GE_SH_TRANSACTION_ETF = "5100*0|5101*0|5102*0|5104*0|5106*0|5107*0|5108*0,SH,243", --上海ETF交易 + XT_GE_SH_CR_ETF = "5100*1|5101*1|5102*1|5103*1|5104*1|5105*1|5106*1|5107*1|5108*1|5880*1|5881*1|5882*1|5883*1|5884*1|517**1,SH,244", --上海ETF申赎 + XT_GE_SH_FUND_ETF = "5100*2|5101*2|5102*2|5103*2|5104*2|5105*2|5106*2|5107*2|5108*2|5880*2|5881*2|5882*2|5883*2|5884*2,SH,245", --上海ETF沪市资金 + XT_GE_SH_SUBSCRIPTION_ETF = "5100*3|5101*3|5102*3|5103*3|5104*3|5105*3|5106*3|5107*3|5108*3,SH,246", --上海ETF认购 + XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF = "5100*4|5101*4|5102*4|5103*4|5104*4|5105*4|5106*4|5107*4|5108*4,SH,247", --上海ETF认购扣款还款代码 + XT_GE_SH_NON_FUND_ETF = "5100*5|5101*5|5102*5|5103*5|5104*5|5105*5|5106*5|5107*5|5108*5,SH,248", --上海ETF非沪市资金 + XT_GE_SH_TRANSACTION_ETF_CROSS_MARKET = "5103*0|5105*0|512**0|515**0|516**0|560**0|561**0|562**0|563**0|517**0|5883*0|5884*0|5885**|5886**,SH,249", --上海跨市场ETF交易 + XT_GE_SH_CR_ETF_CROSS_MARKET = "5103*1|5105*1|512**1,SH,250", --上海跨市场ETF申赎 + XT_GE_SH_FUND_ETF_CROSS_MARKET = "5103*2|5105*2|512**2,SH,251", --上海跨市场ETF沪市资金 + XT_GE_SH_SUBSCRIPTION_ETF_CROSS_MARKET = "5103*3|5105*3|512**3,SH,252", --上海跨市场ETF认购 + XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_CROSS_MARKET = "5103*4|5105*4|512**4,SH,253", --上海跨市场ETF认购扣款还款 + XT_GE_SH_NON_FUND_ETF_CROSS_MARKET = "5103*5|5105*5|512**5,SH,254", --上海跨市场ETF非沪市资金 + XT_GE_SH_FUND_ETF_CROSS_BORDER = "5109*2|513**2,SH,255", --上海跨境ETF沪市资金 + XT_GE_SH_SUBSCRIPTION_ETF_CROSS_BORDER = "5109*3|513**3,SH,256", --上海跨境ETF认购 + XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_CROSS_BORDER = "5109*4|513**4,SH,257", --上海跨境ETF认购扣款还款 + XT_GE_SH_NON_FUND_ETF_CROSS_BORDER = "5109*5|513**5,SH,258", --上海跨境ETF非沪市资金 + XT_GE_SH_TRANSACTION_ETF_LOAN = "5110*0|5112*0,SH,259", --上海债券ETF交易 + XT_GE_SH_SUBSCRIPTION_ETF_LOAN = "5110*3|5112*3,SH,260", --上海债券ETF认购 + XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_LOAN = "5110*4|5112*4,SH,261", --上海债券ETF认购扣款还款 + XT_GE_SH_NON_FUND_ETF_LOAN = "5110*5|5112*5,SH,262", --上海债券ETF非沪市资金 + XT_GE_SH_TRANSACTION_ETF_CR_LOAN = "5113*0|5114*0|5115*0,SH,263", --上海现金申赎债券ETF交易 + XT_GE_SH_FUND_ETF_CR_LOAN = "5113*2|5114*2|5115*2,SH,264", --上海现金申赎债券ETF沪市资金 + XT_GE_SH_SUBSCRIPTION_ETF_CR_LOAN = "5113*3|5114*3|5115*3,SH,265", --上海现金申赎债券ETF认购 + XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_CR_LOAN = "5113*4|5114*4|5115*4,SH,266", --上海现金申赎债券ETF认购扣款还款 + XT_GE_SH_NON_FUND_ETF_CR_LOAN = "5113*5|5114*5|5115*5,SH,267", --上海现金申赎债券ETF非沪市资金 + XT_GE_SH_TRANSACTION_ETF_MONETARY_FUND= "5116*0|5117*0|5118*0|5119*0,SH,268", --上海货币ETF交易 + XT_GE_SH_SUBSCRIPTION_ETF_MONETARY_FUND= "5116*3|5117*3|5118*3|5119*3,SH,269", --上海货币ETF认购 + XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_MONETARY_FUND= "5116*4|5117*4|5118*4|5119*4,SH,270", --上海货币ETF认购扣款还款 + XT_GE_SH_NON_FUND_ETF_MONETARY_FUND= "5116*5|5117*5|5118*5|5119*5,SH,271", --上海货币ETF非沪市资金 + XT_GE_SH_SUBSCRIPTION_ETF_GOLD = "518**3,SH,272", --上海黄金ETF认购 + XT_GE_SH_SUBSCRIPTION_FUND_ETF_GOLD = "518**4,SH,273", --上海黄金ETF基金认购资金 + XT_GE_SH_CR_FUND_ETF_GOLD = "518**5,SH,274", --上海黄金ETF基金申赎资金 + XT_GE_SH_MONETARY_FUND_SUBSCRIPTION = "5218**,SH,275", --上海新货币式基金认购 + XT_GE_SH_WARRANT_CREATION_CANCEL = "581***,SH,276", --上海权证创设/注销 + XT_GE_SH_TECH_BOARD = "688***|689***,SH,277", --上海科创板 + XT_GE_SH_SUBSCRIPTION_TECH_BOARD = "787***,SH,278", --上海科创板新股申购 + XT_PLEDGE_REPURCHASE_SH_DAY_1 = "206001,SH,279", --上海一天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_7 = "206007,SH,280", --上海七天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_14 = "206014,SH,281", --上海14天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_21 = "206021,SH,282", --上海21天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_30 = "206030,SH,283", --上海30天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_90 = "206090,SH,284", --上海90天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_180 = "206180,SH,285", --上海180天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_270 = "206270,SH,286", --上海270天协议回购 + XT_PLEDGE_REPURCHASE_SH_DAY_365 = "206365,SH,287", --上海365天协议回购 + XT_GE_SH_TECH_BOARD_CDR = "689***,SH,288",--上海科创板CDR + XT_GE_SH_TECH_BOARD_CDR_DISTRIBUTION = "796***,SH,289",--上海科创板CDR配号 + XT_GE_SH_TECH_BOARD_CDR_SUBSCRIBE = "795***,SH,290", --上海科创板CDR申购 + XT_GE_SH_TECH_BOARD_CDR_ALLOTMEN = "797***,SH,291", --上海科创板CDR配股 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_21 = "205021,SH,292", --沪市21天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_35 = "205035,SH,293", --沪市35天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_210 = "205210,SH,294", --沪市210天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_245 = "205245,SH,295", --沪市245天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_301 = "205301,SH,296", --沪市301天报价回购 + XT_GE_SH_QUOTATION_REPURCHASE_DAY_357 = "205357,SH,297", --沪市357天报价回购 + XT_GE_SH_NON_PUBLIC_CORPORATE_LOAN = "125***|135***|145***|150***|151***|162***|166***|167***|177***|178***|194***|196***|197***|1823**|1824**|1825**|1826**|1827**|1828**|1829**|114***|250***|251***|252***|253***|254***,SH,298", --上海非公开发行公司债券 + XT_GE_SH_ENTERPROSE_SUPPORT_AUCTION_BOND = "142***|131***,SH,299",--企业支持债券(竞价系统可交易) + XT_GE_SH_ABS_TRANSFER = "149***,SH,300", --沪市资产支持证券挂牌转让 + XT_GE_SH_TMFR = "5116*1|5117*1|5118*1|5119*1|5195*1|5199*1,SH,301",--上海交易型货币及其它货币基金申赎 + XT_GE_SH_PUBLIC_INFRASTRUCTURE_FUND = "5080**,SH,302",--上海公募基础设施基金 + XT_GE_SH_DIRECTIONAL_CONVERTIBALE_BOND = "1108**|1109**,SH,303", --沪市定向可转债 + XT_GE_SH_50_ETF = "510050,SH,350", + XT_GE_SH_300_ETF = "510300,SH,351", + XT_GE_SH_PUBLIC_CORPORATE_TRADE_LOAN = "115***|136***|143***|163***|175***|185***|188***|240***|241***,SH,352", --上海公开发行公司债现券交易 + XT_GE_SH_TECH_BOARD_ETF = "5880*1|5881*1|5882*1|5883*1|5884*1,SH,353", -- 上海科创板etf申赎 + XT_GE_SH_NON_PUBLIC_CONVERTIBLE_CORPORATE_LOAN = "1108**|1109**,SH,354", -- 上海非公开发行可转换公司债券 + XT_GE_SH_TECH_BOARD_CONVERTIBLE_BOND = "1180**|1181**|1182**|1183**|1184**,SH,355", -- 上海科创板可转债 + XT_GE_SH_TECH_BOARD_CONVERTIBLE_BOND_IPO = "718***,SH,356", -- 上海科创板可转债申购 + XT_GE_SH_TECH_BOARD_CONVERTIBLE_BOND_IPO_DISTRIBUTION = "719***,SH,357", -- 上海科创板可转债申购配号 + XT_GE_SH_TECH_BOARD_SHARES_CONVERTIBLE_BOND = "726***,SH,358", -- 上海科创板可转债配债 + XT_GE_SH_ALLOW_PLEDGE_BOND = "009***|010***|019***|020***|105***|110***|113***|120***|122***|123***|126***|127***|129***|130***|136***|137***|140***|143***|147***|152***|155***|157***|160***|163***|171***|173***|175***|188***,SH,359", --上海允许质押出入库债券 + XT_GE_SH_CPB_SWAP = "1380**|1381**|1382**|1383**|1384**,SH,360",--上海可交换私募债换股 + XT_GE_SH_GOVERNMENT_BANK_FINANCE_LOAN_DISTRIBUTE_SALE = "7512**|7513**,SH,361", --政策性银行金融债券分销 + XT_GE_SH_LOCAL_GOVERNMENT_LOAN_ONLINE_DISTRIBUTE_SALE = "75190*|75191*|75192*|75193*|75194*|75195*|75196*,SH,362", --地方政府债券网上分销 + XT_GE_SH_PLACING = "703***,SH,363", -- 上海配售 + XT_GE_SH_TECH_BOARD_ETF_ETFCODE = "5880*0|5881*0|5882*0|5883*0|5884*0,SH,364", -- 上海科创板etf + XT_GE_SH_MAIN_BOARD = "60****,SH,365", -- 沪市主板 + XT_GE_SH_500_ETF = "510500,SH,366", -- 上海500etf + XT_GE_SH_TECH_BOARD_50_ETF = "588080,SH,367", --科创板50ETF + XT_GE_SH_TECH_50_ETF = "588000,SH,368", --科创50ETF + XT_GE_SH_GOV_ALLOW = "1279**|1848**|1849**,SH,369",--上海政府支持债券 + + XT_GE_SZ_A = "00****|30****,SZ,10001",--深市A股 + XT_GE_SZ_B = "20****,SZ,10002",--深市B股 + XT_GE_SZ_FUND = "15****|16****|18****,SZ,10003",--深市封基 + XT_GE_SZ_MAIN_BOARD = "000***|001***|002***|003***|004***,SZ,10004",--深市主板 + XT_GE_SZ_SME_BOARD = "000000,SZ,10005",--深市中小板 + XT_GE_SZ_GEM_BORAD = "30****,SZ,10006",--深市创业板 + XT_GE_SZ_INDEX = "39****|98****,SZ,10007",--深市指数 + XT_GE_SZ_ETF = "158***|159***,SZ,10008",--深市ETF + XT_GE_SZ_WARRANT = "03****,SZ,10009",--深市权证 + XT_GE_SZ_GLR = "131990,SZ,10010",--深市国债回购(131990不是的,需要业务支持) + XT_GE_SZ_GLIB = "100***|101***|102***|103***|104***|105***|106***|107***,SZ,10011",--深市附息国债 + XT_GE_SZ_GLD = "108***|110***,SZ,10012",--深市贴现国债 + XT_GE_SZ_CB = "112***,SZ,10013",--深市公司债 + XT_GE_SZ_EB = "111***,SZ,10014",--深市企业债 + XT_GE_SZ_SB = "115***,SZ,10015",--深市分离债 + XT_GE_SZ_MSP_PB = "118***|114***|133***|134***,SZ,10016",--深市私募债 + XT_GE_SZ_SFMP = "119***,SZ,10017",--深市专项资金管理规划 + XT_GE_SZ_LGL = "109***|104***|105***|19****|173***,SZ,10018",--深市地方政府债 + XT_GE_SZ_CBB = "121***|122***|123***|124***|125***|126***|127***|128***|129***|10165*|10166*|10167*|10168*|10169*,SZ,10019",--深市可转债 + XT_GE_SZ_STANDAR_B = "131990|131991|SZRQ88,SZ,10020",--深市标准券 + XT_GE_SZ_CEF = "184***,SZ,10021",--深市封闭式基金 + XT_GE_SZ_LOF = "16****,SZ,10022",--深市LOF + XT_GE_SZ_GF = "150***|151***|160516|161207|162509|161715|161816|161812|161819|160417|160718|502040|163406|163109|165310|164809|164808,SZ,10023",--深市分级基金 + XT_GE_SZ_SCB_PB = "117***|1156**|1157**|1158**|1159**,SZ,10024",--深市 中小企业可交换私募债 + XT_GE_SZ_SC_SB = "1189**|1151**|1152**|1153**|1154**|1155**,SZ,10025",--深市证券公司次级债 + XT_GE_SZ_SPB = "1180**|1181**|1182**|1183**|1184**|1185**|1186**|1187**|1188**,SZ,10026",--深市其他中小企业私募债 + XT_GE_SZ_ASS = "1161**|1162**|1163**|1164**|1191**|1192**|1193**|1194**|138***|139***|135***|136***|137***|143***|144***|146***,SZ,10027",--深市企业资产支持证券 + XT_GE_SZ_GSF = "150***|151***,SZ,10028",--深市分级基金子基金 + XT_GE_SZ_CB_ETF = "159920|159941|159954|159960|159963|159605|159607|159612|159615|159632|159636|159655|159711|159712|159718|159726|159735|159740|159741|159742|159747|159750|159751|159776|159788|159792|159822|159823|159850|159866|159892|159519|159696|159699|159509|159513|159506|159501|159659,SZ,10029",--深市跨境ETF + XT_GE_SZ_CB_LOF = "160125|160416|160717|160719|161116|161210|161714|161815|162411|164701|164705|164815|164824|165510|165513|164906|163208|162719|162416|162415|161831|161229|161130|161129|161128|161127|161126|161125|161124|160924|160923|160922|160723|160644|160322|160216|160140|160138|159691|159660|159688|159687,SZ,10030",--深市跨境LOF + XT_GE_SZ_ICEF = "150***,SZ,10031",--深市创新型封闭式基金 + XT_GE_SZ_ZB_CCB = "127***,SZ,10032",--深市主板可转换公司债券 + XT_GE_SZ_CYB_CCB = "123***,SZ,10033",--深市创业板可转换公司债券 + XT_GE_SZ_ZXB_CCB = "128***,SZ,10034",--深市中小板可转换公司债券 + XT_GE_SZ_GLRA = "131***,SZ,10035",--深市国债回购(131900不是的,需要业务支持) + XT_GE_SZ_GOLD = "159934|159937|159812|159830|159831|159832|159833|159834,SZ,10036",--深市黄金 + XT_GE_SZ_RTMF = "1590**,SZ,10037",--深市实时申赎货币基金 + XT_GE_SZ_XGED = "SZXGED,SZ,10038",--深新股额 + XT_GE_SZ_SEO = "07****|37****,SZ,10039",--深增发股 + XT_GE_SZ_SA = "08****|380***,SZ,10040",--深圳配股 + XT_GE_SZ_LOAN_ETF = "159926|159972|159988|159816|159649|159650|159651,SZ,10041",--深圳债券ETF + XT_GE_SZ_LOAN_REPURCHASE_DAY_1 = "131810,SZ,10042", --深市1天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_2 = "131811,SZ,10043", --深市2天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_3 = "131800,SZ,10044", --深市3天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_4 = "131809,SZ,10045", --深市4天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_7 = "131801,SZ,10046", --深市7天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_14 = "131802,SZ,10047", --深市14天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_28 = "131803,SZ,10048", --深市28天回购 + XT_GE_SZ_LOAN_REPURCHASE_DAY_28_UPPER = "131805|131806,SZ,10049", --深市28天以上回购 + XT_GE_SZ_POB = "148***|149***,SZ,10050",--深圳公募公司债券 + XT_GE_BANK_LOAN = "1086**|1087**|1088**|1089**,SZ,10051",--深圳政策性金融债 + XT_GE_SZ_GOV_ALLOW = "1119**|130***,SZ,10052",--政府支持债券 + XT_GE_SZ_INNOVATE_KZZ = "1210**|1211**|1212**|1213**|1214**,SZ,10053",--创新创业可转债 + XT_GE_SZ_LOAN_IPO = "07****|37****|120***,SZ,10054",--深圳债券申购代码 + XT_GE_SZ_ENTERPROSE_SUPPORT_BOND = "116***|119***|138***|139***|135***|136***|137***|143***|144***|146***,SZ,10055",--企业支持债券 + XT_GE_SZ_CDR_ALLOTMEN = "08****,SZ,10056",--深圳CDR配股代码 + XT_PLEDGE_REPURCHASE_SZ_DAY_1 = "131981,SZ,10057", --深圳1天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_7 = "131982,SZ,10058", --深圳7天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_14 = "131983,SZ,10059", --深圳14天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_21 = "131984,SZ,10060", --深圳21天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_30 = "131985,SZ,10061", --深圳30天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_90 = "131986,SZ,10062", --深圳90天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_180 = "131987,SZ,10063", --深圳180天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_270 = "131988,SZ,10064", --深圳270天协议回购 + XT_PLEDGE_REPURCHASE_SZ_DAY_365 = "131989,SZ,10065", --深圳365天协议回购 + XT_GE_SZ_NON_PUBLIC_PREFERED_SHARES_TRANSFER = "140***,SZ,10066", --深市非公开优先股转让 + XT_GE_SZ_LOAN_ISSUANCE_DISTRIBUTE_SALE = "10165*|10166*|10167*|10168*|10169*,SZ,10067", --深市债券分销 + XT_GE_SZ_LOAN_REITS = "1215**|1216**|1217**|1218**|1219**,SZ,10068", --深市债券REITS代码 + XT_GE_SZ_LOAN_DIRECTIONAL = "10165*|10166*|10167*|10168*|10169*|124***,SZ,10069", --深市定向可转债 + XT_GE_SZ_300_ETF = "159919,SZ,10071", + XT_GE_SZ_OLDSHARES_PREFERRED_CONVERTIBLE_BOND = "38****,SZ,10072",--创业板上市公司可转债老股东优先配售代码 + XT_GE_SZ_GEM_BORAD_DR = "3098**|3099**,SZ,10073", --创业板存托凭证代码区间309800-309999 + XT_GE_SZ_MAIN_SME_BORAD_DR = "0010*1|0010*2|0010*3|0010*4|0010*5|0010*6|0010*7|0010*8|0010*9|0011**,SZ,10074", --主板中小板存托凭证代码区间 001001-001199 + XT_GE_SZ_SHARES_CONVERTIBLE_BOND = "08****|38****,SZ,10075",--深市配转债代码 + XT_GE_SZ_PUBLIC_INFRASTRUCTURE_FUND = "180***,SZ,10076",--深市公募基础设施基金 + XT_GE_SZ_DIRECTIONAL_CONVERTIBALE_BOND = "124***,SZ,10077", --深市定向可转债 + XT_GE_SZ_EXCHANGEABLE_LOAN = "120***|117***|1156**|1157**|1158**|1159**,SZ,10078",--深圳可交换公司债 + XT_GE_SZ_ETF_CROSS_MARKET = "159602|159603|159606|159608|159609|159610|159611|159613|159616|159617|159618|159619|159620|159621|159623|159625|159628|159629|159630|159631|159633|159635|159637|159638|159639|159640|159641|159642|159643|159645|159646|159647|159658|159663|159667|159701|159702|159703|159707|159710|159713|159715|159717|159719|159720|159723|159725|159728|159729|159730|159731|159732|159733|159736|159738|159739|159743|159745|159748|159752|159755|159757|159758|159760|159761|159763|159766|159767|159768|159769|159770|159775|159778|159779|159780|159781|159782|159786|159787|159789|159791|159793|159795|159796|159797|159798|159813|159815|159819|159820|159824|159825|159827|159828|159835|159837|159838|159839|159840|159841|159842|159843|159845|159847|159848|159849|159851|159852|159853|159855|159856|159857|159858|159859|159861|159862|159863|159864|159865|159867|159870|159871|159872|159873|159875|159876|159877|159880|159881|159883|159885|159886|159887|159888|159889|159890|159891|159895|159896|159898|159899|159999|159980|159981|159985|159649|159650|159801|159805|159806|159807|159811|159919|159922|159923|159925|159928|159929|159930|159931|159933|159935|159936|159938|159939|159940|159944|159945|159951|159953|159959|159962|159965|159968|159973|159974|159982|159986|159987|159990|159992|159993|159994|159995|159996|159997|159998|159809|159983|159978|159979|159976|159984|159869|159790|159783|159601|159672|159676|159685|159653|159657|159689|159671|159678|159679|159666|159652|159656|159669|159683|159665|159677|159675|159662|159627|159680|159907|159515|159517|159698|159510|159511|159516|159512|159503|159686|159673|159508|159690|159507|159692|159695|159622|159670|159697,SZ,10079",--深圳跨市etf + XT_GE_SZ_100_ETF = "159901,SZ,10080",--深证100ETF股票期权 + XT_GE_SZ_500_ETF = "159922,SZ,10081",--深圳500ETF + XT_GE_SZ_CYB_ETF = "159915,SZ,10082",--创业板ETF + + XT_GE_MARKET_NEW3BOARD_DELISTED = "400***|420***,NEEQ,20000", --两网及退市公司股票 新三板 + XT_GE_NEW3BOARD_PREFERED_SHARES_TRANSFER = "820***,NEEQ,20001", --全国股转非公开优先股转让 + XT_GE_BJ = "43****|83****|87****,BJ,20002",--北交 + XT_GE_BJ_SUBSCRIBE = "889***,BJ,20003",--北交所申购 + }, + --存放扩展类型,能用基础类型描述的,尽量用基础类型,基础类型执行效率高于扩展类型 + --扩展类型可以是基础类型,也可以由基础类型通过简单的&(且)|(或)运算得出,允许用小括号调整运算优先级 + --扩展类型的表达式里可以使用之前已经定义的扩展类型 + --例句 xtf = "(xtd|xta&(xtb&xtc))|((xta&xtb))|xta,303", + extraTypes = { + XT_GE_EXTRA_STOCK_A = "XT_GE_SH_A|XT_GE_SZ_A|XT_GE_BJ,100001",--沪深A股 + XT_GE_EXTRA_STOCK_B = "XT_GE_SH_B|XT_GE_SZ_B,100002",--沪深B股 + XT_GE_EXTRA_STOCK = "XT_GE_EXTRA_STOCK_A|XT_GE_EXTRA_STOCK_B,100003",--沪深狭义股票 + XT_GE_EXTRA_FUND = "XT_GE_SH_FUND|XT_GE_SZ_FUND,100004",--沪深封基 + XT_GE_EXTRA_STOCK_INDEX = "XT_GE_SZ_INDEX|XT_GE_SH_INDEX,100005",--指数 + XT_GE_EXTRA_MARKET_CF = "XT_GE_MARKET_SQ|XT_GE_MARKET_DS|XT_GE_MARKET_ZS,100006",--商品期货 + XT_GE_EXTRA_MARKET_FU = "XT_GE_MARKET_ZJ|XT_GE_EXTRA_MARKET_CF,100007",--期货市场 + XT_GE_EXTRA_MARKET_ST = "XT_GE_MARKET_SH|XT_GE_MARKET_SZ,100008",--股票 + XT_GE_EXTRA_SZ_CGL = "XT_GE_SZ_GLIB|XT_GE_SZ_GLD,100009",--深市中央政府债(国债) + XT_GE_EXTRA_SZ_GL = "XT_GE_EXTRA_SZ_CGL|XT_GE_SZ_LGL,100010",--深市政府债 + XT_GE_EXTRA_SZ_LOAN = "XT_GE_SZ_GLIB|XT_GE_SZ_GLD|XT_GE_SZ_CB|XT_GE_SZ_CBB|XT_GE_SZ_EB|XT_GE_SZ_SB|XT_GE_SZ_MSP_PB|XT_GE_SZ_SFMP|XT_GE_SZ_LGL|XT_GE_SZ_POB|XT_GE_SZ_SCB_PB|XT_GE_SZ_ZB_CCB|XT_GE_SZ_CYB_CCB|XT_GE_SZ_ZXB_CCB|XT_GE_SZ_LOAN_REITS|XT_GE_SZ_LOAN_DIRECTIONAL|XT_GE_SZ_EXCHANGEABLE_LOAN|XT_GE_SZ_ENTERPROSE_SUPPORT_BOND|XT_GE_SZ_GOV_ALLOW,100011",--深市所有债券 + XT_GE_EXTRA_STOCK_EX = "!XT_GE_EXTRA_STOCK_INDEX,100012",--广义的股票 + XT_GE_EXTRA_ETF = "XT_GE_SH_ETF|XT_GE_SZ_ETF,100013",--ETF + XT_GE_EXTRA_CLOSED_ENDED_FUNDS = "XT_GE_SH_CLOSED_ENDED_FUNDS|XT_GE_SZ_CEF,100014",--封闭式基金 + XT_GE_EXTRA_WARRANT = "XT_GE_SH_WARRANT|XT_GE_SZ_WARRANT,100015",--权证 + XT_GE_EXTRA_LOAN = "XT_GE_EXTRA_SH_LOAN|XT_GE_EXTRA_SZ_LOAN,100016",--债券 + XT_GE_EXTRA_SZ_GLR = "XT_GE_SZ_GLRA&(!XT_GE_SZ_GLR),100017",--深市国债回购 + XT_GE_EXTRA_STANDARD_BOND = "XT_GE_SH_STANDARD_BOND|XT_GE_SZ_STANDAR_B,100018",--标准券 + XT_GE_EXTRA_POLICY_JRZ = "XT_GE_SH_POLICY_JRZ,100019", + XT_GE_EXTRA_GLR = "XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE|XT_GE_EXTRA_SZ_GLR,100020",--债券回购 + XT_GE_EXTRA_REPURCHASE_IMPAWN = "XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_IMPAWN|XT_GE_EXTRA_SZ_GLR,100021",--质押式回购 + XT_GE_EXTRA_GOLD = "XT_GE_SH_GOLD|XT_GE_SZ_GOLD,100022",--黄金 + XT_GE_EXTRA_RTMF = "XT_GE_SH_RTMF|XT_GE_SZ_RTMF,100023",--实时申赎货币基金 + XT_GE_EXTRA_MONETARY_FUND = "XT_GE_EXTRA_RTMF|XT_GE_SH_TMF|XT_GE_SH_OTHER_MF,100024",--货币基金 + XT_GE_EXTRA_SH_IPO = "XT_GE_SH_STOCK_IPO|XT_GE_SH_LOAN_IPO|XT_GE_SH_FUND_IPO,100025",--上海申购代码 + XT_GE_EXTRA_CB_ETF = "XT_GE_SZ_CB_ETF|XT_GE_SH_CROSS_BORDER_ETF,100026",--跨境ETF + XT_GE_EXTRA_CB_LOF = "XT_GE_SH_CROSS_BORDER_LOF|XT_GE_SZ_CB_LOF,100027",--跨境LOF + XT_GE_EXTRA_STOCK_TRANABLE = "XT_GE_EXTRA_STOCK|XT_GE_EXTRA_FUND|XT_GE_EXTRA_ETF|XT_GE_EXTRA_WARRANT|XT_GE_SH_SUBSCRIBE|XT_GE_SZ_GEM_BORAD|XT_GE_EXTRA_GLR|XT_GE_EXTRA_LOAN|XT_GE_SF_FIXED_INCOME_ETF|XT_GE_EXTRA_GOLD|XT_GE_EXTRA_MONETARY_FUND|XT_GE_EXTRA_SZ_CGL|XT_GE_SH_CENTRAL_GOVERNMENT_LOAN|XT_GE_SH_LOCAL_GOVERNMENT_LOAN|XT_GE_SZ_LGL|XT_GE_EXTRA_SH_IPO|XT_GE_SH_PLEDGE|XT_GE_EXTRA_CB_ETF|XT_GE_EXTRA_CB_LOF|XT_GE_SH_SHARES_ALLOTMEN|XT_GE_SH_SHARES_CONVERTIBLE_BOND|XT_GE_SZ_CBB|XT_GE_SH_CONVERTIBALE_BOND|XT_GE_SH_SEO|XT_GE_SZ_SEO|XT_GE_SH_LOAN_CBB_SCB_NEW|XT_GE_SZ_LOAN_IPO|XT_GE_SZ_CDR_ALLOTMEN|XT_GE_SH_TECH_BOARD|XT_GE_SH_BOND_OFFER_REPURCHASE|XT_GE_SH_SUBSCRIPTION_TECH_BOARD|XT_GE_SH_TRANSACTION_ETF_CROSS_MARKET|XT_GE_BOND_DISTRIBUTION|XT_GE_SH_PUBLIC_PREFERED_SHARES|XT_GE_SH_NON_PUBLIC_PREFERED_SHARES_TRANSFER|XT_GE_SH_BOND_RESALE|XT_GE_SH_CONVERTIBALE_BOND_RESALE|XT_GE_SH_CONVERTIBLE_BOND_STOCK|XT_GE_SZ_NON_PUBLIC_PREFERED_SHARES_TRANSFER|XT_GE_SZ_SA|XT_GE_SZ_OLDSHARES_PREFERRED_CONVERTIBLE_BOND|XT_GE_SH_ENTERPROSE_SUPPORT_AUCTION_BOND|XT_GE_EXTRA_PUBLIC_INFRASTRUCTURE_FUND|XT_GE_BJ_SUBSCRIBE,100028",--可交易的 + XT_GE_EXTRA_MAIN_BOARD = "XT_GE_SH_MAIN_BOARD|XT_GE_SZ_MAIN_BOARD,100029", --主板 + XT_GE_EXTRA_INTRA_DAY = "XT_GE_EXTRA_LOAN|XT_GE_EXTRA_GOLD|XT_GE_SF_FIXED_INCOME_ETF|XT_GE_EXTRA_WARRANT|XT_GE_EXTRA_CB_ETF|XT_GE_EXTRA_CB_LOF|XT_GE_SH_TMF|XT_GE_SZ_RTMF|XT_GE_EXTRA_LOAN_ETF|XT_GE_EXTRA_MARKET_FU|XT_GE_MARKET_OP,100030", --回转交易 + XT_GE_EXTRA_SH_DISTRIBUTION = "XT_GE_SH_NEW_SHARES_DISTRIBUTION|XT_GE_SH_PLACING_FIRST_DISTRIBUTION|XT_GE_SH_CONVERTIBLE_BOUND_DISTRIBUTION,100031", --上海配号 + XT_GE_EXTRA_XGED = "XT_GE_SH_XGED|XT_GE_SZ_XGED,100032", --沪深新股申购额度 + XT_GE_SHARES_ALLOTMEN = "XT_GE_SH_SHARES_ALLOTMEN|XT_GE_SZ_SA,100033", --沪深配股代码 + XT_GE_EXTRA_FI_ETF = "XT_GE_SF_FIXED_INCOME_ETF,100034", --固定收益:跟踪债券指数的交易型开放式指数基金、交易型货币市场基金 + XT_GE_EXTRA_ST_FIX = "XT_GE_SH_GOVERNMENT_LOAN_INTEREST_BEARING|XT_GE_SZ_GLIB|XT_GE_SH_GOVERNMENT_LOAN_DISCOUNT|XT_GE_SZ_GLD|XT_GE_SH_GOVERNMENT_LOAN|XT_GE_EXTRA_SZ_GL|XT_GE_SZ_EB|XT_GE_SH_ENTERPRISE_BOND|XT_GE_SZ_MSP_PB|XT_GE_SH_CONVERTIBALE_BOND|XT_GE_SZ_CBB|XT_GE_SH_SEPERATION_BOND|XT_GE_SZ_SB|XT_GE_EXTRA_GLR|XT_GE_EXTRA_STANDARD_BOND|XT_GE_EXTRA_MONETARY_FUND|XT_GE_SF_FIXED_INCOME_ETF|XT_GE_SZ_LOAN_REITS|XT_GE_SZ_LOAN_DIRECTIONAL|XT_GE_EXTRA_FICC|XT_GE_EXTRA_LOAN,100035", --固定收益类 + XT_GE_EXTRA_GF = "XT_GE_SH_GF|XT_GE_SZ_GF,100036", --分级基金 + XT_GE_EXTRA_LOF = "XT_GE_SH_LOF|XT_GE_SZ_LOF,100037", --LOF + XT_GE_EXTRA_LOAN_ETF = "XT_GE_SH_LOAN_ETF|XT_GE_SZ_LOAN_ETF,100038", --债券ETF + XT_GE_EXTRA_SH_LOAN = "XT_GE_SH_GOVERNMENT_LOAN_INTEREST_BEARING|XT_GE_SH_GOVERNMENT_LOAN_DISCOUNT|XT_GE_SH_LOCAL_GOVERNMENT_LOAN|XT_GE_SH_CONVERTIBALE_BOND|XT_GE_SH_CORPORATE_BOND|XT_GE_SH_ENTERPRISE_BOND|XT_GE_SH_ASSET_SECURITIZATION|XT_GE_SH_SEPERATION_BOND_REPURCHASE|XT_GE_SH_FINANCIAL_BONDS|XT_GE_SH_CREDIT_ASSET_SUPPORTED|XT_GE_SH_EXCHANGEABLE_LOAN|XT_GE_SH_PRIVATELY_LOAN_TRANSFER|XT_GE_SH_SHORTTERM_CORPORATE_LOAN_TRANSFER|XT_GE_SH_EPB_TRANSFER|XT_GE_SH_CPB|XT_GE_SH_CPB_LOAN|XT_GE_SH_GOVERNMENT_LOAN|XT_GE_SH_SEPERATION_BOND|XT_GE_SH_LOAN_CBB_SCB_NEW|XT_GE_SH_MS_PRIVATE_PLACEMENT_BOND|XT_GE_SH_ENTERPROSE_SUPPORT_BOND|XT_GE_SH_PUBLIC_CORPORATE_TRADE_LOAN|XT_GE_SH_NON_PUBLIC_CORPORATE_LOAN|XT_GE_SH_ASS|XT_GE_SH_GOV_ALLOW,100039", --上海债券 + XT_GE_EXTRA_REPURCHASE_DAY_1 = "XT_GE_SH_LOAN_REPURCHASE_DAY_1|XT_GE_SZ_LOAN_REPURCHASE_DAY_1,100040", --1天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_2 = "XT_GE_SH_LOAN_REPURCHASE_DAY_2|XT_GE_SZ_LOAN_REPURCHASE_DAY_2,100041", --2天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_3 = "XT_GE_SH_LOAN_REPURCHASE_DAY_3|XT_GE_SZ_LOAN_REPURCHASE_DAY_3,100042", --3天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_4 = "XT_GE_SH_LOAN_REPURCHASE_DAY_4|XT_GE_SZ_LOAN_REPURCHASE_DAY_4,100043", --4天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_7 = "XT_GE_SH_LOAN_REPURCHASE_DAY_7|XT_GE_SZ_LOAN_REPURCHASE_DAY_7,100044", --7天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_14 = "XT_GE_SH_LOAN_REPURCHASE_DAY_14|XT_GE_SZ_LOAN_REPURCHASE_DAY_14,100045", --14天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_28 = "XT_GE_SH_LOAN_REPURCHASE_DAY_28|XT_GE_SZ_LOAN_REPURCHASE_DAY_28,100046", --28天逆回购 + XT_GE_EXTRA_REPURCHASE_DAY_28_UPPER = "XT_GE_SH_LOAN_REPURCHASE_DAY_28_UPPER|XT_GE_SZ_LOAN_REPURCHASE_DAY_28_UPPER,100047", --28天以上逆回购 + XT_GE_EXTRA_NOT_CLOSING_AUCTION_MATCH = "XT_GE_EXTRA_SH_LOAN|XT_GE_SH_FUND|XT_GE_SH_ETF|XT_GE_SH_BOND_OFFER_REPURCHASE|XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE|XT_GE_SH_PLEDGE,100070", --上交所不执行收盘集合竞价的品种 + XT_GE_EXTRA_RATE_BOND = "XT_GE_SH_GOVERNMENT_LOAN|XT_GE_EXTRA_SZ_GL|XT_GE_SH_POLICY_JRZ|XT_GE_BANK_LOAN,100080", --利率类债券 + XT_GE_EXTRA_FICC = "XT_GE_SH_CORPORATE_BOND|XT_GE_SH_OLD_GOVERNMENT_LOAN|XT_GE_SH_CENTRAL_GOVERNMENT_LOAN|XT_GE_SH_GOVERNMENT_LOAN_INTEREST_BEARING|XT_GE_SH_CONVERTIBALE_BOND|XT_GE_SH_ENTERPRISE_BOND|XT_GE_SH_MS_PRIVATE_PLACEMENT_BOND|XT_GE_SH_SEPERATION_BOND|XT_GE_SH_CREDIT_ASSET_SUPPORTED|XT_GE_SH_GOVERNMENT_LOAN|XT_GE_SH_ENTERPROSE_SUPPORT_BOND|XT_GE_SH_EXCHANGEABLE_LOAN|XT_GE_SH_PRIVATELY_LOAN_TRANSFER|XT_GE_SH_SHORTTERM_CORPORATE_LOAN_TRANSFER|XT_GE_SH_CPB_LOAN|XT_GE_SH_NON_PUBLIC_CONVERTIBLE_BOND_STOCK|XT_GE_SH_BOND_TRIPARTITE_REPURCHASE|XT_GE_SH_LOW_CORPORATE_BOND|XT_GE_SH_ASSET_BACKED_SECURITIES|XT_GE_SH_LOCAL_GOVERNMENT_LOAN|XT_GE_SH_NON_PUBLIC_CORPORATE_LOAN|XT_GE_SH_ASS|XT_GE_SH_FINANCIAL_BONDS|XT_GE_SH_BOND_PROTOCOL_REPURCHASE|XT_GE_SH_BOND_TRIPARTITE_REPURCHASE|XT_GE_SZ_LOAN_REITS|XT_GE_SZ_LOAN_DIRECTIONAL|XT_GE_SH_PUBLIC_CORPORATE_TRADE_LOAN|XT_GE_SH_PUBLIC_INFRASTRUCTURE_FUND|XT_GE_SH_GOV_ALLOW,100090", --固收 + XT_GE_BOND_DISTRIBUTION = "XT_GE_SH_GOVERNMENT_LOAN_DISTRIBUTE_SALE|XT_GE_SH_LOCAL_GOVERNMENT_LOAN_DISTRIBUTE_SALE|XT_GE_SH_PUBLIC_LOAN_DISTRIBUTE_SALE|XT_GE_SH_LOAN_ISSUANCE_DISTRIBUTE_SALE|XT_GE_SZ_LOAN_ISSUANCE_DISTRIBUTE_SALE|XT_GE_SH_GOVERNMENT_BANK_FINANCE_LOAN_DISTRIBUTE_SALE|XT_GE_SH_LOCAL_GOVERNMENT_LOAN_ONLINE_DISTRIBUTE_SALE,100200", --债券分销 + XT_GE_EXTRA_50_ETF = "XT_GE_SH_50_ETF,100100", + XT_GE_EXTRA_300_ETF = "XT_GE_SH_300_ETF|XT_GE_SZ_300_ETF,100101", + XT_GE_EXTRA_BLOCK_TRADING = "XT_GE_EXTRA_STOCK_TRANABLE|XT_GE_SH_ASS|XT_GE_SZ_ASS,100102", --大宗平台可交易 + XT_GE_EXTRA_PUBLIC_INFRASTRUCTURE_FUND = "XT_GE_SH_PUBLIC_INFRASTRUCTURE_FUND|XT_GE_SZ_PUBLIC_INFRASTRUCTURE_FUND,100103",--公募基础设施基金 + XT_GE_EXTRA_DIRECTIONAL_CONVERTIBALE_BOND = "XT_GE_SH_DIRECTIONAL_CONVERTIBALE_BOND|XT_GE_SZ_DIRECTIONAL_CONVERTIBALE_BOND,100104",--定向可转债 + XT_GE_EXTRA_ALLOW_PLEDGE = "XT_GE_SH_ALLOW_PLEDGE_BOND|XT_GE_EXTRA_SZ_LOAN,100105",--允许质押出入库债券 + XT_GE_EXTRA_SH_CORPORATE_LOAN = "XT_GE_SH_NON_PUBLIC_CONVERTIBLE_CORPORATE_LOAN|XT_GE_SH_CPB|XT_GE_SH_NON_PUBLIC_CORPORATE_LOAN|XT_GE_SH_MS_PRIVATE_PLACEMENT_BOND,100106",--上海私募债 + XT_GE_EXTRA_SZ_CORPORATE_LOAN = "XT_GE_SZ_LOAN_DIRECTIONAL|XT_GE_SZ_SCB_PB|XT_GE_SZ_MSP_PB|XT_GE_SZ_SPB,100107",--深圳私募债 + XT_GE_EXTRA_100_ETF = "XT_GE_SZ_100_ETF,100108",--100ETF股票期权 + XT_GE_EXTRA_500_ETF = "XT_GE_SH_500_ETF|XT_GE_SZ_500_ETF,100109",--500ETF + XT_GE_EXTRA_CYB_ETF = "XT_GE_SZ_CYB_ETF,100110",--创业板ETF + }, + optionTypes + = { + XT_GE_SF_FTOPTION = "au*****?|cu*****?|al*****?|ru*****?|zn*****?|ag*****?|rb*****?|br*****?,SFO,100050", --上期所期权 四位到期数字,一位C/P + XT_GE_ZF_FTOPTION = "SR****?|CF****?|TA****?|MA****?|RM****?|ZC****?|OI****?|PK****?|PX****?|SH****?,ZFO,100051", --郑商所期权 三位到期数字,一位C/P + XT_GE_DF_FTOPTION = "m****-*-?|c****-*-?|i****-*-?|y****-*-?|p****-*-?|j****-*-?|jm****-*-?|pg****-*-?|v****-*-?|l****-*-?|pp****-*-?|a****-*-?|b****-*-?|eg****-*-?|eb****-*-?,DFO,100052", --大商所期权 四位到期数字,一位C/P + XT_GE_IF_FTOPTION = "HO?|IO?|MO?|ZO?|IF?^&&IO?,IFO,100053", --中金所期权,HO\IO期权专用,有IF套利期权合约 + XT_GE_SF_ARBITAGE_FTOPTION = ",SFO,100054",--上期所套利期权 + XT_GE_ZF_ARBITAGE_FTOPTION = ",ZFO,100055",--郑商所套利期权 + XT_GE_DF_ARBITAGE_FTOPTION = ",DFO,100056",--大商所套利期权 + XT_GE_IF_ARBITAGE_FTOPTION = "IF?^&&IO?|HO?^&&?|IO?^&&?,IFO,100057",--中金所套利期权 + XT_GE_INE_FTOPTION = "bc*****?|lu*****?|nr*****?|sc*****?,INE,100058", --能源中心期权 四位到期数字,一位C/P + XT_GE_INE_ARBITAGE_FTOPTION = ",INE,100059",--能源中心套利期权 + XT_GE_GF_FTOPTION = "si*****?|lc*****?,GFO,100060",--广期所期权 + }, + abroadMarkets = { + abroadFutureMarkets = "OSE,LPPM,CBF,LBMA,NYB,EUREX,COMEX,CME,ICE,CBOT,SGX,LME,NYMEX,MX,LIFFE,ASX,HKFE", + }, +} diff --git a/src/xtquant/doc/xtdata.md b/src/xtquant/doc/xtdata.md new file mode 100644 index 0000000..ad58c19 --- /dev/null +++ b/src/xtquant/doc/xtdata.md @@ -0,0 +1,1885 @@ +# XtQuant.XtData 行情模块 + +xtdata是xtquant库中提供行情相关数据的模块,本模块旨在提供精简直接的数据满足量化交易者的数据需求,作为python库的形式可以被灵活添加到各种策略脚本中。 + +主要提供行情数据(历史和实时的K线和分笔)、财务数据、合约基础信息、板块和行业分类信息等通用的行情数据。 + +## 版本信息 + +- 2020-09-01 + - 初稿 +- 2020-09-07 + - 添加获取除权数据的接口`get_divid_factors`,附录添加除权数据字段说明 + - 获取合约信息、获取合约类型接口完善 + - 获取交易日列表接口`get_trading_dates`支持指定日期范围 +- 2020-09-13 + - 添加财务数据接口,调整获取和下载财务数据接口的说明,添加财务数据报表字段列表 + - 将 “补充” 字样调整为 “下载”,“supply” 接口调整为 “download” +- 2020-09-13 + - 将`volumn`拼写错误修正为`volume`,影响范围: + - `tick`和`l2quote`周期行情数据 - 成交量字段 + - 合约基础信息 - 总股本、流通股本 +- 2020-11-23 + - 合约基础信息`CreateDate` `OpenDate`字段类型由`int`调整为`str` + - 添加数据字典部分,添加level2数据字段枚举值说明 +- 2021-07-20 + - 添加新版下载数据接口 + - 下载行情数据 `download_history_data2` + - 下载财务数据 `download_financial_data2` +- 2021-12-30 + - 数据字典调整 + - 委托方向、成交类型添加关于上交所、深交所撤单信息的区分说明 +- 2022-06-27 + - 数据字典调整 + - K线添加前收价、停牌标记字段 +- 2022-09-30 + - 添加交易日历相关接口 + - 获取节假日数据 `get_holidays` + - 获取交易日历 `get_trading_calendar` + - 获取交易时段 `get_trade_times` +- 2023-01-04 + - 添加千档行情获取 +- 2023-01-31 + - 可转债基础信息的下载 `download_cb_data` + - 可转债基础信息的获取 `get_cb_info` +- 2023-02-06 + - 添加连接到指定ip端口的接口 `reconnect` +- 2023-02-07 + - 支持QMT的本地Python模式 + - 优化多个QMT同时存在的场景,自动选择xtdata连接的端口 +- 2023-03-27 + - 新股申购信息获取 `get_ipo_info` +- 2023-04-13 + - 本地python模式下运行VBA函数 +- 2023-07-27 + - 文档部分描述修改 +- 2023-08-21 + - 数据接口支持投研版特色数据 + - 参考 `接口概述` - `常用类型说明` - `周期` - `投研版 - 特色数据` + - 获取合约基础信息 `get_instrument_detail` 返回字段调整 + - 增加 `ExchangeCode` `UniCode` + - 添加获取可用周期列表的接口 `get_period_list` +- 2023-10-11 + - `get_market_data_ex`支持获取ETF申赎清单数据 + - 数据字典添加 现金替代标志 +- 2023-11-09 + - `download_history_data`添加增量下载参数,支持指定起始时间的增量下载 +- 2023-11-22 + - `get_trading_calendar`不再支持`tradetimes`参数 +- 2023-11-27 + - ETF申赎清单信息下载 `download_etf_info` + - ETF申赎清单信息获取 `get_etf_info` +- 2023-11-28 + - 添加节假日下载`download_holiday_data` +- 2023-12-27 + - 获取板块成份股列表接口增加北交所板块 +- 2024-01-19 + - `get_market_data_ex`支持获取期货历史主力合约数据 + - `get_option_detail_data`支持获取商品期权品种的数据 + - `get_market_data_ex`支持获取日线以上周期的K线数据 + - 周线`1w`、月线`1mon`、季度线`1q`、半年线`1hy`、年线`1y` +- 2024-01-22 + - `get_trade_times`改名为`get_trading_time` + - `get_trading_time`更新实现逻辑 +- 2024-01-26 + - 获取合约基础信息 `get_instrument_detail` 支持获取全部合约信息字段 +- 2024-05-15 + - 获取最新交易日k线数据`get_full_kline` +- 2024-05-27 + - `get_stock_list_in_sector` 增加`real_timetag`参数 +- 2024-09-06 + - 增加`subscribe_quote2`,与第一版相比,多一个除权参数 + +## 接口概述 + +### 运行逻辑 + +xtdata提供和MiniQmt的交互接口,本质是和MiniQmt建立连接,由MiniQmt处理行情数据请求,再把结果回传返回到python层。使用的行情服务器以及能获取到的行情数据和MiniQmt是一致的,要检查数据或者切换连接时直接操作MiniQmt即可。 + +对于数据获取接口,使用时需要先确保MiniQmt已有所需要的数据,如果不足可以通过补充数据接口补充,再调用数据获取接口获取。 + +对于订阅接口,直接设置数据回调,数据到来时会由回调返回。订阅接收到的数据一般会保存下来,同种数据不需要再单独补充。 + +### 接口分类 + +- 行情数据(K线数据、分笔数据,订阅和主动获取的接口) + - 功能划分(接口前缀) + - subscribe_ / unsubscribe_ 订阅/反订阅 + - get_ 获取数据 + - download_ 下载数据 + - 常见用法 + - level1数据的历史部分用`download_history_data`补充,实时部分用`subscribe_XXX`订阅,使用`get_XXX`获取 + - level2数据实时部分用`subscribe_XXX`订阅,用`get_l2_XXX`获取。level2函数无历史数据存储,跨交易日后数据清理 +- 财务数据 +- 合约基础信息 +- 基础行情数据板块分类信息等基础信息 + +### 常用类型说明 + +- stock_code - 合约代码 + - 格式为 `code.market`,例如`000001.SZ` `600000.SH` `000300.SH` +- period - 周期,用于表示要获取的周期和具体数据类型, 通过get_period_list()获取更多可支持周期 + - level1数据 + - `tick` - 分笔数据 + - `1m` - 1分钟线 + - `5m` - 5分钟线 + - `15m` - 15分钟线 + - `30m` - 30分钟线 + - `1h` - 1小时线 + - `1d` - 日线 + - `1w` - 周线 + - `1mon` - 月线 + - `1q` - 季度线 + - `1hy` - 半年线 + - `1y` - 年线 + - level2数据 + - `l2quote` - level2实时行情快照 + - `l2order` - level2逐笔委托 + - `l2transaction` - level2逐笔成交 + - `l2quoteaux` - level2实时行情补充(总买总卖) + - `l2orderqueue` - level2委买委卖一档委托队列 + - `l2thousand` - level2千档盘口 + - 投研版 - 特色数据 + - `warehousereceipt` - 期货仓单 + - `futureholderrank` - 期货席位 + - `interactiveqa` - 互动问答 + - 逐笔成交统计 + - `transactioncount1m` - 逐笔成交统计1分钟级 + - `transactioncount1d` - 逐笔成交统计日级 + - `delistchangebond` - 退市可转债信息 + - `replacechangebond` - 待发可转债信息 + - `specialtreatment` - ST 变更历史 + - 港股通(深港通、沪港通)资金流向 + - `northfinancechange1m` - 港股通资金流向1分钟级 + - `northfinancechange1d` - 港股通资金流向日级 + - `dividendplaninfo` - 红利分配方案信息 + - `historycontract` - 过期合约列表 + - `optionhistorycontract` - 期权历史信息 + - `historymaincontract` - 历史主力合约 + - `stoppricedata` - 涨跌停数据 + - `snapshotindex` - 快照指标数据 + - `stocklistchange` - 板块成分股变动历史 + - `limitupperformance` - 涨跌表现 + - `announcement` - 新闻公告 + - `hktstatistics` - 港股持仓统计 + - `hktdetails` - 港股持仓明细 + - `riskfreerate` - 无风险利率 + - `etfstatistics` - etf实时申赎数据level1 + - `etfstatisticsl2` - etf实时申赎数据level2 +- 时间范围,用于指定数据请求范围,表示的范围是`[start_time, end_time]`区间(包含前后边界)中最后不多于`count`个数据 + - start_time - 起始时间,为空则认为是最早的起始时间 + - end_time - 结束时间,为空则认为是最新的结束时间 + - count - 数据个数,大于0为正常限制返回个数,等于0为不需要返回,-1为返回全部 + - 通常以`[start_time = '', end_time = '', count = -1]`表示完整数据范围,但数据请求范围过大会导致返回时间变长,需要按需裁剪请求范围 +- dividend_type - 除权方式,用于K线数据复权计算,对`tick`等其他周期数据无效 + - `none` 不复权 + - `front` 前复权 + - `back` 后复权 + - `front_ratio` 等比前复权 + - `back_ratio` 等比后复权 +- 其他依赖库 numpy、pandas会在数据返回的过程中使用 + - 本模块会尽可能减少对numpy和pandas库的直接依赖,以允许使用者在不同版本的库之间自由切换 + - pandas库中旧的三维数据结构Panel没有被使用,而是以dict嵌套DataFrame代替(后续可能会考虑使用xarray等的方案,也欢迎使用者提供改进建议) + - 后文中会按常用规则分别简写为np、pd,如np.ndarray、pd.DataFrame + +### 请求限制 + +- 全推数据是市场全部合约的切面数据,是高订阅数场景下的有效解决方案。持续订阅全推数据可以获取到每个合约最新分笔数据的推送,且流量和处理效率都优于单股订阅 +- 单股订阅行情是仅返回单股数据的接口,建议单股订阅数量不超过50。如果订阅数较多,建议直接使用全推数据 +- 板块分类信息等静态信息更新频率低,无需频繁下载,按周或按日定期下载更新即可 + + + +## 接口说明 + +### 行情接口 + +#### 订阅单股行情 + +```python +subscribe_quote(stock_code, period='1d', start_time='', end_time='', count=0, callback=None) +``` + +- 释义 + + - 订阅单股的行情数据,返回订阅号 + - 数据推送从callback返回,数据类型和period指定的周期对应 + - 数据范围代表请求的历史部分的数据范围,数据返回后会进入缓存,用于保证数据连续,通常情况仅订阅数据时传`count = 0`即可 + +- 参数 + + - stock_code - string 合约代码 + + - period - string 周期 + + - start_time - string 起始时间 + + - end_time - string 结束时间 + + - count - int 数据个数 + + - callback - 数据推送回调 + + - 回调定义形式为`on_data(datas)`,回调参数`datas`格式为 { stock_code : [data1, data2, ...] } + + ```python + def on_data(datas): + for stock_code in datas: + print(stock_code, datas[stock_code]) + ``` + +- 返回 + + - 订阅号,订阅成功返回`大于0`,失败返回`-1` + +- 备注 + + - 单股订阅数量不宜过多,详见 接口概述-请求限制 + +#### 订阅单股行情2 + +```python +subscribe_quote2(stock_code, period='1d', start_time='', end_time='', count=0, dividend_type=None, callback=None) +``` + +- 释义 + + - 订阅单股的行情数据,返回订阅号 + - 数据推送从callback返回,数据类型和period指定的周期对应 + - 数据范围代表请求的历史部分的数据范围,数据返回后会进入缓存,用于保证数据连续,通常情况仅订阅数据时传`count = 0`即可 + +- 参数 + + - stock_code - string 合约代码 + + - period - string 周期 + + - start_time - string 起始时间 + + - end_time - string 结束时间 + + - count - int 数据个数 + + - dividend_type - string 除权类型"none", "front", "back", "front_ratio", "back_ratio" + + - callback - 数据推送回调 + + - 回调定义形式为`on_data(datas)`,回调参数`datas`格式为 { stock_code : [data1, data2, ...] } + + ```python + def on_data(datas): + for stock_code in datas: + print(stock_code, datas[stock_code]) + ``` + +- 返回 + + - 订阅号,订阅成功返回`大于0`,失败返回`-1` + +- 备注 + + - 单股订阅数量不宜过多,详见 接口概述-请求限制 + - 与第一版相比增加了除权参数dividend_type,默认None + +#### 订阅全推行情 + +```python +subscribe_whole_quote(code_list, callback=None) +``` + +- 释义 + + - 订阅全推行情数据,返回订阅号 + - 数据推送从callback返回,数据类型为分笔数据 + +- 参数 + + - code_list - 代码列表,支持传入市场代码或合约代码两种方式 + + - 传入市场代码代表订阅全市场,示例:`['SH', 'SZ']` + - 传入合约代码代表订阅指定的合约,示例:`['600000.SH', '000001.SZ']` + + - callback - 数据推送回调 + + - 回调定义形式为`on_data(datas)`,回调参数`datas`格式为 { stock1 : data1, stock2 : data2, ... } + + ```python + def on_data(datas): + for stock_code in datas: + print(stock_code, datas[stock_code]) + ``` + +- 返回 + + - 订阅号,订阅成功返回`大于0`,失败返回`-1` + +- 备注 + + - 订阅后会首先返回当前最新的全推数据 + +#### 反订阅行情数据 + +```python +unsubscribe_quote(seq) +``` + +- 释义 + - 反订阅行情数据 +- 参数 + - seq - 订阅时返回的订阅号 +- 返回 + - 无 +- 备注 + - 无 + +#### 阻塞线程接收行情回调 + +```python +run() +``` + +- 释义 + - 阻塞当前线程来维持运行状态,一般用于订阅数据后维持运行状态持续处理回调 +- 参数 + - seq - 订阅时返回的订阅号 +- 返回 + - 无 +- 备注 + - 实现方式为持续循环sleep,并在唤醒时检查连接状态,若连接断开则抛出异常结束循环 + +#### 获取行情数据 + +```python +get_market_data(field_list=[], stock_list=[], period='1d', start_time='', end_time='', count=-1, dividend_type='none', fill_data=True) +``` + +- 释义 + - 从缓存获取行情数据,是主动获取行情的主要接口 +- 参数 + - field_list - list 数据字段列表,传空则为全部字段 + - stock_list - list 合约代码列表 + - period - string 周期 + - start_time - string 起始时间 + - end_time - string 结束时间 + - count - int 数据个数 + - 默认参数,大于等于0时,若指定了start_time,end_time,此时以end_time为基准向前取count条;若start_time,end_time缺省,默认取本地数据最新的count条数据;若start_time,end_time,count都缺省时,默认取本地全部数据 + - dividend_type - string 除权方式 + - fill_data - bool 是否向后填充空缺数据 +- 返回 + - period为`1m` `5m` `1d`等K线周期时 + - 返回dict { field1 : value1, field2 : value2, ... } + - field1, field2, ... :数据字段 + - value1, value2, ... :pd.DataFrame 数据集,index为stock_list,columns为time_list + - 各字段对应的DataFrame维度相同、索引相同 + - period为`tick`分笔周期时 + - 返回dict { stock1 : value1, stock2 : value2, ... } + - stock1, stock2, ... :合约代码 + - value1, value2, ... :np.ndarray 数据集,按数据时间戳`time`增序排列 +- 备注 + - 获取lv2数据时需要数据终端有lv2数据权限 + - 时间范围为闭区间 + +#### 获取本地行情数据 + +```python +get_local_data(field_list=[], stock_code=[], period='1d', start_time='', end_time='', count=-1, + dividend_type='none', fill_data=True, data_dir=data_dir) +``` + +- 释义 + - 从本地数据文件获取行情数据,用于快速批量获取历史部分的行情数据 +- 参数 + - field_list - list 数据字段列表,传空则为全部字段 + - stock_list - list 合约代码列表 + - period - string 周期 + - start_time - string 起始时间 + - end_time - string 结束时间 + - count - int 数据个数 + - dividend_type - string 除权方式 + - fill_data - bool 是否向后填充空缺数据 + - data_dir - string MiniQmt配套路径的userdata_mini路径,用于直接读取数据文件。默认情况下xtdata会通过连接向MiniQmt直接获取此路径,无需额外设置。如果需要调整,可以将数据路径作为`data_dir`传入,也可以直接修改`xtdata.data_dir`以改变默认值 +- 返回 + - period为`1m` `5m` `1d`K线周期时 + - 返回dict { field1 : value1, field2 : value2, ... } + - field1, field2, ... :数据字段 + - value1, value2, ... :pd.DataFrame 数据集,index为stock_list,columns为time_list + - 各字段对应的DataFrame维度相同、索引相同 + - period为`tick`分笔周期时 + - 返回dict { stock1 : value1, stock2 : value2, ... } + - stock1, stock2, ... :合约代码 + - value1, value2, ... :np.ndarray 数据集,按数据时间戳`time`增序排列 +- 备注 + - 仅用于获取level1数据 + +#### 获取全推数据 + +```python +get_full_tick(code_list) +``` + +- 释义 + - 获取全推数据 +- 参数 + - code_list - 代码列表,支持传入市场代码或合约代码两种方式 + - 传入市场代码代表订阅全市场,示例:`['SH', 'SZ']` + - 传入合约代码代表订阅指定的合约,示例:`['600000.SH', '000001.SZ']` +- 返回 + - dict 数据集 { stock1 : data1, stock2 : data2, ... } +- 备注 + - 无 + +#### 获取除权数据 + +```python +get_divid_factors(stock_code, start_time='', end_time='') +``` + +- 释义 + - 获取除权数据 +- 参数 + - stock_code - 合约代码 + - start_time - string 起始时间 + - end_time - string 结束时间 +- 返回 + - pd.DataFrame 数据集 +- 备注 + - 无 + +#### 获取level2行情快照数据 + +```python +get_l2_quote(field_list=[], stock_code='', start_time='', end_time='', count=-1) +``` + +- 释义 + - 获取level2行情快照数据 +- 参数 + - field_list - list 数据字段列表,传空则为全部字段 + - stock_code - string 合约代码 + - start_time - string 起始时间 + - end_time - string 结束时间 + - count - int 数据个数 +- 返回 + - np.ndarray 数据集,按数据时间戳`time`增序排列 +- 备注 + - 需要缓存中有接收过的数据才能获取到 + +#### 获取level2逐笔委托数据 + +```python +get_l2_order(field_list=[], stock_code='', start_time='', end_time='', count=-1) +``` + +- 释义 + - 获取level2逐笔委托数据 +- 参数 + - field_list - list 数据字段列表,传空则为全部字段 + - stock_code - string 合约代码 + - start_time - string 起始时间 + - end_time - string 结束时间 + - count - int 数据个数 +- 返回 + - np.ndarray 数据集,按数据时间戳`time`增序排列 +- 备注 + - 需要缓存中有接收过的数据才能获取到 + +#### 获取level2逐笔成交数据 + +```python +get_l2_transaction(field_list=[], stock_code='', start_time='', end_time='', count=-1) +``` + +- 释义 + - 获取level2逐笔成交数据 +- 参数 + - field_list - list 数据字段列表,传空则为全部字段 + - stock_code - string 合约代码 + - start_time - string 起始时间 + - end_time - string 结束时间 + - count - int 数据个数 +- 返回 + - np.ndarray 数据集,按数据时间戳`time`增序排列 +- 备注 + - 需要缓存中有接收过的数据才能获取到 + +#### 下载历史行情数据 + +```python +download_history_data(stock_code, period, start_time='', end_time='', incrementally = None) +``` + +- 释义 + - 补充历史行情数据 +- 参数 + - stock_code - string 合约代码 + - period - string 周期 + - start_time - string 起始时间 + - end_time - string 结束时间 + - incrementally - 是否增量下载 + - `bool` - 是否增量下载 + - `None` - 使用`start_time`控制,`start_time`为空则增量下载 +- 返回 + - 无 +- 备注 + - 同步执行,补充数据完成后返回 + +```python +download_history_data2(stock_list, period, start_time='', end_time='', callback=None) +``` + +- 释义 + + - 补充历史行情数据,批量版本 + +- 参数 + + - stock_list - list 合约列表 + + - period - string 周期 + + - start_time - string 起始时间 + + - end_time - string 结束时间 + + - callback - func 回调函数 + + - 参数为进度信息dict + + - total - 总下载个数 + - finished - 已完成个数 + - stockcode - 本地下载完成的合约代码 + - message - 本次信息 + + - ```python + def on_progress(data): + print(data) + # {'finished': 1, 'total': 50, 'stockcode': '000001.SZ', 'message': ''} + ``` + +- 返回 + + - 无 + +- 备注 + + - 同步执行,补充数据完成后返回 + - 有任务完成时通过回调函数返回进度信息 + +#### 获取节假日数据 + +```python +get_holidays() +``` + +- 释义 + - 获取截止到当年的节假日日期 +- 参数 + - 无 +- 返回 + - list,为8位的日期字符串格式 +- 备注 + - 无 + +#### 获取交易日历 + +```python +get_trading_calendar(market, start_time = '', end_time = '') +``` + +- 释义 + - 获取指定市场交易日历 +- 参数 + - market - str 市场 + - start_time - str 起始时间,8位字符串。为空表示当前市场首个交易日时间 + - end_time - str 结束时间,8位字符串。为空表示当前时间 +- 返回 + - 返回list,完整的交易日列表 +- 备注 + - 结束时间可以填写未来时间,获取未来交易日。需要下载节假日列表。 + +#### 获取交易时段 + +```python +get_trading_time(stockcode) +``` + +- 释义 + + - 返回指定代码的交易时段 +- 参数 + + - stockcode - str 合约代码(例如`600000.SH`) +- 返回 + + - list,返回交易时段列表,第一位是开始时间,第二位结束时间,第三位交易类型 (2 - 开盘竞价, 3 - 连续交易, 8 - 收盘竞价, 9 - 盘后定价)。时间单位为“秒” +- 备注 + + - 股票代码错误时返回空列表 + + - 跨天时以当前天0点为起始,前一天为负,下一天多86400 + + - ``` + #需要转换为datetime时,可以用以下方法转换 + import datetime as dt + dt.datetime.combine(dt.date.today(), dt.time()) + dt.timedelta(seconds = 34200) + ``` + + + +#### 可转债基础信息的下载 + +```python +download_cb_data() +``` + +- 释义 + - 下载全部可转债信息 +- 参数 + - 无 +- 返回 + - 无 +- 备注 + - 无 + +#### 获取可转债基础信息 + +```python +get_cb_info(stockcode) +``` + +- 释义 + - 返回指定代码的可转债信息 +- 参数 + - stockcode - str 合约代码(例如`600000.SH`) +- 返回 + - dict,可转债信息 +- 备注 + - 需要先下载可转债数据 + + +#### 获取新股申购信息 + +```python +get_ipo_info(start_time, end_time) +``` + +- 释义 + + - 返回所选时间范围的新股申购信息 +- 参数 + - start_time: 开始日期(如:'20230327') + - end_time: 结束日期(如:'20230327') + - start_time 和 end_time 为空则返回全部数据 +- 返回 + - list[dict],新股申购信息 + + - ```python + securityCode - string 证券代码 + codeName - string 代码简称 + market - string 所属市场 + actIssueQty - int 发行总量,单位:股 + onlineIssueQty - int 网上发行量, 单位:股 + onlineSubCode - string 申购代码 + onlineSubMaxQty - int 申购上限, 单位:股 + publishPrice - float 发行价格 + isProfit - int 是否已盈利 0:上市时尚未盈利 1:上市时已盈利 + industryPe - float 行业市盈率 + afterPE - float 发行后市盈率 + ``` + +#### 获取可用周期列表 + +```python +get_period_list() +``` + +- 释义 + + - 返回可用周期列表 +- 参数 + - 无 +- 返回 + - list 周期列表 + +#### ETF申赎清单信息下载 + +```python +download_etf_info() +``` + +- 释义 + - 下载所有ETF申赎清单信息 + +- 参数 + - 无 +- 返回 + - 无 + +#### ETF申赎清单信息获取 + +```python +get_etf_info() +``` + +- 释义 + - 获取所有ETF申赎清单信息 + +- 参数 + - 无 +- 返回 + - dict 所有申赎数据 + +#### 节假日下载 + +```python +download_holiday_data() +``` + +- 释义 + - 下载节假日数据 + +- 参数 + - 无 +- 返回 + - 无 + +#### 获取最新交易日k线数据 + +```python +get_full_kline(field_list = [], stock_list = [], period = '1m' + , start_time = '', end_time = '', count = 1 + , dividend_type = 'none', fill_data = True) +``` + +- 释义 + - 获取最新交易日k线全推数据 + +- 参数 + - 参考`get_market_data`函数 +- 返回 + - dict - {field: DataFrame} + +### 财务数据接口 + +#### 获取财务数据 + +```python +get_financial_data(stock_list, table_list=[], start_time='', end_time='', report_type='report_time') +``` + +- 释义 + + - 获取财务数据 +- 参数 + + - stock_list - list 合约代码列表 + + - table_list - list 财务数据表名称列表 + + - ```python + 'Balance' #资产负债表 + 'Income' #利润表 + 'CashFlow' #现金流量表 + 'Capital' #股本表 + 'Holdernum' #股东数 + 'Top10holder' #十大股东 + 'Top10flowholder' #十大流通股东 + 'Pershareindex' #每股指标 + ``` + + - start_time - string 起始时间 + + - end_time - string 结束时间 + + - report_type - string 报表筛选方式 + + - ```python + 'report_time' #截止日期 + 'announce_time' #披露日期 + ``` +- 返回 + + - dict 数据集 { stock1 : datas1, stock2 : data2, ... } + - stock1, stock2, ... :合约代码 + - datas1, datas2, ... :dict 数据集 { table1 : table_data1, table2 : table_data2, ... } + - table1, table2, ... :财务数据表名 + - table_data1, table_data2, ... :pd.DataFrame 数据集,数据字段详见附录 - 财务数据字段列表 +- 备注 + + - 无 + +#### 下载财务数据 + +```python +download_financial_data(stock_list, table_list=[]) +``` + +- 释义 + - 下载财务数据 +- 参数 + - stock_list - list 合约代码列表 + - table_list - list 财务数据表名列表 +- 返回 + - 无 +- 备注 + - 同步执行,补充数据完成后返回 + +```python +download_financial_data2(stock_list, table_list=[], start_time='', end_time='', callback=None) +``` + +- 释义 + + - 下载财务数据 + +- 参数 + + - stock_list - list 合约代码列表 + + - table_list - list 财务数据表名列表 + + - start_time - string 起始时间 + + - end_time - string 结束时间 + + - 以`m_anntime`披露日期字段,按`[start_time, end_time]`范围筛选 + + - callback - func 回调函数 + + - 参数为进度信息dict + + - total - 总下载个数 + - finished - 已完成个数 + - stockcode - 本地下载完成的合约代码 + - message - 本次信息 + + - ```python + def on_progress(data): + print(data) + # {'finished': 1, 'total': 50, 'stockcode': '000001.SZ', 'message': ''} + ``` + +- 返回 + + - 无 +- 备注 + + - 同步执行,补充数据完成后返回 + +### 基础行情信息 + +#### 获取合约基础信息 + +```python +get_instrument_detail(stock_code, iscomplete) +``` + +- 释义 + + - 获取合约基础信息 + +- 参数 + + - stock_code - string 合约代码 + - iscomplete - bool 是否获取全部字段,默认为False + +- 返回 + + - dict 数据字典,{ field1 : value1, field2 : value2, ... },找不到指定合约时返回`None` + + - iscomplete为False时,返回以下字段 + + ```python + ExchangeID - string 合约市场代码 + InstrumentID - string 合约代码 + InstrumentName - string 合约名称 + ProductID - string 合约的品种ID(期货) + ProductName - string 合约的品种名称(期货) + ProductType - int 合约的类型, 默认-1 + 国内期货市场:1-期货 2-期权(DF SF ZF INE GF) 3-组合套利 4-即期 5-期转现 6-期权(IF) 7-结算价交易(tas) + 沪深股票期权市场:0-认购 1-认沽 + 外盘: + 1-100:期货, 101-200:现货, 201-300:股票相关 + 1:股指期货 + 2:能源期货 + 3:农业期货 + 4:金属期货 + 5:利率期货 + 6:汇率期货 + 7:数字货币期货 + 99:自定义合约期货 + 107:数字货币现货 + 201:股票 + 202:GDR + 203:ETF + 204:ETN + 300:其他 + ExchangeCode - string 交易所代码 + UniCode - string 统一规则代码 + CreateDate - str 上市日期(期货) + OpenDate - str IPO日期(股票) + ExpireDate - int 退市日或者到期日 + PreClose - float 前收盘价格 + SettlementPrice - float 前结算价格 + UpStopPrice - float 当日涨停价 + DownStopPrice - float 当日跌停价 + FloatVolume - float 流通股本 + TotalVolume - float 总股本 + LongMarginRatio - float 多头保证金率 + ShortMarginRatio - float 空头保证金率 + PriceTick - float 最小价格变动单位 + VolumeMultiple - int 合约乘数(对期货以外的品种,默认是1) + MainContract - int 主力合约标记,1、2、3分别表示第一主力合约,第二主力合约,第三主力合约 + LastVolume - int 昨日持仓量 + InstrumentStatus - int 合约停牌状态 + IsTrading - bool 合约是否可交易 + IsRecent - bool 是否是近月合约 + ``` + + - 详细合约信息字段见`附录-合约信息字段列表` + +- 备注 + + - 可用于检查合约代码是否正确 + - 合约基础信息`CreateDate` `OpenDate`字段类型由`int`调整为`str` + +#### 获取合约类型 + +```python +get_instrument_type(stock_code) +``` + +- 释义 + + - 获取合约类型 +- 参数 + + - stock_code - string 合约代码 +- 返回 + + - dict 数据字典,{ type1 : value1, type2 : value2, ... },找不到指定合约时返回`None` + + - type1, type2, ... :string 合约类型 + - value1, value2, ... :bool 是否为该类合约 + + - ```python + 'index' #指数 + 'stock' #股票 + 'fund' #基金 + 'etf' #ETF + ``` +- 备注 + + - 无 + +#### 获取交易日列表 + +```python +get_trading_dates(market, start_time='', end_time='', count=-1) +``` + +- 释义 + - 获取交易日列表 +- 参数 + - market - string 市场代码 + - start_time - string 起始时间 + - end_time - string 结束时间 + - count - int 数据个数 +- 返回 + - list 时间戳列表,[ date1, date2, ... ] +- 备注 + - 无 + +#### 获取板块列表 + +```python +get_sector_list() +``` + +- 释义 + - 获取板块列表 +- 参数 + - 无 +- 返回 + - list 板块列表,[ sector1, sector2, ... ] +- 备注 + - 需要下载板块分类信息 + +#### 获取板块成分股列表 + +```python +get_stock_list_in_sector(sector_name, real_timetag) +``` + +- 释义 + - 获取板块成分股列表 +- 参数 + - sector_name - string 版块名称 + - real_timetag 时间:1512748800000或'20171209',可缺省,缺省时获取最新的成分,不缺省时获取对应时间的历史成分 +- 返回 + - list 成分股列表,[ stock1, stock2, ... ] +- 备注 + - 需要板块分类信息 + +#### 下载板块分类信息 + +```python +download_sector_data() +``` + +- 释义 + - 下载板块分类信息 +- 参数 + - 无 +- 返回 + - 无 +- 备注 + - 同步执行,下载完成后返回 + +#### 创建板块目录节点 + +```python +create_sector_folder(parent_node, folder_name, overwrite) +``` + +- 释义 + - 创建板块目录节点 +- 参数 + - parent_node - string 父节点,’ ‘为 '我的‘ (默认目录) + - folder_name - string 要创建的板块目录名称 + - overwrite- bool 是否覆盖,如果目标节点已存在,为True时跳过,为False时在folder_name后增加数字编号,编号为从1开始自增的第一个不重复的值。 + 默认为True +- 返回 + - folder_name2 - string 实际创建的板块目录名 +- 备注 + - 无 + +#### 创建板块 + +```python +create_sector(parent_node, sector_name, overwrite) +``` + +- 释义 + - 创建板块 +- 参数 + - parent_node - string 父节点,’ ‘为 '我的‘ (默认目录) + - sector_name - string 板块名称 + - overwrite- bool 是否覆盖,如果目标节点已存在,为True时跳过,为False时在sector_name后增加数字编号,编号为从1开始自增的第一个不重复的值。 + 默认为True +- 返回 + - sector_name2 - string 实际创建的板块名 +- 备注 + - 无 + +#### 添加自定义板块 + +```python +add_sector(sector_name, stock_list) +``` + +- 释义 + - 添加自定义板块 +- 参数 + - sector_name - string 板块名称 + - stock_list - list 成分股列表 +- 返回 + - 无 +- 备注 + - 无 + +#### 移除板块成分股 + +```python +remove_stock_from_sector(sector_name, stock_list) +``` + +- 释义 + - 创建板块 +- 参数 + - sector_name - string 板块名称 + - stock_list- list 成分股列表 +- 返回 + - result - bool 操作成功为True,失败为False +- 备注 + - 无 + +#### 移除自定义板块 + +```python +remove_sector(sector_name) +``` + +- 释义 + - 移除自定义板块 +- 参数 + - sector_name - string 板块名称 +- 返回 + - 无 +- 备注 + - 无 + +#### 重置板块 + +```python +reset_sector(sector_name, stock_list) +``` + +- 释义 + - 重置板块 +- 参数 + - sector_name - string 板块名称 + - stock_list- list 成分股列表 +- 返回 + - result - bool 操作成功为True,失败为False +- 备注 + - 无 + +#### 获取指数成分权重信息 + +```python +get_index_weight(index_code) +``` + +- 释义 + - 获取指数成分权重信息 +- 参数 + - index_code - string 指数代码 +- 返回 + - dict 数据字典,{ stock1 : weight1, stock2 : weight2, ... } +- 备注 + - 需要下载指数成分权重信息 + +#### 下载指数成分权重信息 + +```python +download_index_weight() +``` + +- 释义 + - 下载指数成分权重信息 +- 参数 + - 无 +- 返回 + - 无 +- 备注 + - 同步执行,下载完成后返回 + + + +## 附录 + +### 行情数据字段列表 + +#### tick - 分笔数据 + +```python +'time' #时间戳 +'lastPrice' #最新价 +'open' #开盘价 +'high' #最高价 +'low' #最低价 +'lastClose' #前收盘价 +'amount' #成交总额 +'volume' #成交总量 +'pvolume' #原始成交总量 +'stockStatus' #证券状态 +'openInt' #持仓量 +'lastSettlementPrice' #前结算 +'askPrice' #委卖价 +'bidPrice' #委买价 +'askVol' #委卖量 +'bidVol' #委买量 +'transactionNum' #成交笔数 +``` + +#### 1m / 5m / 1d - K线数据 + +```python +'time' #时间戳 +'open' #开盘价 +'high' #最高价 +'low' #最低价 +'close' #收盘价 +'volume' #成交量 +'amount' #成交额 +'settelementPrice' #今结算 +'openInterest' #持仓量 +'preClose' #前收价 +'suspendFlag' #停牌标记 0 - 正常 1 - 停牌 -1 - 当日起复牌 +``` + +#### 除权数据 + +```python +'interest' #每股股利(税前,元) +'stockBonus' #每股红股(股) +'stockGift' #每股转增股本(股) +'allotNum' #每股配股数(股) +'allotPrice' #配股价格(元) +'gugai' #是否股改, 对于股改,在算复权系数时,系统有特殊算法 +'dr' #除权系数 +``` + +#### l2quote - level2实时行情快照 + +```python +'time' #时间戳 +'lastPrice' #最新价 +'open' #开盘价 +'high' #最高价 +'low' #最低价 +'amount' #成交额 +'volume' #成交总量 +'pvolume' #原始成交总量 +'openInt' #持仓量 +'stockStatus' #证券状态 +'transactionNum' #成交笔数 +'lastClose' #前收盘价 +'lastSettlementPrice' #前结算 +'settlementPrice' #今结算 +'pe' #市盈率 +'askPrice' #多档委卖价 +'bidPrice' #多档委买价 +'askVol' #多档委卖量 +'bidVol' #多档委买量 +``` + +#### l2order - level2逐笔委托 + +```python +'time' #时间戳 +'price' #委托价 +'volume' #委托量 +'entrustNo' #委托号 +'entrustType' #委托类型 +'entrustDirection' #委托方向 +``` + +#### l2transaction - level2逐笔成交 + +```python +'time' #时间戳 +'price' #成交价 +'volume' #成交量 +'amount' #成交额 +'tradeIndex' #成交记录号 +'buyNo' #买方委托号 +'sellNo' #卖方委托号 +'tradeType' #成交类型 +'tradeFlag' #成交标志 +``` + +#### l2quoteaux - level2实时行情补充(总买总卖) + +```python +'time' #时间戳 +'avgBidPrice' #委买均价 +'totalBidQuantity' #委买总量 +'avgOffPrice' #委卖均价 +'totalOffQuantity' #委卖总量 +'withdrawBidQuantity' #买入撤单总量 +'withdrawBidAmount' #买入撤单总额 +'withdrawOffQuantity' #卖出撤单总量 +'withdrawOffAmount' #卖出撤单总额 +``` + +#### l2orderqueue - level2委买委卖一档委托队列 + +```python +'time' #时间戳 +'bidLevelPrice' #委买价 +'bidLevelVolume' #委买量 +'offerLevelPrice' #委卖价 +'offerLevelVolume' #委卖量 +'bidLevelNumber' #委买数量 +'offLevelNumber' #委卖数量 +``` + +#### limitupperformance - 涨停连板数据 + +```python +'time' #时间戳 +'openVol' #开盘集合竞价的成交量 +'closeVol' #收盘集合竞价的成交量 +'finalVol' #盘后定价的成交量 +'startUp' #涨停开始时间 +'endUp' #涨停结束时间 +'breakUp' #炸板次数 +'upAmount' #涨停金额 +'startDn' #跌停开始时间 +'endDn' #跌停结束时间 +'breakDn' #开板次数 +'dnAmount' #跌停金额 +'direct' #涨跌方向 0-无 1-涨停 2-跌停 +'sealVolRatio' #封成比 +'sealFreeRatio' #封流比 +'bidPreRatio' #竞昨比 +'sealCount' #几板 +'sealDays' #几天 +'sealBreak' #封板中断天数 +``` + +#### announcement - 公告新闻 + +```python +'time' #时间戳 +'level' #级别 +'security' #证券 +'headline' #标题 +'summary' #摘要 +'format' #格式 txt pdf doc +'content' #内容 +'type' #类型 0-其他 1-财报类 +``` + +#### snapshotindex - 快照指标 + +```python +'time' #时间戳 +'volRatio' #量比 +'speed1' #涨速1分钟 +'speed5' #涨速5分钟 +'gainRate3' #3日涨跌 +'gainRate5' #5日涨跌 +'gainRate10' #10日涨跌 +'turnoverRate3' #3日换手 +'turnoverRate5' #5日换手 +'turnoverRate10' #10日换手 +``` + +### 数据字典 + +#### 证券状态 + +``` +0,10 - 默认为未知 +11 - 开盘前S +12 - 集合竞价时段C +13 - 连续交易T +14 - 休市B +15 - 闭市E +16 - 波动性中断V +17 - 临时停牌P +18 - 收盘集合竞价U +19 - 盘中集合竞价M +20 - 暂停交易至闭市N +21 - 获取字段异常 +22 - 盘后固定价格行情 +23 - 盘后固定价格行情完毕 +``` + +#### 委托类型 + +- level2逐笔委托 - `entrustType` 委托类型 +- level2逐笔成交 - `tradeType` 成交类型 + +``` +0 - 未知 +1 - 正常交易业务 +2 - 即时成交剩余撤销 +3 - ETF基金申报 +4 - 最优五档即时成交剩余撤销 +5 - 全额成交或撤销 +6 - 本方最优价格 +7 - 对手方最优价格 +``` + +#### 委托方向 + +- level2逐笔委托 - `entrustDirection` 委托方向 + - 注:上交所的撤单信息在逐笔委托的委托方向,区分撤买撤卖 + +``` +1 - 买入 +2 - 卖出 +3 - 撤买(上交所) +4 - 撤卖(上交所) +``` + +#### 成交标志 + +- level2逐笔成交 - `tradeFlag` 成交标志 + - 注:深交所的在逐笔成交的成交标志,只有撤单,没有方向 + +``` +0 - 未知 +1 - 外盘 +2 - 内盘 +3 - 撤单(深交所) +``` + +#### 现金替代标志 + +- ETF申赎清单成份股现金替代标志 + +``` +0 - 禁止现金替代(必须有股票) +1 - 允许现金替代(先用股票,股票不足的话用现金替代 +2 - 必须现金替代 +3 - 非沪市(股票)退补现金替代 +4 - 非沪市(股票)必须现金替代 +5 - 非沪深退补现金替代 +6 - 非沪深必须现金替代 +7 - 港市退补现金替代(仅适用于跨沪深ETF产品) +8 - 港市必须现金替代(仅适用于跨沪深港ETF产品) +``` + + +### 财务数据字段列表 + +#### Balance - 资产负债表 + +```python +'m_anntime' #披露日期 +'m_timetag' #截止日期 +'internal_shoule_recv' #内部应收款 +'fixed_capital_clearance' #固定资产清理 +'should_pay_money' #应付分保账款 +'settlement_payment' #结算备付金 +'receivable_premium' #应收保费 +'accounts_receivable_reinsurance' #应收分保账款 +'reinsurance_contract_reserve' #应收分保合同准备金 +'dividends_payable' #应收股利 +'tax_rebate_for_export' #应收出口退税 +'subsidies_receivable' #应收补贴款 +'deposit_receivable' #应收保证金 +'apportioned_cost' #待摊费用 +'profit_and_current_assets_with_deal' #待处理流动资产损益 +'current_assets_one_year' #一年内到期的非流动资产 +'long_term_receivables' #长期应收款 +'other_long_term_investments' #其他长期投资 +'original_value_of_fixed_assets' #固定资产原值 +'net_value_of_fixed_assets' #固定资产净值 +'depreciation_reserves_of_fixed_assets' #固定资产减值准备 +'productive_biological_assets' #生产性生物资产 +'public_welfare_biological_assets' #公益性生物资产 +'oil_and_gas_assets' #油气资产 +'development_expenditure' #开发支出 +'right_of_split_share_distribution' #股权分置流通权 +'other_non_mobile_assets' #其他非流动资产 +'handling_fee_and_commission' #应付手续费及佣金 +'other_payables' #其他应交款 +'margin_payable' #应付保证金 +'internal_accounts_payable' #内部应付款 +'advance_cost' #预提费用 +'insurance_contract_reserve' #保险合同准备金 +'broker_buying_and_selling_securities' #代理买卖证券款 +'acting_underwriting_securities' #代理承销证券款 +'international_ticket_settlement' #国际票证结算 +'domestic_ticket_settlement' #国内票证结算 +'deferred_income' #递延收益 +'short_term_bonds_payable' #应付短期债券 +'long_term_deferred_income' #长期递延收益 +'undetermined_investment_losses' #未确定的投资损失 +'quasi_distribution_of_cash_dividends' #拟分配现金股利 +'provisions_not' #预计负债 +'cust_bank_dep' #吸收存款及同业存放 +'provisions' #预计流动负债 +'less_tsy_stk' #减:库存股 +'cash_equivalents' #货币资金 +'loans_to_oth_banks' #拆出资金 +'tradable_fin_assets' #交易性金融资产 +'derivative_fin_assets' #衍生金融资产 +'bill_receivable' #应收票据 +'account_receivable' #应收账款 +'advance_payment' #预付款项 +'int_rcv' #应收利息 +'other_receivable' #其他应收款 +'red_monetary_cap_for_sale' #买入返售金融资产 +'agency_bus_assets' #以公允价值计量且其变动计入当期损益的金融资产 +'inventories' #存货 +'other_current_assets' #其他流动资产 +'total_current_assets' #流动资产合计 +'loans_and_adv_granted' #发放贷款及垫款 +'fin_assets_avail_for_sale' #可供出售金融资产 +'held_to_mty_invest' #持有至到期投资 +'long_term_eqy_invest' #长期股权投资 +'invest_real_estate' #投资性房地产 +'accumulated_depreciation' #累计折旧 +'fix_assets' #固定资产 +'constru_in_process' #在建工程 +'construction_materials' #工程物资 +'long_term_liabilities' #长期负债 +'intang_assets' #无形资产 +'goodwill' #商誉 +'long_deferred_expense' #长期待摊费用 +'deferred_tax_assets' #递延所得税资产 +'total_non_current_assets' #非流动资产合计 +'tot_assets' #资产总计 +'shortterm_loan' #短期借款 +'borrow_central_bank' #向中央银行借款 +'loans_oth_banks' #拆入资金 +'tradable_fin_liab' #交易性金融负债 +'derivative_fin_liab' #衍生金融负债 +'notes_payable' #应付票据 +'accounts_payable' #应付账款 +'advance_peceipts' #预收账款 +'fund_sales_fin_assets_rp' #卖出回购金融资产款 +'empl_ben_payable' #应付职工薪酬 +'taxes_surcharges_payable' #应交税费 +'int_payable' #应付利息 +'dividend_payable' #应付股利 +'other_payable' #其他应付款 +'non_current_liability_in_one_year' #一年内到期的非流动负债 +'other_current_liability' #其他流动负债 +'total_current_liability' #流动负债合计 +'long_term_loans' #长期借款 +'bonds_payable' #应付债券 +'longterm_account_payable' #长期应付款 +'grants_received' #专项应付款 +'deferred_tax_liab' #递延所得税负债 +'other_non_current_liabilities' #其他非流动负债 +'non_current_liabilities' #非流动负债合计 +'tot_liab' #负债合计 +'cap_stk' #实收资本(或股本) +'cap_rsrv' #资本公积 +'specific_reserves' #专项储备 +'surplus_rsrv' #盈余公积 +'prov_nom_risks' #一般风险准备 +'undistributed_profit' #未分配利润 +'cnvd_diff_foreign_curr_stat' #外币报表折算差额 +'tot_shrhldr_eqy_excl_min_int' #归属于母公司股东权益合计 +'minority_int' #少数股东权益 +'total_equity' #所有者权益合计 +'tot_liab_shrhldr_eqy' #负债和股东权益总计 +``` + +#### Income - 利润表 + +```python +'m_anntime' #披露日期 +'m_timetag' #截止日期 +'revenue_inc' #营业收入 +'earned_premium' #已赚保费 +'real_estate_sales_income' #房地产销售收入 +'total_operating_cost' #营业总成本 +'real_estate_sales_cost' #房地产销售成本 +'research_expenses' #研发费用 +'surrender_value' #退保金 +'net_payments' #赔付支出净额 +'net_withdrawal_ins_con_res' #提取保险合同准备金净额 +'policy_dividend_expenses' #保单红利支出 +'reinsurance_cost' #分保费用 +'change_income_fair_value' #公允价值变动收益 +'futures_loss' #期货损益 +'trust_income' #托管收益 +'subsidize_revenue' #补贴收入 +'other_business_profits' #其他业务利润 +'net_profit_excl_merged_int_inc' #被合并方在合并前实现净利润 +'int_inc' #利息收入 +'handling_chrg_comm_inc' #手续费及佣金收入 +'less_handling_chrg_comm_exp' #手续费及佣金支出 +'other_bus_cost' #其他业务成本 +'plus_net_gain_fx_trans' #汇兑收益 +'il_net_loss_disp_noncur_asset' #非流动资产处置收益 +'inc_tax' #所得税费用 +'unconfirmed_invest_loss' #未确认投资损失 +'net_profit_excl_min_int_inc' #归属于母公司所有者的净利润 +'less_int_exp' #利息支出 +'other_bus_inc' #其他业务收入 +'revenue' #营业总收入 +'total_expense' #营业成本 +'less_taxes_surcharges_ops' #营业税金及附加 +'sale_expense' #销售费用 +'less_gerl_admin_exp' #管理费用 +'financial_expense' #财务费用 +'less_impair_loss_assets' #资产减值损失 +'plus_net_invest_inc' #投资收益 +'incl_inc_invest_assoc_jv_entp' #联营企业和合营企业的投资收益 +'oper_profit' #营业利润 +'plus_non_oper_rev' #营业外收入 +'less_non_oper_exp' #营业外支出 +'tot_profit' #利润总额 +'net_profit_incl_min_int_inc' #净利润 +'net_profit_incl_min_int_inc_after' #净利润(扣除非经常性损益后) +'minority_int_inc' #少数股东损益 +'s_fa_eps_basic' #基本每股收益 +'s_fa_eps_diluted' #稀释每股收益 +'total_income' #综合收益总额 +'total_income_minority' #归属于少数股东的综合收益总额 +'other_compreh_inc' #其他收益 +``` + +#### CashFlow - 现金流量表 + +```python +'m_anntime' #披露日期 +'m_timetag' #截止日期 +'cash_received_ori_ins_contract_pre' #收到原保险合同保费取得的现金 +'net_cash_received_rei_ope' #收到再保险业务现金净额 +'net_increase_insured_funds' #保户储金及投资款净增加额 +'Net' #处置交易性金融资产净增加额 increase_in_disposal +'cash_for_interest' #收取利息、手续费及佣金的现金 +'net_increase_in_repurchase_funds' #回购业务资金净增加额 +'cash_for_payment_original_insurance' #支付原保险合同赔付款项的现金 +'cash_payment_policy_dividends' #支付保单红利的现金 +'disposal_other_business_units' #处置子公司及其他收到的现金 +'cash_received_from_pledges' #减少质押和定期存款所收到的现金 +'cash_paid_for_investments' #投资所支付的现金 +'net_increase_in_pledged_loans' #质押贷款净增加额 +'cash_paid_by_subsidiaries' #取得子公司及其他营业单位支付的现金净额 +'increase_in_cash_paid' #增加质押和定期存款所支付的现金 +'cass_received_sub_abs' #其中子公司吸收现金 +'cass_received_sub_investments' #其中:子公司支付给少数股东的股利、利润 +'minority_shareholder_profit_loss' #少数股东损益 +'unrecognized_investment_losses' #未确认的投资损失 +'ncrease_deferred_income' #递延收益增加(减:减少) +'projected_liability' #预计负债 +'increase_operational_payables' #经营性应付项目的增加 +'reduction_outstanding_amounts_less' #已完工尚未结算款的减少(减:增加) +'reduction_outstanding_amounts_more' #已结算尚未完工款的增加(减:减少) +'goods_sale_and_service_render_cash' #销售商品、提供劳务收到的现金 +'net_incr_dep_cob' #客户存款和同业存放款项净增加额 +'net_incr_loans_central_bank' #向中央银行借款净增加额(万元 +'net_incr_fund_borr_ofi' #向其他金融机构拆入资金净增加额 +'net_incr_fund_borr_ofi' #拆入资金净增加额 +'tax_levy_refund' #收到的税费与返还 +'cash_paid_invest' #投资支付的现金 +'other_cash_recp_ral_oper_act' #收到的其他与经营活动有关的现金 +'stot_cash_inflows_oper_act' #经营活动现金流入小计 +'goods_and_services_cash_paid' #购买商品、接受劳务支付的现金 +'net_incr_clients_loan_adv' #客户贷款及垫款净增加额 +'net_incr_dep_cbob' #存放中央银行和同业款项净增加额 +'handling_chrg_paid' #支付利息、手续费及佣金的现金 +'cash_pay_beh_empl' #支付给职工以及为职工支付的现金 +'pay_all_typ_tax' #支付的各项税费 +'other_cash_pay_ral_oper_act' #支付其他与经营活动有关的现金 +'stot_cash_outflows_oper_act' #经营活动现金流出小计 +'net_cash_flows_oper_act' #经营活动产生的现金流量净额 +'cash_recp_disp_withdrwl_invest' #收回投资所收到的现金 +'cash_recp_return_invest' #取得投资收益所收到的现金 +'net_cash_recp_disp_fiolta' #处置固定资产、无形资产和其他长期投资收到的现金 +'other_cash_recp_ral_inv_act' #收到的其他与投资活动有关的现金 +'stot_cash_inflows_inv_act' #投资活动现金流入小计 +'cash_pay_acq_const_fiolta' #购建固定资产、无形资产和其他长期投资支付的现金 +'other_cash_pay_ral_oper_act' #支付其他与投资的现金 +'stot_cash_outflows_inv_act' #投资活动现金流出小计 +'net_cash_flows_inv_act' #投资活动产生的现金流量净额 +'cash_recp_cap_contrib' #吸收投资收到的现金 +'cash_recp_borrow' #取得借款收到的现金 +'proc_issue_bonds' #发行债券收到的现金 +'other_cash_recp_ral_fnc_act' #收到其他与筹资活动有关的现金 +'stot_cash_inflows_fnc_act' #筹资活动现金流入小计 +'cash_prepay_amt_borr' #偿还债务支付现金 +'cash_pay_dist_dpcp_int_exp' #分配股利、利润或偿付利息支付的现金 +'other_cash_pay_ral_fnc_act' #支付其他与筹资的现金 +'stot_cash_outflows_fnc_act' #筹资活动现金流出小计 +'net_cash_flows_fnc_act' #筹资活动产生的现金流量净额 +'eff_fx_flu_cash' #汇率变动对现金的影响 +'net_incr_cash_cash_equ' #现金及现金等价物净增加额 +'cash_cash_equ_beg_period' #期初现金及现金等价物余额 +'cash_cash_equ_end_period' #期末现金及现金等价物余额 +'net_profit' #净利润 +'plus_prov_depr_assets' #资产减值准备 +'depr_fa_coga_dpba' #固定资产折旧、油气资产折耗、生产性物资折旧 +'amort_intang_assets' #无形资产摊销 +'amort_lt_deferred_exp' #长期待摊费用摊销 +'decr_deferred_exp' #待摊费用的减少 +'incr_acc_exp' #预提费用的增加 +'loss_disp_fiolta' #处置固定资产、无形资产和其他长期资产的损失 +'loss_scr_fa' #固定资产报废损失 +'loss_fv_chg' #公允价值变动损失 +'fin_exp' #财务费用 +'invest_loss' #投资损失 +'decr_deferred_inc_tax_assets' #递延所得税资产减少 +'incr_deferred_inc_tax_liab' #递延所得税负债增加 +'decr_inventories' #存货的减少 +'decr_oper_payable' #经营性应收项目的减少 +'others' #其他 +'im_net_cash_flows_oper_act' #经营活动产生现金流量净额 +'conv_debt_into_cap' #债务转为资本 +'conv_corp_bonds_due_within_1y' #一年内到期的可转换公司债券 +'fa_fnc_leases' #融资租入固定资产 +'end_bal_cash' #现金的期末余额 +'less_beg_bal_cash' #现金的期初余额 +'plus_end_bal_cash_equ' #现金等价物的期末余额 +'less_beg_bal_cash_equ' #现金等价物的期初余额 +'im_net_incr_cash_cash_equ' #现金及现金等价物的净增加额 +'tax_levy_refund' #收到的税费返还 +``` + +#### PershareIndex - 主要指标 + +```python +'s_fa_ocfps' #每股经营活动现金流量 +'s_fa_bps' #每股净资产 +'s_fa_eps_basic' #基本每股收益 +'s_fa_eps_diluted' #稀释每股收益 +'s_fa_undistributedps' #每股未分配利润 +'s_fa_surpluscapitalps' #每股资本公积金 +'adjusted_earnings_per_share' #扣非每股收益 +'du_return_on_equity' #净资产收益率 +'sales_gross_profit' #销售毛利率 +'inc_revenue_rate' #主营收入同比增长 +'du_profit_rate' #净利润同比增长 +'inc_net_profit_rate' #归属于母公司所有者的净利润同比增长 +'adjusted_net_profit_rate' #扣非净利润同比增长 +'inc_total_revenue_annual' #营业总收入滚动环比增长 +'inc_net_profit_to_shareholders_annual' #归属净利润滚动环比增长 +'adjusted_profit_to_profit_annual' #扣非净利润滚动环比增长 +'equity_roe' #加权净资产收益率 +'net_roe' #摊薄净资产收益率 +'total_roe' #摊薄总资产收益率 +'gross_profit' #毛利率 +'net_profit' #净利率 +'actual_tax_rate' #实际税率 +'pre_pay_operate_income' #预收款 / 营业收入 +'sales_cash_flow' #销售现金流 / 营业收入 +'gear_ratio' #资产负债比率 +'inventory_turnover' #存货周转率 +'m_anntime' #公告日 +'m_timetag' #报告截止日 +``` + +#### CapitalStructure - 股本表 + +```python +'total_capital' #总股本 +'circulating_capital' #已上市流通A股 +'restrict_circulating_capital' #限售流通股份 +'m_timetag' #报告截止日 +'m_anntime' #公告日 +``` + +#### TOP10HOLDER/TOP10FLOWHOLDER - 十大股东/十大流通股东 + +```python +'declareDate' #公告日期 +'endDate' #截止日期 +'name' #股东名称 +'type' #股东类型 +'quantity' #持股数量 +'reason' #变动原因 +'ratio' #持股比例 +'nature' #股份性质 +'rank' #持股排名 +``` + +#### SHAREHOLDER - 股东数 + +```python +'declareDate' #公告日期 +'endDate' #截止日期 +'shareholder' #股东总数 +'shareholderA' #A股东户数 +'shareholderB' #B股东户数 +'shareholderH' #H股东户数 +'shareholderFloat' #已流通股东户数 +'shareholderOther' #未流通股东户数 +``` + +### 合约信息字段列表 + +```python +'ExchangeID' #合约市场代码 +'InstrumentID' #合约代码 +'InstrumentName' #合约名称 +'Abbreviation' #合约名称的拼音简写 +'ProductID' #合约的品种ID(期货) +'ProductName' #合约的品种名称(期货) +'UnderlyingCode' #标的合约 +'ExtendName' #扩位名称 +'ExchangeCode' #交易所代码 +'RzrkCode' #rzrk代码 +'UniCode' #统一规则代码 +'CreateDate' #上市日期(期货) +'OpenDate' #IPO日期(股票) +'ExpireDate' #退市日或者到期日 +'PreClose' #前收盘价格 +'SettlementPrice' #前结算价格 +'UpStopPrice' #当日涨停价 +'DownStopPrice' #当日跌停价 +'FloatVolume' #流通股本 +'TotalVolume' #总股本 +'AccumulatedInterest' #自上市付息日起的累积未付利息额(债券) +'LongMarginRatio' #多头保证金率 +'ShortMarginRatio' #空头保证金率 +'PriceTick' #最小变价单位 +'VolumeMultiple' #合约乘数(对期货以外的品种,默认是1) +'MainContract' #主力合约标记,1、2、3分别表示第一主力合约,第二主力合约,第三主力合约 +'MaxMarketOrderVolume' #市价单最大下单量 +'MinMarketOrderVolume' #市价单最小下单量 +'MaxLimitOrderVolume' #限价单最大下单量 +'MinLimitOrderVolume' #限价单最小下单量 +'MaxMarginSideAlgorithm' #上期所大单边的处理算法 +'DayCountFromIPO' #自IPO起经历的交易日总数 +'LastVolume' #昨日持仓量 +'InstrumentStatus' #合约停牌状态 +'IsTrading' #合约是否可交易 +'IsRecent' #是否是近月合约 +'IsContinuous' #是否是连续合约 +'bNotProfitable' #是否非盈利状态 +'bDualClass' #是否同股不同权 +'ContinueType' #连续合约类型 +'secuCategory' #证券分类 +'secuAttri' #证券属性 +'MaxMarketSellOrderVolume' #市价卖单最大单笔下单量 +'MinMarketSellOrderVolume' #市价卖单最小单笔下单量 +'MaxLimitSellOrderVolume' #限价卖单最大单笔下单量 +'MinLimitSellOrderVolume' #限价卖单最小单笔下单量 +'MaxFixedBuyOrderVol' #盘后定价委托数量的上限(买) +'MinFixedBuyOrderVol' #盘后定价委托数量的下限(买) +'MaxFixedSellOrderVol' #盘后定价委托数量的上限(卖) +'MinFixedSellOrderVol' #盘后定价委托数量的下限(卖) +'HSGTFlag' #标识港股是否为沪港通或深港通标的证券。沪港通:0-非标的,1-标的,2-历史标的;深港通:0-非标的,3-标的,4-历史标的,5-是沪港通也是深港通 +'BondParValue' #债券面值 +'QualifiedType' #投资者适当性管理分类 +'PriceTickType' #价差类别(港股用),1-股票,3-债券,4-期权,5-交易所买卖基金 +'tradingStatus' #交易状态 +'OptUnit' #期权合约单位 +'MarginUnit' #期权单位保证金 +'OptUndlCode' #期权标的证券代码或可转债正股标的证券代码 +'OptUndlMarket' #期权标的证券市场或可转债正股标的证券市场 +'OptLotSize' #期权整手数 +'OptExercisePrice' #期权行权价或可转债转股价 +'NeeqExeType' #全国股转转让类型,1-协议转让方式,2-做市转让方式,3-集合竞价+连续竞价转让方式(当前全国股转并未实现),4-集合竞价转让 +'OptExchFixedMargin' #交易所期权合约保证金不变部分 +'OptExchMiniMargin' #交易所期权合约最小保证金 +'Ccy' #币种 +'IbSecType' #IB安全类型,期货或股票 +'OptUndlRiskFreeRate' #期权标的无风险利率 +'OptUndlHistoryRate' #期权标的历史波动率 +'EndDelivDate' #期权行权终止日 +'RegisteredCapital' #注册资本(单位:百万) +'MaxOrderPriceRange' #最大有效申报范围 +'MinOrderPriceRange' #最小有效申报范围 +'VoteRightRatio' #同股同权比例 +'m_nMinRepurchaseDaysLimit' #最小回购天数 +'m_nMaxRepurchaseDaysLimit' #最大回购天数 +'DeliveryYear' #交割年份 +'DeliveryMonth' #交割月 +'ContractType' #标识期权,1-过期,2-当月,3-下月,4-下季,5-隔季,6-隔下季 +'ProductTradeQuota' #期货品种交易配额 +'ContractTradeQuota' #期货合约交易配额 +'ProductOpenInterestQuota' #期货品种持仓配额 +'ContractOpenInterestQuota' #期货合约持仓配额 +'ChargeType' #期货和期权手续费方式,0-未知,1-按元/手,2-按费率 +'ChargeOpen' #开仓手续费率,-1表示没有 +'ChargeClose' #平仓手续费率,-1表示没有 +'ChargeClose' #平仓手续费率,-1表示没有 +'ChargeTodayOpen' #开今仓(日内开仓)手续费率,-1表示没有 +'ChargeTodayClose' #平今仓(日内平仓)手续费率,-1表示没有 +'OptionType' #期权类型,-1为非期权,0为期权认购,1为期权认沽 +'OpenInterestMultiple' #交割月持仓倍数 +``` + +### 代码示例 + +#### 时间戳转换 + +```python +import time +def conv_time(ct): + ''' + conv_time(1476374400000) --> '20161014000000.000' + ''' + local_time = time.localtime(ct / 1000) + data_head = time.strftime('%Y%m%d%H%M%S', local_time) + data_secs = (ct - int(ct)) * 1000 + time_stamp = '%s.%03d' % (data_head, data_secs) + return time_stamp +``` + + + diff --git a/src/xtquant/doc/xttrader.md b/src/xtquant/doc/xttrader.md new file mode 100644 index 0000000..7383f01 --- /dev/null +++ b/src/xtquant/doc/xttrader.md @@ -0,0 +1,1912 @@ +# 入门篇 +## 迅投XtQuant FAQ +### XtQuant能提供哪些服务 +XtQuant是基于迅投MiniQMT衍生出来的一套完善的Python策略运行框架,对外以Python库的形式提供策略交易所需要的行情和交易相关的API接口。 +### XtQuant运行依赖环境 +XtQuant目前提供的库包括Python3.6、3.7、3.8版本,不同版本的python导入时会自动切换。 +在运行使用XtQuant的程序前需要先启动MiniQMT客户端。 + +## 版本信息 +- 2020-09-01 + - 初稿 +- 2020-10-14 + - 持仓结构添加字段 + - 投资备注相关修正 +- 2020-10-21 + - 添加信用交易相关委托类型(order_type)枚举 + - 调整XtQuant运行依赖环境说明,更新多版本支持相关说明 +- 2020-11-13 + - 添加信用交易相关类型定义说明 + - 添加信用交易相关接口说明 + - 添加异步撤单委托反馈结构说明 + - 添加下单失败和撤单失败主推结构说明 + - 添加订阅和反订阅接口 + - 添加创建API实例,注册回调类,准备API环境,创建连接,停止运行,阻塞进程接口说明 + - 调整API接口说明 + - 将接口细分为"系统设置接口",“操作接口”,“查询接口”,"信用相关查询接口",“回调类”等五类 + - 接口返回“None”修改为“无” + - 去掉回调类接口中的示例 + - 添加“备注”项 + - 所有“证券账号”改为“资金账号” + - 英文“,”调整为中文“,” + - 示例代码中增加XtQuant API实例对象,修正没有实例,直接调用的错误 + - 添加股票异步撤单接口说明,将原股票撤单修改为股票同步撤单 +- 2020-11-19 + - 添加账号状态主推接口 + - 添加账号状态数据结构说明 + - 添加账号状态枚举值 + - 回调类接口说明调整 + - 将回调函数定义及函数说明标题调整一致 + - 补充异步下单回报推送、异步撤单回报推送接口说明 +- 2021-07-20 + - 修改回调/主推函数实现机制,提升报撤单回报的速度,降低穿透延时波动 + - `XtQuantTrader.run_forever()`修改实现,支持`Ctrl+C`跳出 +- 2022-06-27 + - 委托查询支持仅查询可撤委托 + - 添加新股申购相关接口 + - `query_new_purchase_limit` 查询新股申购额度 + - `query_ipo_data` 查询新股信息 + - 添加账号信息查询接口 + - `query_account_infos` +- 2022-11-15 + + - 修复`XtQuantTrader.unsubscribe`的实现 +- 2022-11-17 + + - 交易数据字典格式调整 +- 2022-11-28 + - 为主动请求接口的返回增加专用线程以及相关控制,以支持在on_stock_order等推送接口中调用同步请求 + - `XtQuantTrader.set_relaxed_response_order_enabled` +- 2023-07-17 + - 持仓结构`XtPosition` 成本价字段调整 + - `open_price` - 开仓价 + - `avg_price` - 成本价 +- 2023-07-26 + + - 添加资金划拨接口 `fund_transfer` +- 2023-08-11 + - 添加划拨业务查询普通柜台资金接口 `query_com_fund` + - 添加划拨业务查询普通柜台持仓接口 `query_com_position` +- 2023-10-16 + - 添加期货市价的报价类型 + - `xtconstant.MARKET_BEST` - 市价最优价[郑商所] + - `xtconstant.MARKET_CANCEL` - 市价即成剩撤[大商所] + - `xtconstant.MARKET_CANCEL_ALL` - 市价全额成交或撤[大商所] + - `xtconstant.MARKET_CANCEL_1` - 市价最优一档即成剩撤[中金所] + - `xtconstant.MARKET_CANCEL_5` - 市价最优五档即成剩撤[中金所] + - `xtconstant.MARKET_CONVERT_1` - 市价最优一档即成剩转[中金所] + - `xtconstant.MARKET_CONVERT_5` - 市价最优五档即成剩转[中金所] +- 2023-10-20 +- 委托结构`XtOrder`,成交结构`XtTrade`,持仓结构`XtPosition` 新增多空字段 + - `direction` - 多空,股票不需要 +- 委托结构`XtOrder`,成交结构`XtTrade`新增交易操作字段 + - `offset_flag` - 交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等 +- 2023-11-03 + - 添加券源行情查询接口 `smt_query_quoter` + - 添加库存券约券申请接口 `smt_negotiate_order` + - 添加约券合约查询接口 `smt_query_compact` +- 2024-01-02 + - 委托类型增加ETF申赎 +- 2024-02-29 + - 添加期货持仓统计查询接口`query_position_statistics` +- 2024-04-25 + - 数据结构添加`stock_code1`字段以适配长代码 +- 2024-05-24 + - 添加通用数据导出接口export_data + - 添加通用数据查询接口query_data +- 2024-06-27 + - 添加外部成交导入接口sync_transaction_from_external +- 2024-08-27 + - 成交结构`XtTrade`新增手续费字段 + - `commission` - 手续费 + +## 快速入门 + +### 创建策略 +```Python +#coding=utf-8 +from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback +from xtquant.xttype import StockAccount +from xtquant import xtconstant + + +class MyXtQuantTraderCallback(XtQuantTraderCallback): + def on_disconnected(self): + """ + 连接断开 + :return: + """ + print("connection lost") + def on_stock_order(self, order): + """ + 委托回报推送 + :param order: XtOrder对象 + :return: + """ + print("on order callback:") + print(order.stock_code, order.order_status, order.order_sysid) + def on_stock_asset(self, asset): + """ + 资金变动推送 + :param asset: XtAsset对象 + :return: + """ + print("on asset callback") + print(asset.account_id, asset.cash, asset.total_asset) + def on_stock_trade(self, trade): + """ + 成交变动推送 + :param trade: XtTrade对象 + :return: + """ + print("on trade callback") + print(trade.account_id, trade.stock_code, trade.order_id) + def on_stock_position(self, position): + """ + 持仓变动推送 + :param position: XtPosition对象 + :return: + """ + print("on position callback") + print(position.stock_code, position.volume) + def on_order_error(self, order_error): + """ + 委托失败推送 + :param order_error:XtOrderError 对象 + :return: + """ + print("on order_error callback") + print(order_error.order_id, order_error.error_id, order_error.error_msg) + def on_cancel_error(self, cancel_error): + """ + 撤单失败推送 + :param cancel_error: XtCancelError 对象 + :return: + """ + print("on cancel_error callback") + print(cancel_error.order_id, cancel_error.error_id, cancel_error.error_msg) + def on_order_stock_async_response(self, response): + """ + 异步下单回报推送 + :param response: XtOrderResponse 对象 + :return: + """ + print("on_order_stock_async_response") + print(response.account_id, response.order_id, response.seq) + def on_account_status(self, status): + """ + :param response: XtAccountStatus 对象 + :return: + """ + print("on_account_status") + print(status.account_id, status.account_type, status.status) + +if __name__ == "__main__": + print("demo test") + # path为mini qmt客户端安装目录下userdata_mini路径 + path = 'D:\\迅投极速交易终端 睿智融科版\\userdata_mini' + # session_id为会话编号,策略使用方对于不同的Python策略需要使用不同的会话编号 + session_id = 123456 + xt_trader = XtQuantTrader(path, session_id) + # 创建资金账号为1000000365的证券账号对象 + acc = StockAccount('1000000365') + # StockAccount可以用第二个参数指定账号类型,如沪港通传'HUGANGTONG',深港通传'SHENGANGTONG' + # acc = StockAccount('1000000365','STOCK') + # 创建交易回调类对象,并声明接收回调 + callback = MyXtQuantTraderCallback() + xt_trader.register_callback(callback) + # 启动交易线程 + xt_trader.start() + # 建立交易连接,返回0表示连接成功 + connect_result = xt_trader.connect() + print(connect_result) + # 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功 + subscribe_result = xt_trader.subscribe(acc) + print(subscribe_result) + stock_code = '600000.SH' + # 使用指定价下单,接口返回订单编号,后续可以用于撤单操作以及查询委托状态 + print("order using the fix price:") + fix_result_order_id = xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, 200, xtconstant.FIX_PRICE, 10.5, 'strategy_name', 'remark') + print(fix_result_order_id) + # 使用订单编号撤单 + print("cancel order:") + cancel_order_result = xt_trader.cancel_order_stock(acc, fix_result_order_id) + print(cancel_order_result) + # 使用异步下单接口,接口返回下单请求序号seq,seq可以和on_order_stock_async_response的委托反馈response对应起来 + print("order using async api:") + async_seq = xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, 200, xtconstant.FIX_PRICE, 10.5, 'strategy_name', 'remark') + print(async_seq) + # 查询证券资产 + print("query asset:") + asset = xt_trader.query_stock_asset(acc) + if asset: + print("asset:") + print("cash {0}".format(asset.cash)) + # 根据订单编号查询委托 + print("query order:") + order = xt_trader.query_stock_order(acc, fix_result_order_id) + if order: + print("order:") + print("order {0}".format(order.order_id)) + # 查询当日所有的委托 + print("query orders:") + orders = xt_trader.query_stock_orders(acc) + print("orders:", len(orders)) + if len(orders) != 0: + print("last order:") + print("{0} {1} {2}".format(orders[-1].stock_code, orders[-1].order_volume, orders[-1].price)) + # 查询当日所有的成交 + print("query trade:") + trades = xt_trader.query_stock_trades(acc) + print("trades:", len(trades)) + if len(trades) != 0: + print("last trade:") + print("{0} {1} {2}".format(trades[-1].stock_code, trades[-1].traded_volume, trades[-1].traded_price)) + # 查询当日所有的持仓 + print("query positions:") + positions = xt_trader.query_stock_positions(acc) + print("positions:", len(positions)) + if len(positions) != 0: + print("last position:") + print("{0} {1} {2}".format(positions[-1].account_id, positions[-1].stock_code, positions[-1].volume)) + # 根据股票代码查询对应持仓 + print("query position:") + position = xt_trader.query_stock_position(acc, stock_code) + if position: + print("position:") + print("{0} {1} {2}".format(position.account_id, position.stock_code, position.volume)) + # 阻塞线程,接收交易推送 + xt_trader.run_forever() +``` + +# 进阶篇 +## XtQuant运行逻辑 +XtQuant封装了策略交易所需要的Python API接口,可以和MiniQMT客户端交互进行报单、撤单、查询资产、查询委托、查询成交、查询持仓以及收到资金、委托、成交和持仓等变动的主推消息。 + +## XtQuant数据字典 +### 交易市场(market_int) + +- 上交所 - `xtconstant.SH_MARKET` +- 深交所 - `xtconstant.SZ_MARKET` +- 北交所 - `xtconstant.MARKET_ENUM_BEIJING` +- 上期所 - `xtconstant.MARKET_ENUM_SHANGHAI_FUTURE` +- 大商所 - `xtconstant.MARKET_ENUM_DALIANG_FUTURE` +- 郑商所 - `xtconstant.MARKET_ENUM_ZHENGZHOU_FUTURE` +- 中金所 - `xtconstant.MARKET_ENUM_INDEX_FUTURE` +- 能源中心 - `xtconstant.MARKET_ENUM_INTL_ENERGY_FUTURE` +- 广期所 - `xtconstant.MARKET_ENUM_GUANGZHOU_FUTURE` +- 上海期权 - `xtconstant.MARKET_ENUM_SHANGHAI_STOCK_OPTION` +- 深圳期权 - `xtconstant.MARKET_ENUM_SHENZHEN_STOCK_OPTION` + +### 交易市场(market_str) + +- 上交所 - `xtconstant.MARKET_SHANGHAI` +- 深交所 - `xtconstant.MARKET_SHENZHEN` +- 北交所 - `xtconstant.MARKET_BEIJING` +- 上期所 - `xtconstant.MARKET_SHANGHAI_FUTURE` +- 大商所 - `xtconstant.MARKET_DALIANG_FUTURE` +- 郑商所 - `xtconstant.MARKET_ZHENGZHOU_FUTURE` +- 中金所 - `xtconstant.MARKET_INDEX_FUTURE` +- 能源中心 - `xtconstant.MARKET_INTL_ENERGY_FUTURE` +- 广期所 - `xtconstant.MARKET_GUANGZHOU_FUTURE` +- 上海期权 - `xtconstant.MARKET_SHANGHAI_STOCK_OPTION` +- 深圳期权 - `xtconstant.MARKET_SHENZHEN_STOCK_OPTION` + +### 账号类型(account_type) + +- 期货 - `xtconstant.FUTURE_ACCOUNT` +- 股票 - `xtconstant.SECURITY_ACCOUNT` +- 信用 - `xtconstant.CREDIT_ACCOUNT` +- 期货期权 - `xtconstant.FUTURE_OPTION_ACCOUNT` +- 股票期权 - `xtconstant.STOCK_OPTION_ACCOUNT` +- 沪港通 - `xtconstant.HUGANGTONG_ACCOUNT` +- 深港通 - `xtconstant.SHENGANGTONG_ACCOUNT` + +### 委托类型(order_type) + +- 股票 + - 买入 - `xtconstant.STOCK_BUY` + - 卖出 - `xtconstant.STOCK_SELL` + +- 信用 + - 担保品买入 - `xtconstant.CREDIT_BUY` + - 担保品卖出 - `xtconstant.CREDIT_SELL` + - 融资买入 - `xtconstant.CREDIT_FIN_BUY` + - 融券卖出 - `xtconstant.CREDIT_SLO_SELL` + - 买券还券 - `xtconstant.CREDIT_BUY_SECU_REPAY` + - 直接还券 - `xtconstant.CREDIT_DIRECT_SECU_REPAY` + - 卖券还款 - `xtconstant.CREDIT_SELL_SECU_REPAY` + - 直接还款 - `xtconstant.CREDIT_DIRECT_CASH_REPAY` + - 专项融资买入 - `xtconstant.CREDIT_FIN_BUY_SPECIAL` + - 专项融券卖出 - `xtconstant.CREDIT_SLO_SELL_SPECIAL` + - 专项买券还券 - `xtconstant.CREDIT_BUY_SECU_REPAY_SPECIAL` + - 专项直接还券 - `xtconstant.CREDIT_DIRECT_SECU_REPAY_SPECIAL` + - 专项卖券还款 - `xtconstant.CREDIT_SELL_SECU_REPAY_SPECIAL` + - 专项直接还款 - `xtconstant.CREDIT_DIRECT_CASH_REPAY_SPECIAL` + +- 期货六键风格 + - 开多 - `xtconstant.FUTURE_OPEN_LONG` + - 平昨多 - `xtconstant.FUTURE_CLOSE_LONG_HISTORY` + - 平今多 - `xtconstant.FUTURE_CLOSE_LONG_TODAY` + - 开空 - `xtconstant.FUTURE_OPEN_SHORT` + - 平昨空 - `xtconstant.FUTURE_CLOSE_SHORT_HISTORY` + - 平今空 - `xtconstant.FUTURE_CLOSE_SHORT_TODAY` + +- 期货四键风格 + - 平多,优先平今 - `xtconstant.FUTURE_CLOSE_LONG_TODAY_FIRST` + - 平多,优先平昨 - `xtconstant.FUTURE_CLOSE_LONG_HISTORY_FIRST` + - 平空,优先平今 - `xtconstant.FUTURE_CLOSE_SHORT_TODAY_FIRST` + - 平空,优先平昨 - `xtconstant.FUTURE_CLOSE_SHORT_HISTORY_FIRST` +- 期货两键风格 + - 卖出,如有多仓,优先平仓,优先平今,如有余量,再开空 - `xtconstant.FUTURE_CLOSE_LONG_TODAY_HISTORY_THEN_OPEN_SHORT` + - 卖出,如有多仓,优先平仓,优先平昨,如有余量,再开空 - `xtconstant.FUTURE_CLOSE_LONG_HISTORY_TODAY_THEN_OPEN_SHORT` + - 买入,如有空仓,优先平仓,优先平今,如有余量,再开多 - `xtconstant.FUTURE_CLOSE_SHORT_TODAY_HISTORY_THEN_OPEN_LONG` + - 买入,如有空仓,优先平仓,优先平昨,如有余量,再开多 - `xtconstant.FUTURE_CLOSE_SHORT_HISTORY_TODAY_THEN_OPEN_LONG` + - 买入,不优先平仓 - `xtconstant.FUTURE_OPEN` + - 卖出,不优先平仓 - `xtconstant.FUTURE_CLOSE` +- 期货 - 跨商品套利 + - 开仓 - `xtconstant.FUTURE_ARBITRAGE_OPEN` + - 平, 优先平昨 - `xtconstant.FUTURE_ARBITRAGE_CLOSE_HISTORY_FIRST` + - 平, 优先平今 - `xtconstant.FUTURE_ARBITRAGE_CLOSE_TODAY_FIRST` +- 期货展期 + - 看多, 优先平昨 - `xtconstant.FUTURE_RENEW_LONG_CLOSE_HISTORY_FIRST` + - 看多,优先平今 - `xtconstant.FUTURE_RENEW_LONG_CLOSE_TODAY_FIRST` + - 看空,优先平昨 - `xtconstant.FUTURE_RENEW_SHORT_CLOSE_HISTORY_FIRST` + - 看空,优先平今 - `xtconstant.FUTURE_RENEW_SHORT_CLOSE_TODAY_FIRST` +- 股票期权 + - 买入开仓,以下用于个股期权交易业务 - `xtconstant.STOCK_OPTION_BUY_OPEN` + - 卖出平仓 - `xtconstant.STOCK_OPTION_SELL_CLOSE` + - 卖出开仓 - `xtconstant.STOCK_OPTION_SELL_OPEN` + - 买入平仓 - `xtconstant.STOCK_OPTION_BUY_CLOSE` + - 备兑开仓 - `xtconstant.STOCK_OPTION_COVERED_OPEN` + - 备兑平仓 - `xtconstant.STOCK_OPTION_COVERED_CLOSE` + - 认购行权 - `xtconstant.STOCK_OPTION_CALL_EXERCISE` + - 认沽行权 - `xtconstant.STOCK_OPTION_PUT_EXERCISE` + - 证券锁定 - `xtconstant.STOCK_OPTION_SECU_LOCK` + - 证券解锁 - `xtconstant.STOCK_OPTION_SECU_UNLOCK` +- 期货期权 + - 期货期权行权 - `xtconstant.OPTION_FUTURE_OPTION_EXERCISE` + +- ETF申赎 + - 申购 - `xtconstant.ETF_ETFBUY ` + - 赎回 - `xtconstant.ETF_ETFSELL ` + +### 报价类型(price_type) + +- 最新价 - `xtconstant.LATEST_PRICE` +- 指定价 - `xtconstant.FIX_PRICE` +- 郑商所 期货 + - 市价最优价 - `xtconstant.MARKET_BEST` +- 大商所 期货 + - 市价即成剩撤 - `xtconstant.MARKET_CANCEL` + - 市价全额成交或撤 - `xtconstant.MARKET_CANCEL_ALL` +- 中金所 期货 + - 市价最优一档即成剩撤 - `xtconstant.MARKET_CANCEL_1` + - 市价最优五档即成剩撤 - `xtconstant.MARKET_CANCEL_5` + - 市价最优一档即成剩转 - `xtconstant.MARKET_CONVERT_1` + - 市价最优五档即成剩转 - `xtconstant.MARKET_CONVERT_5` +- 上交所 股票 + - 最优五档即时成交剩余撤销 - `xtconstant.MARKET_SH_CONVERT_5_CANCEL` + - 最优五档即时成交剩转限价 - `xtconstant.MARKET_SH_CONVERT_5_LIMIT` + - 对手方最优价格委托 - `xtconstant.MARKET_PEER_PRICE_FIRST` + - 本方最优价格委托 - `xtconstant.MARKET_MINE_PRICE_FIRST` +- 深交所 股票 期权 + - 对手方最优价格委托 - `xtconstant.MARKET_PEER_PRICE_FIRST` + - 本方最优价格委托 - `xtconstant.MARKET_MINE_PRICE_FIRST` + - 即时成交剩余撤销委托 - `xtconstant.MARKET_SZ_INSTBUSI_RESTCANCEL` + - 最优五档即时成交剩余撤销 - `xtconstant.MARKET_SZ_CONVERT_5_CANCEL` + - 全额成交或撤销委托 - `xtconstant.MARKET_SZ_FULL_OR_CANCEL` + +### 委托状态(order_status) +枚举变量名|值|含义 +-|-|-| +xtconstant.ORDER_UNREPORTED|48|未报 +xtconstant.ORDER_WAIT_REPORTING|49|待报 +xtconstant.ORDER_REPORTED|50|已报 +xtconstant.ORDER_REPORTED_CANCEL|51|已报待撤 +xtconstant.ORDER_PARTSUCC_CANCEL|52|部成待撤 +xtconstant.ORDER_PART_CANCEL|53|部撤 +xtconstant.ORDER_CANCELED|54|已撤 +xtconstant.ORDER_PART_SUCC|55|部成 +xtconstant.ORDER_SUCCEEDED|56|已成 +xtconstant.ORDER_JUNK|57|废单 +xtconstant.ORDER_UNKNOWN|255|未知 + +### 账号状态(account_status) +枚举变量名|值|含义 +-|-|- +xtconstant.ACCOUNT_STATUS_INVALID|-1|无效 +xtconstant.ACCOUNT_STATUS_OK|0|正常 +xtconstant.ACCOUNT_STATUS_WAITING_LOGIN|1|连接中 +xtconstant.ACCOUNT_STATUSING|2|登陆中 +xtconstant.ACCOUNT_STATUS_FAIL|3|失败 +xtconstant.ACCOUNT_STATUS_INITING|4|初始化中 +xtconstant.ACCOUNT_STATUS_CORRECTING|5|数据刷新校正中 +xtconstant.ACCOUNT_STATUS_CLOSED|6|收盘后 +xtconstant.ACCOUNT_STATUS_ASSIS_FAIL|7|穿透副链接断开 +xtconstant.ACCOUNT_STATUS_DISABLEBYSYS|8|系统停用(总线使用-密码错误超限) +xtconstant.ACCOUNT_STATUS_DISABLEBYUSER|9|用户停用(总线使用) + +### 划拨方向(transfer_direction) + +| 枚举变量名 | 值 | 含义 | +| ----------------------------------------- | ---- | ------------------------------- | +| xtconstant.FUNDS_TRANSFER_NORMAL_TO_SPEED | 510 | 资金划拨-普通柜台到极速柜台 | +| xtconstant.FUNDS_TRANSFER_SPEED_TO_NORMAL | 511 | 资金划拨-极速柜台到普通柜台 | +| xtconstant.NODE_FUNDS_TRANSFER_SH_TO_SZ | 512 | 节点资金划拨-上海节点到深圳节点 | +| xtconstant.NODE_FUNDS_TRANSFER_SZ_TO_SH | 513 | 节点资金划拨-深圳节点到上海节点 | + +### 多空方向(direction) + +| 枚举变量名 | 值 | 含义 | +| ------------------------------- | ---- | ---- | +| xtconstant.DIRECTION_FLAG_LONG | 48 | 多 | +| xtconstant.DIRECTION_FLAG_SHORT | 49 | 空 | + +### 交易操作(offset_flag) + +| 枚举变量名 | 值 | 含义 | +| -------------------------------------- | ---- | ---------- | +| xtconstant.OFFSET_FLAG_OPEN | 48 | 买入,开仓 | +| xtconstant.OFFSET_FLAG_CLOSE | 49 | 卖出,平仓 | +| xtconstant.OFFSET_FLAG_FORCECLOSE | 50 | 强平 | +| xtconstant.OFFSET_FLAG_CLOSETODAY | 51 | 平今 | +| xtconstant.OFFSET_FLAG_ClOSEYESTERDAY | 52 | 平昨 | +| xtconstant.OFFSET_FLAG_FORCEOFF | 53 | 强减 | +| xtconstant.OFFSET_FLAG_LOCALFORCECLOSE | 54 | 本地强平 | + +### XtQuant数据结构说明 + +### 资产XtAsset +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +cash | float | 可用金额 +frozen_cash |float | 冻结金额 +market_value | float | 持仓市值 +total_asset | float | 总资产 + +### 委托XtOrder +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +stock_code | str | 证券代码,例如"600000.SH" +order_id | int | 订单编号 +order_sysid | str | 柜台合同编号 +order_time | int | 报单时间 +order_type | int | 委托类型,参见数据字典 +order_volume | int | 委托数量 +price_type | int | 报价类型,参见数据字典 +price | float | 委托价格 +traded_volume | int | 成交数量 +traded_price | float | 成交均价 +order_status | int | 委托状态,参见数据字典 +status_msg | str | 委托状态描述,如废单原因 +strategy_name | str | 策略名称 +order_remark | str | 委托备注 +direction | int | 多空方向,股票不需要;参见数据字典 +offset_flag | int | 交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等;参见数据字典 +stock_code1 | str | 证券代码,例如"600000.SH" + +### 成交XtTrade +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +stock_code | str | 证券代码 +order_type | int | 委托类型,参见数据字典 +traded_id | str | 成交编号 +traded_time | int | 成交时间 +traded_price | float | 成交均价 +traded_volume | int | 成交数量 +traded_amount | float | 成交金额 +order_id | int | 订单编号 +order_sysid | str | 柜台合同编号 +strategy_name | str | 策略名称 +order_remark | str | 委托备注 +direction | int | 多空方向,股票不需要;参见数据字典 +offset_flag | int | 交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等;参见数据字典 +stock_code1 | str | 证券代码,例如"600000.SH" +commission | float | 手续费 + +### 持仓XtPosition +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +stock_code | str | 证券代码 +volume | int | 持仓数量 +can_use_volume | int | 可用数量 +open_price | float | 开仓价 +market_value | float | 市值 +frozen_volume | int | 冻结数量 +on_road_volume | int | 在途股份 +yesterday_volume | int | 昨夜拥股 +avg_price | float | 成本价 +direction | int | 多空方向,股票不需要;参见数据字典 +stock_code1 | str | 证券代码,例如"600000.SH" + +### 期货持仓统计XtPositionStatistics + +| 属性 | 类型 | 注释 | +| ---------------------------------- | -------- | --------------------- | +| `account_id` | `string` | 账户 | +| `exchange_id` | `string` | 市场代码 | +| `exchange_name` | `string` | 市场名称 | +| `product_id` | `string` | 品种代码 | +| `instrument_id` | `string` | 合约代码 | +| `instrument_name` | `string` | 合约名称 | +| `direction` | `int` | 多空 | +| `hedge_flag` | `int` | 投保 | +| `position` | `int` | 持仓 | +| `yesterday_position` | `int` | 昨仓 | +| `today_position` | `int` | 今仓 | +| `can_close_vol` | `int` | 可平 | +| `position_cost` | `float` | 持仓成本 | +| `avg_price` | `float` | 持仓均价 | +| `position_profit` | `float` | 持仓盈亏 | +| `float_profit` | `float` | 浮动盈亏 | +| `open_price` | `float` | 开仓均价 | +| `used_margin` | `float` | 已使用保证金 | +| `used_commission` | `float` | 已使用的手续费 | +| `frozen_margin` | `float` | 冻结保证金 | +| `frozen_commission` | `float` | 冻结手续费 | +| `instrument_value` | `float` | 市值,合约价值 | +| `open_times` | `int` | 开仓次数 | +| `open_volume` | `int` | 总开仓量 中间平仓不减 | +| `cancel_times` | `int` | 撤单次数 | +| `last_price` | `float` | 最新价 | +| `rise_ratio` | `float` | 当日涨幅 | +| `product_name` | `string` | 产品名称 | +| `royalty` | `float` | 权利金市值 | +| `expire_date` | `string` | 到期日 | +| `assest_weight` | `float` | 资产占比 | +| `increase_by_settlement` | `float` | 当日涨幅(结) | +| `margin_ratio` | `float` | 保证金占比 | +| `float_profit_divide_by_used_margin` | `float` | 浮盈比例(保证金) | +| `float_profit_divide_by_balance` | `float` | 浮盈比例(动态权益) | +| `today_profit_loss` | `float` | 当日盈亏(结) | +| `yesterday_init_position` | `int` | 昨日持仓 | +| `frozen_royalty` | `float` | 冻结权利金 | +| `today_close_profit_loss` | `float` | 当日盈亏(收) | +| `close_profit` | `float` | 平仓盈亏 | +| `ft_product_name` | `string` | 品种名称 | +| `open_cost` | `float` | 开仓成本 | + +### 异步下单委托反馈XtOrderResponse + +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +order_id | int | 订单编号 +strategy_name | str | 策略名称 +order_remark | str | 委托备注 +seq | int | 异步下单的请求序号 + +### 异步撤单委托反馈XtCancelOrderResponse + +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +order_id | int | 订单编号 +order_sysid | str | 柜台委托编号 +cancel_result | int | 撤单结果 +seq | int | 异步撤单的请求序号 + +### 下单失败错误XtOrderError +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +order_id | int | 订单编号 +error_id | int | 下单失败错误码 +error_msg | str | 下单失败具体信息 +strategy_name | str | 策略名称 +order_remark | str | 委托备注 + +### 撤单失败错误XtCancelError +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +order_id | int | 订单编号 +market | int | 交易市场 0:上海 1:深圳 +order_sysid | str | 柜台委托编号 +error_id | int | 下单失败错误码 +error_msg | str | 下单失败具体信息 + +### 信用账号资产XtCreditDetail +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +m_nStatus | int |账号状态 +m_nUpdateTime | int |更新时间 +m_nCalcConfig | int |计算参数 +m_dFrozenCash | float |冻结金额 +m_dBalance | float |总资产 +m_dAvailable | float |可用金额 +m_dPositionProfit | float |持仓盈亏 +m_dMarketValue | float |总市值 +m_dFetchBalance | float |可取金额 +m_dStockValue | float |股票市值 +m_dFundValue | float |基金市值 +m_dTotalDebt | float |总负债 +m_dEnableBailBalance | float |可用保证金 +m_dPerAssurescaleValue | float |维持担保比例 +m_dAssureAsset | float |净资产 +m_dFinDebt | float |融资负债 +m_dFinDealAvl | float |融资本金 +m_dFinFee | float |融资息费 +m_dSloDebt | float |融券负债 +m_dSloMarketValue | float |融券市值 +m_dSloFee | float |融券息费 +m_dOtherFare | float |其它费用 +m_dFinMaxQuota | float |融资授信额度 +m_dFinEnableQuota | float |融资可用额度 +m_dFinUsedQuota | float |融资冻结额度 +m_dSloMaxQuota | float |融券授信额度 +m_dSloEnableQuota | float |融券可用额度 +m_dSloUsedQuota | float |融券冻结额度 +m_dSloSellBalance | float |融券卖出资金 +m_dUsedSloSellBalance | float |已用融券卖出资金 +m_dSurplusSloSellBalance | float |剩余融券卖出资金 + +### 负债合约StkCompacts + +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +compact_type | int | 合约类型 +cashgroup_prop | int | 头寸来源 +exchange_id | int | 证券市场 +open_date | int | 开仓日期 +business_vol | int | 合约证券数量 +real_compact_vol | int | 未还合约数量 +ret_end_date | int | 到期日 +business_balance | float | 合约金额 +businessFare | float | 合约息费 +real_compact_balance | float | 未还合约金额 +real_compact_fare | float | 未还合约息费 +repaid_fare | float | 已还息费 +repaid_balance | float | 已还金额 +instrument_id | str | 证券代码 +compact_id | str | 合约编号 +position_str | str | 定位串 + +### 融资融券标的CreditSubjects +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +slo_status | int | 融券状态 +fin_status | int | 融资状态 +exchange_id | int | 证券市场 +slo_ratio | float | 融券保证金比例 +fin_ratio | float | 融资保证金比例 +instrument_id | str | 证券代码 + +### 可融券数据CreditSloCode +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +cashgroup_prop | int | 头寸来源 +exchange_id | int | 证券市场 +enable_amount | int | 融券可融数量 +instrument_id | str | 证券代码 + +### 标的担保品CreditAssure +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +assure_status | int | 是否可做担保 +exchange_id | int | 证券市场 +assure_ratio | float | 担保品折算比例 +instrument_id | str | 证券代码 + +### 账号状态XtAccountStatus +属性|类型|注释 +-|-|- +account_type| int | 账号类型,参见数据字典 +account_id | str | 资金账号 +status | int | 账号状态,参见数据字典 + +### 账号信息XtAccountInfo + +| 属性 | 类型 | 注释 | +| ---------------------- | ---- | ---------------------- | +| account_type | int | 账号类型,参见数据字典 | +| account_id | str | 资金账号 | +| broker_type | int | 同 account_type | +| platform_id | int | 平台号 | +| account_classification | int | 账号分类 | +| login_status | int | 账号状态,参见数据字典 | + +### 约券相关异步接口的反馈XtSmtAppointmentResponse + +| 属性 | 类型 | 注释 | +| -------- | ---- | -------------------------------------- | +| seq | int | 异步请求序号 | +| success | bool | 申请是否成功 | +| msg | str | 反馈信息 | +| apply_id | str | 若申请成功返回资券申请编号,否则返回-1 | + +## XtQuant API说明 + +### 系统设置接口 + +#### 创建API实例 + +```python +XtQuantTrader(path, session_id) +``` +* 释义 + - 创建XtQuant API的实例 +* 参数 + - path - str MiniQMT客户端userdata_mini的完整路径 + - session_id - int 与MiniQMT通信的会话ID,不同的会话要保证不重 +* 返回 + - XtQuant API实例对象 +* 备注 + - 后续对XtQuant API的操作都需要该实例对象 + - 通常情况下只需要创建一个XtQuant API实例 +* 示例 + +```python +path = 'D:\\迅投极速交易终端 睿智融科版\\userdata_mini' +# session_id为会话编号,策略使用方对于不同的Python策略需要使用不同的会话编号 +session_id = 123456 +#后续的所有示例将使用该实例对象 +xt_trader = XtQuantTrader(path, session_id) +``` + +#### 注册回调类 +```python +register_callback(callback) +``` +* 释义 + - 将回调类实例对象注册到API实例中,用以消息回调和主推 +* 参数 + - callback - XtQuantTraderCallback 回调类实例对象 +* 返回 + - 无 +* 备注 + - 无 +* 示例 +```python +# 创建交易回调类对象,并声明接收回调 +class MyXtQuantTraderCallback(XtQuantTraderCallback): + ... + pass +callback = MyXtQuantTraderCallback() +#xt_trader为XtQuant API实例对象 +xt_trader.register_callback(callback) +``` + +#### 准备API环境 +``` +start() +``` +* 释义 + - 启动交易线程,准备交易所需的环境 +* 参数 + - 无 +* 返回 + - 无 +* 备注 + - 无 +* 示例 +```python +# 启动交易线程 +#xt_trader为XtQuant API实例对象 +xt_trader.start() +``` + +#### 创建连接 +```python +connect() +``` +* 释义 + - 连接MiniQMT +* 参数 + - 无 +* 返回 + - 连接结果信息,连接成功返回0,失败返回非0 +* 备注 + - 该连接为一次性连接,断开连接后不会重连,需要再次主动调用 +* 示例 +```python +# 建立交易连接,返回0表示连接成功 +#xt_trader为XtQuant API实例对象 +connect_result = xt_trader.connect() +print(connect_result) +``` + +#### 停止运行 +```python +stop() +``` +* 释义 + - 停止API接口 +* 参数 + - 无 +* 返回 + - 无 +* 备注 + - 无 +* 示例 +```python +#xt_trader为XtQuant API实例对象 +xt_trader.stop() +``` + +#### 阻塞当前线程进入等待状态 +```python +run_forever() +``` +* 释义 + - 阻塞当前线程,进入等待状态,直到stop函数被调用结束阻塞 +* 参数 + - 无 +* 返回 + - 无 +* 备注 + - 无 +* 示例 +```python +#xt_trader为XtQuant API实例对象 +xt_trader.run_forever() +``` + +#### 开启主动请求接口的专用线程 + +```python +set_relaxed_response_order_enabled(enabled) +``` + +* 释义 + + * 控制主动请求接口的返回是否从额外的专用线程返回,以获得宽松的数据时序 + +* 参数 + + - enabled - bool 是否开启,默认为False关闭 + +* 返回 + + - 无 + +* 备注 + + * 如果开启,在on_stock_order等推送回调中调用同步请求不会卡住,但查询和推送的数据在时序上会变得不确定 + + * ``` + timeline t1 t2 t3 t4 + callback push1 push2 push3 resp4 + do query4 ------------------^ + ``` + + * 例如:分别在t1 t2 t3时刻到达三条委托数据,在on_push1中调用同步委托查询接口query_orders() + + * 未开启宽松时序时,查询返回resp4会在t4时刻排队到push3完成之后处理,这使得同步等待结果的查询不能返回而卡住执行 + + * 开启宽松时序时,查询返回的resp4由专用线程返回,程序正常执行,但此时查到的resp4是push3之后的状态,也就是说resp4中的委托要比push2 push3这两个前一时刻推送的数据新,但在更早的t1时刻就进入了处理 + + * 使用中请根据策略实际情况来开启,通常情况下,推荐在on_stock_order等推送回调中使用查询接口的异步版本,如`query_stock_orders_async` + +### 操作接口 + +#### 订阅账号信息 +```python +subscribe(account) +``` +* 释义 + - 订阅账号信息,包括资金账号、委托信息、成交信息、持仓信息 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 订阅结果信息,订阅成功返回0,订阅失败返回-1 +* 备注 + - 无 +* 示例 + - 订阅资金账号1000000365 +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +subscribe_result = xt_trader.subscribe(account) +``` +#### 反订阅账号信息 + +```python +unsubscribe(account) +``` +* 释义 + - 反订阅账号信息 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 反订阅结果信息,订阅成功返回0,订阅失败返回-1 +* 备注 + - 无 +* 示例 + - 订阅资金账号1000000365 +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +unsubscribe_result = xt_trader.unsubscribe(account) +``` +#### 股票同步报单 + +```python +order_stock(account, stock_code, order_type, order_volume, price_type, price, strategy_name, order_remark) +``` +* 释义 + - 对股票进行下单操作 +* 参数 + - account - StockAccount 资金账号 + - stock_code - str 证券代码,如'600000.SH' + - order_type - int 委托类型 + - order_volume - int 委托数量,股票以'股'为单位,债券以'张'为单位 + - price_type - int 报价类型 + - price - float 委托价格 + - strategy_name - str 策略名称 + - order_remark - str 委托备注 +* 返回 + - 系统生成的订单编号,成功委托后的订单编号为大于0的正整数,如果为-1表示委托失败 +* 备注 + - 无 +* 示例 + - 股票资金账号1000000365对浦发银行买入1000股,使用限价价格10.5元, 委托备注为'order_test' +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +order_id = xt_trader.order_stock(account, '600000.SH', xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, 10.5, 'strategy1', 'order_test') +``` +#### 股票异步报单 + +```python +order_stock_async(account, stock_code, order_type, order_volume, price_type, price, strategy_name, order_remark) +``` +* 释义 + - 对股票进行异步下单操作,异步下单接口如果正常返回了下单请求序号seq,会收到on_order_stock_async_response的委托反馈 +* 参数 + - account - StockAccount 资金账号 + - stock_code - str 证券代码, 如'600000.SH' + - order_type - int 委托类型 + - order_volume - int 委托数量,股票以'股'为单位,债券以'张'为单位 + - price_type - int 报价类型 + - price - float 委托价格 + - strategy_name - str 策略名称 + - order_remark - str 委托备注 +* 返回 + - 返回下单请求序号seq,成功委托后的下单请求序号为大于0的正整数,如果为-1表示委托失败 +* 备注 + - 如果失败,则通过下单失败主推接口返回下单失败信息 +* 示例 + - 股票资金账号1000000365对浦发银行买入1000股,使用限价价格10.5元,委托备注为'order_test' + +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +seq = xt_trader.order_stock_async(account, '600000.SH', xtconstant.STOCK_BUY, 1000, xtconstant.FIX_PRICE, 10.5, 'strategy1', 'order_test') +``` +#### 股票同步撤单 + +```python +cancel_order_stock(account, order_id) +``` +* 释义 + - 根据订单编号对委托进行撤单操作 +* 参数 + - account - StockAccount 资金账号 + - order_id - int 同步下单接口返回的订单编号 +* 返回 + - 返回是否成功发出撤单指令,0: 成功, -1: 表示撤单失败 +* 备注 + - 无 +* 示例 + - 股票资金账号1000000365对订单编号为order_id的委托进行撤单 + +```python +account = StockAccount('1000000365') +order_id = 100 +#xt_trader为XtQuant API实例对象 +cancel_result = xt_trader.cancel_order_stock(account, order_id) +``` +#### 股票同步撤单 + +```python +cancel_order_stock_sysid(account, market, order_sysid) +``` +* 释义 + - 根据券商柜台返回的合同编号对委托进行撤单操作 +* 参数 + - account - StockAccount 资金账号 + - market - int 交易市场 + - order_sysid - str 券商柜台的合同编号 +* 返回 + - 返回是否成功发出撤单指令,0: 成功, -1: 表示撤单失败 +* 备注 + - 无 +* 示例 + - 股票资金账号1000000365对柜台合同编号为order_sysid的上交所委托进行撤单 +```python +account = StockAccount('1000000365') +market = xtconstant.SH_MARKET +order_sysid = "100" +#xt_trader为XtQuant API实例对象 +cancel_result = xt_trader.cancel_order_stock_sysid(account, market, order_sysid) +``` +#### 股票异步撤单 + +```python +cancel_order_stock_async(account, order_id) +``` +* 释义 + - 根据订单编号对委托进行异步撤单操作 +* 参数 + - account - StockAccount 资金账号 + - order_id - int 下单接口返回的订单编号 +* 返回 + - 返回撤单请求序号, 成功委托后的撤单请求序号为大于0的正整数, 如果为-1表示委托失败 +* 备注 + - 如果失败,则通过撤单失败主推接口返回撤单失败信息 +* 示例 + - 股票资金账号1000000365对订单编号为order_id的委托进行异步撤单 + +```python +account = StockAccount('1000000365') +order_id = 100 +#xt_trader为XtQuant API实例对象 +cancel_result = xt_trader.cancel_order_stock_async(account, order_id) +``` +#### 股票异步撤单 + +```python +cancel_order_stock_sysid_async(account, market, order_sysid) +``` +* 释义 + - 根据券商柜台返回的合同编号对委托进行异步撤单操作 +* 参数 + - account - StockAccount 资金账号 + - market - int/str 交易市场 见枚举类型 交易市场(market_int/market_str) + - order_sysid - str 券商柜台的合同编号 +* 返回 + - 返回撤单请求序号, 成功委托后的撤单请求序号为大于0的正整数, 如果为-1表示委托失败 +* 备注 + - 如果失败,则通过撤单失败主推接口返回撤单失败信息 +* 示例 + - 股票资金账号1000000365对柜台合同编号为order_sysid的上交所委托进行异步撤单 +```python +account = StockAccount('1000000365') +market = xtconstant.SH_MARKET +order_sysid = "100" +#xt_trader为XtQuant API实例对象 +cancel_result = xt_trader.cancel_order_stock_sysid_async(account, market, order_sysid) +``` +#### 资金划拨 + +```python +fund_transfer(account, transfer_direction, price) +``` + +* 释义 + - 资金划拨 +* 参数 + - account - StockAccount 资金账号 + - transfer_direction - int 划拨方向,见数据字典划拨方向(transfer_direction)字段说明 + - price - float 划拨金额 +* 返回 + - (success, msg) + - success - bool 划拨操作是否成功 + - msg - str 反馈信息 + +#### 外部交易数据录入 + +```python +sync_transaction_from_external(operation, data_type, account, deal_list) +``` + +* 释义 + + - 通用数据导出 + +* 参数 + + * operation - str 操作类型,有"UPDATE","REPLACE","ADD","DELETE" + * data_type - str 数据类型,有"DEAL" + * account - StockAccount 资金账号 + * deal_list - list 成交列表,每一项是Deal成交对象的参数字典,键名参考官网数据字典,大小写保持一致 + +* 返回 + + - result - dict 结果反馈信息 + +* 示例 + + ```python + deal_list = [ + {'m_strExchangeID':'SF', 'm_strInstrumentID':'ag2407' + , 'm_strTradeID':'123456', 'm_strOrderSysID':'1234566' + , 'm_dPrice':7600, 'm_nVolume':1 + , 'm_strTradeDate': '20240627' + } + ] + resp = xt_trader.sync_transaction_from_external('ADD', 'DEAL', acc, deal_list) + print(resp) + #成功输出示例:{'msg': 'sync transaction from external success'} + #失败输出示例:{'error': {'msg': '[0-0: invalid operation type: ADDD], '}} + ``` + + +### 股票查询接口 + +#### 资产查询 + +```python +query_stock_asset(account) +``` +* 释义 + - 查询资金账号对应的资产 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账号对应的资产对象XtAsset或者None +* 备注 + - 返回None表示查询失败 +* 示例 + - 查询股票资金账号1000000365对应的资产数据 +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +asset = xt_trader.query_stock_asset(account) +``` +#### 委托查询 + +```python +query_stock_orders(account, cancelable_only = False) +``` +* 释义 + - 查询资金账号对应的当日所有委托 +* 参数 + - account - StockAccount 资金账号 + - cancelable_only - bool 仅查询可撤委托 +* 返回 + - 该账号对应的当日所有委托对象XtOrder组成的list或者None +* 备注 + - None表示查询失败或者当日委托列表为空 +* 示例 + - 查询股票资金账号1000000365对应的当日所有委托 +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +orders = xt_trader.query_stock_orders(account, False) +``` +#### 成交查询 + +```python +query_stock_trades(account) +``` +* 释义 + - 查询资金账号对应的当日所有成交 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账号对应的当日所有成交对象XtTrade组成的list或者None +* 备注 + - None表示查询失败或者当日成交列表为空 +* 示例 + - 查询股票资金账号1000000365对应的当日所有成交 +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +trades = xt_trader.query_stock_trades(account) +``` +#### 持仓查询 + +```python +query_stock_positions(account) +``` +* 释义 + - 查询资金账号对应的持仓 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账号对应的最新持仓对象XtPosition组成的list或者None +* 备注 + - None表示查询失败或者当日持仓列表为空 +* 示例 + - 查询股票资金账号1000000365对应的最新持仓 +```python +account = StockAccount('1000000365') +#xt_trader为XtQuant API实例对象 +positions = xt_trader.query_stock_positions(account) +``` +#### 期货持仓统计查询 + +``` +query_position_statistics(account) +``` + +- 释义 + - 查询期货账号的持仓统计 +- 参数 + - account - StockAccount 资金账号 +- 返回 + - 该账号对应的最新持仓对象XtPositionStatistics组成的list或者None +- 备注 + - None表示查询失败或者当日持仓列表为空 +- 示例 + - 查询期货资金账号1000000365对应的最新持仓 + +``` +account = StockAccount('1000000365', 'FUTURE') +#xt_trader为XtQuant API实例对象 +positions = xt_trader.query_position_statistics(account) +``` + +### 信用查询接口 + +#### 信用资产查询 + +```python +query_credit_detail(account) +``` +* 释义 + - 查询信用资金账号对应的资产 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该信用账户对应的资产对象XtCreditDetail组成的list或者None +* 备注 + - None表示查询失败 + - 通常情况下一个资金账号只有一个详细信息数据 +* 示例 + - 查询信用资金账号1208970161对应的资产信息 +```python +account = StockAccount('1208970161', 'CREDIT') +#xt_trader为XtQuant API实例对象 +datas = xt_trader.query_credit_detail(account) +``` +#### 负债合约查询 + +```python +query_stk_compacts(account) +``` +* 释义 + - 查询资金账号对应的负债合约 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账户对应的负债合约对象StkCompacts组成的list或者None +* 备注 + - None表示查询失败或者负债合约列表为空 +* 示例 + - 查询信用资金账号1208970161对应的负债合约 +```python +account = StockAccount('1208970161', 'CREDIT') +#xt_trader为XtQuant API实例对象 +datas = xt_trader.query_stk_compacts(account) +``` +#### 融资融券标的查询 + +```python +query_credit_subjects(account) +``` +* 释义 + - 查询资金账号对应的融资融券标的 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账户对应的融资融券标的对象CreditSubjects组成的list或者None +* 备注 + - None表示查询失败或者融资融券标的列表为空 +* 示例 + - 查询信用资金账号1208970161对应的融资融券标的 +```python +account = StockAccount('1208970161', 'CREDIT') +#xt_trader为XtQuant API实例对象 +datas = xt_trader.query_credit_subjects(account) +``` +#### 可融券数据查询 + +```python +query_credit_slo_code(account) +``` +* 释义 + - 查询资金账号对应的可融券数据 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账户对应的可融券数据对象CreditSloCode组成的list或者None +* 备注 + - None表示查询失败或者可融券数据列表为空 +* 示例 + - 查询信用资金账号1208970161对应的可融券数据 +```python +account = StockAccount('1208970161', 'CREDIT') +#xt_trader为XtQuant API实例对象 +datas = xt_trader.query_credit_slo_code(account) +``` +#### 标的担保品查询 + +```python +query_credit_assure(account) +``` +* 释义 + - 查询资金账号对应的标的担保品 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - 该账户对应的标的担保品对象CreditAssure组成的list或者None +* 备注 + - None表示查询失败或者标的担保品列表为空 +* 示例 + - 查询信用资金账号1208970161对应的标的担保品 +```python +account = StockAccount('1208970161', 'CREDIT') +#xt_trader为XtQuant API实例对象 +datas = xt_trader.query_credit_assure(account) +``` +### 其他查询接口 + +#### 新股申购额度查询 + +```python +query_new_purchase_limit(account) +``` + +* 释义 + - 查询新股申购额度 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - dict 新股申购额度数据集 + - { type1: number1, type2: number2, ... } + - type - str 品种类型 + - `KCB` - 科创板,`SH` - 上海,`SZ` - 深圳 + - number - int 可申购股数 +* 备注 + - 数据仅代表股票申购额度,债券的申购额度固定10000张 + +#### 当日新股信息查询 + +```python +query_ipo_data() +``` + +* 释义 + + - 查询当日新股新债信息 + +* 参数 + + - 无 + +* 返回 + + - dict 新股新债信息数据集 + + - { stock1: info1, stock2: info2, ... } + + - stock - str 品种代码,例如 '301208.SZ' + - info - dict 新股信息 + - name - str 品种名称 + - type - str 品种类型 + - `STOCK` - 股票,`BOND` - 债券 + - minPurchaseNum / maxPurchaseNum - int 最小 / 最大申购额度 + - 单位为股(股票)/ 张(债券) + - purchaseDate - str 申购日期 + - issuePrice - float 发行价 + + - 返回值示例 + + ```python + {'754810.SH': {'name': '丰山发债', 'type': 'BOND', 'maxPurchaseNum': 10000, 'minPurchaseNum': 10, 'purchaseDate': '20220627', 'issuePrice': 100.0}, '301208.SZ': {'name': '中亦科技', 'type': 'STOCK', 'maxPurchaseNum': 16500, 'minPurchaseNum': 500, 'purchaseDate': '20220627', 'issuePrice': 46.06}} + ``` + +* 备注 + + - 无 + +#### 账号信息查询 + +```python +query_account_infos() +``` + +* 释义 + + - 查询所有资金账号 + +* 参数 + + - 无 + +* 返回 + + - list 账号信息列表 + + - [ XtAccountInfo ] + +* 备注 + + - 无 + +#### 普通柜台资金查询 + +```python +query_com_fund(account) +``` + +* 释义 + - 划拨业务查询普通柜台的资金 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - result - dict 资金信息,包含以下字段 + - success - bool + - erro - str + - currentBalance - double 当前余额 + - enableBalance - double 可用余额 + - fetchBalance - double 可取金额 + - interest - double 待入账利息 + - assetBalance - double 总资产 + - fetchCash - double 可取现金 + - marketValue - double 市值 + - debt - double 负债 + +#### 普通柜台持仓查询 + +```python +query_com_position(account) +``` + +* 释义 + - 划拨业务查询普通柜台的持仓 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - result - list 持仓信息列表[position1, position2, ...] + - position - dict 持仓信息,包含以下字段 + - success - bool + - error - str + - stockAccount - str 股东号 + - exchangeType - str 交易市场 + - stockCode - str 证券代码 + - stockName - str 证券名称 + - totalAmt - float 总量 + - enableAmount - float 可用量 + - lastPrice - float 最新价 + - costPrice - float 成本价 + - income - float 盈亏 + - incomeRate - float 盈亏比例 + - marketValue - float 市值 + - costBalance - float 成本总额 + - bsOnTheWayVol - int 买卖在途量 + - prEnableVol - int 申赎可用量 + +#### 通用数据导出 + +```python +export_data(account, result_path, data_type, start_time = None, end_time = None, user_param = {}) +``` + +* 释义 + + - 通用数据导出 + +* 参数 + + - account - StockAccount 资金账号 + - result_path - str 导出路径,包含文件名及.csv后缀,如'C:\\Users\\Desktop\\test\\deal.csv' + - data_type - str 数据类型,如'deal' + - start_time - str 开始时间(可缺省) + - end_time - str 结束时间(可缺省) + - user_param - dict 用户参数(可缺省) + +* 返回 + + - result - dict 结果反馈信息 + +* 示例 + + ```python + resp = xt_trader.export_data(acc, 'C:\\Users\\Desktop\\test\\deal.csv', 'deal') + print(resp) + #成功输出示例:{'msg': 'export success'} + #失败输出示例:{'error': {'errorMsg': 'can not find account info, accountID:2000449 accountType:2'}} + ``` + + + +#### 通用数据查询 + +```python +query_data(account, result_path, data_type, start_time = None, end_time = None, user_param = {}) +``` + +* 释义 + + - 通用数据查询,利用export_data接口导出数据后再读取其中的数据内容,读取完毕后删除导出的文件 + +* 参数 + + 同export_data + +* 返回 + + - result - dict 数据信息 + +* 示例 + + ```python + data = xt_trader.query_data(acc, 'C:\\Users\\Desktop\\test\\deal.csv', 'deal') + print(data) + #成功输出示例: + # account_id account_Type stock_code order_type ... + #0 2003695 2 688488.SH 23 ... + #1 2003695 2 000096.SZ 23 ... + #失败输出示例:{'error': {'errorMsg': 'can not find account info, accountID:2000449 accountType:2'}} + ``` + +### 约券相关接口 + +#### 券源行情查询 + +```python +smt_query_quoter(account) +``` + +* 释义 + - 券源行情查询 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - result - list 券源信息列表[quoter1, quoter2, ...] + - quoter - dict 券源信息,包含以下字段 + - success - bool + - error - str + - finType - str 金融品种 + - stockType - str 证券类型 + - date - int 期限天数 + - code - str 证券代码 + - codeName - str 证券代码名称 + - exchangeType - str 市场 + - fsmpOccupedRate - float 资券占用利率 + - fineRate - float 罚息利率 + - fsmpreendRate - float 资券提前归还利率 + - usedRate - float 资券使用利率 + - unUusedRate - float 资券占用未使用利率 + - initDate - int 交易日期 + - endDate - int 到期日期 + - enableSloAmountT0 - float T+0可融券数量 + - enableSloAmountT3 - float T+3可融券数量 + - srcGroupId - str 来源组编号 + - applyMode - str 资券申请方式,"1":库存券,"2":专项券 + - lowDate - int 最低期限天数 + +#### 库存券约券申请 + +```python +smt_negotiate_order_async(self, account, src_group_id, order_code, date, amount, apply_rate, dict_param={}) +``` + +* 释义 + + - 库存券约券申请的异步接口,异步接口如果正常返回了请求序号seq,会收到on_smt_appointment_async_response的反馈 + +* 参数 + + - account - StockAccount 资金账号 + - src_group_id - str 来源组编号 + - order_code - str 证券代码,如'600000.SH' + - date - int 期限天数 + - amount - int 委托数量 + - apply_rate - float 资券申请利率 + + 注:目前有如下参数通过一个可缺省的字典传递,键名与参数名称相同 + + - dict_param - dict 可缺省的字典参数 + - subFareRate - float 提前归还利率 + - fineRate - float 罚息利率 + +* 返回 + + - 返回请求序号seq,成功发起申请后的请求序号为大于0的正整数,如果为-1表示发起申请失败 + +* 示例 + +```python +account = StockAccount('1000008', 'CREDIT') +dict_param = {'subFareRate':0.1, 'fineRate':0.1} +#xt_trader为XtQuant API实例对象 +seq = xt_trader.smt_negotiate_order_async(account, '', '000001.SZ', 7, 100, 0.2, dict_param) +``` + + + +#### 约券合约查询 + +```python +smt_query_compact(account) +``` + +* 释义 + - 约券合约查询 +* 参数 + - account - StockAccount 资金账号 +* 返回 + - result - list 约券合约信息列表[compact1, compact2, ...] + - compact - dict 券源信息,包含以下字段 + - success - bool + - error - str + - createDate - int 创建日期 + - cashcompactId - str 头寸合约编号 + - oriCashcompactId - str 原头寸合约编号 + - applyId - str 资券申请编号 + - srcGroupId - str 来源组编号 + - comGroupId - str 资券组合编号 + - finType - str 金融品种 + - exchangeType - str 市场 + - code - str 证券代码 + - codeName - str 证券代码名称 + - date - int 期限天数 + - beginCompacAmount - float 期初合约数量 + - beginCompacBalance - float 期初合约金额 + - compacAmount - float 合约数量 + - compacBalance - float 合约金额 + - returnAmount - float 返还数量 + - returnBalance - float 返还金额 + - realBuyAmount - float 回报买入数量 + - fsmpOccupedRate - float 资券占用利率 + - compactInterest - float 合约利息金额 + - compactFineInterest - float 合约罚息金额 + - repaidInterest - float 已还利息 + - repaidFineInterest - float 归还罚息 + - fineRate - float 罚息利率 + - preendRate - float 资券提前归还利率 + - compactType - str 资券合约类型 + - postponeTimes - int 展期次数 + - compactStatus - str 资券合约状态,"0":未归还,"1":部分归还,"2":提前了结,"3":到期了结,"4":逾期了结,"5":逾期,"9":已作废 + - lastInterestDate - int 上次结息日期 + - interestEndDate - int 记息结束日期 + - validDate - int 有效日期 + - dateClear - int 清算日期 + - usedAmount - float 已使用数量 + - usedBalance - float 使用金额 + - usedRate - float 资券使用利率 + - unUusedRate - float 资券占用未使用利率 + - srcGroupName - str 来源组名称 + - repaidDate - int 归还日期 + - preOccupedInterest - float 当日实际应收利息 + - compactInterestx - float 合约总利息 + - enPostponeAmount - float 可展期数量 + - postponeStatus - str 合约展期状态,"0":未审核,"1":审核通过,"2":已撤销,"3":审核不通过 + - applyMode - str 资券申请方式,"1":库存券,"2":专项券 + +### 回调类 + +```python +class MyXtQuantTraderCallback(XtQuantTraderCallback): + def on_disconnected(self): + """ + 连接状态回调 + :return: + """ + print("connection lost") + def on_account_status(self, status): + """ + 账号状态信息推送 + :param response: XtAccountStatus 对象 + :return: + """ + print("on_account_status") + print(status.account_id, status.account_type, status.status) + def on_stock_asset(self, asset): + """ + 资金信息推送 + :param asset: XtAsset对象 + :return: + """ + print("on asset callback") + print(asset.account_id, asset.cash, asset.total_asset) + def on_stock_order(self, order): + """ + 委托信息推送 + :param order: XtOrder对象 + :return: + """ + print("on order callback:") + print(order.stock_code, order.order_status, order.order_sysid) + def on_stock_trade(self, trade): + """ + 成交信息推送 + :param trade: XtTrade对象 + :return: + """ + print("on trade callback") + print(trade.account_id, trade.stock_code, trade.order_id) + def on_stock_position(self, position): + """ + 持仓信息推送 + :param position: XtPosition对象 + :return: + """ + print("on position callback") + print(position.stock_code, position.volume) + def on_order_error(self, order_error): + """ + 下单失败信息推送 + :param order_error:XtOrderError 对象 + :return: + """ + print("on order_error callback") + print(order_error.order_id, order_error.error_id, order_error.error_msg) + def on_cancel_error(self, cancel_error): + """ + 撤单失败信息推送 + :param cancel_error: XtCancelError 对象 + :return: + """ + print("on cancel_error callback") + print(cancel_error.order_id, cancel_error.error_id, cancel_error.error_msg) + def on_order_stock_async_response(self, response): + """ + 异步下单回报推送 + :param response: XtOrderResponse 对象 + :return: + """ + print("on_order_stock_async_response") + print(response.account_id, response.order_id, response.seq) + def on_smt_appointment_async_response(self, response): + """ + :param response: XtAppointmentResponse 对象 + :return: + """ + print("on_smt_appointment_async_response") + print(response.account_id, response.order_sysid, response.error_id, response.error_msg, response.seq) +``` + +#### 连接状态回调 + +```python +on_disconnected() +``` +* 释义 + - 失去连接时推送信息 +* 参数 + - 无 +* 返回 + - 无 +* 备注 + - 无 +#### 账号状态信息推送 + +```python +on_account_status(data) +``` + +* 释义 + - 账号状态信息变动推送 +* 参数 + - data - XtAccountStatus 账号状态信息 +* 返回 + - 无 +* 备注 + - 无 + +#### 资产信息推送 + +```python +on_stock_asset(data) +``` +* 释义 + - 资产信息变动推送 +* 参数 + - data - XtAsset 资产信息 +* 返回 + - 无 +* 备注 + - 无 +#### 委托信息推送 + +```python +on_stock_order(data) +``` +* 释义 + - 委托信息变动推送 +* 参数 + - data - XtOrder 委托信息 +* 返回 + - 无 +* 备注 + - 无 +#### 成交信息推送 + +```python +on_stock_trade(data) +``` +* 释义 + - 成交信息变动推送 +* 参数 + - data - XtTrade 成交信息 +* 返回 + - 无 +* 备注 + - 无 +#### 持仓信息推送 + +```python +on_stock_position(data) +``` +* 释义 + - 持仓信息变动推送 +* 参数 + - data - XtPosition 持仓信息 +* 返回 + - 无 +* 备注 + - 无 +#### 下单失败信息推送 + +```python +on_order_error(data) +``` +* 释义 + - 下单失败信息推送 +* 参数 + - data - XtOrderError 下单失败信息 +* 返回 + - 无 +* 备注 + - 无 +#### 撤单失败信息推送 + +```python +on_cancel_error(data) +``` +* 释义 + - 撤单失败信息的推送 +* 参数 + - data - XtCancelError 撤单失败信息 +* 返回 + - 无 +* 备注 + - 无 +#### 异步下单回报推送 + +```python +on_order_stock_async_response(data) +``` + +* 释义 + - 异步下单回报推送 +* 参数 + - data - XtOrderResponse 异步下单委托反馈 +* 返回 + - 无 +* 备注 + - 无 + +#### 约券相关异步接口的回报推送 + +```python +on_smt_appointment_async_response(data) +``` + +* 释义 + - 异步约券相关接口回报推送 +* 参数 + - data - XtSmtAppointmentResponse 约券相关异步接口的反馈 +* 返回 + - 无 +* 备注 + - 无 \ No newline at end of file diff --git a/src/xtquant/libeay32.dll b/src/xtquant/libeay32.dll new file mode 100644 index 0000000000000000000000000000000000000000..e27656c6da8a90c8cfeb32c91687130069a47a6d GIT binary patch literal 2079744 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⩔70N$IM>5Ef; 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 bxFnv%a zrfucxOukKyy@k)xb}i~t%{fPM!hn;@d+kLphuu5A3xfUx>%s3@9lmd1Y4n#>LH}XW z;aj||t*nA$!w{Pehq5)U$M z4;yl-wTBTxtk)j45yYXx|5irhPti$=NU|CejkIZ28#y-=TK1Av55?bJ5N_F*uglA~ zj%|-kBu3~B)=rFDPgue0+soU>Hlee{S0P2Vmx$k?ugl*qh;Kcu|AvL1Hv#Ref>vS- zraD>?h_ZtEc8uK`tB-%4JMU2ngtJvotW}RW_VK^$qiWoG8jp3^@wY?VbhZ5L0n6Vi z=-=7@rG=ko6%up#cdgRW29@@V-4UA`|2!|Wc^Uqb0mLT% z)dymg|LOzL>c8eWn7HW1m8D6*5)N|FDKFo;uZ5{J4O0#ofRuZa05C5Dz%l^Dh?HuT z$vnW&?y+AY(D4CHWN688K_jkB_V2b$AHZS$s}JB1|J4Vu(0|Q$Wp_aWwy(YL=EdL6 zUcR-|!h7)7;0343Erh0l&(8opD=&1T&fK;Z_`nN2DJ|g;tG1>GB+e=bFYIX|dDdXL zD&*EI&bCC`0WJSS&I}}rMrI9%Z0CKbJf&fj>rFIi3d#=|z+-3A;_Mm>FqSlJ0mgOK z38KqqRNx2-EH?wnLj$%h&bH45DqnuufF@fwtkOA_23_g0tXUH*0bUQds^NHBYTxoc z19tc|3{Yv>+*@@yRF`Wh%2k(@H|rcrN+bR1PP3&-%X0_x_|@&3S)E@u_6ETI8mJ&B zoM(xl!w$ZpBniUFHuJ&d*#o}xt1Qi|(y!lD>DQkd_Bxk$+4`H_I<0B7MMijWU0&_t zaK0U~-c9N^*8k}YnJGBTU-`P^Kc=mSjZ687`RZOV^5(P;az#Ba_fdp}Ng5Vdzflks z*yBD`P6+ezc@(C%a-VV7Bg$i zUv0`7b0goiz3VCho<-dY4zub$Ew+7F%2>`l&VaoOs;3B^x|qjgso=IOrKRHz17w>x@}dHDwQc>{#vi?oLxih9r$ zL-iXSY#zy#Q(%rU)RoZ=5$k~u@MGHi`(Ib039r_RLN$E78 zP%l6CQCs4Ziwj%&NGqDMLm-jA0-!Voe|p==KgZL0?^t}l5pzY}-tzy@&p#p~|7dfP z^1lLq70!3Mnzy|roXZYi>$NSLeaI*hzo+~@5|}6r!Im)y%A)z=_KU&`db)ZnZ|N!1 zL@BfX!FI|>4TUzM#`}UI72c;@bu!7@iiX7$GKC}DO0$*R-WQA5z5cB(glz-jxh#G| z-jC&=5bJNkPXPkn3CSZx)%h|39%M%H(M+@{$Ud4*b#!%=0+&IM{msZWB4tde~}^Zr9o5H|1%lR-azhnskfTf?pY%}1S(Oq5)76%W*3g?4#&?dE)2I6B!{&%kyliJvR3rHz6hFGk;C>6g231C7Ub542=!Ppp3IYdbz>nM&a}WfXxzujD!s0d!nmZT_)~7ZpoC%B4tBSV{u)`?<^{%l8$4uQ% zEg$I=t^I8XQIenuQnis{8Jphg0;Lm^y(_O1@a_8RAGKS0fb9`(5WOsgkWSj+pu54n zoW8UqhrZ+>>}@3UF;X5y4P-yalP*_(v=Jfz|da(QsZO z!nU@0qq*pk-KqW^UDvUQh2wMca%0DZyQ_=)M2~KJo{XXdlq4ec-%>uXXbmyt6hmt4 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%0DeBFaBEr~Pdj)Vtz*b|euLRANqgiCkd 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%0APcb#U6J=$+^ippkUP}my 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≶RC>XgX`Q|pwAu$tAy$0q?c1i#K^JEo%?{9O7C!e{8hkwN~xuoOLa@>HfKQ(L3kHZ?I#It=cIMnvD(1Yxyj{ z6|lyvpmRd1J9GTSu46J&4Xypala+hvJWKyKx2YdM{hiXq?~~Wh$t(3dc#U0Lbw+Uw zIc?~i-sI#qc;9JWIC1-joQQeYPCZ8(y&IlPngdTHVu^h_46i#K_g0;USK4E1$f>Nq z+xA$iZ6IWYEjdT`Pq7=#e%gSOZLri_b@JyyLe-|t&iP^OUNkY}476F_HkVGFjhA#n zciPsuXfKEAZBu31qj54GzF)Q0oR8a^o^m($T=Hb6zXflJ_FM3QZE)gaQQ2<$p!%n~ z*wSe_GVsJ7xd=as2mgoTPqK=GM&V%ZlC$3&?qPB*c@&LH_9ynwQ~pc#C3@F*68k$& zWo)8Ne4)zS_7wHRi+g?uwqHnwXJjJD*?Yo!c z8|!ZBJvIh zrPW^(4f7oo9Y*omZa9haKDL&n=As-nq52vLElK3yh3<(H`3m-5l!QcJ|&Yt;-x5y;y%*Tp4*7v|6Z=w(gu3 z92!6Bt&9HnhQ@wmux(e5LBsu?j;1y{nGT=h`+LESN3gjRD;RVFa(vEIwz*xNk5j|v z=Z*L2{W;Iv)VD8t$LP=~NY{=vd6uF~RII(zj!B4rxWA{15G#u>#Vi_Y;$+@T0IQE~ z7-6`S9c*`KgeOW=r<2o&*2MAtE#`g9l}$?{&K6^*?j}ywEb4f~Ok$cr;*^RgWSsrC zP8_j8oG@66<4sqco$6yWS!4Z=;}zHNc_$eE8fT|4(Hq5yC{8TUM+8M9GF8uN#Fy%< zk$&Psbz%u)!~oltK`gIb(1^^nDK$cDwOi7OmbS|pdzLsJe~lQXNt{xrWE1~Ah4yyZ z&jjdr>Fapm14Ki5$pG;p9c{PM9()Y#3_ZyC${>=}%LOP=V|6g`Pa8xM>-1cJ9h-*V zZ-G%4raXhvdX)fC(stFLEQ@FXWvS~`l;0XLfjIrD;nz1Q%|p~GL3B!Eu8vctPEVRd zh;-W8%<4;RHHe0p`Gvfj*2al*DqG8~f{U1BjG0P9&-IdvXmOkFn0iql?4%lzR8F}!BZO-wFE?8czgarCUy z>IU&qAF)qGjI&|)u1WM+C)UzL%K@UpZOV<}JEXz-^|l{bBMxE`=P-ypHIpuSH;!M~ zXZNk!F1bgW!^9SS#0y2!Ceb1f-ioN*yHVn@1~J!W(M5bUNJO<=GVIohzB{(QrEkMT zY52o0yR9xFFm=;K9K|BGWnfP&?8(atViIB2Stpv58CtTbII&5cwl?WuFQs-Y-;zxQ zZJUZwqK6)C+7@LIGuPPD#<3`)-&UW~R!7G=ahoP~97e~wtz(T{YMrQGfQV{`zKvqX zi#c}wSXGa 0: + expressions.append(ds.field(CONSTFIELD_TIME) >= start_timetag) + + if end_timetag > 0: + expressions.append(ds.field(CONSTFIELD_TIME) <= end_timetag) + + if CONSTFIELD_CODE in fe_fields and len(codes) > 0: + expressions.append(ds.field(CONSTFIELD_CODE).isin(codes)) + + if len(expressions) > 0: + expr = expressions[0] + for e in expressions[1:]: + expr = expr & e + return ds.dataset(fe_table).to_table(filter=expr) + else: + return fe_table + + + def _new_arrow_filter(): + from pyarrow import compute as pc + nonlocal fe_table, fe_fields + + expressions = [] + if CONSTFIELD_TIME in fe_fields: + if start_timetag > 0: + expressions.append(pc.field(CONSTFIELD_TIME) >= start_timetag) + if end_timetag > 0: + expressions.append(pc.field(CONSTFIELD_TIME) <= end_timetag) + + if CONSTFIELD_CODE in fe_fields and len(codes) > 0: + expressions.append(pc.field(CONSTFIELD_CODE).isin(codes)) + + if len(expressions) > 0: + expr = expressions[0] + for e in expressions[1:]: + expr = expr & e + return fe_table.filter(expr) + else: + return fe_table + + def do_filter(): + import pyarrow as pa + from distutils import version + nonlocal count + # python3.6 pyarrow-6.0.1 + # python3.7 pyarrow-12.0.1 + # python3.8~12 pyarrow-17.0.0 + paver = version.LooseVersion(pa.__version__) + if paver <= version.LooseVersion('9.0.0'): + _table = _old_arrow_filter() + else: + _table = _new_arrow_filter() + + if count > 0: + start_index = max(0, _table.num_rows - count) + _table = _table.slice(start_index, count) + + return _table + + return do_filter(), fe_fields + + +def _parse_fields(fields): + if not __META_FIELDS__: + _init_metainfos() + + tmp = OrderedDict() # { table: { show_fields: list(), fe_fields: list() } } + for field in fields: + if field.find('.') == -1: + table = field + + if table not in __META_TABLES__: + continue + + if table not in tmp: + tmp[table] = {'show': list(), 'fe': list()} + + metaid = __META_TABLES__[table] + for key, f in __META_INFO__[metaid]['fields'].items(): + if 'G' == key: + tmp[table]['fe'].append('_time') + elif 'S' == key: + tmp[table]['fe'].append('_stock') + else: + tmp[table]['fe'].append(f['modelName']) + + tmp[table]['show'].append(f['modelName']) + + else: + table = field.split('.')[0] + ifield = field.split('.')[1] + + if field not in __META_FIELDS__: + continue + + metaid, key = __META_FIELDS__[field] + + if table not in tmp: + tmp[table] = {'show': list(), 'fe': list()} + + if 'G' == key: + tmp[table]['fe'].append('_time') + elif 'S' == key: + tmp[table]['fe'].append('_stock') + else: + tmp[table]['fe'].append(ifield) + + tmp[table]['show'].append(ifield) + + return [(tb, sd['show'], sd['fe']) for tb, sd in tmp.items()] + +def _parse_keys(fields): + if not __META_FIELDS__: + _init_metainfos() + + tmp = OrderedDict() # { table: { show_keys: list(), fe_fields: list() } } + for field in fields: + if field.find('.') == -1: + table = field + + if table not in __META_TABLES__: + continue + + if table not in tmp: + tmp[table] = {'show': list(), 'fe': list()} + + metaid = __META_TABLES__[table] + for key, f in __META_INFO__[metaid]['fields'].items(): + if 'G' == key: + tmp[table]['fe'].append('_time') + elif 'S' == key: + tmp[table]['fe'].append('_stock') + else: + tmp[table]['fe'].append(f['modelName']) + + tmp[table]['show'].append(key) + + else: + table = field.split('.')[0] + ifield = field.split('.')[1] + + if field not in __META_FIELDS__: + continue + + metaid, key = __META_FIELDS__[field] + + if table not in tmp: + tmp[table] = {'show': list(), 'fe': list()} + + if 'G' == key: + tmp[table]['fe'].append('_time') + elif 'S' == key: + tmp[table]['fe'].append('_stock') + else: + tmp[table]['fe'].append(ifield) + + tmp[table]['show'].append(key) + + return [(tb, sd['show'], sd['fe']) for tb, sd in tmp.items()] + + +def get_tabular_fe_data( + codes: list, + fields: list, + period: str, + start_time: str, + end_time: str, + count: int = -1, + **kwargs +): + import pandas as pd + + time_format = None + if period in ('1m', '5m', '15m', '30m', '60m', '1h'): + time_format = '%Y-%m-%d %H:%M:%S' + elif period in ('1d', '1w', '1mon', '1q', '1hy', '1y'): + time_format = '%Y-%m-%d' + elif period == '': + time_format = '%Y-%m-%d %H:%M:%S.%f' + + if not time_format: + raise Exception('Unsupported period') + + int_period = __TABULAR_PERIODS__[period] + + if not isinstance(count, int) or count == 0: + count = -1 + + table_fields = _parse_fields(fields) + + def datetime_to_timetag(timelabel, format=''): + ''' + timelabel: str '20221231' '20221231235959' + format: str '%Y%m%d' '%Y%m%d%H%M%S' + return: int 1672502399000 + ''' + import datetime as dt + if not format: + format = '%Y%m%d' if len(timelabel) == 8 else '%Y%m%d%H%M%S' + try: + return dt.datetime.strptime(timelabel, format).timestamp() * 1000 + except: + return 0 + + start_timetag = datetime_to_timetag(start_time) + end_timetag = datetime_to_timetag(end_time) + + dfs = [] + ordered_fields = [] + for table, show_fields, fe_fields in table_fields: + fe_table, fe_table_fields = _get_tabular_feather_single_ori(codes, table, int_period, start_timetag, end_timetag, count) + if not fe_table: + continue + + ifields = list(set(fe_table_fields) & set(fe_fields)) + if not ifields: + continue + + fe_table = fe_table.select(ifields) + fe_df = fe_table.to_pandas() + # 补充请求的字段 + default_null_columns = [f for f in fe_fields if f not in fe_table_fields] + for c in default_null_columns: + fe_df.loc[:, c] = pd.NA + + rename_fields = {} + + for i in range(min(len(show_fields), len(fe_fields))): + show_field = f'{table}.{show_fields[i]}' + rename_fields[fe_fields[i]] = show_field + ordered_fields.append(show_field) + + fe_df.rename(columns=rename_fields, inplace=True) + dfs.append(fe_df) + + if not dfs: + return pd.DataFrame() + + result = pd.concat(dfs, ignore_index=True) + return result[ordered_fields] + + +def get_tabular_fe_bson( + codes: list, + fields: list, + period: str, + start_time: str, + end_time: str, + count: int = -1, + **kwargs +): + from .. import xtbson + time_format = None + if period in ('1m', '5m', '15m', '30m', '60m', '1h'): + time_format = '%Y-%m-%d %H:%M:%S' + elif period in ('1d', '1w', '1mon', '1q', '1hy', '1y'): + time_format = '%Y-%m-%d' + elif period == '': + time_format = '%Y-%m-%d %H:%M:%S.%f' + + if not time_format: + raise Exception('Unsupported period') + + int_period = __TABULAR_PERIODS__[period] + + if not isinstance(count, int) or count == 0: + count = -1 + + table_fields = _parse_keys(fields) + + def datetime_to_timetag(timelabel, format=''): + ''' + timelabel: str '20221231' '20221231235959' + format: str '%Y%m%d' '%Y%m%d%H%M%S' + return: int 1672502399000 + ''' + import datetime as dt + if not format: + format = '%Y%m%d' if len(timelabel) == 8 else '%Y%m%d%H%M%S' + try: + return dt.datetime.strptime(timelabel, format).timestamp() * 1000 + except: + return 0 + + start_timetag = datetime_to_timetag(start_time) + end_timetag = datetime_to_timetag(end_time) + + def _get_convert(): + import pyarrow as pa + from distutils import version + # python3.6 pyarrow-6.0.1 + # python3.7 pyarrow-12.0.1 + # python3.8~12 pyarrow-17.0.0 + def _old_arrow_convert(table): + return table.to_pandas().to_dict(orient='records') + + def _new_arrow_convert(table): + return table.to_pylist() + + paver = version.LooseVersion(pa.__version__) + if paver < version.LooseVersion('7.0.0'): + return _old_arrow_convert + else: + return _new_arrow_convert + + convert = _get_convert() + ret_bsons = [] + for table, show_fields, fe_fields in table_fields: + table_head = get_tabular_bson_head(fields) + ret_bsons.append(xtbson.encode(table_head)) + + fe_table, fe_table_fields = _get_tabular_feather_single_ori(codes, table, int_period, start_timetag, end_timetag, count) + + ifields = list() + new_columns = list() + for i in range(len(fe_fields)): + if fe_fields[i] in fe_table_fields: + ifields.append(fe_fields[i]) + new_columns.append(show_fields[i]) + + if not ifields: + continue + + fe_table = fe_table.select(ifields) + fe_table = fe_table.rename_columns(new_columns) # key_column + + fe_datas = convert(fe_table) + for data in fe_datas: + ret_bsons.append(xtbson.encode(data)) + + return ret_bsons + diff --git a/src/xtquant/metatable/get_bson.py b/src/xtquant/metatable/get_bson.py new file mode 100644 index 0000000..83d401a --- /dev/null +++ b/src/xtquant/metatable/get_bson.py @@ -0,0 +1,295 @@ +# coding:utf-8 +from collections import OrderedDict + +from .meta_config import ( + __TABULAR_PERIODS__, + __META_FIELDS__, + __META_TABLES__, + __META_INFO__, + _init_metainfos, + _meta_type, + _check_metatable_key, +) + + +def parse_request_from_fields(fields): + ''' + 根据字段解析metaid和field + ''' + table_field = OrderedDict() # {metaid: {key}} + key2field = OrderedDict() # {metaid: {key: field}} + columns = [] # table.field + if not __META_FIELDS__: + _init_metainfos() + + for field in fields: + if field.find('.') == -1: # 获取整个table的数据 + metaid = __META_TABLES__[field] + if metaid in __META_INFO__: + metainfo = __META_INFO__[metaid] + table = metainfo['modelName'] + meta_table_fields = metainfo.get('fields', {}) + if not meta_table_fields: + continue + + table_field[metaid] = {k: _meta_type(v['type']) for k, v in meta_table_fields.items()} + key2field[metaid] = { + key: f'{table}.{field_info["modelName"]}' for key, field_info in meta_table_fields.items() + } + columns.extend(key2field[metaid].values()) + + elif field in __META_FIELDS__: + metaid, key = __META_FIELDS__[field] + metainfo = __META_INFO__[metaid] + + if metaid not in table_field: + table_field[metaid] = {} + table_field[metaid][key] = _meta_type(metainfo['fields'][key]['type']) + + if metaid not in key2field: + key2field[metaid] = {} + key2field[metaid][key] = field + + columns.append(field) + + return table_field, key2field, columns + + + + +def _get_tabular_data_single_ori( + codes: list, + metaid: int, + keys: list, + int_period: int, + start_time: str, + end_time: str, + count: int = -1, + **kwargs +): + from .. import xtbson, xtdata + import os + CONSTKEY_CODE = 'S' + + ret_datas = [] + + scan_whole = False + scan_whole_filters = dict() # 额外对全市场数据的查询 { field : [codes] } + client = xtdata.get_client() + def read_single(): + nonlocal codes, metaid, int_period, scan_whole, scan_whole_filters, client, keys, ret_datas + if not codes: + scan_whole = True + return + + data_path_dict = xtdata._get_data_file_path(codes, (metaid, int_period)) + print(data_path_dict) + for code, file_path in data_path_dict.items(): + if not file_path: + continue + + if not os.path.exists(file_path): # 如果file_path不存在 + if code == 'XXXXXX.XX': # 不处理代码为XXXXXX.XX的情况 + continue + + if not _check_metatable_key(metaid, CONSTKEY_CODE): # 不处理不含S字段的表 + continue + + if CONSTKEY_CODE not in scan_whole_filters: + scan_whole_filters[CONSTKEY_CODE] = [] + scan_whole = True + scan_whole_filters[CONSTKEY_CODE].append(code) + continue + + bson_datas = client.read_local_data(file_path, start_time, end_time, count) + + for data in bson_datas: + idata = xtbson.decode(data) + ndata = {k: idata[k] for k in keys if k in idata} + ret_datas.append(ndata) + + def read_whole(): + nonlocal scan_whole, scan_whole_filters, metaid, int_period, client, keys, ret_datas + if not scan_whole: + return + + data_path_dict = xtdata._get_data_file_path(['XXXXXX.XX'], (metaid, int_period)) + if 'XXXXXX.XX' not in data_path_dict: + return + file_path = data_path_dict['XXXXXX.XX'] + if not os.path.exists(file_path): + return + + bson_datas = client.read_local_data(file_path, start_time, end_time, -1) + data_c = count + for data in bson_datas: + idata = xtbson.decode(data) + + valid = True + for k, v in scan_whole_filters.items(): + if idata.get(k, None) not in v: + valid = False + break + + if not valid: + continue + + ndata = {k: idata[k] for k in keys if k in idata} + ret_datas.append(ndata) + + data_c -= 1 + if data_c == 0: + break + + read_single() + read_whole() + + return ret_datas + + +def get_tabular_data( + codes: list, + fields: list, + period: str, + start_time: str, + end_time: str, + count: int = -1, + **kwargs +): + import pandas as pd + + time_format = None + if period in ('1m', '5m', '15m', '30m', '60m', '1h'): + time_format = '%Y-%m-%d %H:%M:%S' + elif period in ('1d', '1w', '1mon', '1q', '1hy', '1y'): + time_format = '%Y-%m-%d' + elif period == '': + time_format = '%Y-%m-%d %H:%M:%S.%f' + + if not time_format: + raise Exception('Unsupported period') + + int_period = __TABULAR_PERIODS__[period] + + if not isinstance(count, int) or count == 0: + count = -1 + + table_field, key2field, ori_columns = parse_request_from_fields(fields) + + dfs = [] + + # 额外查询 { metaid : [codes] } + for metaid, keys in table_field.items(): + datas = _get_tabular_data_single_ori(codes, metaid, list(keys.keys()), int_period, start_time, end_time, count) + df = pd.DataFrame(datas) + if df.empty: + continue + + # 补充请求的字段 + default_null_columns = [c for c in keys if c not in df.columns] + for c in default_null_columns: + df.loc[:, c] = keys[c] + + df.rename(columns=key2field[metaid], inplace=True) + dfs.append(df) + + if not dfs: + return pd.DataFrame() + + result = pd.concat(dfs, ignore_index=True) + result = result[ori_columns] + + return result + + +def get_tabular_bson_head( + fields: list +): + ''' + 根据字段解析表头 + ''' + ret = {'modelName': '', 'tableNameCn': '', 'fields': []} + + if not __META_FIELDS__: + _init_metainfos() + + for field in fields: + if field.find('.') == -1: # 获取整个table的数据 + metaid = __META_TABLES__[field] + if metaid not in __META_INFO__: + continue + + metainfo = __META_INFO__[metaid] + meta_table_fields = metainfo.get('fields', {}) + ret['metaId'] = metaid + ret['modelName'] = metainfo['modelName'] + ret['tableNameCn'] = metainfo['tableNameCn'] + if not meta_table_fields: + continue + + for k, v in meta_table_fields.items(): + ret['fields'].append({ + 'key': k, + 'fieldNameCn': v['fieldNameCn'], + 'modelName': v['modelName'], + 'type': v['type'], + 'unit': v['unit'], + }) + + + elif field in __META_FIELDS__: + metaid, key = __META_FIELDS__[field] + metainfo = __META_INFO__[metaid] + ret['metaId'] = metaid + ret['modelName'] = metainfo['modelName'] + ret['tableNameCn'] = metainfo['tableNameCn'] + field_metainfo = metainfo['fields'][key] + ret['fields'].append({ + 'key': key, + 'fieldNameCn': field_metainfo['fieldNameCn'], + 'modelName': field_metainfo['modelName'], + 'type': field_metainfo['type'], + 'unit': field_metainfo['unit'], + }) + + return ret + + +def get_tabular_bson( + codes: list, + fields: list, + period: str, + start_time: str, + end_time: str, + count: int = -1, + **kwargs +): + from .. import xtbson + time_format = None + if period in ('1m', '5m', '15m', '30m', '60m', '1h'): + time_format = '%Y-%m-%d %H:%M:%S' + elif period in ('1d', '1w', '1mon', '1q', '1hy', '1y'): + time_format = '%Y-%m-%d' + elif period == '': + time_format = '%Y-%m-%d %H:%M:%S.%f' + + if not time_format: + raise Exception('Unsupported period') + + int_period = __TABULAR_PERIODS__[period] + + if not isinstance(count, int) or count == 0: + count = -1 + + table_field, key2field, ori_columns = parse_request_from_fields(fields) + + ret_bsons = [] + for metaid, keysinfo in table_field.items(): + table_head = get_tabular_bson_head(fields) + ret_bsons.append(xtbson.encode(table_head)) + datas = _get_tabular_data_single_ori(codes, metaid, list(keysinfo.keys()), int_period, start_time, end_time, count) + for d in datas: + ret_bsons.append(xtbson.encode(d)) + + return ret_bsons + diff --git a/src/xtquant/metatable/meta_config.py b/src/xtquant/metatable/meta_config.py new file mode 100644 index 0000000..0ed877b --- /dev/null +++ b/src/xtquant/metatable/meta_config.py @@ -0,0 +1,198 @@ +#coding:utf8 + +__TABULAR_PERIODS__ = { + '': 0, + '1m': 60000, + '5m': 300000, + '15m': 900000, + '30m': 1800000, + '60m': 3600000, + '1h': 3600000, + '1d': 86400000, + '1w': 604800000, + '1mon': 2592000000, + '1q': 7776000000, + '1hy': 15552000000, + '1y': 31536000000, +} + +__META_INFO__ = {} +__META_FIELDS__ = {} +__META_TABLES__ = {} + +def download_metatable_data(): + ''' + 下载metatable信息 + 通常在客户端启动时自动获取,不需要手工调用 + ''' + from .. import xtdata + cl = xtdata.get_client() + + ret = xtdata._BSON_call_common( + cl.commonControl, 'downloadmetatabledata', {} + ) + return ret + +def _init_metainfos(): + ''' + 初始化metatable + ''' + import traceback + from .. import xtdata, xtbson + + global __META_INFO__ + global __META_FIELDS__ + global __META_TABLES__ + + cl = xtdata.get_client() + result = xtbson.BSON.decode(cl.commonControl('getmetatabledatas', xtbson.BSON.encode({}))) + all_metainfos = result['result'] + + for metainfo in all_metainfos: + if not isinstance(metainfo, dict): + continue + + try: + metaid = metainfo['I'] + __META_INFO__[metaid] = metainfo + + table_name = metainfo.get('modelName', metaid) + table_name_cn = metainfo.get('tableNameCn', '') + + __META_TABLES__[table_name] = metaid + __META_TABLES__[table_name_cn] = metaid + + metainfo_fields = metainfo.get('fields', {}) + # metainfo_fields.pop('G', None) # G公共时间字段特殊处理,跳过 + for key, info in metainfo_fields.items(): + field_name = info['modelName'] + __META_FIELDS__[f'{table_name}.{field_name}'] = (metaid, key) + except: + traceback.print_exc() + continue + return + +def _check_metatable_key(metaid, key): + metainfo = __META_INFO__.get(metaid, None) + if not metainfo: + return False + + fields = metainfo.get('fields', {}) + return key in fields + + +def get_metatable_list(): + ''' + 获取metatable列表 + + return: + { table_code1: table_name1, table_code2: table_name2, ... } + + table_code: str + 数据表代码 + table_name: str + 数据表名称 + ''' + if not __META_INFO__: + _init_metainfos() + + ret = {} + for metaid, metainfo in __META_INFO__.items(): + model_name = metainfo.get('modelName', f'{metaid}') + table_name_desc = metainfo.get('tableNameCn', '') + ret[model_name] = table_name_desc + + return ret + + +def get_metatable_config(table): + ''' + 获取metatable列表原始配置信息 + ''' + if not __META_INFO__: + _init_metainfos() + + if table not in __META_TABLES__: + print(f'[ERROR] Unknown table {table}') + + metaid = __META_TABLES__[table] + return __META_INFO__[metaid] + + +__META_TYPECONV__ = { + 'int': int(), + 'long': int(), + 'double': float(), + 'string': str(), + 'binary': bytes(), +} + + +def _meta_type(t): + try: + return __META_TYPECONV__[t] + except: + raise Exception(f'Unsupported type:{t}') + + +def get_metatable_info(table): + ''' + 获取metatable数据表信息 + + table: str + 数据表代码 table_code 或 数据表名称 table_name + return: dict + { + 'code': table_code + , 'name': table_name + , 'desc': desc + , 'fields': fields + } + + table_code: str + 数据表代码 + table_name: str + 数据表名称 + desc: str + 描述 + fields: dict + { 'code': field_code, 'name': field_name, 'type': field_type } + ''' + info = get_metatable_config(table) + + fields = info.get('fields', {}) + ret = { + 'code': info.get('modelName', ''), + 'name': info.get('tableNameCn', ''), + 'desc': info.get('desc', ''), + 'fields': [ + { + 'code': field_info.get('modelName', ''), + 'name': field_info.get('fieldNameCn', ''), + 'type': type(_meta_type(field_info.get('type', ''))), + } for key, field_info in fields.items() + ], + } + return ret + + +def get_metatable_fields(table): + ''' + 获取metatable数据表字段信息 + + table: str + 数据表代码 table_code 或 数据表名称 table_name + return: pd.DataFrame + columns = ['code', 'name', 'type'] + ''' + import pandas as pd + info = get_metatable_config(table) + + fields = info.get('fields', {}) + ret = pd.DataFrame([{ + 'code': field_info.get('modelName', ''), + 'name': field_info.get('fieldNameCn', ''), + 'type': type(_meta_type(field_info.get('type', ''))), + } for key, field_info in fields.items()]) + return ret + diff --git a/src/xtquant/msvcp140.dll b/src/xtquant/msvcp140.dll new file mode 100644 index 0000000000000000000000000000000000000000..9ec811faed2a6a54ff9cdc6daa4f5eaa0f45d5e4 GIT binary patch literal 675112 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%0DhavlEUFsG62c~Dn?vum!*ei$bMV#sq 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 {|4x4Z)9tS3QAGgRcP9cPM*dk;ZcP0DKkrn(ty0 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 I%XoPI50rQwK>z>% literal 0 HcmV?d00001 diff --git a/src/xtquant/qmttools/__init__.py b/src/xtquant/qmttools/__init__.py new file mode 100644 index 0000000..75688e4 --- /dev/null +++ b/src/xtquant/qmttools/__init__.py @@ -0,0 +1,6 @@ + +from . import functions +from . import contextinfo +from . import stgframe + +from .stgentry import run_file as run_strategy_file diff --git a/src/xtquant/qmttools/contextinfo.py b/src/xtquant/qmttools/contextinfo.py new file mode 100644 index 0000000..6634192 --- /dev/null +++ b/src/xtquant/qmttools/contextinfo.py @@ -0,0 +1,353 @@ +#coding:utf-8 + +from . import functions as _FUNCS_ + +class ContextInfo: + def __init__(this): + #base + this.request_id = '' + this.quote_mode = '' #'realtime' 'history' 'all' + this.trade_mode = '' #'simulation' 'trading' 'backtest' + this.title = '' + this.user_script = '' + + #quote + this.stock_code = '' + this.stockcode = '' + this.market = '' + this.period = '' + this.start_time = '' + this.end_time = '' + this.dividend_type = '' + this.start_time_num = None + this.end_time_num = None + + #bar frame + this.timelist = [] + this.barpos = -1 + this.lastrunbarpos = -1 + this.result = {} + this.push_result = {} + + #backtest + this.asset = 1000000.0 # 初始资金 + this.margin_ratio = 0.05 # 保证金比例 + this.slippage_type = 2 # 滑点类型 + this.slippage = 0.0 # 滑点值 + this.max_vol_rate = 0.0 # 最大成交比例 + this.comsisson_type = 0 # 手续费类型 + this.open_tax = 0.0 # 买入印花税 + this.close_tax = 0.0 # 卖出印花税 + this.min_commission = 0.0 # 最低佣金 + this.open_commission = 0.0 # 买入佣金 + this.close_commission = 0.0 # 平昨佣金 + this.close_today_commission = 0.0 # 平今佣金 + this.benchmark = '000300.SH' # 业绩基准 + + this.do_back_test = None + + #reserved + this.refresh_rate = None + this.fund_name = None + this.link_fund_name = None + this.data_info_level = None + this.time_tick_size = None + this.subscribe_once = False + return + + @property + def start(this): + return this.start_time + + @start.setter + def start(this, value): + this.start_time = value + + @property + def end(this): + return this.end_time + + @end.setter + def end(this, value): + this.end_time = value + + @property + def capital(this): + return this.asset + + @capital.setter + def capital(this, value): + this.asset = value + + ### qmt strategy frame ### + + def init(this): + return + + def after_init(this): + return + + def handlebar(this): + return + + def on_backtest_finished(this): + return + + def stop(this): + return + + def account_callback(this, account_info): + return + + def order_callback(this, order_info): + return + + def deal_callback(this, deal_info): + return + + def position_callback(this, position_info): + return + + def orderError_callback(this, passorder_info, msg): + return + + ### qmt functions - bar ### + + def is_last_bar(this): + return this.barpos >= len(this.timelist) - 1 + + def is_new_bar(this): + return this.barpos > this.lastbarpos + + def get_bar_timetag(this, barpos = None): + try: + return this.timelist[barpos] if barpos is not None else this.timelist[this.barpos] + except Exception as e: + return None + + ### qmt functions - graph ### + + def paint(this, name, value, index = -1, drawstyle = 0, color = '', limit = ''): + vp = {str(this.get_bar_timetag()): value} + + if name not in this.result: + this.result[name] = {} + this.result[name].update(vp) + + if name not in this.push_result: + this.push_result[name] = {} + this.push_result[name].update(vp) + return + + ### qmt functions - quote ### + + def subscribe_quote(this, stock_code = '', period = '', dividend_type = '', result_type = '', callback = None): + if not stock_code: + stock_code = this.stock_code + if not period or period == 'follow': + period = this.period + if not dividend_type or dividend_type == 'follow': + dividend_type = this.dividend_type + return _FUNCS_.subscribe_quote(stock_code, period, dividend_type, 0, result_type, callback) + + def subscribe_whole_quote(this, code_list, callback = None): + return _FUNCS_.subscribe_whole_quote(code_list, callback) + + def unsubscribe_quote(this, subscribe_id): + return _FUNCS_.unsubscribe_quote(subscribe_id) + + def get_market_data( + this, fields = [], stock_code = [], start_time = '', end_time = '' + , skip_paused = True, period = '', dividend_type = '', count = -1 + ): + if not stock_code: + stock_code = [this.stock_code] + if not period or period == 'follow': + period = this.period + if not dividend_type or dividend_type == 'follow': + dividend_type = this.dividend_type + if period != 'tick' and count == -1 and len(fields) == 1: + if not end_time or end_time == 'follow': + if this.barpos >= 0: + end_time = _FUNCS_.timetag_to_datetime(this.get_bar_timetag(this.barpos)) + count = -2 + if period == 'tick' and count == -1 and len(fields) == 1 and start_time == '' and end_time == '': + count = -2 + + return _FUNCS_.get_market_data( + fields, stock_code, start_time, end_time + , skip_paused, period, dividend_type, count + ) + + def get_market_data_ex( + this, fields = [], stock_code = [], period = '' + , start_time = '', end_time = '', count = -1 + , dividend_type = '', fill_data = True, subscribe = True + ): + if not stock_code: + stock_code = [this.stock_code] + if not period or period == 'follow': + period = this.period + if not dividend_type or dividend_type == 'follow': + dividend_type = this.dividend_type + + if not this.subscribe_once and subscribe: + this.subscribe_once = True + if period != "tick": + for stk in stock_code: + _FUNCS_.subscribe_quote(stk, period, dividend_type, -1) + else: + for stk in stock_code: + this.subscribe_whole_quote(stk) + + return _FUNCS_.get_market_data_ex( + fields, stock_code, period + , start_time, end_time, count + , dividend_type, fill_data, subscribe + ) + + def get_full_tick(this, stock_code = []): + if not stock_code: + stock_code = [this.stock_code] + return _FUNCS_.get_full_tick(stock_code) + + def get_divid_factors(this, stock_code = '', date = None): + if not stock_code: + stock_code = this.stock_code + return _FUNCS_.get_divid_factors(stock_code, date) + + ### qmt functions - finance ### + + def get_financial_data(this, field_list, stock_list, start_date, end_date, report_type = 'announce_time'): + raise 'not implemented, use get_raw_financial_data instead' + return + + def get_raw_financial_data(this, field_list, stock_list, start_date, end_date, report_type = 'announce_time'): + return _FUNCS_.get_raw_financial_data(field_list, stock_list, start_date, end_date, report_type) + + ### qmt functions - option ### + + def get_option_detail_data(this, optioncode): + return _FUNCS_.get_option_detail_data(optioncode) + + def get_option_undl_data(this, undl_code_ref): + return _FUNCS_.get_option_undl_data(undl_code_ref) + + def get_option_list(this, undl_code,dedate,opttype = "",isavailavle = False): + return _FUNCS_.get_option_list(undl_code, dedate, opttype, isavailavle) + + def get_option_iv(this, opt_code): + return _FUNCS_.get_opt_iv(opt_code, this.request_id) + + def bsm_price(this, optType, targetPrice, strikePrice, riskFree, sigma, days, dividend = 0): + optionType = "" + if(optType.upper() == "C"): + optionType = "CALL" + if(optType.upper() == "P"): + optionType = "PUT" + if(type(targetPrice) == list): + result = [] + for price in targetPrice: + bsmPrice= _FUNCS_.calc_bsm_price(optionType,strikePrice,float(price),riskFree,sigma,days,dividend, this.request_id) + bsmPrice = round(bsmPrice,4) + result.append(bsmPrice) + return result + else: + bsmPrice = _FUNCS_.calc_bsm_price(optionType,strikePrice,targetPrice,riskFree,sigma,days,dividend, this.request_id) + result = round(bsmPrice,4) + return result + + def bsm_iv(this, optType, targetPrice, strikePrice, optionPrice, riskFree, days, dividend = 0): + if(optType.upper() == "C"): + optionType = "CALL" + if(optType.upper() == "P"): + optionType = "PUT" + result = _FUNCS_.calc_bsm_iv(optionType, strikePrice, targetPrice, optionPrice, riskFree, days, dividend, this.request_id) + result = round(result,4) + return result + + ### qmt functions - static ### + + def get_instrument_detail(this, stock_code = '', iscomplete = False): + if not stock_code: + stock_code = this.stock_code + return _FUNCS_.get_instrument_detail(stock_code, iscomplete) + + get_instrumentdetail = get_instrument_detail # compat + + def get_trading_dates(this, stock_code, start_date, end_date, count, period = '1d'): + return _FUNCS_.get_trading_dates(stock_code, start_date, end_date, count, period) + + def get_stock_list_in_sector(this, sector_name): + return _FUNCS_.get_stock_list_in_sector(sector_name) + + def passorder( + this + , opType, orderType, accountid + , orderCode, prType, modelprice, volume + , strategyName, quickTrade, userOrderId + ): + return _FUNCS_._passorder_impl( + opType, orderType, accountid + , orderCode, prType, modelprice, volume + , strategyName, quickTrade, userOrderId + , this.barpos, this.get_bar_timetag() + , "passorder", "" + , this.request_id + ) + + def set_auto_trade_callback(this, enable): + return _FUNCS_._set_auto_trade_callback_impl(enable, this.request_id) + + def set_account(this, accountid): + return _FUNCS_.set_account(accountid, this.request_id) + + def get_his_st_data(this, stock_code): + return _FUNCS_.get_his_st_data(stock_code) + + ### private ### + + def trade_callback(this, type, result, error): + class DetailData(object): + def __init__(self, _obj): + if _obj: + self.__dict__.update(_obj) + + if type == 'accountcallback': + this.account_callback(DetailData(result)) + elif type == 'ordercallback': + this.order_callback(DetailData(result)) + elif type == 'dealcallback': + this.deal_callback(DetailData(result)) + elif type == 'positioncallback': + this.position_callback(DetailData(result)) + elif type == 'ordererrorcallback': + this.orderError_callback(DetailData(result.get('passorderArg')), result.get('strMsg')) + + return + + def register_callback(this, reqid): + _FUNCS_.register_external_resp_callback(reqid, this.trade_callback) + return + + def get_callback_cache(this, type): + return _FUNCS_._get_callback_cache_impl(type, this.request_id) + + def get_ipo_info(this, start_time = '', end_time = ''): + return _FUNCS_.get_ipo_info(start_time, end_time) + + def get_backtest_index(this, path): + _FUNCS_.get_backtest_index(this.request_id, path) + + def get_group_result(this, path, fields): + _FUNCS_.get_group_result(this.request_id, path, fields) + + def is_suspended_stock(this, stock_code, type): + if this.barpos > len(this.timelist): + return False + + if type == 1 or len(this.timelist) == 0: + inst = this.get_instrument_detail(stock_code) + return inst.get('InstrumentStatus', 0) >= 1 + + return _FUNCS_.is_suspended_stock(stock_code, this.period, this.timelist[this.barpos]) diff --git a/src/xtquant/qmttools/functions.py b/src/xtquant/qmttools/functions.py new file mode 100644 index 0000000..c43a322 --- /dev/null +++ b/src/xtquant/qmttools/functions.py @@ -0,0 +1,537 @@ +#coding:utf-8 + +import datetime as _DT_ + +from xtquant import xtdata +from xtquant import xtbson as _BSON_ + +def datetime_to_timetag(timelabel, format = ''): + ''' + timelabel: str '20221231' '20221231235959' + format: str '%Y%m%d' '%Y%m%d%H%M%S' + return: int 1672502399000 + ''' + if not format: + format = '%Y%m%d' if len(timelabel) == 8 else '%Y%m%d%H%M%S' + return _DT_.datetime.strptime(timelabel, format).timestamp() * 1000 + +def timetag_to_datetime(timetag, format = ''): + ''' + timetag: int 1672502399000 + format: str '%Y%m%d' '%Y%m%d%H%M%S' + return: str '20221231' '20221231235959' + ''' + if not format: + format = '%Y%m%d' if timetag % 86400000 == 57600000 else '%Y%m%d%H%M%S' + return _DT_.datetime.fromtimestamp(timetag / 1000).strftime(format) + +def fetch_ContextInfo(): + import sys + frame = sys._getframe() + while (frame): + loc = list(frame.f_locals.values()) + for val in loc: + if type(val).__name__ == "ContextInfo": + return val + frame = frame.f_back + return None + +def subscribe_quote(stock_code, period, dividend_type, count = 0, result_type = '', callback = None): + return xtdata.subscribe_quote(stock_code, period, '', '', count, callback) + +def subscribe_whole_quote(code_list, callback = None): + return xtdata.subscribe_whole_quote(code_list, callback) + +def unsubscribe_quote(subscribe_id): + return xtdata.unsubscribe_quote(subscribe_id) + +def get_market_data( + fields = [], stock_code = [], start_time = '', end_time = '' + , skip_paused = True, period = '', dividend_type = '', count = -1 +): + res = {} + if period == 'tick': + refixed = False + if count == -2: + refixed = True + count = 1 + if 'quoter' not in fields: + return xtdata.get_market_data_ori( + field_list=fields, stock_list=stock_code, period=period + , start_time=start_time, end_time=end_time, count=count + , dividend_type=dividend_type, fill_data=skip_paused + ) + + fields = [] + data = xtdata.get_market_data_ori( + field_list=fields, stock_list=stock_code, period=period + , start_time=start_time, end_time=end_time, count=count + , dividend_type=dividend_type, fill_data=skip_paused + ) + fields = ['quoter'] + + import pandas as pd + + stime_fmt = '%Y%m%d' if period == '1d' else '%Y%m%d%H%M%S' + for stock in data: + pd_data = pd.DataFrame(data[stock]) + pd_data['stime'] = [timetag_to_datetime(t, stime_fmt) for t in pd_data['time']] + pd_data.index = pd.to_datetime((pd_data['time'] + 28800000) * 1000000) + ans = {} + for j, timetag in enumerate(pd_data['time']): + d_map = {} + for key in pd_data: + d_map[key] = pd_data[key][j] + ans[str(pd_data.index[j])] = {} + ans[str(pd_data.index[j])]['quoter'] = d_map + res[stock] = ans + + oriData = res + # if not pd_data.empty: + # if count > 0: + # return list(pd_data.T.to_dict().values()) + # return pd_data.iloc[-1].to_dict() + # return {} + if refixed: + count = -2 + else: + refixed = False + if count == -2: + refixed = True + count = 1 + index, data = xtdata.get_market_data_ori( + field_list=fields, stock_list=stock_code, period=period + , start_time=start_time, end_time=end_time, count=count + , dividend_type=dividend_type, fill_data=skip_paused + ) + if refixed: + end_time = '' + count = -1 + for i, stock in enumerate(index[0]): + ans = {} + for j, timetag in enumerate(index[1]): + d_map = {} + for key in data: + d_map[key] = data[key][i][j] + ans[timetag] = d_map + res[stock] = ans + oriData = res + + resultDict = {} + for code in oriData: + for timenode in oriData[code]: + values = [] + for field in fields: + values.append(oriData[code][timenode][field]) + key = code + timenode + resultDict[key] = values + + if len(fields) == 1 and len(stock_code) <= 1 and ( + (start_time == '' and end_time == '') or start_time == end_time) and (count == -1 or count == -2): + # if resultDict: + # keys = list(resultDict.keys()) + # if resultDict[keys[-1]]: + # return resultDict[keys[-1]] + for key in resultDict: + return resultDict[key][0] + return -1 + import numpy as np + import pandas as pd + if len(stock_code) <= 1 and start_time == '' and end_time == '' and (count == -1 or count == -2): + for key in resultDict: + result = pd.Series(resultDict[key], index=fields) + return result + if len(stock_code) > 1 and start_time == '' and end_time == '' and (count == -1 or count == -2): + values = [] + for code in stock_code: + if code in oriData: + if not oriData[code]: + values.append([np.nan]) + for timenode in oriData[code]: + key = code + timenode + values.append(resultDict[key]) + else: + values.append([np.nan]) + result = pd.DataFrame(values, index=stock_code, columns=fields) + return result + if len(stock_code) <= 1 and ((start_time != '' or end_time != '') or count >= 0): + values = [] + times = [] + for code in oriData: + for timenode in oriData[code]: + key = code + timenode + times.append(timenode) + values.append(resultDict[key]) + result = pd.DataFrame(values, index=times, columns=fields) + return result + if len(stock_code) > 1 and ((start_time != '' or end_time != '') or count >= 0): + values = {} + for code in stock_code: + times = [] + value = [] + if code in oriData: + for timenode in oriData[code]: + key = code + timenode + times.append(timenode) + value.append(resultDict[key]) + values[code] = pd.DataFrame(value, index=times, columns=fields) + try: + result = pd.Panel(values) + return result + except: + return oriData + return + +def get_market_data_ex( + fields = [], stock_code = [], period = '' + , start_time = '', end_time = '', count = -1 + , dividend_type = '', fill_data = True, subscribe = True +): + res = xtdata.get_market_data_ex( + field_list = fields, stock_list = stock_code, period = period + , start_time = start_time, end_time = end_time, count = count + , dividend_type = dividend_type, fill_data = fill_data + ) + for stock in res: + res[stock].index.name = "stime" + return res + +def get_full_tick(stock_code): + return xtdata.get_full_tick(stock_code) + +def get_divid_factors(stock_code, date = None): + client = xtdata.get_client() + if date: + data = client.get_divid_factors(stock_code, date, date) + else: + data = client.get_divid_factors(stock_code, '19700101', '20380119') + + res = {} + for value in data.values(): + res[value['time']] = list(value.values())[1:] + return res + +def download_history_data(stockcode, period, startTime, endTime): + return xtdata.download_history_data(stockcode, period, startTime, endTime) + +def get_raw_financial_data(field_list, stock_list, start_date, end_date, report_type = 'announce_time'): + client = xtdata.get_client() + data = client.get_financial_data(stock_list, field_list, start_date, end_date, report_type) + + import time + res = {} + for stock in data: + stock_data = data[stock] + res[stock] = {} + + for field in field_list: + fs = field.split('.') + table_data = stock_data.get(fs[0]) + + if not table_data: + continue + + ans = {} + for row_data in table_data: + if row_data.get(report_type, None) == None: + continue + date = time.strftime('%Y%m%d', time.localtime(row_data[report_type] / 1000)) + if start_date == '' or start_date <= date: + if end_date == '' or date <= end_date: + ans[int(row_data[report_type])] = row_data[fs[1]] + res[stock][field] = ans + return res + +#def download_financial_data(stock_list, table_list): #暂不提供 +# return xtdata.download_financial_data(stock_list, table_list) + +def get_instrument_detail(stock_code, iscomplete = False): + return xtdata.get_instrument_detail(stock_code, iscomplete) + +#def get_instrument_type(stock_code): #暂不提供 +# return xtdata.get_instrument_type(stock_code) + +def get_trading_dates(stock_code, start_date, end_date, count = -1, period = '1d'): + if period != '1d': + return [] + market = stock_code.split('.')[0] + trade_dates = xtdata.get_trading_dates(market, start_date, end_date) + if count == -1: + return trade_dates + if count > 0: + return trade_dates[-count:] + return [] + +def get_stock_list_in_sector(sector_name): + return xtdata.get_stock_list_in_sector(sector_name) + +def download_sector_data(): + return xtdata.download_sector_data() + +download_sector_weight = download_sector_data #compat + +def get_his_st_data(stock_code): + return xtdata.get_his_st_data(stock_code) + + +def _passorder_impl( + optype, ordertype, accountid + , ordercode, prtype, modelprice, volume + , strategyName, quickTrade, userOrderId + , barpos, bartime, func, algoName + , requestid +): + data = {} + + data['optype'] = optype + data['ordertype'] = ordertype + data['accountid'] = accountid + data['ordercode'] = ordercode + data['prtype'] = prtype + data['modelprice'] = modelprice + data['volume'] = volume + data['strategyname'] = strategyName + data['remark'] = userOrderId + data['quicktrade'] = quickTrade + data['func'] = func + data['algoname'] = algoName + data['barpos'] = barpos + data['bartime'] = bartime + + client = xtdata.get_client() + client.callFormula(requestid, 'passorder', _BSON_.BSON.encode(data)) + return + + +def passorder( + opType, orderType, accountid + , orderCode, prType, modelprice, volume + , strategyName, quickTrade, userOrderId + , C +): + return C.passorder( + opType, orderType, accountid + , orderCode, prType, modelprice, volume + , strategyName, quickTrade, userOrderId + ) + + +def get_trade_detail_data(accountid, accounttype, datatype, strategyname = ''): + data = {} + + C = fetch_ContextInfo() + if C is None: + raise Exception("contextinfo could not be found in the stack") + request_id = C.request_id + + data['accountid'] = accountid + data['accounttype'] = accounttype + data['datatype'] = datatype + data['strategyname'] = strategyname + + client = xtdata.get_client() + result_bson = client.callFormula(request_id, 'gettradedetail', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + + class DetailData(object): + def __init__(self, _obj): + if _obj: + self.__dict__.update(_obj) + + out = [] + if not result: + return out + + for item in result.get('result'): + out.append(DetailData(item)) + return out + +def register_external_resp_callback(reqid, callback): + client = xtdata.get_client() + + status = [False, 0, 1, ''] + + def on_callback(type, data, error): + try: + result = _BSON_.BSON.decode(data) + callback(type, result, error) + return True + except: + status[0] = True + status[3] = 'exception' + return True + + client.register_external_resp_callback(reqid, on_callback) + +def _set_auto_trade_callback_impl(enable, requestid): + data = {} + data['enable'] = enable + + client = xtdata.get_client() + client.callFormula(requestid, 'setautotradecallback', _BSON_.BSON.encode(data)) + return + +def set_auto_trade_callback(C,enable): + return C.set_auto_trade_callback(enable) + +def set_account(accountid, requestid): + data = {} + data['accountid'] = accountid + + client = xtdata.get_client() + client.callFormula(requestid, 'setaccount', _BSON_.BSON.encode(data)) + return + +def _get_callback_cache_impl(type, requestid): + data = {} + + data['type'] = type + + client = xtdata.get_client() + result_bson = client.callFormula(requestid, 'getcallbackcache', _BSON_.BSON.encode(data)) + return _BSON_.BSON.decode(result_bson) + +def get_account_callback_cache(data, C): + data = C.get_callback_cache("account").get('') + return + +def get_order_callback_cache(data, C): + data = C.get_callback_cache("order") + return + +def get_deal_callback_cache(data, C): + data = C.get_callback_cache("deal") + return + +def get_position_callback_cache(data, C): + data = C.get_callback_cache("position") + return + +def get_ordererror_callback_cache(data, C): + data = C.get_callback_cache("ordererror") + return + +def get_option_detail_data(stock_code): + return xtdata.get_option_detail_data(stock_code) + +def get_option_undl_data(undl_code_ref): + return xtdata.get_option_undl_data(undl_code_ref) + +def get_option_list(undl_code,dedate,opttype = "",isavailavle = False): + return xtdata.get_option_list(undl_code, dedate, opttype, isavailavle) + +def get_opt_iv(opt_code, requestid): + data = {} + data['code'] = opt_code + + client = xtdata.get_client() + result_bson = client.callFormula(requestid, 'getoptiv', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + + out = result.get('result', 0) + return out + +def calc_bsm_price(optionType,strikePrice, targetPrice, riskFree, sigma, days, dividend, requestid): + data = {} + data['optiontype'] = optionType + data['strikeprice'] = strikePrice + data['targetprice'] = targetPrice + data['riskfree'] = riskFree + data['sigma'] = sigma + data['days'] = days + data['dividend'] = dividend + + client = xtdata.get_client() + result_bson = client.callFormula(requestid, 'calcbsmprice', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + + out = result.get('result', 0) + return out + +def calc_bsm_iv(optionType, strikePrice, targetPrice, optionPrice, riskFree, days, dividend, requestid): + data = {} + data['optiontype'] = optionType + data['strikeprice'] = strikePrice + data['targetprice'] = targetPrice + data['optionprice'] = optionPrice + data['riskfree'] = riskFree + data['days'] = days + data['dividend'] = dividend + + client = xtdata.get_client() + result_bson = client.callFormula(requestid, 'calcbsmiv', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + + out = result.get('result', 0) + return out + +def get_ipo_info(start_time, end_time): + return xtdata.get_ipo_info(start_time, end_time) + +def get_backtest_index(requestid, path): + import os + path = os.path.abspath(path) + if not os.path.exists(path): + os.makedirs(path, exist_ok = True) + + data = {'savePath': path} + client = xtdata.get_client() + bresult = client.callFormula(requestid, 'backtestresult', _BSON_.BSON.encode(data)) + return _BSON_.BSON.decode(bresult) + +def get_group_result(requestid, path, fields): + import os + path = os.path.abspath(path) + if not os.path.exists(path): + os.makedirs(path, exist_ok = True) + + data = {'savePath': path, 'fields': fields} + client = xtdata.get_client() + bresult = client.callFormula(requestid, 'groupresult', _BSON_.BSON.encode(data)) + return _BSON_.BSON.decode(bresult) + +def subscribe_formula(formula_name, stock_code, period, start_time = "", end_time = "", count=-1, dividend_type = "none", extend_params = {}, callback = None): + return xtdata.subscribe_formula(formula_name, stock_code, period, start_time, end_time, count, dividend_type, extend_params, callback) + +def call_formula_batch(formula_names, stock_codes, period, start_time = "", end_time = "", count=-1, dividend_type = "none", extend_params = []): + import copy + params = [] + for name in formula_names: + for stock in stock_codes: + param = { + 'formulaname': name, 'stockcode': stock, 'period': period + , 'starttime': start_time, 'endtime': end_time, 'count': count + , 'dividendtype': dividend_type, 'extendparam': {} + , 'create': True, 'datademand': 0 + } + + if extend_params: + for extend in extend_params: + param['extendparam'] = extend + params.append(copy.deepcopy(param)) + else: + params.append(param) + + client = xtdata.get_client() + result = client.commonControl( + 'callformulabatch' + , _BSON_.BSON.encode( + {"params": params} + ) + ) + result = _BSON_.BSON.decode(result) + return result.get("result", {}) + +def is_suspended_stock(stock_code, period, timetag): + client = xtdata.get_client() + + result = client.commonControl( + 'issuspendedstock' + , _BSON_.BSON.encode({ + "stockcode": stock_code + , "period": period + , "timetag": timetag + }) + ) + result = _BSON_.BSON.decode(result) + return result.get('result', True) diff --git a/src/xtquant/qmttools/stgentry.py b/src/xtquant/qmttools/stgentry.py new file mode 100644 index 0000000..7a7501d --- /dev/null +++ b/src/xtquant/qmttools/stgentry.py @@ -0,0 +1,73 @@ +#coding:utf-8 + +from .functions import * + + +def run_file(user_script, param = {}): + import os, sys, time, types + from .contextinfo import ContextInfo + from .stgframe import StrategyLoader + + pypath = param.get('pythonpath') + if pypath: + lib_search = [os.path.abspath(p) for p in pypath.split(';')] + sys.path = lib_search + [p for p in sys.path if p not in lib_search] + + user_module = compile(open(user_script, 'rb').read(), user_script, 'exec', optimize = 2) + #print({'user_module': user_module}) + + try: + pywentrance = param.get('pywentrance', '') + user_variable = compile(open(os.path.join(pywentrance, "..", "user_config.py"), "rb").read(), + "user_config.py", 'exec', optimize=2) + exec(user_variable, globals()) + except Exception as e: + pass + + exec(user_module, globals()) + + _C = ContextInfo() + _C._param = param + _C.user_script = user_script + + def try_set_func(C, func_name): + func = globals().get(func_name) + if func: + C.__setattr__(func_name, types.MethodType(func, C)) + return + + try_set_func(_C, 'init') + try_set_func(_C, 'after_init') + try_set_func(_C, 'handlebar') + try_set_func(_C, 'on_backtest_finished') + try_set_func(_C, 'stop') + + try_set_func(_C, 'account_callback') + try_set_func(_C, 'order_callback') + try_set_func(_C, 'deal_callback') + try_set_func(_C, 'position_callback') + try_set_func(_C, 'orderError_callback') + + loader = StrategyLoader() + + loader.C = _C + + loader.init() + loader.start() + loader.run() + loader.stop() + loader.shutdown() + + mode = _C.trade_mode + if mode == 'backtest': + from .stgframe import BackTestResult + return BackTestResult(_C.request_id) + + if mode in ['simulation', 'trading']: + while True: + time.sleep(2) + from .stgframe import Result + return Result(_C.request_id) + + return None + diff --git a/src/xtquant/qmttools/stgframe.py b/src/xtquant/qmttools/stgframe.py new file mode 100644 index 0000000..d46e1b7 --- /dev/null +++ b/src/xtquant/qmttools/stgframe.py @@ -0,0 +1,312 @@ +#coding:utf-8 + +from xtquant import xtdata +from xtquant import xtbson as _BSON_ + + +class StrategyLoader: + def __init__(this): + this.C = None + this.main_quote_subid = 0 + return + + def init(this): + import os, uuid + from xtquant import xtdata_config + + C = this.C + + C.guid = C._param.get('guid', str(uuid.uuid4())) + C.request_id = C._param.get('requestid', '') + "_" + C.guid + C.quote_mode = C._param.get('quote_mode', 'history') #'realtime' 'history' 'all' + C.trade_mode = C._param.get('trade_mode', 'backtest') #'simulation' 'trading' 'backtest' + C.do_back_test = 1 if C.trade_mode == 'backtest' else 0 + + C.title = C._param.get('title', '') + if not C.title: + C.title = os.path.basename(os.path.abspath(C.user_script).replace('.py', '')) + + C.stock_code = C._param.get('stock_code', '') + C.period = C._param.get('period', '') + C.start_time = C._param.get('start_time', '') + C.end_time = C._param.get('end_time', '') + C.start_time_str = '' + C.end_time_str = '' + if type(C.period) == int: + C.period = { + 0 :'tick' + , 60000 :'1m' + , 180000 :'3m' + , 300000 :'5m' + , 600000 :'10m' + , 900000 :'15m' + , 1800000 :'30m' + , 3600000 :'1h' + , 86400000 :'1d' + , 604800000 :'1w' + , 2592000000 :'1mon' + , 7776000000 :'1q' + , 15552000000 :'1hy' + , 31536000000 :'1y' + }.get(C.period, '') + C.dividend_type = C._param.get('dividend_type', 'none') + + backtest = C._param.get('backtest', {}) + if backtest: + C.asset = backtest.get('asset', 1000000.0) + C.margin_ratio = backtest.get('margin_ratio', 0.05) + C.slippage_type = backtest.get('slippage_type', 2) + C.slippage = backtest.get('slippage', 0.0) + C.max_vol_rate = backtest.get('max_vol_rate', 0.0) + C.comsisson_type = backtest.get('comsisson_type', 0) + C.open_tax = backtest.get('open_tax', 0.0) + C.close_tax = backtest.get('close_tax', 0.0) + C.min_commission = backtest.get('min_commission', 0.0) + C.open_commission = backtest.get('open_commission', 0.0) + C.close_commission = backtest.get('close_commission', 0.0) + C.close_today_commission = backtest.get('close_today_commission', 0.0) + C.benchmark = backtest.get('benchmark', '000300.SH') + + xtdata_config.client_guid = C._param.get('clientguid') + + from .functions import datetime_to_timetag + + if C.start_time: + C.start_time_str = C.start_time.replace('-', '').replace(' ', '').replace(':', '') + C.start_time_num = int(datetime_to_timetag(C.start_time_str)) + if C.end_time: + C.end_time_str = C.end_time.replace('-', '').replace(' ', '').replace(':', '') + C.end_time_num = int(datetime_to_timetag(C.end_time_str)) + + if 1: #register + this.create_formula() + + C.init() + + if 1: #fix param + if '.' in C.stock_code: + pos = C.stock_code.rfind('.') + C.stockcode = C.stock_code[0:pos] + C.market = C.stock_code[pos + 1:].upper() + + if C.stockcode and C.market: + C.stock_code = C.stockcode + '.' + C.market + C.period = C.period.lower() + + if C.stockcode == "" or C.market == "": + raise Exception("股票代码为空") + + if 1: #create view + if not C._param.get('requestid'): + this.create_view(C.title) + + if 1: #post initcomplete + init_result = {} + + config_ar = ['request_id', 'quote_mode', 'trade_mode'] + init_result['config'] = {ar: C.__getattribute__(ar) for ar in config_ar} + + quote_ar = [ + 'stock_code', 'stockcode', 'market', 'period' + , 'start_time', 'end_time', 'dividend_type' + ] + init_result['quote'] = {ar: C.__getattribute__(ar) for ar in quote_ar} + + trade_ar = [] + init_result['trade'] = {ar: C.__getattribute__(ar) for ar in trade_ar} + + backtest_ar = [ + 'start_time', 'end_time', 'asset', 'margin_ratio', 'slippage_type', 'slippage' + , 'max_vol_rate', 'comsisson_type', 'open_tax', 'close_tax' + , 'min_commission', 'open_commission', 'close_commission' + , 'close_today_commission', 'benchmark' + ] + init_result['backtest'] = {ar: C.__getattribute__(ar) for ar in backtest_ar} + + import datetime as dt + if C.start_time: + C.start_time_str = C.start_time.replace('-', '').replace(' ', '').replace(':', '') + C.start_time_num = int(datetime_to_timetag(C.start_time_str)) + init_result['backtest']['start_time'] = dt.datetime.fromtimestamp(C.start_time_num / 1000).strftime('%Y-%m-%d %H:%M:%S') + if C.end_time: + C.end_time_str = C.end_time.replace('-', '').replace(' ', '').replace(':', '') + C.end_time_num = int(datetime_to_timetag(C.end_time_str)) + init_result['backtest']['end_time'] = dt.datetime.fromtimestamp(C.end_time_num / 1000).strftime('%Y-%m-%d %H:%M:%S') + + this.call_formula('initcomplete', init_result) + + if 1: + this.C.register_callback(0) + return + + def shutdown(this): + return + + def start(this): + import time + C = this.C + + if C.quote_mode in ['history', 'all']: + this.load_main_history() + + C.after_init() + this.run_bar() + + if C.quote_mode in ['realtime', 'all']: + this.load_main_realtime() + + if C.trade_mode == 'backtest': + time.sleep(0.4) + C.on_backtest_finished() + return + + def stop(this): + if this.main_quote_subid: + xtdata.unsubscribe_quote(this.main_quote_subid) + + this.C.stop() + return + + def run(this): + C = this.C + + if C.quote_mode in ['realtime', 'all']: + xtdata.run() + return + + def load_main_history(this): + C = this.C + + data = xtdata.get_market_data_ex( + field_list = ['time'], stock_list = [C.stock_code], period = C.period + , start_time = '', end_time = '', count = -1 + , fill_data = False + ) + + C.timelist = list(data[C.stock_code]['time']) + return + + def load_main_realtime(this): + C = this.C + + def on_data(data): + data = data.get(C.stock_code, []) + if data: + tt = data[-1]['time'] + this.on_main_quote(tt) + return + + this.main_quote_subid = xtdata.subscribe_quote( + stock_code = C.stock_code, period = C.period + , start_time = '', end_time = '', count = 0 + , callback = on_data + ) + return + + def on_main_quote(this, timetag): + if not this.C.timelist or this.C.timelist[-1] < timetag: + this.C.timelist.append(timetag) + this.run_bar() + return + + def run_bar(this): + C = this.C + + push_timelist = [] + bar_timelist = [] + + for i in range(max(C.lastrunbarpos, 0), len(C.timelist)): + C.barpos = i + bartime = C.timelist[i] + + push_timelist.append(bartime) + bar_timelist.append(bartime) + + if ( + not C.start_time_num or C.start_time_num <= bartime + ) and ( + not C.end_time_num or bartime <= C.end_time_num + ): + this.call_formula('runbar', {'timelist': bar_timelist}) + bar_timelist = [] + + C.handlebar() + + C.lastrunbarpos = i + + if bar_timelist: + this.call_formula('runbar', {'timelist': bar_timelist}) + bar_timelist = [] + + if 1: + push_result = {} + push_result['timelist'] = push_timelist + push_result['outputs'] = C.push_result + C.push_result = {} + this.call_formula('index', push_result) + return + + def create_formula(this, callback = None): + C = this.C + client = xtdata.get_client() + + data = { + 'formulaname': '', 'stockcode': C.stock_code, 'period': C.period + , 'starttime': C.start_time_str, 'endtime': C.end_time_str, 'count': 1 + , 'dividendtype': C.dividend_type, 'create': True, 'pyrunmode': 1 + , 'title': C.title + , 'historycallback': 1 if callback else 0 + , 'realtimecallback': 1 if callback else 0 + } + + client.subscribeFormula(C.request_id, _BSON_.BSON.encode(data), callback) + + def call_formula(this, func, data): + C = this.C + client = xtdata.get_client() + bresult = client.callFormula(C.request_id, func, _BSON_.BSON.encode(data)) + return _BSON_.BSON.decode(bresult) + + def create_view(this, title): + C = this.C + client = xtdata.get_client() + data = {'viewtype': 0,'title':title, 'groupid':-1,'stockcode':C.market + C.stockcode,'period':C.period,'dividendtype':C.dividend_type} + client.createView(C.request_id, _BSON_.BSON.encode(data)) + return + + +class BackTestResult: + def __init__(self, request_id): + self.request_id = request_id + + def get_backtest_index(self): + import os, pandas as pd, uuid + from .functions import get_backtest_index + + path = f'{os.getenv("TEMP")}/backtest_{uuid.uuid4()}' + get_backtest_index(self.request_id, path) + + ret = pd.read_csv(f'{path}/backtestindex.csv', encoding = 'utf-8') + import shutil + shutil.rmtree(f'{path}') + return ret + + def get_group_result(self, fields = []): + import os, pandas as pd, uuid + from .functions import get_group_result + + path = f'{os.getenv("TEMP")}/backtest_{uuid.uuid4()}' + get_group_result(self.request_id, path, fields) + if not fields: + fields = ['order', 'deal', 'position'] + res = {} + for f in fields: + res[f] = pd.read_csv(f'{path}/{f}.csv', encoding = 'utf-8') + import shutil + shutil.rmtree(path) + return res + +class RealTimeResult: + def __init__(self, request_id): + self.request_id = request_id + diff --git a/src/xtquant/ssleay32.dll b/src/xtquant/ssleay32.dll new file mode 100644 index 0000000000000000000000000000000000000000..873ef97272bc84d22f7c83642ed5e0cc4f340463 GIT binary patch literal 377856 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 H>fiqXh}N|- literal 0 HcmV?d00001 diff --git a/src/xtquant/vcruntime140.dll b/src/xtquant/vcruntime140.dll new file mode 100644 index 0000000000000000000000000000000000000000..690f3fb5ad1626fcd05de084d835831670ea2047 GIT binary patch literal 87864 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℞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 literal 0 HcmV?d00001 diff --git a/src/xtquant/xtbson/__init__.py b/src/xtquant/xtbson/__init__.py new file mode 100644 index 0000000..3af27fe --- /dev/null +++ b/src/xtquant/xtbson/__init__.py @@ -0,0 +1,7 @@ + +import sys + +if sys.version_info.major == 3 and sys.version_info.minor == 6: + from .bson36 import * +else: + from .bson37 import * diff --git a/src/xtquant/xtbson/bson36/__init__.py b/src/xtquant/xtbson/bson36/__init__.py new file mode 100644 index 0000000..be3eb7b --- /dev/null +++ b/src/xtquant/xtbson/bson36/__init__.py @@ -0,0 +1,1182 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BSON (Binary JSON) encoding and decoding. + +The mapping from Python types to BSON types is as follows: + +======================================= ============= =================== +Python Type BSON Type Supported Direction +======================================= ============= =================== +None null both +bool boolean both +int [#int]_ int32 / int64 py -> bson +`bson.int64.Int64` int64 both +float number (real) both +str string both +list array both +dict / `SON` object both +datetime.datetime [#dt]_ [#dt2]_ date both +`bson.regex.Regex` regex both +compiled re [#re]_ regex py -> bson +`bson.binary.Binary` binary both +`bson.objectid.ObjectId` oid both +`bson.dbref.DBRef` dbref both +None undefined bson -> py +`bson.code.Code` code both +str symbol bson -> py +bytes [#bytes]_ binary both +======================================= ============= =================== + +.. [#int] A Python int will be saved as a BSON int32 or BSON int64 depending + on its size. A BSON int32 will always decode to a Python int. A BSON + int64 will always decode to a :class:`~bson.int64.Int64`. +.. [#dt] datetime.datetime instances will be rounded to the nearest + millisecond when saved +.. [#dt2] all datetime.datetime instances are treated as *naive*. clients + should always use UTC. +.. [#re] :class:`~bson.regex.Regex` instances and regular expression + objects from ``re.compile()`` are both saved as BSON regular expressions. + BSON regular expressions are decoded as :class:`~bson.regex.Regex` + instances. +.. [#bytes] The bytes type is encoded as BSON binary with + subtype 0. It will be decoded back to bytes. +""" + +import calendar +import datetime +import itertools +import platform +import re +import struct +import sys +import uuid +from codecs import utf_8_decode as _utf_8_decode +from codecs import utf_8_encode as _utf_8_encode +from collections import abc as _abc + +from .binary import ( + ALL_UUID_SUBTYPES, + CSHARP_LEGACY, + JAVA_LEGACY, + OLD_UUID_SUBTYPE, + STANDARD, + UUID_SUBTYPE, + Binary, + UuidRepresentation, +) +from .code import Code +from .codec_options import DEFAULT_CODEC_OPTIONS, CodecOptions, _raw_document_class +from .dbref import DBRef +from .decimal128 import Decimal128 +from .errors import InvalidBSON, InvalidDocument, InvalidStringData +from .int64 import Int64 +from .max_key import MaxKey +from .min_key import MinKey +from .objectid import ObjectId +from .regex import Regex +from .son import RE_TYPE, SON +from .timestamp import Timestamp +from .tz_util import utc + +try: + from . import _cbson + + _USE_C = True +except ImportError: + _USE_C = False + + +EPOCH_AWARE = datetime.datetime.fromtimestamp(0, utc) +EPOCH_NAIVE = datetime.datetime.utcfromtimestamp(0) + + +BSONNUM = b"\x01" # Floating point +BSONSTR = b"\x02" # UTF-8 string +BSONOBJ = b"\x03" # Embedded document +BSONARR = b"\x04" # Array +BSONBIN = b"\x05" # Binary +BSONUND = b"\x06" # Undefined +BSONOID = b"\x07" # ObjectId +BSONBOO = b"\x08" # Boolean +BSONDAT = b"\x09" # UTC Datetime +BSONNUL = b"\x0A" # Null +BSONRGX = b"\x0B" # Regex +BSONREF = b"\x0C" # DBRef +BSONCOD = b"\x0D" # Javascript code +BSONSYM = b"\x0E" # Symbol +BSONCWS = b"\x0F" # Javascript code with scope +BSONINT = b"\x10" # 32bit int +BSONTIM = b"\x11" # Timestamp +BSONLON = b"\x12" # 64bit int +BSONDEC = b"\x13" # Decimal128 +BSONMIN = b"\xFF" # Min key +BSONMAX = b"\x7F" # Max key + + +_UNPACK_FLOAT_FROM = struct.Struct("= obj_end: + raise InvalidBSON("invalid object length") + # If this is the top-level document, validate the total size too. + if position == 0 and obj_size != obj_end: + raise InvalidBSON("invalid object length") + return obj_size, end + + +def _get_object(data, view, position, obj_end, opts, dummy): + """Decode a BSON subdocument to opts.document_class or bson.dbref.DBRef.""" + obj_size, end = _get_object_size(data, position, obj_end) + if _raw_document_class(opts.document_class): + return (opts.document_class(data[position : end + 1], opts), position + obj_size) + + obj = _elements_to_dict(data, view, position + 4, end, opts) + + position += obj_size + # If DBRef validation fails, return a normal doc. + if ( + isinstance(obj.get("$ref"), str) + and "$id" in obj + and isinstance(obj.get("$db"), (str, type(None))) + ): + return (DBRef(obj.pop("$ref"), obj.pop("$id", None), obj.pop("$db", None), obj), position) + return obj, position + + +def _get_array(data, view, position, obj_end, opts, element_name): + """Decode a BSON array to python list.""" + size = _UNPACK_INT_FROM(data, position)[0] + end = position + size - 1 + if data[end] != 0: + raise InvalidBSON("bad eoo") + + position += 4 + end -= 1 + result = [] + + # Avoid doing global and attribute lookups in the loop. + append = result.append + index = data.index + getter = _ELEMENT_GETTER + decoder_map = opts.type_registry._decoder_map + + while position < end: + element_type = data[position] + # Just skip the keys. + position = index(b"\x00", position) + 1 + try: + value, position = getter[element_type]( + data, view, position, obj_end, opts, element_name + ) + except KeyError: + _raise_unknown_type(element_type, element_name) + + if decoder_map: + custom_decoder = decoder_map.get(type(value)) + if custom_decoder is not None: + value = custom_decoder(value) + + append(value) + + if position != end + 1: + raise InvalidBSON("bad array length") + return result, position + 1 + + +def _get_binary(data, view, position, obj_end, opts, dummy1): + """Decode a BSON binary to bson.binary.Binary or python UUID.""" + length, subtype = _UNPACK_LENGTH_SUBTYPE_FROM(data, position) + position += 5 + if subtype == 2: + length2 = _UNPACK_INT_FROM(data, position)[0] + position += 4 + if length2 != length - 4: + raise InvalidBSON("invalid binary (st 2) - lengths don't match!") + length = length2 + end = position + length + if length < 0 or end > obj_end: + raise InvalidBSON("bad binary object length") + + # Convert UUID subtypes to native UUIDs. + if subtype in ALL_UUID_SUBTYPES: + uuid_rep = opts.uuid_representation + binary_value = Binary(data[position:end], subtype) + if ( + (uuid_rep == UuidRepresentation.UNSPECIFIED) + or (subtype == UUID_SUBTYPE and uuid_rep != STANDARD) + or (subtype == OLD_UUID_SUBTYPE and uuid_rep == STANDARD) + ): + return binary_value, end + return binary_value.as_uuid(uuid_rep), end + + # Decode subtype 0 to 'bytes'. + if subtype == 0: + value = data[position:end] + else: + value = Binary(data[position:end], subtype) + + return value, end + + +def _get_oid(data, view, position, dummy0, dummy1, dummy2): + """Decode a BSON ObjectId to bson.objectid.ObjectId.""" + end = position + 12 + return ObjectId(data[position:end]), end + + +def _get_boolean(data, view, position, dummy0, dummy1, dummy2): + """Decode a BSON true/false to python True/False.""" + end = position + 1 + boolean_byte = data[position:end] + if boolean_byte == b"\x00": + return False, end + elif boolean_byte == b"\x01": + return True, end + raise InvalidBSON("invalid boolean value: %r" % boolean_byte) + + +def _get_date(data, view, position, dummy0, opts, dummy1): + """Decode a BSON datetime to python datetime.datetime.""" + return _millis_to_datetime(_UNPACK_LONG_FROM(data, position)[0], opts), position + 8 + + +def _get_code(data, view, position, obj_end, opts, element_name): + """Decode a BSON code to bson.code.Code.""" + code, position = _get_string(data, view, position, obj_end, opts, element_name) + return Code(code), position + + +def _get_code_w_scope(data, view, position, obj_end, opts, element_name): + """Decode a BSON code_w_scope to bson.code.Code.""" + code_end = position + _UNPACK_INT_FROM(data, position)[0] + code, position = _get_string(data, view, position + 4, code_end, opts, element_name) + scope, position = _get_object(data, view, position, code_end, opts, element_name) + if position != code_end: + raise InvalidBSON("scope outside of javascript code boundaries") + return Code(code, scope), position + + +def _get_regex(data, view, position, dummy0, opts, dummy1): + """Decode a BSON regex to bson.regex.Regex or a python pattern object.""" + pattern, position = _get_c_string(data, view, position, opts) + bson_flags, position = _get_c_string(data, view, position, opts) + bson_re = Regex(pattern, bson_flags) + return bson_re, position + + +def _get_ref(data, view, position, obj_end, opts, element_name): + """Decode (deprecated) BSON DBPointer to bson.dbref.DBRef.""" + collection, position = _get_string(data, view, position, obj_end, opts, element_name) + oid, position = _get_oid(data, view, position, obj_end, opts, element_name) + return DBRef(collection, oid), position + + +def _get_timestamp(data, view, position, dummy0, dummy1, dummy2): + """Decode a BSON timestamp to bson.timestamp.Timestamp.""" + inc, timestamp = _UNPACK_TIMESTAMP_FROM(data, position) + return Timestamp(timestamp, inc), position + 8 + + +def _get_int64(data, view, position, dummy0, dummy1, dummy2): + """Decode a BSON int64 to bson.int64.Int64.""" + return Int64(_UNPACK_LONG_FROM(data, position)[0]), position + 8 + + +def _get_decimal128(data, view, position, dummy0, dummy1, dummy2): + """Decode a BSON decimal128 to bson.decimal128.Decimal128.""" + end = position + 16 + return Decimal128.from_bid(data[position:end]), end + + +# Each decoder function's signature is: +# - data: bytes +# - view: memoryview that references `data` +# - position: int, beginning of object in 'data' to decode +# - obj_end: int, end of object to decode in 'data' if variable-length type +# - opts: a CodecOptions +_ELEMENT_GETTER = { + ord(BSONNUM): _get_float, + ord(BSONSTR): _get_string, + ord(BSONOBJ): _get_object, + ord(BSONARR): _get_array, + ord(BSONBIN): _get_binary, + ord(BSONUND): lambda u, v, w, x, y, z: (None, w), # Deprecated undefined + ord(BSONOID): _get_oid, + ord(BSONBOO): _get_boolean, + ord(BSONDAT): _get_date, + ord(BSONNUL): lambda u, v, w, x, y, z: (None, w), + ord(BSONRGX): _get_regex, + ord(BSONREF): _get_ref, # Deprecated DBPointer + ord(BSONCOD): _get_code, + ord(BSONSYM): _get_string, # Deprecated symbol + ord(BSONCWS): _get_code_w_scope, + ord(BSONINT): _get_int, + ord(BSONTIM): _get_timestamp, + ord(BSONLON): _get_int64, + ord(BSONDEC): _get_decimal128, + ord(BSONMIN): lambda u, v, w, x, y, z: (MinKey(), w), + ord(BSONMAX): lambda u, v, w, x, y, z: (MaxKey(), w), +} + + +if _USE_C: + + def _element_to_dict(data, view, position, obj_end, opts): + return _cbson._element_to_dict(data, position, obj_end, opts) + +else: + + def _element_to_dict(data, view, position, obj_end, opts): + """Decode a single key, value pair.""" + element_type = data[position] + position += 1 + element_name, position = _get_c_string(data, view, position, opts) + try: + value, position = _ELEMENT_GETTER[element_type]( + data, view, position, obj_end, opts, element_name + ) + except KeyError: + _raise_unknown_type(element_type, element_name) + + if opts.type_registry._decoder_map: + custom_decoder = opts.type_registry._decoder_map.get(type(value)) + if custom_decoder is not None: + value = custom_decoder(value) + + return element_name, value, position + + +def _raw_to_dict(data, position, obj_end, opts, result): + data, view = get_data_and_view(data) + return _elements_to_dict(data, view, position, obj_end, opts, result) + + +def _elements_to_dict(data, view, position, obj_end, opts, result=None): + """Decode a BSON document into result.""" + if result is None: + result = opts.document_class() + end = obj_end - 1 + while position < end: + key, value, position = _element_to_dict(data, view, position, obj_end, opts) + result[key] = value + if position != obj_end: + raise InvalidBSON("bad object or element length") + return result + + +def _bson_to_dict(data, opts): + """Decode a BSON string to document_class.""" + data, view = get_data_and_view(data) + try: + if _raw_document_class(opts.document_class): + return opts.document_class(data, opts) + _, end = _get_object_size(data, 0, len(data)) + return _elements_to_dict(data, view, 4, end, opts) + except InvalidBSON: + raise + except Exception: + # Change exception type to InvalidBSON but preserve traceback. + _, exc_value, exc_tb = sys.exc_info() + raise InvalidBSON(str(exc_value)).with_traceback(exc_tb) + + +if _USE_C: + _bson_to_dict = _cbson._bson_to_dict + + +_PACK_FLOAT = struct.Struct(">> import collections # From Python standard library. + >>> import bson + >>> from .codec_options import CodecOptions + >>> data = bson.encode({'a': 1}) + >>> decoded_doc = bson.decode(data) + + >>> options = CodecOptions(document_class=collections.OrderedDict) + >>> decoded_doc = bson.decode(data, codec_options=options) + >>> type(decoded_doc) + + + :Parameters: + - `data`: the BSON to decode. Any bytes-like object that implements + the buffer protocol. + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionadded:: 3.9 + """ + if not isinstance(codec_options, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + return _bson_to_dict(data, codec_options) + + +def decode_all(data, codec_options=DEFAULT_CODEC_OPTIONS): + """Decode BSON data to multiple documents. + + `data` must be a bytes-like object implementing the buffer protocol that + provides concatenated, valid, BSON-encoded documents. + + :Parameters: + - `data`: BSON data + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.9 + Supports bytes-like objects that implement the buffer protocol. + + .. versionchanged:: 3.0 + Removed `compile_re` option: PyMongo now always represents BSON regular + expressions as :class:`~bson.regex.Regex` objects. Use + :meth:`~bson.regex.Regex.try_compile` to attempt to convert from a + BSON regular expression to a Python regular expression object. + + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + """ + data, view = get_data_and_view(data) + if not isinstance(codec_options, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + data_len = len(data) + docs = [] + position = 0 + end = data_len - 1 + use_raw = _raw_document_class(codec_options.document_class) + try: + while position < end: + obj_size = _UNPACK_INT_FROM(data, position)[0] + if data_len - position < obj_size: + raise InvalidBSON("invalid object size") + obj_end = position + obj_size - 1 + if data[obj_end] != 0: + raise InvalidBSON("bad eoo") + if use_raw: + docs.append( + codec_options.document_class(data[position : obj_end + 1], codec_options) + ) + else: + docs.append(_elements_to_dict(data, view, position + 4, obj_end, codec_options)) + position += obj_size + return docs + except InvalidBSON: + raise + except Exception: + # Change exception type to InvalidBSON but preserve traceback. + _, exc_value, exc_tb = sys.exc_info() + raise InvalidBSON(str(exc_value)).with_traceback(exc_tb) + + +if _USE_C: + decode_all = _cbson.decode_all + + +def _decode_selective(rawdoc, fields, codec_options): + if _raw_document_class(codec_options.document_class): + # If document_class is RawBSONDocument, use vanilla dictionary for + # decoding command response. + doc = {} + else: + # Else, use the specified document_class. + doc = codec_options.document_class() + for key, value in rawdoc.items(): + if key in fields: + if fields[key] == 1: + doc[key] = _bson_to_dict(rawdoc.raw, codec_options)[key] + else: + doc[key] = _decode_selective(value, fields[key], codec_options) + else: + doc[key] = value + return doc + + +def _convert_raw_document_lists_to_streams(document): + cursor = document.get("cursor") + if cursor: + for key in ("firstBatch", "nextBatch"): + batch = cursor.get(key) + if batch: + stream = b"".join(doc.raw for doc in batch) + cursor[key] = [stream] + + +def _decode_all_selective(data, codec_options, fields): + """Decode BSON data to a single document while using user-provided + custom decoding logic. + + `data` must be a string representing a valid, BSON-encoded document. + + :Parameters: + - `data`: BSON data + - `codec_options`: An instance of + :class:`~bson.codec_options.CodecOptions` with user-specified type + decoders. If no decoders are found, this method is the same as + ``decode_all``. + - `fields`: Map of document namespaces where data that needs + to be custom decoded lives or None. For example, to custom decode a + list of objects in 'field1.subfield1', the specified value should be + ``{'field1': {'subfield1': 1}}``. If ``fields`` is an empty map or + None, this method is the same as ``decode_all``. + + :Returns: + - `document_list`: Single-member list containing the decoded document. + + .. versionadded:: 3.8 + """ + if not codec_options.type_registry._decoder_map: + return decode_all(data, codec_options) + + if not fields: + return decode_all(data, codec_options.with_options(type_registry=None)) + + # Decode documents for internal use. + from .raw_bson import RawBSONDocument + + internal_codec_options = codec_options.with_options( + document_class=RawBSONDocument, type_registry=None + ) + _doc = _bson_to_dict(data, internal_codec_options) + return [ + _decode_selective( + _doc, + fields, + codec_options, + ) + ] + + +def decode_iter(data, codec_options=DEFAULT_CODEC_OPTIONS): + """Decode BSON data to multiple documents as a generator. + + Works similarly to the decode_all function, but yields one document at a + time. + + `data` must be a string of concatenated, valid, BSON-encoded + documents. + + :Parameters: + - `data`: BSON data + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + + .. versionadded:: 2.8 + """ + if not isinstance(codec_options, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + position = 0 + end = len(data) - 1 + while position < end: + obj_size = _UNPACK_INT_FROM(data, position)[0] + elements = data[position : position + obj_size] + position += obj_size + + yield _bson_to_dict(elements, codec_options) + + +def decode_file_iter(file_obj, codec_options=DEFAULT_CODEC_OPTIONS): + """Decode bson data from a file to multiple documents as a generator. + + Works similarly to the decode_all function, but reads from the file object + in chunks and parses bson in chunks, yielding one document at a time. + + :Parameters: + - `file_obj`: A file object containing BSON data. + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + + .. versionadded:: 2.8 + """ + while True: + # Read size of next object. + size_data = file_obj.read(4) + if not size_data: + break # Finished with file normaly. + elif len(size_data) != 4: + raise InvalidBSON("cut off in middle of objsize") + obj_size = _UNPACK_INT_FROM(size_data, 0)[0] - 4 + elements = size_data + file_obj.read(max(0, obj_size)) + yield _bson_to_dict(elements, codec_options) + + +def is_valid(bson): + """Check that the given string represents valid :class:`BSON` data. + + Raises :class:`TypeError` if `bson` is not an instance of + :class:`str` (:class:`bytes` in python 3). Returns ``True`` + if `bson` is valid :class:`BSON`, ``False`` otherwise. + + :Parameters: + - `bson`: the data to be validated + """ + if not isinstance(bson, bytes): + raise TypeError("BSON data must be an instance of a subclass of bytes") + + try: + _bson_to_dict(bson, DEFAULT_CODEC_OPTIONS) + return True + except Exception: + return False + + +class BSON(bytes): + """BSON (Binary JSON) data. + + .. warning:: Using this class to encode and decode BSON adds a performance + cost. For better performance use the module level functions + :func:`encode` and :func:`decode` instead. + """ + + @classmethod + def encode(cls, document, check_keys=False, codec_options=DEFAULT_CODEC_OPTIONS): + """Encode a document to a new :class:`BSON` instance. + + A document can be any mapping type (like :class:`dict`). + + Raises :class:`TypeError` if `document` is not a mapping type, + or contains keys that are not instances of + :class:`basestring` (:class:`str` in python 3). Raises + :class:`~bson.errors.InvalidDocument` if `document` cannot be + converted to :class:`BSON`. + + :Parameters: + - `document`: mapping type representing a document + - `check_keys` (optional): check if keys start with '$' or + contain '.', raising :class:`~bson.errors.InvalidDocument` in + either case + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Replaced `uuid_subtype` option with `codec_options`. + """ + return cls(encode(document, check_keys, codec_options)) + + def decode(self, codec_options=DEFAULT_CODEC_OPTIONS): + """Decode this BSON data. + + By default, returns a BSON document represented as a Python + :class:`dict`. To use a different :class:`MutableMapping` class, + configure a :class:`~bson.codec_options.CodecOptions`:: + + >>> import collections # From Python standard library. + >>> import bson + >>> from .codec_options import CodecOptions + >>> data = bson.BSON.encode({'a': 1}) + >>> decoded_doc = bson.BSON(data).decode() + + >>> options = CodecOptions(document_class=collections.OrderedDict) + >>> decoded_doc = bson.BSON(data).decode(codec_options=options) + >>> type(decoded_doc) + + + :Parameters: + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Removed `compile_re` option: PyMongo now always represents BSON + regular expressions as :class:`~bson.regex.Regex` objects. Use + :meth:`~bson.regex.Regex.try_compile` to attempt to convert from a + BSON regular expression to a Python regular expression object. + + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + """ + return decode(self, codec_options) + + +def has_c(): + """Is the C extension installed?""" + return _USE_C diff --git a/src/xtquant/xtbson/bson36/_helpers.py b/src/xtquant/xtbson/bson36/_helpers.py new file mode 100644 index 0000000..1221fe8 --- /dev/null +++ b/src/xtquant/xtbson/bson36/_helpers.py @@ -0,0 +1,40 @@ +# Copyright 2021-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Setstate and getstate functions for objects with __slots__, allowing + compatibility with default pickling protocol +""" + + +def _setstate_slots(self, state): + for slot, value in state.items(): + setattr(self, slot, value) + + +def _mangle_name(name, prefix): + if name.startswith("__"): + prefix = "_" + prefix + else: + prefix = "" + return prefix + name + + +def _getstate_slots(self): + prefix = self.__class__.__name__ + ret = dict() + for name in self.__slots__: + mangled_name = _mangle_name(name, prefix) + if hasattr(self, mangled_name): + ret[mangled_name] = getattr(self, mangled_name) + return ret diff --git a/src/xtquant/xtbson/bson36/binary.py b/src/xtquant/xtbson/bson36/binary.py new file mode 100644 index 0000000..e7ad996 --- /dev/null +++ b/src/xtquant/xtbson/bson36/binary.py @@ -0,0 +1,352 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from uuid import UUID +from warnings import warn + +"""Tools for representing BSON binary data. +""" + +BINARY_SUBTYPE = 0 +"""BSON binary subtype for binary data. + +This is the default subtype for binary data. +""" + +FUNCTION_SUBTYPE = 1 +"""BSON binary subtype for functions. +""" + +OLD_BINARY_SUBTYPE = 2 +"""Old BSON binary subtype for binary data. + +This is the old default subtype, the current +default is :data:`BINARY_SUBTYPE`. +""" + +OLD_UUID_SUBTYPE = 3 +"""Old BSON binary subtype for a UUID. + +:class:`uuid.UUID` instances will automatically be encoded +by :mod:`bson` using this subtype when using +:data:`UuidRepresentation.PYTHON_LEGACY`, +:data:`UuidRepresentation.JAVA_LEGACY`, or +:data:`UuidRepresentation.CSHARP_LEGACY`. + +.. versionadded:: 2.1 +""" + +UUID_SUBTYPE = 4 +"""BSON binary subtype for a UUID. + +This is the standard BSON binary subtype for UUIDs. +:class:`uuid.UUID` instances will automatically be encoded +by :mod:`bson` using this subtype when using +:data:`UuidRepresentation.STANDARD`. +""" + + +class UuidRepresentation: + UNSPECIFIED = 0 + """An unspecified UUID representation. + + When configured, :class:`uuid.UUID` instances will **not** be + automatically encoded to or decoded from :class:`~bson.binary.Binary`. + When encoding a :class:`uuid.UUID` instance, an error will be raised. + To encode a :class:`uuid.UUID` instance with this configuration, it must + be wrapped in the :class:`~bson.binary.Binary` class by the application + code. When decoding a BSON binary field with a UUID subtype, a + :class:`~bson.binary.Binary` instance will be returned instead of a + :class:`uuid.UUID` instance. + + See :ref:`unspecified-representation-details` for details. + + .. versionadded:: 3.11 + """ + + STANDARD = UUID_SUBTYPE + """The standard UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary, using RFC-4122 byte order with + binary subtype :data:`UUID_SUBTYPE`. + + See :ref:`standard-representation-details` for details. + + .. versionadded:: 3.11 + """ + + PYTHON_LEGACY = OLD_UUID_SUBTYPE + """The Python legacy UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary, using RFC-4122 byte order with + binary subtype :data:`OLD_UUID_SUBTYPE`. + + See :ref:`python-legacy-representation-details` for details. + + .. versionadded:: 3.11 + """ + + JAVA_LEGACY = 5 + """The Java legacy UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary subtype :data:`OLD_UUID_SUBTYPE`, + using the Java driver's legacy byte order. + + See :ref:`java-legacy-representation-details` for details. + + .. versionadded:: 3.11 + """ + + CSHARP_LEGACY = 6 + """The C#/.net legacy UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary subtype :data:`OLD_UUID_SUBTYPE`, + using the C# driver's legacy byte order. + + See :ref:`csharp-legacy-representation-details` for details. + + .. versionadded:: 3.11 + """ + + +STANDARD = UuidRepresentation.STANDARD +"""An alias for :data:`UuidRepresentation.STANDARD`. + +.. versionadded:: 3.0 +""" + +PYTHON_LEGACY = UuidRepresentation.PYTHON_LEGACY +"""An alias for :data:`UuidRepresentation.PYTHON_LEGACY`. + +.. versionadded:: 3.0 +""" + +JAVA_LEGACY = UuidRepresentation.JAVA_LEGACY +"""An alias for :data:`UuidRepresentation.JAVA_LEGACY`. + +.. versionchanged:: 3.6 + BSON binary subtype 4 is decoded using RFC-4122 byte order. +.. versionadded:: 2.3 +""" + +CSHARP_LEGACY = UuidRepresentation.CSHARP_LEGACY +"""An alias for :data:`UuidRepresentation.CSHARP_LEGACY`. + +.. versionchanged:: 3.6 + BSON binary subtype 4 is decoded using RFC-4122 byte order. +.. versionadded:: 2.3 +""" + +ALL_UUID_SUBTYPES = (OLD_UUID_SUBTYPE, UUID_SUBTYPE) +ALL_UUID_REPRESENTATIONS = ( + UuidRepresentation.UNSPECIFIED, + UuidRepresentation.STANDARD, + UuidRepresentation.PYTHON_LEGACY, + UuidRepresentation.JAVA_LEGACY, + UuidRepresentation.CSHARP_LEGACY, +) +UUID_REPRESENTATION_NAMES = { + UuidRepresentation.UNSPECIFIED: "UuidRepresentation.UNSPECIFIED", + UuidRepresentation.STANDARD: "UuidRepresentation.STANDARD", + UuidRepresentation.PYTHON_LEGACY: "UuidRepresentation.PYTHON_LEGACY", + UuidRepresentation.JAVA_LEGACY: "UuidRepresentation.JAVA_LEGACY", + UuidRepresentation.CSHARP_LEGACY: "UuidRepresentation.CSHARP_LEGACY", +} + +MD5_SUBTYPE = 5 +"""BSON binary subtype for an MD5 hash. +""" + +COLUMN_SUBTYPE = 7 +"""BSON binary subtype for columns. + +.. versionadded:: 4.0 +""" + +USER_DEFINED_SUBTYPE = 128 +"""BSON binary subtype for any user defined structure. +""" + + +class Binary(bytes): + """Representation of BSON binary data. + + This is necessary because we want to represent Python strings as + the BSON string type. We need to wrap binary data so we can tell + the difference between what should be considered binary data and + what should be considered a string when we encode to BSON. + + Raises TypeError if `data` is not an instance of :class:`bytes` + (:class:`str` in python 2) or `subtype` is not an instance of + :class:`int`. Raises ValueError if `subtype` is not in [0, 256). + + .. note:: + In python 3 instances of Binary with subtype 0 will be decoded + directly to :class:`bytes`. + + :Parameters: + - `data`: the binary data to represent. Can be any bytes-like type + that implements the buffer protocol. + - `subtype` (optional): the `binary subtype + `_ + to use + + .. versionchanged:: 3.9 + Support any bytes-like type that implements the buffer protocol. + """ + + _type_marker = 5 + + def __new__(cls, data, subtype=BINARY_SUBTYPE): + if not isinstance(subtype, int): + raise TypeError("subtype must be an instance of int") + if subtype >= 256 or subtype < 0: + raise ValueError("subtype must be contained in [0, 256)") + # Support any type that implements the buffer protocol. + self = bytes.__new__(cls, memoryview(data).tobytes()) + self.__subtype = subtype + return self + + @classmethod + def from_uuid(cls, uuid, uuid_representation=UuidRepresentation.STANDARD): + """Create a BSON Binary object from a Python UUID. + + Creates a :class:`~bson.binary.Binary` object from a + :class:`uuid.UUID` instance. Assumes that the native + :class:`uuid.UUID` instance uses the byte-order implied by the + provided ``uuid_representation``. + + Raises :exc:`TypeError` if `uuid` is not an instance of + :class:`~uuid.UUID`. + + :Parameters: + - `uuid`: A :class:`uuid.UUID` instance. + - `uuid_representation`: A member of + :class:`~bson.binary.UuidRepresentation`. Default: + :const:`~bson.binary.UuidRepresentation.STANDARD`. + See :ref:`handling-uuid-data-example` for details. + + .. versionadded:: 3.11 + """ + if not isinstance(uuid, UUID): + raise TypeError("uuid must be an instance of uuid.UUID") + + if uuid_representation not in ALL_UUID_REPRESENTATIONS: + raise ValueError( + "uuid_representation must be a value " "from .binary.UuidRepresentation" + ) + + if uuid_representation == UuidRepresentation.UNSPECIFIED: + raise ValueError( + "cannot encode native uuid.UUID with " + "UuidRepresentation.UNSPECIFIED. UUIDs can be manually " + "converted to bson.Binary instances using " + "bson.Binary.from_uuid() or a different UuidRepresentation " + "can be configured. See the documentation for " + "UuidRepresentation for more information." + ) + + subtype = OLD_UUID_SUBTYPE + if uuid_representation == UuidRepresentation.PYTHON_LEGACY: + payload = uuid.bytes + elif uuid_representation == UuidRepresentation.JAVA_LEGACY: + from_uuid = uuid.bytes + payload = from_uuid[0:8][::-1] + from_uuid[8:16][::-1] + elif uuid_representation == UuidRepresentation.CSHARP_LEGACY: + payload = uuid.bytes_le + else: + # uuid_representation == UuidRepresentation.STANDARD + subtype = UUID_SUBTYPE + payload = uuid.bytes + + return cls(payload, subtype) + + def as_uuid(self, uuid_representation=UuidRepresentation.STANDARD): + """Create a Python UUID from this BSON Binary object. + + Decodes this binary object as a native :class:`uuid.UUID` instance + with the provided ``uuid_representation``. + + Raises :exc:`ValueError` if this :class:`~bson.binary.Binary` instance + does not contain a UUID. + + :Parameters: + - `uuid_representation`: A member of + :class:`~bson.binary.UuidRepresentation`. Default: + :const:`~bson.binary.UuidRepresentation.STANDARD`. + See :ref:`handling-uuid-data-example` for details. + + .. versionadded:: 3.11 + """ + if self.subtype not in ALL_UUID_SUBTYPES: + raise ValueError("cannot decode subtype %s as a uuid" % (self.subtype,)) + + if uuid_representation not in ALL_UUID_REPRESENTATIONS: + raise ValueError( + "uuid_representation must be a value from " "bson.binary.UuidRepresentation" + ) + + if uuid_representation == UuidRepresentation.UNSPECIFIED: + raise ValueError("uuid_representation cannot be UNSPECIFIED") + elif uuid_representation == UuidRepresentation.PYTHON_LEGACY: + if self.subtype == OLD_UUID_SUBTYPE: + return UUID(bytes=self) + elif uuid_representation == UuidRepresentation.JAVA_LEGACY: + if self.subtype == OLD_UUID_SUBTYPE: + return UUID(bytes=self[0:8][::-1] + self[8:16][::-1]) + elif uuid_representation == UuidRepresentation.CSHARP_LEGACY: + if self.subtype == OLD_UUID_SUBTYPE: + return UUID(bytes_le=self) + else: + # uuid_representation == UuidRepresentation.STANDARD + if self.subtype == UUID_SUBTYPE: + return UUID(bytes=self) + + raise ValueError( + "cannot decode subtype %s to %s" + % (self.subtype, UUID_REPRESENTATION_NAMES[uuid_representation]) + ) + + @property + def subtype(self): + """Subtype of this binary data.""" + return self.__subtype + + def __getnewargs__(self): + # Work around http://bugs.python.org/issue7382 + data = super(Binary, self).__getnewargs__()[0] + if not isinstance(data, bytes): + data = data.encode("latin-1") + return data, self.__subtype + + def __eq__(self, other): + if isinstance(other, Binary): + return (self.__subtype, bytes(self)) == (other.subtype, bytes(other)) + # We don't return NotImplemented here because if we did then + # Binary("foo") == "foo" would return True, since Binary is a + # subclass of str... + return False + + def __hash__(self): + return super(Binary, self).__hash__() ^ hash(self.__subtype) + + def __ne__(self, other): + return not self == other + + def __repr__(self): + return "Binary(%s, %s)" % (bytes.__repr__(self), self.__subtype) diff --git a/src/xtquant/xtbson/bson36/code.py b/src/xtquant/xtbson/bson36/code.py new file mode 100644 index 0000000..5afe276 --- /dev/null +++ b/src/xtquant/xtbson/bson36/code.py @@ -0,0 +1,94 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing JavaScript code in BSON. +""" + +from collections.abc import Mapping as _Mapping + + +class Code(str): + """BSON's JavaScript code type. + + Raises :class:`TypeError` if `code` is not an instance of + :class:`basestring` (:class:`str` in python 3) or `scope` + is not ``None`` or an instance of :class:`dict`. + + Scope variables can be set by passing a dictionary as the `scope` + argument or by using keyword arguments. If a variable is set as a + keyword argument it will override any setting for that variable in + the `scope` dictionary. + + :Parameters: + - `code`: A string containing JavaScript code to be evaluated or another + instance of Code. In the latter case, the scope of `code` becomes this + Code's :attr:`scope`. + - `scope` (optional): dictionary representing the scope in which + `code` should be evaluated - a mapping from identifiers (as + strings) to values. Defaults to ``None``. This is applied after any + scope associated with a given `code` above. + - `**kwargs` (optional): scope variables can also be passed as + keyword arguments. These are applied after `scope` and `code`. + + .. versionchanged:: 3.4 + The default value for :attr:`scope` is ``None`` instead of ``{}``. + + """ + + _type_marker = 13 + + def __new__(cls, code, scope=None, **kwargs): + if not isinstance(code, str): + raise TypeError("code must be an instance of str") + + self = str.__new__(cls, code) + + try: + self.__scope = code.scope + except AttributeError: + self.__scope = None + + if scope is not None: + if not isinstance(scope, _Mapping): + raise TypeError("scope must be an instance of dict") + if self.__scope is not None: + self.__scope.update(scope) + else: + self.__scope = scope + + if kwargs: + if self.__scope is not None: + self.__scope.update(kwargs) + else: + self.__scope = kwargs + + return self + + @property + def scope(self): + """Scope dictionary for this instance or ``None``.""" + return self.__scope + + def __repr__(self): + return "Code(%s, %r)" % (str.__repr__(self), self.__scope) + + def __eq__(self, other): + if isinstance(other, Code): + return (self.__scope, str(self)) == (other.__scope, str(other)) + return False + + __hash__ = None + + def __ne__(self, other): + return not self == other diff --git a/src/xtquant/xtbson/bson36/codec_options.py b/src/xtquant/xtbson/bson36/codec_options.py new file mode 100644 index 0000000..c220d31 --- /dev/null +++ b/src/xtquant/xtbson/bson36/codec_options.py @@ -0,0 +1,389 @@ +# Copyright 2014-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for specifying BSON codec options.""" + +import abc +import datetime +import warnings +from collections import namedtuple +from collections.abc import MutableMapping as _MutableMapping + +from .binary import ( + ALL_UUID_REPRESENTATIONS, + UUID_REPRESENTATION_NAMES, + UuidRepresentation, +) + + +def _abstractproperty(func): + return property(abc.abstractmethod(func)) + + +_RAW_BSON_DOCUMENT_MARKER = 101 + + +def _raw_document_class(document_class): + """Determine if a document_class is a RawBSONDocument class.""" + marker = getattr(document_class, "_type_marker", None) + return marker == _RAW_BSON_DOCUMENT_MARKER + + +class TypeEncoder(abc.ABC): + """Base class for defining type codec classes which describe how a + custom type can be transformed to one of the types BSON understands. + + Codec classes must implement the ``python_type`` attribute, and the + ``transform_python`` method to support encoding. + + See :ref:`custom-type-type-codec` documentation for an example. + """ + + @_abstractproperty + def python_type(self): + """The Python type to be converted into something serializable.""" + pass + + @abc.abstractmethod + def transform_python(self, value): + """Convert the given Python object into something serializable.""" + pass + + +class TypeDecoder(abc.ABC): + """Base class for defining type codec classes which describe how a + BSON type can be transformed to a custom type. + + Codec classes must implement the ``bson_type`` attribute, and the + ``transform_bson`` method to support decoding. + + See :ref:`custom-type-type-codec` documentation for an example. + """ + + @_abstractproperty + def bson_type(self): + """The BSON type to be converted into our own type.""" + pass + + @abc.abstractmethod + def transform_bson(self, value): + """Convert the given BSON value into our own type.""" + pass + + +class TypeCodec(TypeEncoder, TypeDecoder): + """Base class for defining type codec classes which describe how a + custom type can be transformed to/from one of the types :mod:`bson` + can already encode/decode. + + Codec classes must implement the ``python_type`` attribute, and the + ``transform_python`` method to support encoding, as well as the + ``bson_type`` attribute, and the ``transform_bson`` method to support + decoding. + + See :ref:`custom-type-type-codec` documentation for an example. + """ + + pass + + +class TypeRegistry(object): + """Encapsulates type codecs used in encoding and / or decoding BSON, as + well as the fallback encoder. Type registries cannot be modified after + instantiation. + + ``TypeRegistry`` can be initialized with an iterable of type codecs, and + a callable for the fallback encoder:: + + >>> from .codec_options import TypeRegistry + >>> type_registry = TypeRegistry([Codec1, Codec2, Codec3, ...], + ... fallback_encoder) + + See :ref:`custom-type-type-registry` documentation for an example. + + :Parameters: + - `type_codecs` (optional): iterable of type codec instances. If + ``type_codecs`` contains multiple codecs that transform a single + python or BSON type, the transformation specified by the type codec + occurring last prevails. A TypeError will be raised if one or more + type codecs modify the encoding behavior of a built-in :mod:`bson` + type. + - `fallback_encoder` (optional): callable that accepts a single, + unencodable python value and transforms it into a type that + :mod:`bson` can encode. See :ref:`fallback-encoder-callable` + documentation for an example. + """ + + def __init__(self, type_codecs=None, fallback_encoder=None): + self.__type_codecs = list(type_codecs or []) + self._fallback_encoder = fallback_encoder + self._encoder_map = {} + self._decoder_map = {} + + if self._fallback_encoder is not None: + if not callable(fallback_encoder): + raise TypeError("fallback_encoder %r is not a callable" % (fallback_encoder)) + + for codec in self.__type_codecs: + is_valid_codec = False + if isinstance(codec, TypeEncoder): + self._validate_type_encoder(codec) + is_valid_codec = True + self._encoder_map[codec.python_type] = codec.transform_python + if isinstance(codec, TypeDecoder): + is_valid_codec = True + self._decoder_map[codec.bson_type] = codec.transform_bson + if not is_valid_codec: + raise TypeError( + "Expected an instance of %s, %s, or %s, got %r instead" + % (TypeEncoder.__name__, TypeDecoder.__name__, TypeCodec.__name__, codec) + ) + + def _validate_type_encoder(self, codec): + from . import _BUILT_IN_TYPES + + for pytype in _BUILT_IN_TYPES: + if issubclass(codec.python_type, pytype): + err_msg = ( + "TypeEncoders cannot change how built-in types are " + "encoded (encoder %s transforms type %s)" % (codec, pytype) + ) + raise TypeError(err_msg) + + def __repr__(self): + return "%s(type_codecs=%r, fallback_encoder=%r)" % ( + self.__class__.__name__, + self.__type_codecs, + self._fallback_encoder, + ) + + def __eq__(self, other): + if not isinstance(other, type(self)): + return NotImplemented + return ( + (self._decoder_map == other._decoder_map) + and (self._encoder_map == other._encoder_map) + and (self._fallback_encoder == other._fallback_encoder) + ) + + +_options_base = namedtuple( + "CodecOptions", + ( + "document_class", + "tz_aware", + "uuid_representation", + "unicode_decode_error_handler", + "tzinfo", + "type_registry", + ), +) + + +class CodecOptions(_options_base): + """Encapsulates options used encoding and / or decoding BSON. + + The `document_class` option is used to define a custom type for use + decoding BSON documents. Access to the underlying raw BSON bytes for + a document is available using the :class:`~bson.raw_bson.RawBSONDocument` + type:: + + >>> from .raw_bson import RawBSONDocument + >>> from .codec_options import CodecOptions + >>> codec_options = CodecOptions(document_class=RawBSONDocument) + >>> coll = db.get_collection('test', codec_options=codec_options) + >>> doc = coll.find_one() + >>> doc.raw + '\\x16\\x00\\x00\\x00\\x07_id\\x00[0\\x165\\x91\\x10\\xea\\x14\\xe8\\xc5\\x8b\\x93\\x00' + + The document class can be any type that inherits from + :class:`~collections.abc.MutableMapping`:: + + >>> class AttributeDict(dict): + ... # A dict that supports attribute access. + ... def __getattr__(self, key): + ... return self[key] + ... def __setattr__(self, key, value): + ... self[key] = value + ... + >>> codec_options = CodecOptions(document_class=AttributeDict) + >>> coll = db.get_collection('test', codec_options=codec_options) + >>> doc = coll.find_one() + >>> doc._id + ObjectId('5b3016359110ea14e8c58b93') + + See :doc:`/examples/datetimes` for examples using the `tz_aware` and + `tzinfo` options. + + See :doc:`examples/uuid` for examples using the `uuid_representation` + option. + + :Parameters: + - `document_class`: BSON documents returned in queries will be decoded + to an instance of this class. Must be a subclass of + :class:`~collections.abc.MutableMapping`. Defaults to :class:`dict`. + - `tz_aware`: If ``True``, BSON datetimes will be decoded to timezone + aware instances of :class:`~datetime.datetime`. Otherwise they will be + naive. Defaults to ``False``. + - `uuid_representation`: The BSON representation to use when encoding + and decoding instances of :class:`~uuid.UUID`. Defaults to + :data:`~bson.binary.UuidRepresentation.UNSPECIFIED`. New + applications should consider setting this to + :data:`~bson.binary.UuidRepresentation.STANDARD` for cross language + compatibility. See :ref:`handling-uuid-data-example` for details. + - `unicode_decode_error_handler`: The error handler to apply when + a Unicode-related error occurs during BSON decoding that would + otherwise raise :exc:`UnicodeDecodeError`. Valid options include + 'strict', 'replace', 'backslashreplace', 'surrogateescape', and + 'ignore'. Defaults to 'strict'. + - `tzinfo`: A :class:`~datetime.tzinfo` subclass that specifies the + timezone to/from which :class:`~datetime.datetime` objects should be + encoded/decoded. + - `type_registry`: Instance of :class:`TypeRegistry` used to customize + encoding and decoding behavior. + + .. versionchanged:: 4.0 + The default for `uuid_representation` was changed from + :const:`~bson.binary.UuidRepresentation.PYTHON_LEGACY` to + :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`. + + .. versionadded:: 3.8 + `type_registry` attribute. + + .. warning:: Care must be taken when changing + `unicode_decode_error_handler` from its default value ('strict'). + The 'replace' and 'ignore' modes should not be used when documents + retrieved from the server will be modified in the client application + and stored back to the server. + """ + + def __new__( + cls, + document_class=dict, + tz_aware=False, + uuid_representation=UuidRepresentation.UNSPECIFIED, + unicode_decode_error_handler="strict", + tzinfo=None, + type_registry=None, + ): + if not (issubclass(document_class, _MutableMapping) or _raw_document_class(document_class)): + raise TypeError( + "document_class must be dict, bson.son.SON, " + "bson.raw_bson.RawBSONDocument, or a " + "sublass of collections.abc.MutableMapping" + ) + if not isinstance(tz_aware, bool): + raise TypeError("tz_aware must be True or False") + if uuid_representation not in ALL_UUID_REPRESENTATIONS: + raise ValueError( + "uuid_representation must be a value " "from .binary.UuidRepresentation" + ) + if not isinstance(unicode_decode_error_handler, (str, None)): + raise ValueError("unicode_decode_error_handler must be a string " "or None") + if tzinfo is not None: + if not isinstance(tzinfo, datetime.tzinfo): + raise TypeError("tzinfo must be an instance of datetime.tzinfo") + if not tz_aware: + raise ValueError("cannot specify tzinfo without also setting tz_aware=True") + + type_registry = type_registry or TypeRegistry() + + if not isinstance(type_registry, TypeRegistry): + raise TypeError("type_registry must be an instance of TypeRegistry") + + return tuple.__new__( + cls, + ( + document_class, + tz_aware, + uuid_representation, + unicode_decode_error_handler, + tzinfo, + type_registry, + ), + ) + + def _arguments_repr(self): + """Representation of the arguments used to create this object.""" + document_class_repr = "dict" if self.document_class is dict else repr(self.document_class) + + uuid_rep_repr = UUID_REPRESENTATION_NAMES.get( + self.uuid_representation, self.uuid_representation + ) + + return ( + "document_class=%s, tz_aware=%r, uuid_representation=%s, " + "unicode_decode_error_handler=%r, tzinfo=%r, " + "type_registry=%r" + % ( + document_class_repr, + self.tz_aware, + uuid_rep_repr, + self.unicode_decode_error_handler, + self.tzinfo, + self.type_registry, + ) + ) + + def _options_dict(self): + """Dictionary of the arguments used to create this object.""" + # TODO: PYTHON-2442 use _asdict() instead + return { + "document_class": self.document_class, + "tz_aware": self.tz_aware, + "uuid_representation": self.uuid_representation, + "unicode_decode_error_handler": self.unicode_decode_error_handler, + "tzinfo": self.tzinfo, + "type_registry": self.type_registry, + } + + def __repr__(self): + return "%s(%s)" % (self.__class__.__name__, self._arguments_repr()) + + def with_options(self, **kwargs): + """Make a copy of this CodecOptions, overriding some options:: + + >>> from .codec_options import DEFAULT_CODEC_OPTIONS + >>> DEFAULT_CODEC_OPTIONS.tz_aware + False + >>> options = DEFAULT_CODEC_OPTIONS.with_options(tz_aware=True) + >>> options.tz_aware + True + + .. versionadded:: 3.5 + """ + opts = self._options_dict() + opts.update(kwargs) + return CodecOptions(**opts) + + +DEFAULT_CODEC_OPTIONS = CodecOptions() + + +def _parse_codec_options(options): + """Parse BSON codec options.""" + kwargs = {} + for k in set(options) & { + "document_class", + "tz_aware", + "uuidrepresentation", + "unicode_decode_error_handler", + "tzinfo", + "type_registry", + }: + if k == "uuidrepresentation": + kwargs["uuid_representation"] = options[k] + else: + kwargs[k] = options[k] + return CodecOptions(**kwargs) diff --git a/src/xtquant/xtbson/bson36/dbref.py b/src/xtquant/xtbson/bson36/dbref.py new file mode 100644 index 0000000..1a0f369 --- /dev/null +++ b/src/xtquant/xtbson/bson36/dbref.py @@ -0,0 +1,125 @@ +# Copyright 2009-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for manipulating DBRefs (references to MongoDB documents).""" + +from copy import deepcopy + +from ._helpers import _getstate_slots, _setstate_slots +from .son import SON + + +class DBRef(object): + """A reference to a document stored in MongoDB.""" + + __slots__ = "__collection", "__id", "__database", "__kwargs" + __getstate__ = _getstate_slots + __setstate__ = _setstate_slots + # DBRef isn't actually a BSON "type" so this number was arbitrarily chosen. + _type_marker = 100 + + def __init__(self, collection, id, database=None, _extra={}, **kwargs): + """Initialize a new :class:`DBRef`. + + Raises :class:`TypeError` if `collection` or `database` is not + an instance of :class:`basestring` (:class:`str` in python 3). + `database` is optional and allows references to documents to work + across databases. Any additional keyword arguments will create + additional fields in the resultant embedded document. + + :Parameters: + - `collection`: name of the collection the document is stored in + - `id`: the value of the document's ``"_id"`` field + - `database` (optional): name of the database to reference + - `**kwargs` (optional): additional keyword arguments will + create additional, custom fields + + .. seealso:: The MongoDB documentation on `dbrefs `_. + """ + if not isinstance(collection, str): + raise TypeError("collection must be an instance of str") + if database is not None and not isinstance(database, str): + raise TypeError("database must be an instance of str") + + self.__collection = collection + self.__id = id + self.__database = database + kwargs.update(_extra) + self.__kwargs = kwargs + + @property + def collection(self): + """Get the name of this DBRef's collection.""" + return self.__collection + + @property + def id(self): + """Get this DBRef's _id.""" + return self.__id + + @property + def database(self): + """Get the name of this DBRef's database. + + Returns None if this DBRef doesn't specify a database. + """ + return self.__database + + def __getattr__(self, key): + try: + return self.__kwargs[key] + except KeyError: + raise AttributeError(key) + + def as_doc(self): + """Get the SON document representation of this DBRef. + + Generally not needed by application developers + """ + doc = SON([("$ref", self.collection), ("$id", self.id)]) + if self.database is not None: + doc["$db"] = self.database + doc.update(self.__kwargs) + return doc + + def __repr__(self): + extra = "".join([", %s=%r" % (k, v) for k, v in self.__kwargs.items()]) + if self.database is None: + return "DBRef(%r, %r%s)" % (self.collection, self.id, extra) + return "DBRef(%r, %r, %r%s)" % (self.collection, self.id, self.database, extra) + + def __eq__(self, other): + if isinstance(other, DBRef): + us = (self.__database, self.__collection, self.__id, self.__kwargs) + them = (other.__database, other.__collection, other.__id, other.__kwargs) + return us == them + return NotImplemented + + def __ne__(self, other): + return not self == other + + def __hash__(self): + """Get a hash value for this :class:`DBRef`.""" + return hash( + (self.__collection, self.__id, self.__database, tuple(sorted(self.__kwargs.items()))) + ) + + def __deepcopy__(self, memo): + """Support function for `copy.deepcopy()`.""" + return DBRef( + deepcopy(self.__collection, memo), + deepcopy(self.__id, memo), + deepcopy(self.__database, memo), + deepcopy(self.__kwargs, memo), + ) diff --git a/src/xtquant/xtbson/bson36/decimal128.py b/src/xtquant/xtbson/bson36/decimal128.py new file mode 100644 index 0000000..db0a067 --- /dev/null +++ b/src/xtquant/xtbson/bson36/decimal128.py @@ -0,0 +1,315 @@ +# Copyright 2016-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for working with the BSON decimal128 type. + +.. versionadded:: 3.4 + +.. note:: The Decimal128 BSON type requires MongoDB 3.4+. +""" + +import decimal +import struct +import sys + +_PACK_64 = struct.Struct("> 49 == 1: + high = high & 0x7FFFFFFFFFFF + high |= _EXPONENT_MASK + high |= (biased_exponent & 0x3FFF) << 47 + else: + high |= biased_exponent << 49 + + if sign: + high |= _SIGN + + return high, low + + +class Decimal128(object): + """BSON Decimal128 type:: + + >>> Decimal128(Decimal("0.0005")) + Decimal128('0.0005') + >>> Decimal128("0.0005") + Decimal128('0.0005') + >>> Decimal128((3474527112516337664, 5)) + Decimal128('0.0005') + + :Parameters: + - `value`: An instance of :class:`decimal.Decimal`, string, or tuple of + (high bits, low bits) from Binary Integer Decimal (BID) format. + + .. note:: :class:`~Decimal128` uses an instance of :class:`decimal.Context` + configured for IEEE-754 Decimal128 when validating parameters. + Signals like :class:`decimal.InvalidOperation`, :class:`decimal.Inexact`, + and :class:`decimal.Overflow` are trapped and raised as exceptions:: + + >>> Decimal128(".13.1") + Traceback (most recent call last): + File "", line 1, in + ... + decimal.InvalidOperation: [] + >>> + >>> Decimal128("1E-6177") + Traceback (most recent call last): + File "", line 1, in + ... + decimal.Inexact: [] + >>> + >>> Decimal128("1E6145") + Traceback (most recent call last): + File "", line 1, in + ... + decimal.Overflow: [, ] + + To ensure the result of a calculation can always be stored as BSON + Decimal128 use the context returned by + :func:`create_decimal128_context`:: + + >>> import decimal + >>> decimal128_ctx = create_decimal128_context() + >>> with decimal.localcontext(decimal128_ctx) as ctx: + ... Decimal128(ctx.create_decimal(".13.3")) + ... + Decimal128('NaN') + >>> + >>> with decimal.localcontext(decimal128_ctx) as ctx: + ... Decimal128(ctx.create_decimal("1E-6177")) + ... + Decimal128('0E-6176') + >>> + >>> with decimal.localcontext(DECIMAL128_CTX) as ctx: + ... Decimal128(ctx.create_decimal("1E6145")) + ... + Decimal128('Infinity') + + To match the behavior of MongoDB's Decimal128 implementation + str(Decimal(value)) may not match str(Decimal128(value)) for NaN values:: + + >>> Decimal128(Decimal('NaN')) + Decimal128('NaN') + >>> Decimal128(Decimal('-NaN')) + Decimal128('NaN') + >>> Decimal128(Decimal('sNaN')) + Decimal128('NaN') + >>> Decimal128(Decimal('-sNaN')) + Decimal128('NaN') + + However, :meth:`~Decimal128.to_decimal` will return the exact value:: + + >>> Decimal128(Decimal('NaN')).to_decimal() + Decimal('NaN') + >>> Decimal128(Decimal('-NaN')).to_decimal() + Decimal('-NaN') + >>> Decimal128(Decimal('sNaN')).to_decimal() + Decimal('sNaN') + >>> Decimal128(Decimal('-sNaN')).to_decimal() + Decimal('-sNaN') + + Two instances of :class:`Decimal128` compare equal if their Binary + Integer Decimal encodings are equal:: + + >>> Decimal128('NaN') == Decimal128('NaN') + True + >>> Decimal128('NaN').bid == Decimal128('NaN').bid + True + + This differs from :class:`decimal.Decimal` comparisons for NaN:: + + >>> Decimal('NaN') == Decimal('NaN') + False + """ + + __slots__ = ("__high", "__low") + + _type_marker = 19 + + def __init__(self, value): + if isinstance(value, (str, decimal.Decimal)): + self.__high, self.__low = _decimal_to_128(value) + elif isinstance(value, (list, tuple)): + if len(value) != 2: + raise ValueError( + "Invalid size for creation of Decimal128 " + "from list or tuple. Must have exactly 2 " + "elements." + ) + self.__high, self.__low = value + else: + raise TypeError("Cannot convert %r to Decimal128" % (value,)) + + def to_decimal(self): + """Returns an instance of :class:`decimal.Decimal` for this + :class:`Decimal128`. + """ + high = self.__high + low = self.__low + sign = 1 if (high & _SIGN) else 0 + + if (high & _SNAN) == _SNAN: + return decimal.Decimal((sign, (), "N")) + elif (high & _NAN) == _NAN: + return decimal.Decimal((sign, (), "n")) + elif (high & _INF) == _INF: + return decimal.Decimal((sign, (), "F")) + + if (high & _EXPONENT_MASK) == _EXPONENT_MASK: + exponent = ((high & 0x1FFFE00000000000) >> 47) - _EXPONENT_BIAS + return decimal.Decimal((sign, (0,), exponent)) + else: + exponent = ((high & 0x7FFF800000000000) >> 49) - _EXPONENT_BIAS + + arr = bytearray(15) + mask = 0x00000000000000FF + for i in range(14, 6, -1): + arr[i] = (low & mask) >> ((14 - i) << 3) + mask = mask << 8 + + mask = 0x00000000000000FF + for i in range(6, 0, -1): + arr[i] = (high & mask) >> ((6 - i) << 3) + mask = mask << 8 + + mask = 0x0001000000000000 + arr[0] = (high & mask) >> 48 + + # cdecimal only accepts a tuple for digits. + digits = tuple(int(digit) for digit in str(int.from_bytes(arr, "big"))) + + with decimal.localcontext(_DEC128_CTX) as ctx: + return ctx.create_decimal((sign, digits, exponent)) + + @classmethod + def from_bid(cls, value): + """Create an instance of :class:`Decimal128` from Binary Integer + Decimal string. + + :Parameters: + - `value`: 16 byte string (128-bit IEEE 754-2008 decimal floating + point in Binary Integer Decimal (BID) format). + """ + if not isinstance(value, bytes): + raise TypeError("value must be an instance of bytes") + if len(value) != 16: + raise ValueError("value must be exactly 16 bytes") + return cls((_UNPACK_64(value[8:])[0], _UNPACK_64(value[:8])[0])) + + @property + def bid(self): + """The Binary Integer Decimal (BID) encoding of this instance.""" + return _PACK_64(self.__low) + _PACK_64(self.__high) + + def __str__(self): + dec = self.to_decimal() + if dec.is_nan(): + # Required by the drivers spec to match MongoDB behavior. + return "NaN" + return str(dec) + + def __repr__(self): + return "Decimal128('%s')" % (str(self),) + + def __setstate__(self, value): + self.__high, self.__low = value + + def __getstate__(self): + return self.__high, self.__low + + def __eq__(self, other): + if isinstance(other, Decimal128): + return self.bid == other.bid + return NotImplemented + + def __ne__(self, other): + return not self == other diff --git a/src/xtquant/xtbson/bson36/errors.py b/src/xtquant/xtbson/bson36/errors.py new file mode 100644 index 0000000..7333b27 --- /dev/null +++ b/src/xtquant/xtbson/bson36/errors.py @@ -0,0 +1,35 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Exceptions raised by the BSON package.""" + + +class BSONError(Exception): + """Base class for all BSON exceptions.""" + + +class InvalidBSON(BSONError): + """Raised when trying to create a BSON object from invalid data.""" + + +class InvalidStringData(BSONError): + """Raised when trying to encode a string containing non-UTF8 data.""" + + +class InvalidDocument(BSONError): + """Raised when trying to create a BSON object from an invalid document.""" + + +class InvalidId(BSONError): + """Raised when trying to create an ObjectId from invalid data.""" diff --git a/src/xtquant/xtbson/bson36/int64.py b/src/xtquant/xtbson/bson36/int64.py new file mode 100644 index 0000000..d40b195 --- /dev/null +++ b/src/xtquant/xtbson/bson36/int64.py @@ -0,0 +1,37 @@ +# Copyright 2014-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A BSON wrapper for long (int in python3)""" + + +class Int64(int): + """Representation of the BSON int64 type. + + This is necessary because every integral number is an :class:`int` in + Python 3. Small integral numbers are encoded to BSON int32 by default, + but Int64 numbers will always be encoded to BSON int64. + + :Parameters: + - `value`: the numeric value to represent + """ + + __slots__ = () + + _type_marker = 18 + + def __getstate__(self): + return {} + + def __setstate__(self, state): + pass diff --git a/src/xtquant/xtbson/bson36/json_util.py b/src/xtquant/xtbson/bson36/json_util.py new file mode 100644 index 0000000..973e2a3 --- /dev/null +++ b/src/xtquant/xtbson/bson36/json_util.py @@ -0,0 +1,861 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for using Python's :mod:`json` module with BSON documents. + +This module provides two helper methods `dumps` and `loads` that wrap the +native :mod:`json` methods and provide explicit BSON conversion to and from +JSON. :class:`~bson.json_util.JSONOptions` provides a way to control how JSON +is emitted and parsed, with the default being the Relaxed Extended JSON format. +:mod:`~bson.json_util` can also generate Canonical or legacy `Extended JSON`_ +when :const:`CANONICAL_JSON_OPTIONS` or :const:`LEGACY_JSON_OPTIONS` is +provided, respectively. + +.. _Extended JSON: https://github.com/mongodb/specifications/blob/master/source/extended-json.rst + +Example usage (deserialization): + +.. doctest:: + + >>> from .json_util import loads + >>> loads('[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$scope": {}, "$code": "function x() { return 1; }"}}, {"bin": {"$type": "80", "$binary": "AQIDBA=="}}]') + [{'foo': [1, 2]}, {'bar': {'hello': 'world'}}, {'code': Code('function x() { return 1; }', {})}, {'bin': Binary(b'...', 128)}] + +Example usage with :const:`RELAXED_JSON_OPTIONS` (the default): + +.. doctest:: + + >>> from . import Binary, Code + >>> from .json_util import dumps + >>> dumps([{'foo': [1, 2]}, + ... {'bar': {'hello': 'world'}}, + ... {'code': Code("function x() { return 1; }")}, + ... {'bin': Binary(b"\x01\x02\x03\x04")}]) + '[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }"}}, {"bin": {"$binary": {"base64": "AQIDBA==", "subType": "00"}}}]' + +Example usage (with :const:`CANONICAL_JSON_OPTIONS`): + +.. doctest:: + + >>> from . import Binary, Code + >>> from .json_util import dumps, CANONICAL_JSON_OPTIONS + >>> dumps([{'foo': [1, 2]}, + ... {'bar': {'hello': 'world'}}, + ... {'code': Code("function x() { return 1; }")}, + ... {'bin': Binary(b"\x01\x02\x03\x04")}], + ... json_options=CANONICAL_JSON_OPTIONS) + '[{"foo": [{"$numberInt": "1"}, {"$numberInt": "2"}]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }"}}, {"bin": {"$binary": {"base64": "AQIDBA==", "subType": "00"}}}]' + +Example usage (with :const:`LEGACY_JSON_OPTIONS`): + +.. doctest:: + + >>> from . import Binary, Code + >>> from .json_util import dumps, LEGACY_JSON_OPTIONS + >>> dumps([{'foo': [1, 2]}, + ... {'bar': {'hello': 'world'}}, + ... {'code': Code("function x() { return 1; }", {})}, + ... {'bin': Binary(b"\x01\x02\x03\x04")}], + ... json_options=LEGACY_JSON_OPTIONS) + '[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }", "$scope": {}}}, {"bin": {"$binary": "AQIDBA==", "$type": "00"}}]' + +Alternatively, you can manually pass the `default` to :func:`json.dumps`. +It won't handle :class:`~bson.binary.Binary` and :class:`~bson.code.Code` +instances (as they are extended strings you can't provide custom defaults), +but it will be faster as there is less recursion. + +.. note:: + If your application does not need the flexibility offered by + :class:`JSONOptions` and spends a large amount of time in the `json_util` + module, look to + `python-bsonjs `_ for a nice + performance improvement. `python-bsonjs` is a fast BSON to MongoDB + Extended JSON converter for Python built on top of + `libbson `_. `python-bsonjs` works best + with PyMongo when using :class:`~bson.raw_bson.RawBSONDocument`. +""" + +import base64 +import datetime +import json +import math +import re +import uuid + +import bson +from . import EPOCH_AWARE, RE_TYPE, SON +from .binary import ALL_UUID_SUBTYPES, UUID_SUBTYPE, Binary, UuidRepresentation +from .code import Code +from .codec_options import CodecOptions +from .dbref import DBRef +from .decimal128 import Decimal128 +from .int64 import Int64 +from .max_key import MaxKey +from .min_key import MinKey +from .objectid import ObjectId +from .regex import Regex +from .timestamp import Timestamp +from .tz_util import utc + +_RE_OPT_TABLE = { + "i": re.I, + "l": re.L, + "m": re.M, + "s": re.S, + "u": re.U, + "x": re.X, +} + + +class DatetimeRepresentation: + LEGACY = 0 + """Legacy MongoDB Extended JSON datetime representation. + + :class:`datetime.datetime` instances will be encoded to JSON in the + format `{"$date": }`, where `dateAsMilliseconds` is + a 64-bit signed integer giving the number of milliseconds since the Unix + epoch UTC. This was the default encoding before PyMongo version 3.4. + + .. versionadded:: 3.4 + """ + + NUMBERLONG = 1 + """NumberLong datetime representation. + + :class:`datetime.datetime` instances will be encoded to JSON in the + format `{"$date": {"$numberLong": ""}}`, + where `dateAsMilliseconds` is the string representation of a 64-bit signed + integer giving the number of milliseconds since the Unix epoch UTC. + + .. versionadded:: 3.4 + """ + + ISO8601 = 2 + """ISO-8601 datetime representation. + + :class:`datetime.datetime` instances greater than or equal to the Unix + epoch UTC will be encoded to JSON in the format `{"$date": ""}`. + :class:`datetime.datetime` instances before the Unix epoch UTC will be + encoded as if the datetime representation is + :const:`~DatetimeRepresentation.NUMBERLONG`. + + .. versionadded:: 3.4 + """ + + +class JSONMode: + LEGACY = 0 + """Legacy Extended JSON representation. + + In this mode, :func:`~bson.json_util.dumps` produces PyMongo's legacy + non-standard JSON output. Consider using + :const:`~bson.json_util.JSONMode.RELAXED` or + :const:`~bson.json_util.JSONMode.CANONICAL` instead. + + .. versionadded:: 3.5 + """ + + RELAXED = 1 + """Relaxed Extended JSON representation. + + In this mode, :func:`~bson.json_util.dumps` produces Relaxed Extended JSON, + a mostly JSON-like format. Consider using this for things like a web API, + where one is sending a document (or a projection of a document) that only + uses ordinary JSON type primitives. In particular, the ``int``, + :class:`~bson.int64.Int64`, and ``float`` numeric types are represented in + the native JSON number format. This output is also the most human readable + and is useful for debugging and documentation. + + .. seealso:: The specification for Relaxed `Extended JSON`_. + + .. versionadded:: 3.5 + """ + + CANONICAL = 2 + """Canonical Extended JSON representation. + + In this mode, :func:`~bson.json_util.dumps` produces Canonical Extended + JSON, a type preserving format. Consider using this for things like + testing, where one has to precisely specify expected types in JSON. In + particular, the ``int``, :class:`~bson.int64.Int64`, and ``float`` numeric + types are encoded with type wrappers. + + .. seealso:: The specification for Canonical `Extended JSON`_. + + .. versionadded:: 3.5 + """ + + +class JSONOptions(CodecOptions): + """Encapsulates JSON options for :func:`dumps` and :func:`loads`. + + :Parameters: + - `strict_number_long`: If ``True``, :class:`~bson.int64.Int64` objects + are encoded to MongoDB Extended JSON's *Strict mode* type + `NumberLong`, ie ``'{"$numberLong": "" }'``. Otherwise they + will be encoded as an `int`. Defaults to ``False``. + - `datetime_representation`: The representation to use when encoding + instances of :class:`datetime.datetime`. Defaults to + :const:`~DatetimeRepresentation.LEGACY`. + - `strict_uuid`: If ``True``, :class:`uuid.UUID` object are encoded to + MongoDB Extended JSON's *Strict mode* type `Binary`. Otherwise it + will be encoded as ``'{"$uuid": "" }'``. Defaults to ``False``. + - `json_mode`: The :class:`JSONMode` to use when encoding BSON types to + Extended JSON. Defaults to :const:`~JSONMode.LEGACY`. + - `document_class`: BSON documents returned by :func:`loads` will be + decoded to an instance of this class. Must be a subclass of + :class:`collections.MutableMapping`. Defaults to :class:`dict`. + - `uuid_representation`: The :class:`~bson.binary.UuidRepresentation` + to use when encoding and decoding instances of :class:`uuid.UUID`. + Defaults to :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`. + - `tz_aware`: If ``True``, MongoDB Extended JSON's *Strict mode* type + `Date` will be decoded to timezone aware instances of + :class:`datetime.datetime`. Otherwise they will be naive. Defaults + to ``False``. + - `tzinfo`: A :class:`datetime.tzinfo` subclass that specifies the + timezone from which :class:`~datetime.datetime` objects should be + decoded. Defaults to :const:`~bson.tz_util.utc`. + - `args`: arguments to :class:`~bson.codec_options.CodecOptions` + - `kwargs`: arguments to :class:`~bson.codec_options.CodecOptions` + + .. seealso:: The specification for Relaxed and Canonical `Extended JSON`_. + + .. versionchanged:: 4.0 + The default for `json_mode` was changed from :const:`JSONMode.LEGACY` + to :const:`JSONMode.RELAXED`. + The default for `uuid_representation` was changed from + :const:`~bson.binary.UuidRepresentation.PYTHON_LEGACY` to + :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`. + + .. versionchanged:: 3.5 + Accepts the optional parameter `json_mode`. + + .. versionchanged:: 4.0 + Changed default value of `tz_aware` to False. + """ + + def __new__( + cls, + strict_number_long=None, + datetime_representation=None, + strict_uuid=None, + json_mode=JSONMode.RELAXED, + *args, + **kwargs + ): + kwargs["tz_aware"] = kwargs.get("tz_aware", False) + if kwargs["tz_aware"]: + kwargs["tzinfo"] = kwargs.get("tzinfo", utc) + if datetime_representation not in ( + DatetimeRepresentation.LEGACY, + DatetimeRepresentation.NUMBERLONG, + DatetimeRepresentation.ISO8601, + None, + ): + raise ValueError( + "JSONOptions.datetime_representation must be one of LEGACY, " + "NUMBERLONG, or ISO8601 from DatetimeRepresentation." + ) + self = super(JSONOptions, cls).__new__(cls, *args, **kwargs) + if json_mode not in (JSONMode.LEGACY, JSONMode.RELAXED, JSONMode.CANONICAL): + raise ValueError( + "JSONOptions.json_mode must be one of LEGACY, RELAXED, " + "or CANONICAL from JSONMode." + ) + self.json_mode = json_mode + if self.json_mode == JSONMode.RELAXED: + if strict_number_long: + raise ValueError("Cannot specify strict_number_long=True with" " JSONMode.RELAXED") + if datetime_representation not in (None, DatetimeRepresentation.ISO8601): + raise ValueError( + "datetime_representation must be DatetimeRepresentation." + "ISO8601 or omitted with JSONMode.RELAXED" + ) + if strict_uuid not in (None, True): + raise ValueError("Cannot specify strict_uuid=False with JSONMode.RELAXED") + self.strict_number_long = False + self.datetime_representation = DatetimeRepresentation.ISO8601 + self.strict_uuid = True + elif self.json_mode == JSONMode.CANONICAL: + if strict_number_long not in (None, True): + raise ValueError("Cannot specify strict_number_long=False with" " JSONMode.RELAXED") + if datetime_representation not in (None, DatetimeRepresentation.NUMBERLONG): + raise ValueError( + "datetime_representation must be DatetimeRepresentation." + "NUMBERLONG or omitted with JSONMode.RELAXED" + ) + if strict_uuid not in (None, True): + raise ValueError("Cannot specify strict_uuid=False with JSONMode.RELAXED") + self.strict_number_long = True + self.datetime_representation = DatetimeRepresentation.NUMBERLONG + self.strict_uuid = True + else: # JSONMode.LEGACY + self.strict_number_long = False + self.datetime_representation = DatetimeRepresentation.LEGACY + self.strict_uuid = False + if strict_number_long is not None: + self.strict_number_long = strict_number_long + if datetime_representation is not None: + self.datetime_representation = datetime_representation + if strict_uuid is not None: + self.strict_uuid = strict_uuid + return self + + def _arguments_repr(self): + return ( + "strict_number_long=%r, " + "datetime_representation=%r, " + "strict_uuid=%r, json_mode=%r, %s" + % ( + self.strict_number_long, + self.datetime_representation, + self.strict_uuid, + self.json_mode, + super(JSONOptions, self)._arguments_repr(), + ) + ) + + def _options_dict(self): + # TODO: PYTHON-2442 use _asdict() instead + options_dict = super(JSONOptions, self)._options_dict() + options_dict.update( + { + "strict_number_long": self.strict_number_long, + "datetime_representation": self.datetime_representation, + "strict_uuid": self.strict_uuid, + "json_mode": self.json_mode, + } + ) + return options_dict + + def with_options(self, **kwargs): + """ + Make a copy of this JSONOptions, overriding some options:: + + >>> from .json_util import CANONICAL_JSON_OPTIONS + >>> CANONICAL_JSON_OPTIONS.tz_aware + True + >>> json_options = CANONICAL_JSON_OPTIONS.with_options(tz_aware=False, tzinfo=None) + >>> json_options.tz_aware + False + + .. versionadded:: 3.12 + """ + opts = self._options_dict() + for opt in ("strict_number_long", "datetime_representation", "strict_uuid", "json_mode"): + opts[opt] = kwargs.get(opt, getattr(self, opt)) + opts.update(kwargs) + return JSONOptions(**opts) + + +LEGACY_JSON_OPTIONS = JSONOptions(json_mode=JSONMode.LEGACY) +""":class:`JSONOptions` for encoding to PyMongo's legacy JSON format. + +.. seealso:: The documentation for :const:`bson.json_util.JSONMode.LEGACY`. + +.. versionadded:: 3.5 +""" + +CANONICAL_JSON_OPTIONS = JSONOptions(json_mode=JSONMode.CANONICAL) +""":class:`JSONOptions` for Canonical Extended JSON. + +.. seealso:: The documentation for :const:`bson.json_util.JSONMode.CANONICAL`. + +.. versionadded:: 3.5 +""" + +RELAXED_JSON_OPTIONS = JSONOptions(json_mode=JSONMode.RELAXED) +""":class:`JSONOptions` for Relaxed Extended JSON. + +.. seealso:: The documentation for :const:`bson.json_util.JSONMode.RELAXED`. + +.. versionadded:: 3.5 +""" + +DEFAULT_JSON_OPTIONS = RELAXED_JSON_OPTIONS +"""The default :class:`JSONOptions` for JSON encoding/decoding. + +The same as :const:`RELAXED_JSON_OPTIONS`. + +.. versionchanged:: 4.0 + Changed from :const:`LEGACY_JSON_OPTIONS` to + :const:`RELAXED_JSON_OPTIONS`. + +.. versionadded:: 3.4 +""" + + +def dumps(obj, *args, **kwargs): + """Helper function that wraps :func:`json.dumps`. + + Recursive function that handles all BSON types including + :class:`~bson.binary.Binary` and :class:`~bson.code.Code`. + + :Parameters: + - `json_options`: A :class:`JSONOptions` instance used to modify the + encoding of MongoDB Extended JSON types. Defaults to + :const:`DEFAULT_JSON_OPTIONS`. + + .. versionchanged:: 4.0 + Now outputs MongoDB Relaxed Extended JSON by default (using + :const:`DEFAULT_JSON_OPTIONS`). + + .. versionchanged:: 3.4 + Accepts optional parameter `json_options`. See :class:`JSONOptions`. + """ + json_options = kwargs.pop("json_options", DEFAULT_JSON_OPTIONS) + return json.dumps(_json_convert(obj, json_options), *args, **kwargs) + + +def loads(s, *args, **kwargs): + """Helper function that wraps :func:`json.loads`. + + Automatically passes the object_hook for BSON type conversion. + + Raises ``TypeError``, ``ValueError``, ``KeyError``, or + :exc:`~bson.errors.InvalidId` on invalid MongoDB Extended JSON. + + :Parameters: + - `json_options`: A :class:`JSONOptions` instance used to modify the + decoding of MongoDB Extended JSON types. Defaults to + :const:`DEFAULT_JSON_OPTIONS`. + + .. versionchanged:: 3.5 + Parses Relaxed and Canonical Extended JSON as well as PyMongo's legacy + format. Now raises ``TypeError`` or ``ValueError`` when parsing JSON + type wrappers with values of the wrong type or any extra keys. + + .. versionchanged:: 3.4 + Accepts optional parameter `json_options`. See :class:`JSONOptions`. + """ + json_options = kwargs.pop("json_options", DEFAULT_JSON_OPTIONS) + kwargs["object_pairs_hook"] = lambda pairs: object_pairs_hook(pairs, json_options) + return json.loads(s, *args, **kwargs) + + +def _json_convert(obj, json_options=DEFAULT_JSON_OPTIONS): + """Recursive helper method that converts BSON types so they can be + converted into json. + """ + if hasattr(obj, "items"): + return SON(((k, _json_convert(v, json_options)) for k, v in obj.items())) + elif hasattr(obj, "__iter__") and not isinstance(obj, (str, bytes)): + return list((_json_convert(v, json_options) for v in obj)) + try: + return default(obj, json_options) + except TypeError: + return obj + + +def object_pairs_hook(pairs, json_options=DEFAULT_JSON_OPTIONS): + return object_hook(json_options.document_class(pairs), json_options) + + +def object_hook(dct, json_options=DEFAULT_JSON_OPTIONS): + if "$oid" in dct: + return _parse_canonical_oid(dct) + if ( + isinstance(dct.get("$ref"), str) + and "$id" in dct + and isinstance(dct.get("$db"), (str, type(None))) + ): + return _parse_canonical_dbref(dct) + if "$date" in dct: + return _parse_canonical_datetime(dct, json_options) + if "$regex" in dct: + return _parse_legacy_regex(dct) + if "$minKey" in dct: + return _parse_canonical_minkey(dct) + if "$maxKey" in dct: + return _parse_canonical_maxkey(dct) + if "$binary" in dct: + if "$type" in dct: + return _parse_legacy_binary(dct, json_options) + else: + return _parse_canonical_binary(dct, json_options) + if "$code" in dct: + return _parse_canonical_code(dct) + if "$uuid" in dct: + return _parse_legacy_uuid(dct, json_options) + if "$undefined" in dct: + return None + if "$numberLong" in dct: + return _parse_canonical_int64(dct) + if "$timestamp" in dct: + tsp = dct["$timestamp"] + return Timestamp(tsp["t"], tsp["i"]) + if "$numberDecimal" in dct: + return _parse_canonical_decimal128(dct) + if "$dbPointer" in dct: + return _parse_canonical_dbpointer(dct) + if "$regularExpression" in dct: + return _parse_canonical_regex(dct) + if "$symbol" in dct: + return _parse_canonical_symbol(dct) + if "$numberInt" in dct: + return _parse_canonical_int32(dct) + if "$numberDouble" in dct: + return _parse_canonical_double(dct) + return dct + + +def _parse_legacy_regex(doc): + pattern = doc["$regex"] + # Check if this is the $regex query operator. + if not isinstance(pattern, (str, bytes)): + return doc + flags = 0 + # PyMongo always adds $options but some other tools may not. + for opt in doc.get("$options", ""): + flags |= _RE_OPT_TABLE.get(opt, 0) + return Regex(pattern, flags) + + +def _parse_legacy_uuid(doc, json_options): + """Decode a JSON legacy $uuid to Python UUID.""" + if len(doc) != 1: + raise TypeError("Bad $uuid, extra field(s): %s" % (doc,)) + if not isinstance(doc["$uuid"], str): + raise TypeError("$uuid must be a string: %s" % (doc,)) + if json_options.uuid_representation == UuidRepresentation.UNSPECIFIED: + return Binary.from_uuid(uuid.UUID(doc["$uuid"])) + else: + return uuid.UUID(doc["$uuid"]) + + +def _binary_or_uuid(data, subtype, json_options): + # special handling for UUID + if subtype in ALL_UUID_SUBTYPES: + uuid_representation = json_options.uuid_representation + binary_value = Binary(data, subtype) + if uuid_representation == UuidRepresentation.UNSPECIFIED: + return binary_value + if subtype == UUID_SUBTYPE: + # Legacy behavior: use STANDARD with binary subtype 4. + uuid_representation = UuidRepresentation.STANDARD + elif uuid_representation == UuidRepresentation.STANDARD: + # subtype == OLD_UUID_SUBTYPE + # Legacy behavior: STANDARD is the same as PYTHON_LEGACY. + uuid_representation = UuidRepresentation.PYTHON_LEGACY + return binary_value.as_uuid(uuid_representation) + + if subtype == 0: + return data + return Binary(data, subtype) + + +def _parse_legacy_binary(doc, json_options): + if isinstance(doc["$type"], int): + doc["$type"] = "%02x" % doc["$type"] + subtype = int(doc["$type"], 16) + if subtype >= 0xFFFFFF80: # Handle mongoexport values + subtype = int(doc["$type"][6:], 16) + data = base64.b64decode(doc["$binary"].encode()) + return _binary_or_uuid(data, subtype, json_options) + + +def _parse_canonical_binary(doc, json_options): + binary = doc["$binary"] + b64 = binary["base64"] + subtype = binary["subType"] + if not isinstance(b64, str): + raise TypeError("$binary base64 must be a string: %s" % (doc,)) + if not isinstance(subtype, str) or len(subtype) > 2: + raise TypeError("$binary subType must be a string at most 2 " "characters: %s" % (doc,)) + if len(binary) != 2: + raise TypeError( + '$binary must include only "base64" and "subType" ' "components: %s" % (doc,) + ) + + data = base64.b64decode(b64.encode()) + return _binary_or_uuid(data, int(subtype, 16), json_options) + + +def _parse_canonical_datetime(doc, json_options): + """Decode a JSON datetime to python datetime.datetime.""" + dtm = doc["$date"] + if len(doc) != 1: + raise TypeError("Bad $date, extra field(s): %s" % (doc,)) + # mongoexport 2.6 and newer + if isinstance(dtm, str): + # Parse offset + if dtm[-1] == "Z": + dt = dtm[:-1] + offset = "Z" + elif dtm[-6] in ("+", "-") and dtm[-3] == ":": + # (+|-)HH:MM + dt = dtm[:-6] + offset = dtm[-6:] + elif dtm[-5] in ("+", "-"): + # (+|-)HHMM + dt = dtm[:-5] + offset = dtm[-5:] + elif dtm[-3] in ("+", "-"): + # (+|-)HH + dt = dtm[:-3] + offset = dtm[-3:] + else: + dt = dtm + offset = "" + + # Parse the optional factional seconds portion. + dot_index = dt.rfind(".") + microsecond = 0 + if dot_index != -1: + microsecond = int(float(dt[dot_index:]) * 1000000) + dt = dt[:dot_index] + + aware = datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S").replace( + microsecond=microsecond, tzinfo=utc + ) + + if offset and offset != "Z": + if len(offset) == 6: + hours, minutes = offset[1:].split(":") + secs = int(hours) * 3600 + int(minutes) * 60 + elif len(offset) == 5: + secs = int(offset[1:3]) * 3600 + int(offset[3:]) * 60 + elif len(offset) == 3: + secs = int(offset[1:3]) * 3600 + if offset[0] == "-": + secs *= -1 + aware = aware - datetime.timedelta(seconds=secs) + + if json_options.tz_aware: + if json_options.tzinfo: + aware = aware.astimezone(json_options.tzinfo) + return aware + else: + return aware.replace(tzinfo=None) + return bson._millis_to_datetime(int(dtm), json_options) + + +def _parse_canonical_oid(doc): + """Decode a JSON ObjectId to bson.objectid.ObjectId.""" + if len(doc) != 1: + raise TypeError("Bad $oid, extra field(s): %s" % (doc,)) + return ObjectId(doc["$oid"]) + + +def _parse_canonical_symbol(doc): + """Decode a JSON symbol to Python string.""" + symbol = doc["$symbol"] + if len(doc) != 1: + raise TypeError("Bad $symbol, extra field(s): %s" % (doc,)) + return str(symbol) + + +def _parse_canonical_code(doc): + """Decode a JSON code to bson.code.Code.""" + for key in doc: + if key not in ("$code", "$scope"): + raise TypeError("Bad $code, extra field(s): %s" % (doc,)) + return Code(doc["$code"], scope=doc.get("$scope")) + + +def _parse_canonical_regex(doc): + """Decode a JSON regex to bson.regex.Regex.""" + regex = doc["$regularExpression"] + if len(doc) != 1: + raise TypeError("Bad $regularExpression, extra field(s): %s" % (doc,)) + if len(regex) != 2: + raise TypeError( + 'Bad $regularExpression must include only "pattern"' + 'and "options" components: %s' % (doc,) + ) + opts = regex["options"] + if not isinstance(opts, str): + raise TypeError( + "Bad $regularExpression options, options must be " "string, was type %s" % (type(opts)) + ) + return Regex(regex["pattern"], opts) + + +def _parse_canonical_dbref(doc): + """Decode a JSON DBRef to bson.dbref.DBRef.""" + return DBRef(doc.pop("$ref"), doc.pop("$id"), database=doc.pop("$db", None), **doc) + + +def _parse_canonical_dbpointer(doc): + """Decode a JSON (deprecated) DBPointer to bson.dbref.DBRef.""" + dbref = doc["$dbPointer"] + if len(doc) != 1: + raise TypeError("Bad $dbPointer, extra field(s): %s" % (doc,)) + if isinstance(dbref, DBRef): + dbref_doc = dbref.as_doc() + # DBPointer must not contain $db in its value. + if dbref.database is not None: + raise TypeError("Bad $dbPointer, extra field $db: %s" % (dbref_doc,)) + if not isinstance(dbref.id, ObjectId): + raise TypeError("Bad $dbPointer, $id must be an ObjectId: %s" % (dbref_doc,)) + if len(dbref_doc) != 2: + raise TypeError("Bad $dbPointer, extra field(s) in DBRef: %s" % (dbref_doc,)) + return dbref + else: + raise TypeError("Bad $dbPointer, expected a DBRef: %s" % (doc,)) + + +def _parse_canonical_int32(doc): + """Decode a JSON int32 to python int.""" + i_str = doc["$numberInt"] + if len(doc) != 1: + raise TypeError("Bad $numberInt, extra field(s): %s" % (doc,)) + if not isinstance(i_str, str): + raise TypeError("$numberInt must be string: %s" % (doc,)) + return int(i_str) + + +def _parse_canonical_int64(doc): + """Decode a JSON int64 to bson.int64.Int64.""" + l_str = doc["$numberLong"] + if len(doc) != 1: + raise TypeError("Bad $numberLong, extra field(s): %s" % (doc,)) + return Int64(l_str) + + +def _parse_canonical_double(doc): + """Decode a JSON double to python float.""" + d_str = doc["$numberDouble"] + if len(doc) != 1: + raise TypeError("Bad $numberDouble, extra field(s): %s" % (doc,)) + if not isinstance(d_str, str): + raise TypeError("$numberDouble must be string: %s" % (doc,)) + return float(d_str) + + +def _parse_canonical_decimal128(doc): + """Decode a JSON decimal128 to bson.decimal128.Decimal128.""" + d_str = doc["$numberDecimal"] + if len(doc) != 1: + raise TypeError("Bad $numberDecimal, extra field(s): %s" % (doc,)) + if not isinstance(d_str, str): + raise TypeError("$numberDecimal must be string: %s" % (doc,)) + return Decimal128(d_str) + + +def _parse_canonical_minkey(doc): + """Decode a JSON MinKey to bson.min_key.MinKey.""" + if type(doc["$minKey"]) is not int or doc["$minKey"] != 1: + raise TypeError("$minKey value must be 1: %s" % (doc,)) + if len(doc) != 1: + raise TypeError("Bad $minKey, extra field(s): %s" % (doc,)) + return MinKey() + + +def _parse_canonical_maxkey(doc): + """Decode a JSON MaxKey to bson.max_key.MaxKey.""" + if type(doc["$maxKey"]) is not int or doc["$maxKey"] != 1: + raise TypeError("$maxKey value must be 1: %s", (doc,)) + if len(doc) != 1: + raise TypeError("Bad $minKey, extra field(s): %s" % (doc,)) + return MaxKey() + + +def _encode_binary(data, subtype, json_options): + if json_options.json_mode == JSONMode.LEGACY: + return SON([("$binary", base64.b64encode(data).decode()), ("$type", "%02x" % subtype)]) + return { + "$binary": SON([("base64", base64.b64encode(data).decode()), ("subType", "%02x" % subtype)]) + } + + +def default(obj, json_options=DEFAULT_JSON_OPTIONS): + # We preserve key order when rendering SON, DBRef, etc. as JSON by + # returning a SON for those types instead of a dict. + if isinstance(obj, ObjectId): + return {"$oid": str(obj)} + if isinstance(obj, DBRef): + return _json_convert(obj.as_doc(), json_options=json_options) + if isinstance(obj, datetime.datetime): + if json_options.datetime_representation == DatetimeRepresentation.ISO8601: + if not obj.tzinfo: + obj = obj.replace(tzinfo=utc) + if obj >= EPOCH_AWARE: + off = obj.tzinfo.utcoffset(obj) + if (off.days, off.seconds, off.microseconds) == (0, 0, 0): + tz_string = "Z" + else: + tz_string = obj.strftime("%z") + millis = int(obj.microsecond / 1000) + fracsecs = ".%03d" % (millis,) if millis else "" + return { + "$date": "%s%s%s" % (obj.strftime("%Y-%m-%dT%H:%M:%S"), fracsecs, tz_string) + } + + millis = bson._datetime_to_millis(obj) + if json_options.datetime_representation == DatetimeRepresentation.LEGACY: + return {"$date": millis} + return {"$date": {"$numberLong": str(millis)}} + if json_options.strict_number_long and isinstance(obj, Int64): + return {"$numberLong": str(obj)} + if isinstance(obj, (RE_TYPE, Regex)): + flags = "" + if obj.flags & re.IGNORECASE: + flags += "i" + if obj.flags & re.LOCALE: + flags += "l" + if obj.flags & re.MULTILINE: + flags += "m" + if obj.flags & re.DOTALL: + flags += "s" + if obj.flags & re.UNICODE: + flags += "u" + if obj.flags & re.VERBOSE: + flags += "x" + if isinstance(obj.pattern, str): + pattern = obj.pattern + else: + pattern = obj.pattern.decode("utf-8") + if json_options.json_mode == JSONMode.LEGACY: + return SON([("$regex", pattern), ("$options", flags)]) + return {"$regularExpression": SON([("pattern", pattern), ("options", flags)])} + if isinstance(obj, MinKey): + return {"$minKey": 1} + if isinstance(obj, MaxKey): + return {"$maxKey": 1} + if isinstance(obj, Timestamp): + return {"$timestamp": SON([("t", obj.time), ("i", obj.inc)])} + if isinstance(obj, Code): + if obj.scope is None: + return {"$code": str(obj)} + return SON([("$code", str(obj)), ("$scope", _json_convert(obj.scope, json_options))]) + if isinstance(obj, Binary): + return _encode_binary(obj, obj.subtype, json_options) + if isinstance(obj, bytes): + return _encode_binary(obj, 0, json_options) + if isinstance(obj, uuid.UUID): + if json_options.strict_uuid: + binval = Binary.from_uuid(obj, uuid_representation=json_options.uuid_representation) + return _encode_binary(binval, binval.subtype, json_options) + else: + return {"$uuid": obj.hex} + if isinstance(obj, Decimal128): + return {"$numberDecimal": str(obj)} + if isinstance(obj, bool): + return obj + if json_options.json_mode == JSONMode.CANONICAL and isinstance(obj, int): + if -(2**31) <= obj < 2**31: + return {"$numberInt": str(obj)} + return {"$numberLong": str(obj)} + if json_options.json_mode != JSONMode.LEGACY and isinstance(obj, float): + if math.isnan(obj): + return {"$numberDouble": "NaN"} + elif math.isinf(obj): + representation = "Infinity" if obj > 0 else "-Infinity" + return {"$numberDouble": representation} + elif json_options.json_mode == JSONMode.CANONICAL: + # repr() will return the shortest string guaranteed to produce the + # original value, when float() is called on it. + return {"$numberDouble": str(repr(obj))} + raise TypeError("%r is not JSON serializable" % obj) diff --git a/src/xtquant/xtbson/bson36/max_key.py b/src/xtquant/xtbson/bson36/max_key.py new file mode 100644 index 0000000..322c539 --- /dev/null +++ b/src/xtquant/xtbson/bson36/max_key.py @@ -0,0 +1,54 @@ +# Copyright 2010-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Representation for the MongoDB internal MaxKey type. +""" + + +class MaxKey(object): + """MongoDB internal MaxKey type.""" + + __slots__ = () + + _type_marker = 127 + + def __getstate__(self): + return {} + + def __setstate__(self, state): + pass + + def __eq__(self, other): + return isinstance(other, MaxKey) + + def __hash__(self): + return hash(self._type_marker) + + def __ne__(self, other): + return not self == other + + def __le__(self, other): + return isinstance(other, MaxKey) + + def __lt__(self, dummy): + return False + + def __ge__(self, dummy): + return True + + def __gt__(self, other): + return not isinstance(other, MaxKey) + + def __repr__(self): + return "MaxKey()" diff --git a/src/xtquant/xtbson/bson36/min_key.py b/src/xtquant/xtbson/bson36/min_key.py new file mode 100644 index 0000000..7520dd2 --- /dev/null +++ b/src/xtquant/xtbson/bson36/min_key.py @@ -0,0 +1,54 @@ +# Copyright 2010-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Representation for the MongoDB internal MinKey type. +""" + + +class MinKey(object): + """MongoDB internal MinKey type.""" + + __slots__ = () + + _type_marker = 255 + + def __getstate__(self): + return {} + + def __setstate__(self, state): + pass + + def __eq__(self, other): + return isinstance(other, MinKey) + + def __hash__(self): + return hash(self._type_marker) + + def __ne__(self, other): + return not self == other + + def __le__(self, dummy): + return True + + def __lt__(self, other): + return not isinstance(other, MinKey) + + def __ge__(self, other): + return isinstance(other, MinKey) + + def __gt__(self, dummy): + return False + + def __repr__(self): + return "MinKey()" diff --git a/src/xtquant/xtbson/bson36/objectid.py b/src/xtquant/xtbson/bson36/objectid.py new file mode 100644 index 0000000..6507e0e --- /dev/null +++ b/src/xtquant/xtbson/bson36/objectid.py @@ -0,0 +1,285 @@ +# Copyright 2009-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for working with MongoDB `ObjectIds +`_. +""" + +import binascii +import calendar +import datetime +import os +import struct +import threading +import time +from random import SystemRandom + +from .errors import InvalidId +from .tz_util import utc + +_MAX_COUNTER_VALUE = 0xFFFFFF + + +def _raise_invalid_id(oid): + raise InvalidId( + "%r is not a valid ObjectId, it must be a 12-byte input" + " or a 24-character hex string" % oid + ) + + +def _random_bytes(): + """Get the 5-byte random field of an ObjectId.""" + return os.urandom(5) + + +class ObjectId(object): + """A MongoDB ObjectId.""" + + _pid = os.getpid() + + _inc = SystemRandom().randint(0, _MAX_COUNTER_VALUE) + _inc_lock = threading.Lock() + + __random = _random_bytes() + + __slots__ = ("__id",) + + _type_marker = 7 + + def __init__(self, oid=None): + """Initialize a new ObjectId. + + An ObjectId is a 12-byte unique identifier consisting of: + + - a 4-byte value representing the seconds since the Unix epoch, + - a 5-byte random value, + - a 3-byte counter, starting with a random value. + + By default, ``ObjectId()`` creates a new unique identifier. The + optional parameter `oid` can be an :class:`ObjectId`, or any 12 + :class:`bytes`. + + For example, the 12 bytes b'foo-bar-quux' do not follow the ObjectId + specification but they are acceptable input:: + + >>> ObjectId(b'foo-bar-quux') + ObjectId('666f6f2d6261722d71757578') + + `oid` can also be a :class:`str` of 24 hex digits:: + + >>> ObjectId('0123456789ab0123456789ab') + ObjectId('0123456789ab0123456789ab') + + Raises :class:`~bson.errors.InvalidId` if `oid` is not 12 bytes nor + 24 hex digits, or :class:`TypeError` if `oid` is not an accepted type. + + :Parameters: + - `oid` (optional): a valid ObjectId. + + .. seealso:: The MongoDB documentation on `ObjectIds`_. + + .. versionchanged:: 3.8 + :class:`~bson.objectid.ObjectId` now implements the `ObjectID + specification version 0.2 + `_. + """ + if oid is None: + self.__generate() + elif isinstance(oid, bytes) and len(oid) == 12: + self.__id = oid + else: + self.__validate(oid) + + @classmethod + def from_datetime(cls, generation_time): + """Create a dummy ObjectId instance with a specific generation time. + + This method is useful for doing range queries on a field + containing :class:`ObjectId` instances. + + .. warning:: + It is not safe to insert a document containing an ObjectId + generated using this method. This method deliberately + eliminates the uniqueness guarantee that ObjectIds + generally provide. ObjectIds generated with this method + should be used exclusively in queries. + + `generation_time` will be converted to UTC. Naive datetime + instances will be treated as though they already contain UTC. + + An example using this helper to get documents where ``"_id"`` + was generated before January 1, 2010 would be: + + >>> gen_time = datetime.datetime(2010, 1, 1) + >>> dummy_id = ObjectId.from_datetime(gen_time) + >>> result = collection.find({"_id": {"$lt": dummy_id}}) + + :Parameters: + - `generation_time`: :class:`~datetime.datetime` to be used + as the generation time for the resulting ObjectId. + """ + if generation_time.utcoffset() is not None: + generation_time = generation_time - generation_time.utcoffset() + timestamp = calendar.timegm(generation_time.timetuple()) + oid = struct.pack(">I", int(timestamp)) + b"\x00\x00\x00\x00\x00\x00\x00\x00" + return cls(oid) + + @classmethod + def is_valid(cls, oid): + """Checks if a `oid` string is valid or not. + + :Parameters: + - `oid`: the object id to validate + + .. versionadded:: 2.3 + """ + if not oid: + return False + + try: + ObjectId(oid) + return True + except (InvalidId, TypeError): + return False + + @classmethod + def _random(cls): + """Generate a 5-byte random number once per process.""" + pid = os.getpid() + if pid != cls._pid: + cls._pid = pid + cls.__random = _random_bytes() + return cls.__random + + def __generate(self): + """Generate a new value for this ObjectId.""" + + # 4 bytes current time + oid = struct.pack(">I", int(time.time())) + + # 5 bytes random + oid += ObjectId._random() + + # 3 bytes inc + with ObjectId._inc_lock: + oid += struct.pack(">I", ObjectId._inc)[1:4] + ObjectId._inc = (ObjectId._inc + 1) % (_MAX_COUNTER_VALUE + 1) + + self.__id = oid + + def __validate(self, oid): + """Validate and use the given id for this ObjectId. + + Raises TypeError if id is not an instance of + (:class:`basestring` (:class:`str` or :class:`bytes` + in python 3), ObjectId) and InvalidId if it is not a + valid ObjectId. + + :Parameters: + - `oid`: a valid ObjectId + """ + if isinstance(oid, ObjectId): + self.__id = oid.binary + elif isinstance(oid, str): + if len(oid) == 24: + try: + self.__id = bytes.fromhex(oid) + except (TypeError, ValueError): + _raise_invalid_id(oid) + else: + _raise_invalid_id(oid) + else: + raise TypeError( + "id must be an instance of (bytes, str, ObjectId), " "not %s" % (type(oid),) + ) + + @property + def binary(self): + """12-byte binary representation of this ObjectId.""" + return self.__id + + @property + def generation_time(self): + """A :class:`datetime.datetime` instance representing the time of + generation for this :class:`ObjectId`. + + The :class:`datetime.datetime` is timezone aware, and + represents the generation time in UTC. It is precise to the + second. + """ + timestamp = struct.unpack(">I", self.__id[0:4])[0] + return datetime.datetime.fromtimestamp(timestamp, utc) + + def __getstate__(self): + """return value of object for pickling. + needed explicitly because __slots__() defined. + """ + return self.__id + + def __setstate__(self, value): + """explicit state set from pickling""" + # Provide backwards compatability with OIDs + # pickled with pymongo-1.9 or older. + if isinstance(value, dict): + oid = value["_ObjectId__id"] + else: + oid = value + # ObjectIds pickled in python 2.x used `str` for __id. + # In python 3.x this has to be converted to `bytes` + # by encoding latin-1. + if isinstance(oid, str): + self.__id = oid.encode("latin-1") + else: + self.__id = oid + + def __str__(self): + return binascii.hexlify(self.__id).decode() + + def __repr__(self): + return "ObjectId('%s')" % (str(self),) + + def __eq__(self, other): + if isinstance(other, ObjectId): + return self.__id == other.binary + return NotImplemented + + def __ne__(self, other): + if isinstance(other, ObjectId): + return self.__id != other.binary + return NotImplemented + + def __lt__(self, other): + if isinstance(other, ObjectId): + return self.__id < other.binary + return NotImplemented + + def __le__(self, other): + if isinstance(other, ObjectId): + return self.__id <= other.binary + return NotImplemented + + def __gt__(self, other): + if isinstance(other, ObjectId): + return self.__id > other.binary + return NotImplemented + + def __ge__(self, other): + if isinstance(other, ObjectId): + return self.__id >= other.binary + return NotImplemented + + def __hash__(self): + """Get a hash value for this :class:`ObjectId`.""" + return hash(self.__id) diff --git a/src/xtquant/xtbson/bson36/raw_bson.py b/src/xtquant/xtbson/bson36/raw_bson.py new file mode 100644 index 0000000..12e0328 --- /dev/null +++ b/src/xtquant/xtbson/bson36/raw_bson.py @@ -0,0 +1,174 @@ +# Copyright 2015-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing raw BSON documents. + +Inserting and Retrieving RawBSONDocuments +========================================= + +Example: Moving a document between different databases/collections + +.. doctest:: + + >>> import bson + >>> from pymongo import MongoClient + >>> from .raw_bson import RawBSONDocument + >>> client = MongoClient(document_class=RawBSONDocument) + >>> client.drop_database('db') + >>> client.drop_database('replica_db') + >>> db = client.db + >>> result = db.test.insert_many([{'_id': 1, 'a': 1}, + ... {'_id': 2, 'b': 1}, + ... {'_id': 3, 'c': 1}, + ... {'_id': 4, 'd': 1}]) + >>> replica_db = client.replica_db + >>> for doc in db.test.find(): + ... print(f"raw document: {doc.raw}") + ... print(f"decoded document: {bson.decode(doc.raw)}") + ... result = replica_db.test.insert_one(doc) + raw document: b'...' + decoded document: {'_id': 1, 'a': 1} + raw document: b'...' + decoded document: {'_id': 2, 'b': 1} + raw document: b'...' + decoded document: {'_id': 3, 'c': 1} + raw document: b'...' + decoded document: {'_id': 4, 'd': 1} + +For use cases like moving documents across different databases or writing binary +blobs to disk, using raw BSON documents provides better speed and avoids the +overhead of decoding or encoding BSON. +""" + +from collections.abc import Mapping as _Mapping + +from . import _get_object_size, _raw_to_dict +from .codec_options import _RAW_BSON_DOCUMENT_MARKER +from .codec_options import DEFAULT_CODEC_OPTIONS as DEFAULT +from .son import SON + + +class RawBSONDocument(_Mapping): + """Representation for a MongoDB document that provides access to the raw + BSON bytes that compose it. + + Only when a field is accessed or modified within the document does + RawBSONDocument decode its bytes. + """ + + __slots__ = ("__raw", "__inflated_doc", "__codec_options") + _type_marker = _RAW_BSON_DOCUMENT_MARKER + + def __init__(self, bson_bytes, codec_options=None): + """Create a new :class:`RawBSONDocument` + + :class:`RawBSONDocument` is a representation of a BSON document that + provides access to the underlying raw BSON bytes. Only when a field is + accessed or modified within the document does RawBSONDocument decode + its bytes. + + :class:`RawBSONDocument` implements the ``Mapping`` abstract base + class from the standard library so it can be used like a read-only + ``dict``:: + + >>> from . import encode + >>> raw_doc = RawBSONDocument(encode({'_id': 'my_doc'})) + >>> raw_doc.raw + b'...' + >>> raw_doc['_id'] + 'my_doc' + + :Parameters: + - `bson_bytes`: the BSON bytes that compose this document + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions` whose ``document_class`` + must be :class:`RawBSONDocument`. The default is + :attr:`DEFAULT_RAW_BSON_OPTIONS`. + + .. versionchanged:: 3.8 + :class:`RawBSONDocument` now validates that the ``bson_bytes`` + passed in represent a single bson document. + + .. versionchanged:: 3.5 + If a :class:`~bson.codec_options.CodecOptions` is passed in, its + `document_class` must be :class:`RawBSONDocument`. + """ + self.__raw = bson_bytes + self.__inflated_doc = None + # Can't default codec_options to DEFAULT_RAW_BSON_OPTIONS in signature, + # it refers to this class RawBSONDocument. + if codec_options is None: + codec_options = DEFAULT_RAW_BSON_OPTIONS + elif codec_options.document_class is not RawBSONDocument: + raise TypeError( + "RawBSONDocument cannot use CodecOptions with document " + "class %s" % (codec_options.document_class,) + ) + self.__codec_options = codec_options + # Validate the bson object size. + _get_object_size(bson_bytes, 0, len(bson_bytes)) + + @property + def raw(self): + """The raw BSON bytes composing this document.""" + return self.__raw + + def items(self): + """Lazily decode and iterate elements in this document.""" + return self.__inflated.items() + + @property + def __inflated(self): + if self.__inflated_doc is None: + # We already validated the object's size when this document was + # created, so no need to do that again. + # Use SON to preserve ordering of elements. + self.__inflated_doc = _inflate_bson(self.__raw, self.__codec_options) + return self.__inflated_doc + + def __getitem__(self, item): + return self.__inflated[item] + + def __iter__(self): + return iter(self.__inflated) + + def __len__(self): + return len(self.__inflated) + + def __eq__(self, other): + if isinstance(other, RawBSONDocument): + return self.__raw == other.raw + return NotImplemented + + def __repr__(self): + return "RawBSONDocument(%r, codec_options=%r)" % (self.raw, self.__codec_options) + + +def _inflate_bson(bson_bytes, codec_options): + """Inflates the top level fields of a BSON document. + + :Parameters: + - `bson_bytes`: the BSON bytes that compose this document + - `codec_options`: An instance of + :class:`~bson.codec_options.CodecOptions` whose ``document_class`` + must be :class:`RawBSONDocument`. + """ + # Use SON to preserve ordering of elements. + return _raw_to_dict(bson_bytes, 4, len(bson_bytes) - 1, codec_options, SON()) + + +DEFAULT_RAW_BSON_OPTIONS = DEFAULT.with_options(document_class=RawBSONDocument) +"""The default :class:`~bson.codec_options.CodecOptions` for +:class:`RawBSONDocument`. +""" diff --git a/src/xtquant/xtbson/bson36/regex.py b/src/xtquant/xtbson/bson36/regex.py new file mode 100644 index 0000000..98899d6 --- /dev/null +++ b/src/xtquant/xtbson/bson36/regex.py @@ -0,0 +1,131 @@ +# Copyright 2013-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing MongoDB regular expressions. +""" + +import re + +from ._helpers import _getstate_slots, _setstate_slots +from .son import RE_TYPE + + +def str_flags_to_int(str_flags): + flags = 0 + if "i" in str_flags: + flags |= re.IGNORECASE + if "l" in str_flags: + flags |= re.LOCALE + if "m" in str_flags: + flags |= re.MULTILINE + if "s" in str_flags: + flags |= re.DOTALL + if "u" in str_flags: + flags |= re.UNICODE + if "x" in str_flags: + flags |= re.VERBOSE + + return flags + + +class Regex(object): + """BSON regular expression data.""" + + __slots__ = ("pattern", "flags") + + __getstate__ = _getstate_slots + __setstate__ = _setstate_slots + + _type_marker = 11 + + @classmethod + def from_native(cls, regex): + """Convert a Python regular expression into a ``Regex`` instance. + + Note that in Python 3, a regular expression compiled from a + :class:`str` has the ``re.UNICODE`` flag set. If it is undesirable + to store this flag in a BSON regular expression, unset it first:: + + >>> pattern = re.compile('.*') + >>> regex = Regex.from_native(pattern) + >>> regex.flags ^= re.UNICODE + >>> db.collection.insert_one({'pattern': regex}) + + :Parameters: + - `regex`: A regular expression object from ``re.compile()``. + + .. warning:: + Python regular expressions use a different syntax and different + set of flags than MongoDB, which uses `PCRE`_. A regular + expression retrieved from the server may not compile in + Python, or may match a different set of strings in Python than + when used in a MongoDB query. + + .. _PCRE: http://www.pcre.org/ + """ + if not isinstance(regex, RE_TYPE): + raise TypeError("regex must be a compiled regular expression, not %s" % type(regex)) + + return Regex(regex.pattern, regex.flags) + + def __init__(self, pattern, flags=0): + """BSON regular expression data. + + This class is useful to store and retrieve regular expressions that are + incompatible with Python's regular expression dialect. + + :Parameters: + - `pattern`: string + - `flags`: (optional) an integer bitmask, or a string of flag + characters like "im" for IGNORECASE and MULTILINE + """ + if not isinstance(pattern, (str, bytes)): + raise TypeError("pattern must be a string, not %s" % type(pattern)) + self.pattern = pattern + + if isinstance(flags, str): + self.flags = str_flags_to_int(flags) + elif isinstance(flags, int): + self.flags = flags + else: + raise TypeError("flags must be a string or int, not %s" % type(flags)) + + def __eq__(self, other): + if isinstance(other, Regex): + return self.pattern == other.pattern and self.flags == other.flags + else: + return NotImplemented + + __hash__ = None + + def __ne__(self, other): + return not self == other + + def __repr__(self): + return "Regex(%r, %r)" % (self.pattern, self.flags) + + def try_compile(self): + """Compile this :class:`Regex` as a Python regular expression. + + .. warning:: + Python regular expressions use a different syntax and different + set of flags than MongoDB, which uses `PCRE`_. A regular + expression retrieved from the server may not compile in + Python, or may match a different set of strings in Python than + when used in a MongoDB query. :meth:`try_compile()` may raise + :exc:`re.error`. + + .. _PCRE: http://www.pcre.org/ + """ + return re.compile(self.pattern, self.flags) diff --git a/src/xtquant/xtbson/bson36/son.py b/src/xtquant/xtbson/bson36/son.py new file mode 100644 index 0000000..9ad37b5 --- /dev/null +++ b/src/xtquant/xtbson/bson36/son.py @@ -0,0 +1,184 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for creating and manipulating SON, the Serialized Ocument Notation. + +Regular dictionaries can be used instead of SON objects, but not when the order +of keys is important. A SON object can be used just like a normal Python +dictionary.""" + +import copy +import re +from collections.abc import Mapping as _Mapping + +# This sort of sucks, but seems to be as good as it gets... +# This is essentially the same as re._pattern_type +RE_TYPE = type(re.compile("")) + + +class SON(dict): + """SON data. + + A subclass of dict that maintains ordering of keys and provides a + few extra niceties for dealing with SON. SON provides an API + similar to collections.OrderedDict. + """ + + def __init__(self, data=None, **kwargs): + self.__keys = [] + dict.__init__(self) + self.update(data) + self.update(kwargs) + + def __new__(cls, *args, **kwargs): + instance = super(SON, cls).__new__(cls, *args, **kwargs) + instance.__keys = [] + return instance + + def __repr__(self): + result = [] + for key in self.__keys: + result.append("(%r, %r)" % (key, self[key])) + return "SON([%s])" % ", ".join(result) + + def __setitem__(self, key, value): + if key not in self.__keys: + self.__keys.append(key) + dict.__setitem__(self, key, value) + + def __delitem__(self, key): + self.__keys.remove(key) + dict.__delitem__(self, key) + + def copy(self): + other = SON() + other.update(self) + return other + + # TODO this is all from UserDict.DictMixin. it could probably be made more + # efficient. + # second level definitions support higher levels + def __iter__(self): + for k in self.__keys: + yield k + + def has_key(self, key): + return key in self.__keys + + def iterkeys(self): + return self.__iter__() + + # fourth level uses definitions from lower levels + def itervalues(self): + for _, v in self.items(): + yield v + + def values(self): + return [v for _, v in self.items()] + + def clear(self): + self.__keys = [] + super(SON, self).clear() + + def setdefault(self, key, default=None): + try: + return self[key] + except KeyError: + self[key] = default + return default + + def pop(self, key, *args): + if len(args) > 1: + raise TypeError("pop expected at most 2 arguments, got " + repr(1 + len(args))) + try: + value = self[key] + except KeyError: + if args: + return args[0] + raise + del self[key] + return value + + def popitem(self): + try: + k, v = next(iter(self.items())) + except StopIteration: + raise KeyError("container is empty") + del self[k] + return (k, v) + + def update(self, other=None, **kwargs): + # Make progressively weaker assumptions about "other" + if other is None: + pass + elif hasattr(other, "items"): + for k, v in other.items(): + self[k] = v + elif hasattr(other, "keys"): + for k in other.keys(): + self[k] = other[k] + else: + for k, v in other: + self[k] = v + if kwargs: + self.update(kwargs) + + def get(self, key, default=None): + try: + return self[key] + except KeyError: + return default + + def __eq__(self, other): + """Comparison to another SON is order-sensitive while comparison to a + regular dictionary is order-insensitive. + """ + if isinstance(other, SON): + return len(self) == len(other) and list(self.items()) == list(other.items()) + return self.to_dict() == other + + def __ne__(self, other): + return not self == other + + def __len__(self): + return len(self.__keys) + + def to_dict(self): + """Convert a SON document to a normal Python dictionary instance. + + This is trickier than just *dict(...)* because it needs to be + recursive. + """ + + def transform_value(value): + if isinstance(value, list): + return [transform_value(v) for v in value] + elif isinstance(value, _Mapping): + return dict([(k, transform_value(v)) for k, v in value.items()]) + else: + return value + + return transform_value(dict(self)) + + def __deepcopy__(self, memo): + out = SON() + val_id = id(self) + if val_id in memo: + return memo.get(val_id) + memo[val_id] = out + for k, v in self.items(): + if not isinstance(v, RE_TYPE): + v = copy.deepcopy(v, memo) + out[k] = v + return out diff --git a/src/xtquant/xtbson/bson36/timestamp.py b/src/xtquant/xtbson/bson36/timestamp.py new file mode 100644 index 0000000..59247f8 --- /dev/null +++ b/src/xtquant/xtbson/bson36/timestamp.py @@ -0,0 +1,122 @@ +# Copyright 2010-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing MongoDB internal Timestamps. +""" + +import calendar +import datetime + +from ._helpers import _getstate_slots, _setstate_slots +from .tz_util import utc + +UPPERBOUND = 4294967296 + + +class Timestamp(object): + """MongoDB internal timestamps used in the opLog.""" + + __slots__ = ("__time", "__inc") + + __getstate__ = _getstate_slots + __setstate__ = _setstate_slots + + _type_marker = 17 + + def __init__(self, time, inc): + """Create a new :class:`Timestamp`. + + This class is only for use with the MongoDB opLog. If you need + to store a regular timestamp, please use a + :class:`~datetime.datetime`. + + Raises :class:`TypeError` if `time` is not an instance of + :class: `int` or :class:`~datetime.datetime`, or `inc` is not + an instance of :class:`int`. Raises :class:`ValueError` if + `time` or `inc` is not in [0, 2**32). + + :Parameters: + - `time`: time in seconds since epoch UTC, or a naive UTC + :class:`~datetime.datetime`, or an aware + :class:`~datetime.datetime` + - `inc`: the incrementing counter + """ + if isinstance(time, datetime.datetime): + if time.utcoffset() is not None: + time = time - time.utcoffset() + time = int(calendar.timegm(time.timetuple())) + if not isinstance(time, int): + raise TypeError("time must be an instance of int") + if not isinstance(inc, int): + raise TypeError("inc must be an instance of int") + if not 0 <= time < UPPERBOUND: + raise ValueError("time must be contained in [0, 2**32)") + if not 0 <= inc < UPPERBOUND: + raise ValueError("inc must be contained in [0, 2**32)") + + self.__time = time + self.__inc = inc + + @property + def time(self): + """Get the time portion of this :class:`Timestamp`.""" + return self.__time + + @property + def inc(self): + """Get the inc portion of this :class:`Timestamp`.""" + return self.__inc + + def __eq__(self, other): + if isinstance(other, Timestamp): + return self.__time == other.time and self.__inc == other.inc + else: + return NotImplemented + + def __hash__(self): + return hash(self.time) ^ hash(self.inc) + + def __ne__(self, other): + return not self == other + + def __lt__(self, other): + if isinstance(other, Timestamp): + return (self.time, self.inc) < (other.time, other.inc) + return NotImplemented + + def __le__(self, other): + if isinstance(other, Timestamp): + return (self.time, self.inc) <= (other.time, other.inc) + return NotImplemented + + def __gt__(self, other): + if isinstance(other, Timestamp): + return (self.time, self.inc) > (other.time, other.inc) + return NotImplemented + + def __ge__(self, other): + if isinstance(other, Timestamp): + return (self.time, self.inc) >= (other.time, other.inc) + return NotImplemented + + def __repr__(self): + return "Timestamp(%s, %s)" % (self.__time, self.__inc) + + def as_datetime(self): + """Return a :class:`~datetime.datetime` instance corresponding + to the time portion of this :class:`Timestamp`. + + The returned datetime's timezone is UTC. + """ + return datetime.datetime.fromtimestamp(self.__time, utc) diff --git a/src/xtquant/xtbson/bson36/tz_util.py b/src/xtquant/xtbson/bson36/tz_util.py new file mode 100644 index 0000000..6cfb230 --- /dev/null +++ b/src/xtquant/xtbson/bson36/tz_util.py @@ -0,0 +1,51 @@ +# Copyright 2010-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Timezone related utilities for BSON.""" + +from datetime import timedelta, tzinfo + +ZERO = timedelta(0) + + +class FixedOffset(tzinfo): + """Fixed offset timezone, in minutes east from UTC. + + Implementation based from the Python `standard library documentation + `_. + Defining __getinitargs__ enables pickling / copying. + """ + + def __init__(self, offset, name): + if isinstance(offset, timedelta): + self.__offset = offset + else: + self.__offset = timedelta(minutes=offset) + self.__name = name + + def __getinitargs__(self): + return self.__offset, self.__name + + def utcoffset(self, dt): + return self.__offset + + def tzname(self, dt): + return self.__name + + def dst(self, dt): + return ZERO + + +utc = FixedOffset(0, "UTC") +"""Fixed offset timezone representing UTC.""" diff --git a/src/xtquant/xtbson/bson37/__init__.py b/src/xtquant/xtbson/bson37/__init__.py new file mode 100644 index 0000000..fe664da --- /dev/null +++ b/src/xtquant/xtbson/bson37/__init__.py @@ -0,0 +1,1404 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""BSON (Binary JSON) encoding and decoding. + +The mapping from Python types to BSON types is as follows: + +======================================= ============= =================== +Python Type BSON Type Supported Direction +======================================= ============= =================== +None null both +bool boolean both +int [#int]_ int32 / int64 py -> bson +`bson.int64.Int64` int64 both +float number (real) both +str string both +list array both +dict / `SON` object both +datetime.datetime [#dt]_ [#dt2]_ date both +`bson.regex.Regex` regex both +compiled re [#re]_ regex py -> bson +`bson.binary.Binary` binary both +`bson.objectid.ObjectId` oid both +`bson.dbref.DBRef` dbref both +None undefined bson -> py +`bson.code.Code` code both +str symbol bson -> py +bytes [#bytes]_ binary both +======================================= ============= =================== + +.. [#int] A Python int will be saved as a BSON int32 or BSON int64 depending + on its size. A BSON int32 will always decode to a Python int. A BSON + int64 will always decode to a :class:`~bson.int64.Int64`. +.. [#dt] datetime.datetime instances will be rounded to the nearest + millisecond when saved +.. [#dt2] all datetime.datetime instances are treated as *naive*. clients + should always use UTC. +.. [#re] :class:`~bson.regex.Regex` instances and regular expression + objects from ``re.compile()`` are both saved as BSON regular expressions. + BSON regular expressions are decoded as :class:`~bson.regex.Regex` + instances. +.. [#bytes] The bytes type is encoded as BSON binary with + subtype 0. It will be decoded back to bytes. +""" + +import datetime +import itertools +import os +import re +import struct +import sys +import uuid +from codecs import utf_8_decode as _utf_8_decode +from codecs import utf_8_encode as _utf_8_encode +from collections import abc as _abc +from typing import ( + IO, + TYPE_CHECKING, + Any, + BinaryIO, + Callable, + Dict, + Generator, + Iterator, + List, + Mapping, + MutableMapping, + NoReturn, + Optional, + Sequence, + Tuple, + Type, + TypeVar, + Union, + cast, +) + +from .binary import ( + ALL_UUID_SUBTYPES, + CSHARP_LEGACY, + JAVA_LEGACY, + OLD_UUID_SUBTYPE, + STANDARD, + UUID_SUBTYPE, + Binary, + UuidRepresentation, +) +from .code import Code +from .codec_options import ( + DEFAULT_CODEC_OPTIONS, + CodecOptions, + DatetimeConversion, + _DocumentType, + _raw_document_class, +) +from .datetime_ms import ( + EPOCH_AWARE, + EPOCH_NAIVE, + DatetimeMS, + _datetime_to_millis, + _millis_to_datetime, + utc, +) +from .dbref import DBRef +from .decimal128 import Decimal128 +from .errors import InvalidBSON, InvalidDocument, InvalidStringData +from .int64 import Int64 +from .max_key import MaxKey +from .min_key import MinKey +from .objectid import ObjectId +from .regex import Regex +from .son import RE_TYPE, SON +from .timestamp import Timestamp + +# Import some modules for type-checking only. +if TYPE_CHECKING: + from array import array + from mmap import mmap + +try: + from . import _cbson # type: ignore[attr-defined] + + _USE_C = True +except ImportError: + _USE_C = False + +__all__ = [ + "ALL_UUID_SUBTYPES", + "CSHARP_LEGACY", + "JAVA_LEGACY", + "OLD_UUID_SUBTYPE", + "STANDARD", + "UUID_SUBTYPE", + "Binary", + "UuidRepresentation", + "Code", + "DEFAULT_CODEC_OPTIONS", + "CodecOptions", + "DBRef", + "Decimal128", + "InvalidBSON", + "InvalidDocument", + "InvalidStringData", + "Int64", + "MaxKey", + "MinKey", + "ObjectId", + "Regex", + "RE_TYPE", + "SON", + "Timestamp", + "utc", + "EPOCH_AWARE", + "EPOCH_NAIVE", + "BSONNUM", + "BSONSTR", + "BSONOBJ", + "BSONARR", + "BSONBIN", + "BSONUND", + "BSONOID", + "BSONBOO", + "BSONDAT", + "BSONNUL", + "BSONRGX", + "BSONREF", + "BSONCOD", + "BSONSYM", + "BSONCWS", + "BSONINT", + "BSONTIM", + "BSONLON", + "BSONDEC", + "BSONMIN", + "BSONMAX", + "get_data_and_view", + "gen_list_name", + "encode", + "decode", + "decode_all", + "decode_iter", + "decode_file_iter", + "is_valid", + "BSON", + "has_c", + "DatetimeConversion", + "DatetimeMS", +] + +BSONNUM = b"\x01" # Floating point +BSONSTR = b"\x02" # UTF-8 string +BSONOBJ = b"\x03" # Embedded document +BSONARR = b"\x04" # Array +BSONBIN = b"\x05" # Binary +BSONUND = b"\x06" # Undefined +BSONOID = b"\x07" # ObjectId +BSONBOO = b"\x08" # Boolean +BSONDAT = b"\x09" # UTC Datetime +BSONNUL = b"\x0A" # Null +BSONRGX = b"\x0B" # Regex +BSONREF = b"\x0C" # DBRef +BSONCOD = b"\x0D" # Javascript code +BSONSYM = b"\x0E" # Symbol +BSONCWS = b"\x0F" # Javascript code with scope +BSONINT = b"\x10" # 32bit int +BSONTIM = b"\x11" # Timestamp +BSONLON = b"\x12" # 64bit int +BSONDEC = b"\x13" # Decimal128 +BSONMIN = b"\xFF" # Min key +BSONMAX = b"\x7F" # Max key + + +_UNPACK_FLOAT_FROM = struct.Struct(" Tuple[Any, memoryview]: + if isinstance(data, (bytes, bytearray)): + return data, memoryview(data) + view = memoryview(data) + return view.tobytes(), view + + +def _raise_unknown_type(element_type: int, element_name: str) -> NoReturn: + """Unknown type helper.""" + raise InvalidBSON( + "Detected unknown BSON type %r for fieldname '%s'. Are " + "you using the latest driver version?" % (chr(element_type).encode(), element_name) + ) + + +def _get_int( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[int, int]: + """Decode a BSON int32 to python int.""" + return _UNPACK_INT_FROM(data, position)[0], position + 4 + + +def _get_c_string(data: Any, view: Any, position: int, opts: CodecOptions) -> Tuple[str, int]: + """Decode a BSON 'C' string to python str.""" + end = data.index(b"\x00", position) + return _utf_8_decode(view[position:end], opts.unicode_decode_error_handler, True)[0], end + 1 + + +def _get_float( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[float, int]: + """Decode a BSON double to python float.""" + return _UNPACK_FLOAT_FROM(data, position)[0], position + 8 + + +def _get_string( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, dummy: Any +) -> Tuple[str, int]: + """Decode a BSON string to python str.""" + length = _UNPACK_INT_FROM(data, position)[0] + position += 4 + if length < 1 or obj_end - position < length: + raise InvalidBSON("invalid string length") + end = position + length - 1 + if data[end] != 0: + raise InvalidBSON("invalid end of string") + return _utf_8_decode(view[position:end], opts.unicode_decode_error_handler, True)[0], end + 1 + + +def _get_object_size(data: Any, position: int, obj_end: int) -> Tuple[int, int]: + """Validate and return a BSON document's size.""" + try: + obj_size = _UNPACK_INT_FROM(data, position)[0] + except struct.error as exc: + raise InvalidBSON(str(exc)) + end = position + obj_size - 1 + if data[end] != 0: + raise InvalidBSON("bad eoo") + if end >= obj_end: + raise InvalidBSON("invalid object length") + # If this is the top-level document, validate the total size too. + if position == 0 and obj_size != obj_end: + raise InvalidBSON("invalid object length") + return obj_size, end + + +def _get_object( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, dummy: Any +) -> Tuple[Any, int]: + """Decode a BSON subdocument to opts.document_class or bson.dbref.DBRef.""" + obj_size, end = _get_object_size(data, position, obj_end) + if _raw_document_class(opts.document_class): + return (opts.document_class(data[position : end + 1], opts), position + obj_size) + + obj = _elements_to_dict(data, view, position + 4, end, opts) + + position += obj_size + # If DBRef validation fails, return a normal doc. + if ( + isinstance(obj.get("$ref"), str) + and "$id" in obj + and isinstance(obj.get("$db"), (str, type(None))) + ): + return (DBRef(obj.pop("$ref"), obj.pop("$id", None), obj.pop("$db", None), obj), position) + return obj, position + + +def _get_array( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, element_name: str +) -> Tuple[Any, int]: + """Decode a BSON array to python list.""" + size = _UNPACK_INT_FROM(data, position)[0] + end = position + size - 1 + if data[end] != 0: + raise InvalidBSON("bad eoo") + + position += 4 + end -= 1 + result: List[Any] = [] + + # Avoid doing global and attribute lookups in the loop. + append = result.append + index = data.index + getter = _ELEMENT_GETTER + decoder_map = opts.type_registry._decoder_map + + while position < end: + element_type = data[position] + # Just skip the keys. + position = index(b"\x00", position) + 1 + try: + value, position = getter[element_type]( + data, view, position, obj_end, opts, element_name + ) + except KeyError: + _raise_unknown_type(element_type, element_name) + + if decoder_map: + custom_decoder = decoder_map.get(type(value)) + if custom_decoder is not None: + value = custom_decoder(value) + + append(value) + + if position != end + 1: + raise InvalidBSON("bad array length") + return result, position + 1 + + +def _get_binary( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, dummy1: Any +) -> Tuple[Union[Binary, uuid.UUID], int]: + """Decode a BSON binary to bson.binary.Binary or python UUID.""" + length, subtype = _UNPACK_LENGTH_SUBTYPE_FROM(data, position) + position += 5 + if subtype == 2: + length2 = _UNPACK_INT_FROM(data, position)[0] + position += 4 + if length2 != length - 4: + raise InvalidBSON("invalid binary (st 2) - lengths don't match!") + length = length2 + end = position + length + if length < 0 or end > obj_end: + raise InvalidBSON("bad binary object length") + + # Convert UUID subtypes to native UUIDs. + if subtype in ALL_UUID_SUBTYPES: + uuid_rep = opts.uuid_representation + binary_value = Binary(data[position:end], subtype) + if ( + (uuid_rep == UuidRepresentation.UNSPECIFIED) + or (subtype == UUID_SUBTYPE and uuid_rep != STANDARD) + or (subtype == OLD_UUID_SUBTYPE and uuid_rep == STANDARD) + ): + return binary_value, end + return binary_value.as_uuid(uuid_rep), end + + # Decode subtype 0 to 'bytes'. + if subtype == 0: + value = data[position:end] + else: + value = Binary(data[position:end], subtype) + + return value, end + + +def _get_oid( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[ObjectId, int]: + """Decode a BSON ObjectId to bson.objectid.ObjectId.""" + end = position + 12 + return ObjectId(data[position:end]), end + + +def _get_boolean( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[bool, int]: + """Decode a BSON true/false to python True/False.""" + end = position + 1 + boolean_byte = data[position:end] + if boolean_byte == b"\x00": + return False, end + elif boolean_byte == b"\x01": + return True, end + raise InvalidBSON("invalid boolean value: %r" % boolean_byte) + + +def _get_date( + data: Any, view: Any, position: int, dummy0: int, opts: CodecOptions, dummy1: Any +) -> Tuple[Union[datetime.datetime, DatetimeMS], int]: + """Decode a BSON datetime to python datetime.datetime.""" + return _millis_to_datetime(_UNPACK_LONG_FROM(data, position)[0], opts), position + 8 + + +def _get_code( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, element_name: str +) -> Tuple[Code, int]: + """Decode a BSON code to bson.code.Code.""" + code, position = _get_string(data, view, position, obj_end, opts, element_name) + return Code(code), position + + +def _get_code_w_scope( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, element_name: str +) -> Tuple[Code, int]: + """Decode a BSON code_w_scope to bson.code.Code.""" + code_end = position + _UNPACK_INT_FROM(data, position)[0] + code, position = _get_string(data, view, position + 4, code_end, opts, element_name) + scope, position = _get_object(data, view, position, code_end, opts, element_name) + if position != code_end: + raise InvalidBSON("scope outside of javascript code boundaries") + return Code(code, scope), position + + +def _get_regex( + data: Any, view: Any, position: int, dummy0: Any, opts: CodecOptions, dummy1: Any +) -> Tuple[Regex, int]: + """Decode a BSON regex to bson.regex.Regex or a python pattern object.""" + pattern, position = _get_c_string(data, view, position, opts) + bson_flags, position = _get_c_string(data, view, position, opts) + bson_re = Regex(pattern, bson_flags) + return bson_re, position + + +def _get_ref( + data: Any, view: Any, position: int, obj_end: int, opts: CodecOptions, element_name: str +) -> Tuple[DBRef, int]: + """Decode (deprecated) BSON DBPointer to bson.dbref.DBRef.""" + collection, position = _get_string(data, view, position, obj_end, opts, element_name) + oid, position = _get_oid(data, view, position, obj_end, opts, element_name) + return DBRef(collection, oid), position + + +def _get_timestamp( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[Timestamp, int]: + """Decode a BSON timestamp to bson.timestamp.Timestamp.""" + inc, timestamp = _UNPACK_TIMESTAMP_FROM(data, position) + return Timestamp(timestamp, inc), position + 8 + + +def _get_int64( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[Int64, int]: + """Decode a BSON int64 to bson.int64.Int64.""" + return Int64(_UNPACK_LONG_FROM(data, position)[0]), position + 8 + + +def _get_decimal128( + data: Any, view: Any, position: int, dummy0: Any, dummy1: Any, dummy2: Any +) -> Tuple[Decimal128, int]: + """Decode a BSON decimal128 to bson.decimal128.Decimal128.""" + end = position + 16 + return Decimal128.from_bid(data[position:end]), end + + +# Each decoder function's signature is: +# - data: bytes +# - view: memoryview that references `data` +# - position: int, beginning of object in 'data' to decode +# - obj_end: int, end of object to decode in 'data' if variable-length type +# - opts: a CodecOptions +_ELEMENT_GETTER: Dict[int, Callable[..., Tuple[Any, int]]] = { + ord(BSONNUM): _get_float, + ord(BSONSTR): _get_string, + ord(BSONOBJ): _get_object, + ord(BSONARR): _get_array, + ord(BSONBIN): _get_binary, + ord(BSONUND): lambda u, v, w, x, y, z: (None, w), # Deprecated undefined + ord(BSONOID): _get_oid, + ord(BSONBOO): _get_boolean, + ord(BSONDAT): _get_date, + ord(BSONNUL): lambda u, v, w, x, y, z: (None, w), + ord(BSONRGX): _get_regex, + ord(BSONREF): _get_ref, # Deprecated DBPointer + ord(BSONCOD): _get_code, + ord(BSONSYM): _get_string, # Deprecated symbol + ord(BSONCWS): _get_code_w_scope, + ord(BSONINT): _get_int, + ord(BSONTIM): _get_timestamp, + ord(BSONLON): _get_int64, + ord(BSONDEC): _get_decimal128, + ord(BSONMIN): lambda u, v, w, x, y, z: (MinKey(), w), + ord(BSONMAX): lambda u, v, w, x, y, z: (MaxKey(), w), +} + + +if _USE_C: + + def _element_to_dict( + data: Any, + view: Any, + position: int, + obj_end: int, + opts: CodecOptions, + raw_array: bool = False, + ) -> Any: + return _cbson._element_to_dict(data, position, obj_end, opts, raw_array) + +else: + + def _element_to_dict( + data: Any, + view: Any, + position: int, + obj_end: int, + opts: CodecOptions, + raw_array: bool = False, + ) -> Any: + """Decode a single key, value pair.""" + element_type = data[position] + position += 1 + element_name, position = _get_c_string(data, view, position, opts) + if raw_array and element_type == ord(BSONARR): + _, end = _get_object_size(data, position, len(data)) + return element_name, view[position : end + 1], end + 1 + try: + value, position = _ELEMENT_GETTER[element_type]( + data, view, position, obj_end, opts, element_name + ) + except KeyError: + _raise_unknown_type(element_type, element_name) + + if opts.type_registry._decoder_map: + custom_decoder = opts.type_registry._decoder_map.get(type(value)) + if custom_decoder is not None: + value = custom_decoder(value) + + return element_name, value, position + + +_T = TypeVar("_T", bound=MutableMapping[Any, Any]) + + +def _raw_to_dict( + data: Any, position: int, obj_end: int, opts: CodecOptions, result: _T, raw_array: bool = False +) -> _T: + data, view = get_data_and_view(data) + return _elements_to_dict(data, view, position, obj_end, opts, result, raw_array=raw_array) + + +def _elements_to_dict( + data: Any, + view: Any, + position: int, + obj_end: int, + opts: CodecOptions, + result: Any = None, + raw_array: bool = False, +) -> Any: + """Decode a BSON document into result.""" + if result is None: + result = opts.document_class() + end = obj_end - 1 + while position < end: + key, value, position = _element_to_dict( + data, view, position, obj_end, opts, raw_array=raw_array + ) + result[key] = value + if position != obj_end: + raise InvalidBSON("bad object or element length") + return result + + +def _bson_to_dict(data: Any, opts: CodecOptions) -> Any: + """Decode a BSON string to document_class.""" + data, view = get_data_and_view(data) + try: + if _raw_document_class(opts.document_class): + return opts.document_class(data, opts) + _, end = _get_object_size(data, 0, len(data)) + return _elements_to_dict(data, view, 4, end, opts) + except InvalidBSON: + raise + except Exception: + # Change exception type to InvalidBSON but preserve traceback. + _, exc_value, exc_tb = sys.exc_info() + raise InvalidBSON(str(exc_value)).with_traceback(exc_tb) + + +if _USE_C: + _bson_to_dict = _cbson._bson_to_dict # noqa: F811 + + +_PACK_FLOAT = struct.Struct(" Generator[bytes, None, None]: + """Generate "keys" for encoded lists in the sequence + b"0\x00", b"1\x00", b"2\x00", ... + + The first 1000 keys are returned from a pre-built cache. All + subsequent keys are generated on the fly. + """ + for name in _LIST_NAMES: + yield name + + counter = itertools.count(1000) + while True: + yield (str(next(counter)) + "\x00").encode("utf8") + + +def _make_c_string_check(string: Union[str, bytes]) -> bytes: + """Make a 'C' string, checking for embedded NUL characters.""" + if isinstance(string, bytes): + if b"\x00" in string: + raise InvalidDocument("BSON keys / regex patterns must not contain a NUL character") + try: + _utf_8_decode(string, None, True) + return string + b"\x00" + except UnicodeError: + raise InvalidStringData("strings in documents must be valid UTF-8: %r" % string) + else: + if "\x00" in string: + raise InvalidDocument("BSON keys / regex patterns must not contain a NUL character") + return _utf_8_encode(string)[0] + b"\x00" + + +def _make_c_string(string: Union[str, bytes]) -> bytes: + """Make a 'C' string.""" + if isinstance(string, bytes): + try: + _utf_8_decode(string, None, True) + return string + b"\x00" + except UnicodeError: + raise InvalidStringData("strings in documents must be valid UTF-8: %r" % string) + else: + return _utf_8_encode(string)[0] + b"\x00" + + +def _make_name(string: str) -> bytes: + """Make a 'C' string suitable for a BSON key.""" + # Keys can only be text in python 3. + if "\x00" in string: + raise InvalidDocument("BSON keys / regex patterns must not contain a NUL character") + return _utf_8_encode(string)[0] + b"\x00" + + +def _encode_float(name: bytes, value: float, dummy0: Any, dummy1: Any) -> bytes: + """Encode a float.""" + return b"\x01" + name + _PACK_FLOAT(value) + + +def _encode_bytes(name: bytes, value: bytes, dummy0: Any, dummy1: Any) -> bytes: + """Encode a python bytes.""" + # Python3 special case. Store 'bytes' as BSON binary subtype 0. + return b"\x05" + name + _PACK_INT(len(value)) + b"\x00" + value + + +def _encode_mapping(name: bytes, value: Any, check_keys: bool, opts: CodecOptions) -> bytes: + """Encode a mapping type.""" + if _raw_document_class(value): + return b"\x03" + name + value.raw + data = b"".join([_element_to_bson(key, val, check_keys, opts) for key, val in value.items()]) + return b"\x03" + name + _PACK_INT(len(data) + 5) + data + b"\x00" + + +def _encode_dbref(name: bytes, value: DBRef, check_keys: bool, opts: CodecOptions) -> bytes: + """Encode bson.dbref.DBRef.""" + buf = bytearray(b"\x03" + name + b"\x00\x00\x00\x00") + begin = len(buf) - 4 + + buf += _name_value_to_bson(b"$ref\x00", value.collection, check_keys, opts) + buf += _name_value_to_bson(b"$id\x00", value.id, check_keys, opts) + if value.database is not None: + buf += _name_value_to_bson(b"$db\x00", value.database, check_keys, opts) + for key, val in value._DBRef__kwargs.items(): + buf += _element_to_bson(key, val, check_keys, opts) + + buf += b"\x00" + buf[begin : begin + 4] = _PACK_INT(len(buf) - begin) + return bytes(buf) + + +def _encode_list(name: bytes, value: Sequence[Any], check_keys: bool, opts: CodecOptions) -> bytes: + """Encode a list/tuple.""" + lname = gen_list_name() + data = b"".join([_name_value_to_bson(next(lname), item, check_keys, opts) for item in value]) + return b"\x04" + name + _PACK_INT(len(data) + 5) + data + b"\x00" + + +def _encode_text(name: bytes, value: str, dummy0: Any, dummy1: Any) -> bytes: + """Encode a python str.""" + bvalue = _utf_8_encode(value)[0] + return b"\x02" + name + _PACK_INT(len(bvalue) + 1) + bvalue + b"\x00" + + +def _encode_binary(name: bytes, value: Binary, dummy0: Any, dummy1: Any) -> bytes: + """Encode bson.binary.Binary.""" + subtype = value.subtype + if subtype == 2: + value = _PACK_INT(len(value)) + value # type: ignore + return b"\x05" + name + _PACK_LENGTH_SUBTYPE(len(value), subtype) + value + + +def _encode_uuid(name: bytes, value: uuid.UUID, dummy: Any, opts: CodecOptions) -> bytes: + """Encode uuid.UUID.""" + uuid_representation = opts.uuid_representation + binval = Binary.from_uuid(value, uuid_representation=uuid_representation) + return _encode_binary(name, binval, dummy, opts) + + +def _encode_objectid(name: bytes, value: ObjectId, dummy: Any, dummy1: Any) -> bytes: + """Encode bson.objectid.ObjectId.""" + return b"\x07" + name + value.binary + + +def _encode_bool(name: bytes, value: bool, dummy0: Any, dummy1: Any) -> bytes: + """Encode a python boolean (True/False).""" + return b"\x08" + name + (value and b"\x01" or b"\x00") + + +def _encode_datetime(name: bytes, value: datetime.datetime, dummy0: Any, dummy1: Any) -> bytes: + """Encode datetime.datetime.""" + millis = _datetime_to_millis(value) + return b"\x09" + name + _PACK_LONG(millis) + + +def _encode_datetime_ms(name: bytes, value: DatetimeMS, dummy0: Any, dummy1: Any) -> bytes: + """Encode datetime.datetime.""" + millis = int(value) + return b"\x09" + name + _PACK_LONG(millis) + + +def _encode_none(name: bytes, dummy0: Any, dummy1: Any, dummy2: Any) -> bytes: + """Encode python None.""" + return b"\x0A" + name + + +def _encode_regex(name: bytes, value: Regex, dummy0: Any, dummy1: Any) -> bytes: + """Encode a python regex or bson.regex.Regex.""" + flags = value.flags + # Python 3 common case + if flags == re.UNICODE: + return b"\x0B" + name + _make_c_string_check(value.pattern) + b"u\x00" + elif flags == 0: + return b"\x0B" + name + _make_c_string_check(value.pattern) + b"\x00" + else: + sflags = b"" + if flags & re.IGNORECASE: + sflags += b"i" + if flags & re.LOCALE: + sflags += b"l" + if flags & re.MULTILINE: + sflags += b"m" + if flags & re.DOTALL: + sflags += b"s" + if flags & re.UNICODE: + sflags += b"u" + if flags & re.VERBOSE: + sflags += b"x" + sflags += b"\x00" + return b"\x0B" + name + _make_c_string_check(value.pattern) + sflags + + +def _encode_code(name: bytes, value: Code, dummy: Any, opts: CodecOptions) -> bytes: + """Encode bson.code.Code.""" + cstring = _make_c_string(value) + cstrlen = len(cstring) + if value.scope is None: + return b"\x0D" + name + _PACK_INT(cstrlen) + cstring + scope = _dict_to_bson(value.scope, False, opts, False) + full_length = _PACK_INT(8 + cstrlen + len(scope)) + return b"\x0F" + name + full_length + _PACK_INT(cstrlen) + cstring + scope + + +def _encode_int(name: bytes, value: int, dummy0: Any, dummy1: Any) -> bytes: + """Encode a python int.""" + if -2147483648 <= value <= 2147483647: + return b"\x10" + name + _PACK_INT(value) + else: + try: + return b"\x12" + name + _PACK_LONG(value) + except struct.error: + raise OverflowError("BSON can only handle up to 8-byte ints") + + +def _encode_timestamp(name: bytes, value: Any, dummy0: Any, dummy1: Any) -> bytes: + """Encode bson.timestamp.Timestamp.""" + return b"\x11" + name + _PACK_TIMESTAMP(value.inc, value.time) + + +def _encode_long(name: bytes, value: Any, dummy0: Any, dummy1: Any) -> bytes: + """Encode a python long (python 2.x)""" + try: + return b"\x12" + name + _PACK_LONG(value) + except struct.error: + raise OverflowError("BSON can only handle up to 8-byte ints") + + +def _encode_decimal128(name: bytes, value: Decimal128, dummy0: Any, dummy1: Any) -> bytes: + """Encode bson.decimal128.Decimal128.""" + return b"\x13" + name + value.bid + + +def _encode_minkey(name: bytes, dummy0: Any, dummy1: Any, dummy2: Any) -> bytes: + """Encode bson.min_key.MinKey.""" + return b"\xFF" + name + + +def _encode_maxkey(name: bytes, dummy0: Any, dummy1: Any, dummy2: Any) -> bytes: + """Encode bson.max_key.MaxKey.""" + return b"\x7F" + name + + +# Each encoder function's signature is: +# - name: utf-8 bytes +# - value: a Python data type, e.g. a Python int for _encode_int +# - check_keys: bool, whether to check for invalid names +# - opts: a CodecOptions +_ENCODERS = { + bool: _encode_bool, + bytes: _encode_bytes, + datetime.datetime: _encode_datetime, + DatetimeMS: _encode_datetime_ms, + dict: _encode_mapping, + float: _encode_float, + int: _encode_int, + list: _encode_list, + str: _encode_text, + tuple: _encode_list, + type(None): _encode_none, + uuid.UUID: _encode_uuid, + Binary: _encode_binary, + Int64: _encode_long, + Code: _encode_code, + DBRef: _encode_dbref, + MaxKey: _encode_maxkey, + MinKey: _encode_minkey, + ObjectId: _encode_objectid, + Regex: _encode_regex, + RE_TYPE: _encode_regex, + SON: _encode_mapping, + Timestamp: _encode_timestamp, + Decimal128: _encode_decimal128, + # Special case. This will never be looked up directly. + _abc.Mapping: _encode_mapping, +} + + +_MARKERS = { + 5: _encode_binary, + 7: _encode_objectid, + 11: _encode_regex, + 13: _encode_code, + 17: _encode_timestamp, + 18: _encode_long, + 100: _encode_dbref, + 127: _encode_maxkey, + 255: _encode_minkey, +} + + +_BUILT_IN_TYPES = tuple(t for t in _ENCODERS) + + +def _name_value_to_bson( + name: bytes, + value: Any, + check_keys: bool, + opts: CodecOptions, + in_custom_call: bool = False, + in_fallback_call: bool = False, +) -> bytes: + """Encode a single name, value pair.""" + # First see if the type is already cached. KeyError will only ever + # happen once per subtype. + try: + return _ENCODERS[type(value)](name, value, check_keys, opts) # type: ignore + except KeyError: + pass + + # Second, fall back to trying _type_marker. This has to be done + # before the loop below since users could subclass one of our + # custom types that subclasses a python built-in (e.g. Binary) + marker = getattr(value, "_type_marker", None) + if isinstance(marker, int) and marker in _MARKERS: + func = _MARKERS[marker] + # Cache this type for faster subsequent lookup. + _ENCODERS[type(value)] = func + return func(name, value, check_keys, opts) # type: ignore + + # Third, check if a type encoder is registered for this type. + # Note that subtypes of registered custom types are not auto-encoded. + if not in_custom_call and opts.type_registry._encoder_map: + custom_encoder = opts.type_registry._encoder_map.get(type(value)) + if custom_encoder is not None: + return _name_value_to_bson( + name, custom_encoder(value), check_keys, opts, in_custom_call=True + ) + + # Fourth, test each base type. This will only happen once for + # a subtype of a supported base type. Unlike in the C-extensions, this + # is done after trying the custom type encoder because checking for each + # subtype is expensive. + for base in _BUILT_IN_TYPES: + if isinstance(value, base): + func = _ENCODERS[base] + # Cache this type for faster subsequent lookup. + _ENCODERS[type(value)] = func + return func(name, value, check_keys, opts) # type: ignore + + # As a last resort, try using the fallback encoder, if the user has + # provided one. + fallback_encoder = opts.type_registry._fallback_encoder + if not in_fallback_call and fallback_encoder is not None: + return _name_value_to_bson( + name, fallback_encoder(value), check_keys, opts, in_fallback_call=True + ) + + raise InvalidDocument("cannot encode object: %r, of type: %r" % (value, type(value))) + + +def _element_to_bson(key: Any, value: Any, check_keys: bool, opts: CodecOptions) -> bytes: + """Encode a single key, value pair.""" + if not isinstance(key, str): + raise InvalidDocument("documents must have only string keys, key was %r" % (key,)) + if check_keys: + if key.startswith("$"): + raise InvalidDocument("key %r must not start with '$'" % (key,)) + if "." in key: + raise InvalidDocument("key %r must not contain '.'" % (key,)) + + name = _make_name(key) + return _name_value_to_bson(name, value, check_keys, opts) + + +def _dict_to_bson(doc: Any, check_keys: bool, opts: CodecOptions, top_level: bool = True) -> bytes: + """Encode a document to BSON.""" + if _raw_document_class(doc): + return cast(bytes, doc.raw) + try: + elements = [] + if top_level and "_id" in doc: + elements.append(_name_value_to_bson(b"_id\x00", doc["_id"], check_keys, opts)) + for key, value in doc.items(): + if not top_level or key != "_id": + elements.append(_element_to_bson(key, value, check_keys, opts)) + except AttributeError: + raise TypeError("encoder expected a mapping type but got: %r" % (doc,)) + + encoded = b"".join(elements) + return _PACK_INT(len(encoded) + 5) + encoded + b"\x00" + + +if _USE_C: + _dict_to_bson = _cbson._dict_to_bson # noqa: F811 + + +_CODEC_OPTIONS_TYPE_ERROR = TypeError("codec_options must be an instance of CodecOptions") + + +_DocumentIn = Mapping[str, Any] +_ReadableBuffer = Union[bytes, memoryview, "mmap", "array"] + + +def encode( + document: _DocumentIn, + check_keys: bool = False, + codec_options: CodecOptions = DEFAULT_CODEC_OPTIONS, +) -> bytes: + """Encode a document to BSON. + + A document can be any mapping type (like :class:`dict`). + + Raises :class:`TypeError` if `document` is not a mapping type, + or contains keys that are not instances of + :class:`basestring` (:class:`str` in python 3). Raises + :class:`~bson.errors.InvalidDocument` if `document` cannot be + converted to :class:`BSON`. + + :Parameters: + - `document`: mapping type representing a document + - `check_keys` (optional): check if keys start with '$' or + contain '.', raising :class:`~bson.errors.InvalidDocument` in + either case + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionadded:: 3.9 + """ + if not isinstance(codec_options, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + return _dict_to_bson(document, check_keys, codec_options) + + +def decode( + data: _ReadableBuffer, codec_options: "Optional[CodecOptions[_DocumentType]]" = None +) -> _DocumentType: + """Decode BSON to a document. + + By default, returns a BSON document represented as a Python + :class:`dict`. To use a different :class:`MutableMapping` class, + configure a :class:`~bson.codec_options.CodecOptions`:: + + >>> import collections # From Python standard library. + >>> import bson + >>> from .codec_options import CodecOptions + >>> data = bson.encode({'a': 1}) + >>> decoded_doc = bson.decode(data) + + >>> options = CodecOptions(document_class=collections.OrderedDict) + >>> decoded_doc = bson.decode(data, codec_options=options) + >>> type(decoded_doc) + + + :Parameters: + - `data`: the BSON to decode. Any bytes-like object that implements + the buffer protocol. + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionadded:: 3.9 + """ + opts: CodecOptions = codec_options or DEFAULT_CODEC_OPTIONS + if not isinstance(opts, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + return _bson_to_dict(data, opts) + + +def _decode_all(data: _ReadableBuffer, opts: "CodecOptions[_DocumentType]") -> List[_DocumentType]: + """Decode a BSON data to multiple documents.""" + data, view = get_data_and_view(data) + data_len = len(data) + docs: List[_DocumentType] = [] + position = 0 + end = data_len - 1 + use_raw = _raw_document_class(opts.document_class) + try: + while position < end: + obj_size = _UNPACK_INT_FROM(data, position)[0] + if data_len - position < obj_size: + raise InvalidBSON("invalid object size") + obj_end = position + obj_size - 1 + if data[obj_end] != 0: + raise InvalidBSON("bad eoo") + if use_raw: + docs.append(opts.document_class(data[position : obj_end + 1], opts)) # type: ignore + else: + docs.append(_elements_to_dict(data, view, position + 4, obj_end, opts)) + position += obj_size + return docs + except InvalidBSON: + raise + except Exception: + # Change exception type to InvalidBSON but preserve traceback. + _, exc_value, exc_tb = sys.exc_info() + raise InvalidBSON(str(exc_value)).with_traceback(exc_tb) + + +if _USE_C: + _decode_all = _cbson._decode_all # noqa: F811 + + +def decode_all( + data: _ReadableBuffer, codec_options: "Optional[CodecOptions[_DocumentType]]" = None +) -> List[_DocumentType]: + """Decode BSON data to multiple documents. + + `data` must be a bytes-like object implementing the buffer protocol that + provides concatenated, valid, BSON-encoded documents. + + :Parameters: + - `data`: BSON data + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.9 + Supports bytes-like objects that implement the buffer protocol. + + .. versionchanged:: 3.0 + Removed `compile_re` option: PyMongo now always represents BSON regular + expressions as :class:`~bson.regex.Regex` objects. Use + :meth:`~bson.regex.Regex.try_compile` to attempt to convert from a + BSON regular expression to a Python regular expression object. + + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + """ + opts = codec_options or DEFAULT_CODEC_OPTIONS + if not isinstance(opts, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + return _decode_all(data, opts) # type: ignore[arg-type] + + +def _decode_selective(rawdoc: Any, fields: Any, codec_options: Any) -> Mapping[Any, Any]: + if _raw_document_class(codec_options.document_class): + # If document_class is RawBSONDocument, use vanilla dictionary for + # decoding command response. + doc = {} + else: + # Else, use the specified document_class. + doc = codec_options.document_class() + for key, value in rawdoc.items(): + if key in fields: + if fields[key] == 1: + doc[key] = _bson_to_dict(rawdoc.raw, codec_options)[key] + else: + doc[key] = _decode_selective(value, fields[key], codec_options) + else: + doc[key] = value + return doc + + +def _array_of_documents_to_buffer(view: memoryview) -> bytes: + # Extract the raw bytes of each document. + position = 0 + _, end = _get_object_size(view, position, len(view)) + position += 4 + buffers: List[memoryview] = [] + append = buffers.append + while position < end - 1: + # Just skip the keys. + while view[position] != 0: + position += 1 + position += 1 + obj_size, _ = _get_object_size(view, position, end) + append(view[position : position + obj_size]) + position += obj_size + if position != end: + raise InvalidBSON("bad object or element length") + return b"".join(buffers) + + +if _USE_C: + _array_of_documents_to_buffer = _cbson._array_of_documents_to_buffer # noqa: F811 + + +def _convert_raw_document_lists_to_streams(document: Any) -> None: + """Convert raw array of documents to a stream of BSON documents.""" + cursor = document.get("cursor") + if not cursor: + return + for key in ("firstBatch", "nextBatch"): + batch = cursor.get(key) + if not batch: + continue + data = _array_of_documents_to_buffer(batch) + if data: + cursor[key] = [data] + else: + cursor[key] = [] + + +def _decode_all_selective(data: Any, codec_options: CodecOptions, fields: Any) -> List[Any]: + """Decode BSON data to a single document while using user-provided + custom decoding logic. + + `data` must be a string representing a valid, BSON-encoded document. + + :Parameters: + - `data`: BSON data + - `codec_options`: An instance of + :class:`~bson.codec_options.CodecOptions` with user-specified type + decoders. If no decoders are found, this method is the same as + ``decode_all``. + - `fields`: Map of document namespaces where data that needs + to be custom decoded lives or None. For example, to custom decode a + list of objects in 'field1.subfield1', the specified value should be + ``{'field1': {'subfield1': 1}}``. If ``fields`` is an empty map or + None, this method is the same as ``decode_all``. + + :Returns: + - `document_list`: Single-member list containing the decoded document. + + .. versionadded:: 3.8 + """ + if not codec_options.type_registry._decoder_map: + return decode_all(data, codec_options) + + if not fields: + return decode_all(data, codec_options.with_options(type_registry=None)) + + # Decode documents for internal use. + from .raw_bson import RawBSONDocument + + internal_codec_options = codec_options.with_options( + document_class=RawBSONDocument, type_registry=None + ) + _doc = _bson_to_dict(data, internal_codec_options) + return [ + _decode_selective( + _doc, + fields, + codec_options, + ) + ] + + +def decode_iter( + data: bytes, codec_options: "Optional[CodecOptions[_DocumentType]]" = None +) -> Iterator[_DocumentType]: + """Decode BSON data to multiple documents as a generator. + + Works similarly to the decode_all function, but yields one document at a + time. + + `data` must be a string of concatenated, valid, BSON-encoded + documents. + + :Parameters: + - `data`: BSON data + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + + .. versionadded:: 2.8 + """ + opts = codec_options or DEFAULT_CODEC_OPTIONS + if not isinstance(opts, CodecOptions): + raise _CODEC_OPTIONS_TYPE_ERROR + + position = 0 + end = len(data) - 1 + while position < end: + obj_size = _UNPACK_INT_FROM(data, position)[0] + elements = data[position : position + obj_size] + position += obj_size + + yield _bson_to_dict(elements, opts) + + +def decode_file_iter( + file_obj: Union[BinaryIO, IO], codec_options: "Optional[CodecOptions[_DocumentType]]" = None +) -> Iterator[_DocumentType]: + """Decode bson data from a file to multiple documents as a generator. + + Works similarly to the decode_all function, but reads from the file object + in chunks and parses bson in chunks, yielding one document at a time. + + :Parameters: + - `file_obj`: A file object containing BSON data. + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + + .. versionadded:: 2.8 + """ + opts = codec_options or DEFAULT_CODEC_OPTIONS + while True: + # Read size of next object. + size_data = file_obj.read(4) + if not size_data: + break # Finished with file normaly. + elif len(size_data) != 4: + raise InvalidBSON("cut off in middle of objsize") + obj_size = _UNPACK_INT_FROM(size_data, 0)[0] - 4 + elements = size_data + file_obj.read(max(0, obj_size)) + yield _bson_to_dict(elements, opts) + + +def is_valid(bson: bytes) -> bool: + """Check that the given string represents valid :class:`BSON` data. + + Raises :class:`TypeError` if `bson` is not an instance of + :class:`str` (:class:`bytes` in python 3). Returns ``True`` + if `bson` is valid :class:`BSON`, ``False`` otherwise. + + :Parameters: + - `bson`: the data to be validated + """ + if not isinstance(bson, bytes): + raise TypeError("BSON data must be an instance of a subclass of bytes") + + try: + _bson_to_dict(bson, DEFAULT_CODEC_OPTIONS) + return True + except Exception: + return False + + +class BSON(bytes): + """BSON (Binary JSON) data. + + .. warning:: Using this class to encode and decode BSON adds a performance + cost. For better performance use the module level functions + :func:`encode` and :func:`decode` instead. + """ + + @classmethod + def encode( + cls: Type["BSON"], + document: _DocumentIn, + check_keys: bool = False, + codec_options: CodecOptions = DEFAULT_CODEC_OPTIONS, + ) -> "BSON": + """Encode a document to a new :class:`BSON` instance. + + A document can be any mapping type (like :class:`dict`). + + Raises :class:`TypeError` if `document` is not a mapping type, + or contains keys that are not instances of + :class:`basestring` (:class:`str` in python 3). Raises + :class:`~bson.errors.InvalidDocument` if `document` cannot be + converted to :class:`BSON`. + + :Parameters: + - `document`: mapping type representing a document + - `check_keys` (optional): check if keys start with '$' or + contain '.', raising :class:`~bson.errors.InvalidDocument` in + either case + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Replaced `uuid_subtype` option with `codec_options`. + """ + return cls(encode(document, check_keys, codec_options)) + + def decode(self, codec_options: "CodecOptions[_DocumentType]" = DEFAULT_CODEC_OPTIONS) -> _DocumentType: # type: ignore[override,assignment] + """Decode this BSON data. + + By default, returns a BSON document represented as a Python + :class:`dict`. To use a different :class:`MutableMapping` class, + configure a :class:`~bson.codec_options.CodecOptions`:: + + >>> import collections # From Python standard library. + >>> import bson + >>> from .codec_options import CodecOptions + >>> data = bson.BSON.encode({'a': 1}) + >>> decoded_doc = bson.BSON(data).decode() + + >>> options = CodecOptions(document_class=collections.OrderedDict) + >>> decoded_doc = bson.BSON(data).decode(codec_options=options) + >>> type(decoded_doc) + + + :Parameters: + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions`. + + .. versionchanged:: 3.0 + Removed `compile_re` option: PyMongo now always represents BSON + regular expressions as :class:`~bson.regex.Regex` objects. Use + :meth:`~bson.regex.Regex.try_compile` to attempt to convert from a + BSON regular expression to a Python regular expression object. + + Replaced `as_class`, `tz_aware`, and `uuid_subtype` options with + `codec_options`. + """ + return decode(self, codec_options) + + +def has_c() -> bool: + """Is the C extension installed?""" + return _USE_C + + +def _after_fork(): + """Releases the ObjectID lock child.""" + if ObjectId._inc_lock.locked(): + ObjectId._inc_lock.release() + + +if hasattr(os, "register_at_fork"): + # This will run in the same thread as the fork was called. + # If we fork in a critical region on the same thread, it should break. + # This is fine since we would never call fork directly from a critical region. + os.register_at_fork(after_in_child=_after_fork) diff --git a/src/xtquant/xtbson/bson37/_helpers.py b/src/xtquant/xtbson/bson37/_helpers.py new file mode 100644 index 0000000..ee3b0f1 --- /dev/null +++ b/src/xtquant/xtbson/bson37/_helpers.py @@ -0,0 +1,41 @@ +# Copyright 2021-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Setstate and getstate functions for objects with __slots__, allowing + compatibility with default pickling protocol +""" +from typing import Any, Mapping + + +def _setstate_slots(self: Any, state: Any) -> None: + for slot, value in state.items(): + setattr(self, slot, value) + + +def _mangle_name(name: str, prefix: str) -> str: + if name.startswith("__"): + prefix = "_" + prefix + else: + prefix = "" + return prefix + name + + +def _getstate_slots(self: Any) -> Mapping[Any, Any]: + prefix = self.__class__.__name__ + ret = dict() + for name in self.__slots__: + mangled_name = _mangle_name(name, prefix) + if hasattr(self, mangled_name): + ret[mangled_name] = getattr(self, mangled_name) + return ret diff --git a/src/xtquant/xtbson/bson37/binary.py b/src/xtquant/xtbson/bson37/binary.py new file mode 100644 index 0000000..b4d38a2 --- /dev/null +++ b/src/xtquant/xtbson/bson37/binary.py @@ -0,0 +1,364 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import TYPE_CHECKING, Any, Tuple, Type, Union +from uuid import UUID + +"""Tools for representing BSON binary data. +""" + +BINARY_SUBTYPE = 0 +"""BSON binary subtype for binary data. + +This is the default subtype for binary data. +""" + +FUNCTION_SUBTYPE = 1 +"""BSON binary subtype for functions. +""" + +OLD_BINARY_SUBTYPE = 2 +"""Old BSON binary subtype for binary data. + +This is the old default subtype, the current +default is :data:`BINARY_SUBTYPE`. +""" + +OLD_UUID_SUBTYPE = 3 +"""Old BSON binary subtype for a UUID. + +:class:`uuid.UUID` instances will automatically be encoded +by :mod:`bson` using this subtype when using +:data:`UuidRepresentation.PYTHON_LEGACY`, +:data:`UuidRepresentation.JAVA_LEGACY`, or +:data:`UuidRepresentation.CSHARP_LEGACY`. + +.. versionadded:: 2.1 +""" + +UUID_SUBTYPE = 4 +"""BSON binary subtype for a UUID. + +This is the standard BSON binary subtype for UUIDs. +:class:`uuid.UUID` instances will automatically be encoded +by :mod:`bson` using this subtype when using +:data:`UuidRepresentation.STANDARD`. +""" + + +if TYPE_CHECKING: + from array import array as _array + from mmap import mmap as _mmap + + +class UuidRepresentation: + UNSPECIFIED = 0 + """An unspecified UUID representation. + + When configured, :class:`uuid.UUID` instances will **not** be + automatically encoded to or decoded from :class:`~bson.binary.Binary`. + When encoding a :class:`uuid.UUID` instance, an error will be raised. + To encode a :class:`uuid.UUID` instance with this configuration, it must + be wrapped in the :class:`~bson.binary.Binary` class by the application + code. When decoding a BSON binary field with a UUID subtype, a + :class:`~bson.binary.Binary` instance will be returned instead of a + :class:`uuid.UUID` instance. + + See :ref:`unspecified-representation-details` for details. + + .. versionadded:: 3.11 + """ + + STANDARD = UUID_SUBTYPE + """The standard UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary, using RFC-4122 byte order with + binary subtype :data:`UUID_SUBTYPE`. + + See :ref:`standard-representation-details` for details. + + .. versionadded:: 3.11 + """ + + PYTHON_LEGACY = OLD_UUID_SUBTYPE + """The Python legacy UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary, using RFC-4122 byte order with + binary subtype :data:`OLD_UUID_SUBTYPE`. + + See :ref:`python-legacy-representation-details` for details. + + .. versionadded:: 3.11 + """ + + JAVA_LEGACY = 5 + """The Java legacy UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary subtype :data:`OLD_UUID_SUBTYPE`, + using the Java driver's legacy byte order. + + See :ref:`java-legacy-representation-details` for details. + + .. versionadded:: 3.11 + """ + + CSHARP_LEGACY = 6 + """The C#/.net legacy UUID representation. + + :class:`uuid.UUID` instances will automatically be encoded to + and decoded from . binary subtype :data:`OLD_UUID_SUBTYPE`, + using the C# driver's legacy byte order. + + See :ref:`csharp-legacy-representation-details` for details. + + .. versionadded:: 3.11 + """ + + +STANDARD = UuidRepresentation.STANDARD +"""An alias for :data:`UuidRepresentation.STANDARD`. + +.. versionadded:: 3.0 +""" + +PYTHON_LEGACY = UuidRepresentation.PYTHON_LEGACY +"""An alias for :data:`UuidRepresentation.PYTHON_LEGACY`. + +.. versionadded:: 3.0 +""" + +JAVA_LEGACY = UuidRepresentation.JAVA_LEGACY +"""An alias for :data:`UuidRepresentation.JAVA_LEGACY`. + +.. versionchanged:: 3.6 + BSON binary subtype 4 is decoded using RFC-4122 byte order. +.. versionadded:: 2.3 +""" + +CSHARP_LEGACY = UuidRepresentation.CSHARP_LEGACY +"""An alias for :data:`UuidRepresentation.CSHARP_LEGACY`. + +.. versionchanged:: 3.6 + BSON binary subtype 4 is decoded using RFC-4122 byte order. +.. versionadded:: 2.3 +""" + +ALL_UUID_SUBTYPES = (OLD_UUID_SUBTYPE, UUID_SUBTYPE) +ALL_UUID_REPRESENTATIONS = ( + UuidRepresentation.UNSPECIFIED, + UuidRepresentation.STANDARD, + UuidRepresentation.PYTHON_LEGACY, + UuidRepresentation.JAVA_LEGACY, + UuidRepresentation.CSHARP_LEGACY, +) +UUID_REPRESENTATION_NAMES = { + UuidRepresentation.UNSPECIFIED: "UuidRepresentation.UNSPECIFIED", + UuidRepresentation.STANDARD: "UuidRepresentation.STANDARD", + UuidRepresentation.PYTHON_LEGACY: "UuidRepresentation.PYTHON_LEGACY", + UuidRepresentation.JAVA_LEGACY: "UuidRepresentation.JAVA_LEGACY", + UuidRepresentation.CSHARP_LEGACY: "UuidRepresentation.CSHARP_LEGACY", +} + +MD5_SUBTYPE = 5 +"""BSON binary subtype for an MD5 hash. +""" + +COLUMN_SUBTYPE = 7 +"""BSON binary subtype for columns. + +.. versionadded:: 4.0 +""" + +USER_DEFINED_SUBTYPE = 128 +"""BSON binary subtype for any user defined structure. +""" + + +class Binary(bytes): + """Representation of BSON binary data. + + This is necessary because we want to represent Python strings as + the BSON string type. We need to wrap binary data so we can tell + the difference between what should be considered binary data and + what should be considered a string when we encode to BSON. + + Raises TypeError if `data` is not an instance of :class:`bytes` + (:class:`str` in python 2) or `subtype` is not an instance of + :class:`int`. Raises ValueError if `subtype` is not in [0, 256). + + .. note:: + In python 3 instances of Binary with subtype 0 will be decoded + directly to :class:`bytes`. + + :Parameters: + - `data`: the binary data to represent. Can be any bytes-like type + that implements the buffer protocol. + - `subtype` (optional): the `binary subtype + `_ + to use + + .. versionchanged:: 3.9 + Support any bytes-like type that implements the buffer protocol. + """ + + _type_marker = 5 + __subtype: int + + def __new__( + cls: Type["Binary"], + data: Union[memoryview, bytes, "_mmap", "_array"], + subtype: int = BINARY_SUBTYPE, + ) -> "Binary": + if not isinstance(subtype, int): + raise TypeError("subtype must be an instance of int") + if subtype >= 256 or subtype < 0: + raise ValueError("subtype must be contained in [0, 256)") + # Support any type that implements the buffer protocol. + self = bytes.__new__(cls, memoryview(data).tobytes()) + self.__subtype = subtype + return self + + @classmethod + def from_uuid( + cls: Type["Binary"], uuid: UUID, uuid_representation: int = UuidRepresentation.STANDARD + ) -> "Binary": + """Create a BSON Binary object from a Python UUID. + + Creates a :class:`~bson.binary.Binary` object from a + :class:`uuid.UUID` instance. Assumes that the native + :class:`uuid.UUID` instance uses the byte-order implied by the + provided ``uuid_representation``. + + Raises :exc:`TypeError` if `uuid` is not an instance of + :class:`~uuid.UUID`. + + :Parameters: + - `uuid`: A :class:`uuid.UUID` instance. + - `uuid_representation`: A member of + :class:`~bson.binary.UuidRepresentation`. Default: + :const:`~bson.binary.UuidRepresentation.STANDARD`. + See :ref:`handling-uuid-data-example` for details. + + .. versionadded:: 3.11 + """ + if not isinstance(uuid, UUID): + raise TypeError("uuid must be an instance of uuid.UUID") + + if uuid_representation not in ALL_UUID_REPRESENTATIONS: + raise ValueError( + "uuid_representation must be a value from .binary.UuidRepresentation" + ) + + if uuid_representation == UuidRepresentation.UNSPECIFIED: + raise ValueError( + "cannot encode native uuid.UUID with " + "UuidRepresentation.UNSPECIFIED. UUIDs can be manually " + "converted to bson.Binary instances using " + "bson.Binary.from_uuid() or a different UuidRepresentation " + "can be configured. See the documentation for " + "UuidRepresentation for more information." + ) + + subtype = OLD_UUID_SUBTYPE + if uuid_representation == UuidRepresentation.PYTHON_LEGACY: + payload = uuid.bytes + elif uuid_representation == UuidRepresentation.JAVA_LEGACY: + from_uuid = uuid.bytes + payload = from_uuid[0:8][::-1] + from_uuid[8:16][::-1] + elif uuid_representation == UuidRepresentation.CSHARP_LEGACY: + payload = uuid.bytes_le + else: + # uuid_representation == UuidRepresentation.STANDARD + subtype = UUID_SUBTYPE + payload = uuid.bytes + + return cls(payload, subtype) + + def as_uuid(self, uuid_representation: int = UuidRepresentation.STANDARD) -> UUID: + """Create a Python UUID from this BSON Binary object. + + Decodes this binary object as a native :class:`uuid.UUID` instance + with the provided ``uuid_representation``. + + Raises :exc:`ValueError` if this :class:`~bson.binary.Binary` instance + does not contain a UUID. + + :Parameters: + - `uuid_representation`: A member of + :class:`~bson.binary.UuidRepresentation`. Default: + :const:`~bson.binary.UuidRepresentation.STANDARD`. + See :ref:`handling-uuid-data-example` for details. + + .. versionadded:: 3.11 + """ + if self.subtype not in ALL_UUID_SUBTYPES: + raise ValueError("cannot decode subtype %s as a uuid" % (self.subtype,)) + + if uuid_representation not in ALL_UUID_REPRESENTATIONS: + raise ValueError( + "uuid_representation must be a value from .binary.UuidRepresentation" + ) + + if uuid_representation == UuidRepresentation.UNSPECIFIED: + raise ValueError("uuid_representation cannot be UNSPECIFIED") + elif uuid_representation == UuidRepresentation.PYTHON_LEGACY: + if self.subtype == OLD_UUID_SUBTYPE: + return UUID(bytes=self) + elif uuid_representation == UuidRepresentation.JAVA_LEGACY: + if self.subtype == OLD_UUID_SUBTYPE: + return UUID(bytes=self[0:8][::-1] + self[8:16][::-1]) + elif uuid_representation == UuidRepresentation.CSHARP_LEGACY: + if self.subtype == OLD_UUID_SUBTYPE: + return UUID(bytes_le=self) + else: + # uuid_representation == UuidRepresentation.STANDARD + if self.subtype == UUID_SUBTYPE: + return UUID(bytes=self) + + raise ValueError( + "cannot decode subtype %s to %s" + % (self.subtype, UUID_REPRESENTATION_NAMES[uuid_representation]) + ) + + @property + def subtype(self) -> int: + """Subtype of this binary data.""" + return self.__subtype + + def __getnewargs__(self) -> Tuple[bytes, int]: # type: ignore[override] + # Work around http://bugs.python.org/issue7382 + data = super(Binary, self).__getnewargs__()[0] + if not isinstance(data, bytes): + data = data.encode("latin-1") + return data, self.__subtype + + def __eq__(self, other: Any) -> bool: + if isinstance(other, Binary): + return (self.__subtype, bytes(self)) == (other.subtype, bytes(other)) + # We don't return NotImplemented here because if we did then + # Binary("foo") == "foo" would return True, since Binary is a + # subclass of str... + return False + + def __hash__(self) -> int: + return super(Binary, self).__hash__() ^ hash(self.__subtype) + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __repr__(self): + return "Binary(%s, %s)" % (bytes.__repr__(self), self.__subtype) diff --git a/src/xtquant/xtbson/bson37/code.py b/src/xtquant/xtbson/bson37/code.py new file mode 100644 index 0000000..b732e82 --- /dev/null +++ b/src/xtquant/xtbson/bson37/code.py @@ -0,0 +1,101 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing JavaScript code in BSON. +""" + +from collections.abc import Mapping as _Mapping +from typing import Any, Mapping, Optional, Type, Union + + +class Code(str): + """BSON's JavaScript code type. + + Raises :class:`TypeError` if `code` is not an instance of + :class:`basestring` (:class:`str` in python 3) or `scope` + is not ``None`` or an instance of :class:`dict`. + + Scope variables can be set by passing a dictionary as the `scope` + argument or by using keyword arguments. If a variable is set as a + keyword argument it will override any setting for that variable in + the `scope` dictionary. + + :Parameters: + - `code`: A string containing JavaScript code to be evaluated or another + instance of Code. In the latter case, the scope of `code` becomes this + Code's :attr:`scope`. + - `scope` (optional): dictionary representing the scope in which + `code` should be evaluated - a mapping from identifiers (as + strings) to values. Defaults to ``None``. This is applied after any + scope associated with a given `code` above. + - `**kwargs` (optional): scope variables can also be passed as + keyword arguments. These are applied after `scope` and `code`. + + .. versionchanged:: 3.4 + The default value for :attr:`scope` is ``None`` instead of ``{}``. + + """ + + _type_marker = 13 + __scope: Union[Mapping[str, Any], None] + + def __new__( + cls: Type["Code"], + code: Union[str, "Code"], + scope: Optional[Mapping[str, Any]] = None, + **kwargs: Any + ) -> "Code": + if not isinstance(code, str): + raise TypeError("code must be an instance of str") + + self = str.__new__(cls, code) + + try: + self.__scope = code.scope # type: ignore + except AttributeError: + self.__scope = None + + if scope is not None: + if not isinstance(scope, _Mapping): + raise TypeError("scope must be an instance of dict") + if self.__scope is not None: + self.__scope.update(scope) # type: ignore + else: + self.__scope = scope + + if kwargs: + if self.__scope is not None: + self.__scope.update(kwargs) # type: ignore + else: + self.__scope = kwargs + + return self + + @property + def scope(self) -> Optional[Mapping[str, Any]]: + """Scope dictionary for this instance or ``None``.""" + return self.__scope + + def __repr__(self): + return "Code(%s, %r)" % (str.__repr__(self), self.__scope) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, Code): + return (self.__scope, str(self)) == (other.__scope, str(other)) + return False + + __hash__: Any = None + + def __ne__(self, other: Any) -> bool: + return not self == other diff --git a/src/xtquant/xtbson/bson37/codec_options.py b/src/xtquant/xtbson/bson37/codec_options.py new file mode 100644 index 0000000..5dd0e03 --- /dev/null +++ b/src/xtquant/xtbson/bson37/codec_options.py @@ -0,0 +1,462 @@ +# Copyright 2014-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for specifying BSON codec options.""" + +import abc +import datetime +import enum +from collections.abc import MutableMapping as _MutableMapping +from typing import ( + Any, + Callable, + Dict, + Iterable, + Mapping, + NamedTuple, + Optional, + Type, + TypeVar, + Union, + cast, +) + +from .binary import ( + ALL_UUID_REPRESENTATIONS, + UUID_REPRESENTATION_NAMES, + UuidRepresentation, +) + + +def _abstractproperty(func: Callable[..., Any]) -> property: + return property(abc.abstractmethod(func)) + + +_RAW_BSON_DOCUMENT_MARKER = 101 + + +def _raw_document_class(document_class: Any) -> bool: + """Determine if a document_class is a RawBSONDocument class.""" + marker = getattr(document_class, "_type_marker", None) + return marker == _RAW_BSON_DOCUMENT_MARKER + + +class TypeEncoder(abc.ABC): + """Base class for defining type codec classes which describe how a + custom type can be transformed to one of the types BSON understands. + + Codec classes must implement the ``python_type`` attribute, and the + ``transform_python`` method to support encoding. + + See :ref:`custom-type-type-codec` documentation for an example. + """ + + @_abstractproperty + def python_type(self) -> Any: + """The Python type to be converted into something serializable.""" + pass + + @abc.abstractmethod + def transform_python(self, value: Any) -> Any: + """Convert the given Python object into something serializable.""" + pass + + +class TypeDecoder(abc.ABC): + """Base class for defining type codec classes which describe how a + BSON type can be transformed to a custom type. + + Codec classes must implement the ``bson_type`` attribute, and the + ``transform_bson`` method to support decoding. + + See :ref:`custom-type-type-codec` documentation for an example. + """ + + @_abstractproperty + def bson_type(self) -> Any: + """The BSON type to be converted into our own type.""" + pass + + @abc.abstractmethod + def transform_bson(self, value: Any) -> Any: + """Convert the given BSON value into our own type.""" + pass + + +class TypeCodec(TypeEncoder, TypeDecoder): + """Base class for defining type codec classes which describe how a + custom type can be transformed to/from one of the types :mod:`bson` + can already encode/decode. + + Codec classes must implement the ``python_type`` attribute, and the + ``transform_python`` method to support encoding, as well as the + ``bson_type`` attribute, and the ``transform_bson`` method to support + decoding. + + See :ref:`custom-type-type-codec` documentation for an example. + """ + + pass + + +_Codec = Union[TypeEncoder, TypeDecoder, TypeCodec] +_Fallback = Callable[[Any], Any] +_DocumentType = TypeVar("_DocumentType", bound=Mapping[str, Any]) + + +class TypeRegistry(object): + """Encapsulates type codecs used in encoding and / or decoding BSON, as + well as the fallback encoder. Type registries cannot be modified after + instantiation. + + ``TypeRegistry`` can be initialized with an iterable of type codecs, and + a callable for the fallback encoder:: + + >>> from .codec_options import TypeRegistry + >>> type_registry = TypeRegistry([Codec1, Codec2, Codec3, ...], + ... fallback_encoder) + + See :ref:`custom-type-type-registry` documentation for an example. + + :Parameters: + - `type_codecs` (optional): iterable of type codec instances. If + ``type_codecs`` contains multiple codecs that transform a single + python or BSON type, the transformation specified by the type codec + occurring last prevails. A TypeError will be raised if one or more + type codecs modify the encoding behavior of a built-in :mod:`bson` + type. + - `fallback_encoder` (optional): callable that accepts a single, + unencodable python value and transforms it into a type that + :mod:`bson` can encode. See :ref:`fallback-encoder-callable` + documentation for an example. + """ + + def __init__( + self, + type_codecs: Optional[Iterable[_Codec]] = None, + fallback_encoder: Optional[_Fallback] = None, + ) -> None: + self.__type_codecs = list(type_codecs or []) + self._fallback_encoder = fallback_encoder + self._encoder_map: Dict[Any, Any] = {} + self._decoder_map: Dict[Any, Any] = {} + + if self._fallback_encoder is not None: + if not callable(fallback_encoder): + raise TypeError("fallback_encoder %r is not a callable" % (fallback_encoder)) + + for codec in self.__type_codecs: + is_valid_codec = False + if isinstance(codec, TypeEncoder): + self._validate_type_encoder(codec) + is_valid_codec = True + self._encoder_map[codec.python_type] = codec.transform_python + if isinstance(codec, TypeDecoder): + is_valid_codec = True + self._decoder_map[codec.bson_type] = codec.transform_bson + if not is_valid_codec: + raise TypeError( + "Expected an instance of %s, %s, or %s, got %r instead" + % (TypeEncoder.__name__, TypeDecoder.__name__, TypeCodec.__name__, codec) + ) + + def _validate_type_encoder(self, codec: _Codec) -> None: + from . import _BUILT_IN_TYPES + + for pytype in _BUILT_IN_TYPES: + if issubclass(cast(TypeCodec, codec).python_type, pytype): + err_msg = ( + "TypeEncoders cannot change how built-in types are " + "encoded (encoder %s transforms type %s)" % (codec, pytype) + ) + raise TypeError(err_msg) + + def __repr__(self): + return "%s(type_codecs=%r, fallback_encoder=%r)" % ( + self.__class__.__name__, + self.__type_codecs, + self._fallback_encoder, + ) + + def __eq__(self, other: Any) -> Any: + if not isinstance(other, type(self)): + return NotImplemented + return ( + (self._decoder_map == other._decoder_map) + and (self._encoder_map == other._encoder_map) + and (self._fallback_encoder == other._fallback_encoder) + ) + + +class DatetimeConversion(int, enum.Enum): + """Options for decoding BSON datetimes.""" + + DATETIME = 1 + """Decode a BSON UTC datetime as a :class:`datetime.datetime`. + + BSON UTC datetimes that cannot be represented as a + :class:`~datetime.datetime` will raise an :class:`OverflowError` + or a :class:`ValueError`. + + .. versionadded 4.3 + """ + + DATETIME_CLAMP = 2 + """Decode a BSON UTC datetime as a :class:`datetime.datetime`, clamping + to :attr:`~datetime.datetime.min` and :attr:`~datetime.datetime.max`. + + .. versionadded 4.3 + """ + + DATETIME_MS = 3 + """Decode a BSON UTC datetime as a :class:`~bson.datetime_ms.DatetimeMS` + object. + + .. versionadded 4.3 + """ + + DATETIME_AUTO = 4 + """Decode a BSON UTC datetime as a :class:`datetime.datetime` if possible, + and a :class:`~bson.datetime_ms.DatetimeMS` if not. + + .. versionadded 4.3 + """ + + +class _BaseCodecOptions(NamedTuple): + document_class: Type[Mapping[str, Any]] + tz_aware: bool + uuid_representation: int + unicode_decode_error_handler: str + tzinfo: Optional[datetime.tzinfo] + type_registry: TypeRegistry + datetime_conversion: Optional[DatetimeConversion] + + +class CodecOptions(_BaseCodecOptions): + """Encapsulates options used encoding and / or decoding BSON. + + The `document_class` option is used to define a custom type for use + decoding BSON documents. Access to the underlying raw BSON bytes for + a document is available using the :class:`~bson.raw_bson.RawBSONDocument` + type:: + + >>> from .raw_bson import RawBSONDocument + >>> from .codec_options import CodecOptions + >>> codec_options = CodecOptions(document_class=RawBSONDocument) + >>> coll = db.get_collection('test', codec_options=codec_options) + >>> doc = coll.find_one() + >>> doc.raw + '\\x16\\x00\\x00\\x00\\x07_id\\x00[0\\x165\\x91\\x10\\xea\\x14\\xe8\\xc5\\x8b\\x93\\x00' + + The document class can be any type that inherits from + :class:`~collections.abc.MutableMapping`:: + + >>> class AttributeDict(dict): + ... # A dict that supports attribute access. + ... def __getattr__(self, key): + ... return self[key] + ... def __setattr__(self, key, value): + ... self[key] = value + ... + >>> codec_options = CodecOptions(document_class=AttributeDict) + >>> coll = db.get_collection('test', codec_options=codec_options) + >>> doc = coll.find_one() + >>> doc._id + ObjectId('5b3016359110ea14e8c58b93') + + See :doc:`/examples/datetimes` for examples using the `tz_aware` and + `tzinfo` options. + + See :doc:`/examples/uuid` for examples using the `uuid_representation` + option. + + :Parameters: + - `document_class`: BSON documents returned in queries will be decoded + to an instance of this class. Must be a subclass of + :class:`~collections.abc.MutableMapping`. Defaults to :class:`dict`. + - `tz_aware`: If ``True``, BSON datetimes will be decoded to timezone + aware instances of :class:`~datetime.datetime`. Otherwise they will be + naive. Defaults to ``False``. + - `uuid_representation`: The BSON representation to use when encoding + and decoding instances of :class:`~uuid.UUID`. Defaults to + :data:`~bson.binary.UuidRepresentation.UNSPECIFIED`. New + applications should consider setting this to + :data:`~bson.binary.UuidRepresentation.STANDARD` for cross language + compatibility. See :ref:`handling-uuid-data-example` for details. + - `unicode_decode_error_handler`: The error handler to apply when + a Unicode-related error occurs during BSON decoding that would + otherwise raise :exc:`UnicodeDecodeError`. Valid options include + 'strict', 'replace', 'backslashreplace', 'surrogateescape', and + 'ignore'. Defaults to 'strict'. + - `tzinfo`: A :class:`~datetime.tzinfo` subclass that specifies the + timezone to/from which :class:`~datetime.datetime` objects should be + encoded/decoded. + - `type_registry`: Instance of :class:`TypeRegistry` used to customize + encoding and decoding behavior. + - `datetime_conversion`: Specifies how UTC datetimes should be decoded + within BSON. Valid options include 'datetime_ms' to return as a + DatetimeMS, 'datetime' to return as a datetime.datetime and + raising a ValueError for out-of-range values, 'datetime_auto' to + return DatetimeMS objects when the underlying datetime is + out-of-range and 'datetime_clamp' to clamp to the minimum and + maximum possible datetimes. Defaults to 'datetime'. + .. versionchanged:: 4.0 + The default for `uuid_representation` was changed from + :const:`~bson.binary.UuidRepresentation.PYTHON_LEGACY` to + :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`. + + .. versionadded:: 3.8 + `type_registry` attribute. + + .. warning:: Care must be taken when changing + `unicode_decode_error_handler` from its default value ('strict'). + The 'replace' and 'ignore' modes should not be used when documents + retrieved from the server will be modified in the client application + and stored back to the server. + """ + + def __new__( + cls: Type["CodecOptions"], + document_class: Optional[Type[Mapping[str, Any]]] = None, + tz_aware: bool = False, + uuid_representation: Optional[int] = UuidRepresentation.UNSPECIFIED, + unicode_decode_error_handler: str = "strict", + tzinfo: Optional[datetime.tzinfo] = None, + type_registry: Optional[TypeRegistry] = None, + datetime_conversion: Optional[DatetimeConversion] = DatetimeConversion.DATETIME, + ) -> "CodecOptions": + doc_class = document_class or dict + # issubclass can raise TypeError for generic aliases like SON[str, Any]. + # In that case we can use the base class for the comparison. + is_mapping = False + try: + is_mapping = issubclass(doc_class, _MutableMapping) + except TypeError: + if hasattr(doc_class, "__origin__"): + is_mapping = issubclass(doc_class.__origin__, _MutableMapping) # type: ignore[union-attr] + if not (is_mapping or _raw_document_class(doc_class)): + raise TypeError( + "document_class must be dict, bson.son.SON, " + "bson.raw_bson.RawBSONDocument, or a " + "subclass of collections.abc.MutableMapping" + ) + if not isinstance(tz_aware, bool): + raise TypeError("tz_aware must be True or False") + if uuid_representation not in ALL_UUID_REPRESENTATIONS: + raise ValueError( + "uuid_representation must be a value from .binary.UuidRepresentation" + ) + if not isinstance(unicode_decode_error_handler, str): + raise ValueError("unicode_decode_error_handler must be a string") + if tzinfo is not None: + if not isinstance(tzinfo, datetime.tzinfo): + raise TypeError("tzinfo must be an instance of datetime.tzinfo") + if not tz_aware: + raise ValueError("cannot specify tzinfo without also setting tz_aware=True") + + type_registry = type_registry or TypeRegistry() + + if not isinstance(type_registry, TypeRegistry): + raise TypeError("type_registry must be an instance of TypeRegistry") + + return tuple.__new__( + cls, + ( + doc_class, + tz_aware, + uuid_representation, + unicode_decode_error_handler, + tzinfo, + type_registry, + datetime_conversion, + ), + ) + + def _arguments_repr(self) -> str: + """Representation of the arguments used to create this object.""" + document_class_repr = "dict" if self.document_class is dict else repr(self.document_class) + + uuid_rep_repr = UUID_REPRESENTATION_NAMES.get( + self.uuid_representation, self.uuid_representation + ) + + return ( + "document_class=%s, tz_aware=%r, uuid_representation=%s, " + "unicode_decode_error_handler=%r, tzinfo=%r, " + "type_registry=%r, datetime_conversion=%s" + % ( + document_class_repr, + self.tz_aware, + uuid_rep_repr, + self.unicode_decode_error_handler, + self.tzinfo, + self.type_registry, + self.datetime_conversion, + ) + ) + + def _options_dict(self) -> Dict[str, Any]: + """Dictionary of the arguments used to create this object.""" + # TODO: PYTHON-2442 use _asdict() instead + return { + "document_class": self.document_class, + "tz_aware": self.tz_aware, + "uuid_representation": self.uuid_representation, + "unicode_decode_error_handler": self.unicode_decode_error_handler, + "tzinfo": self.tzinfo, + "type_registry": self.type_registry, + "datetime_conversion": self.datetime_conversion, + } + + def __repr__(self): + return "%s(%s)" % (self.__class__.__name__, self._arguments_repr()) + + def with_options(self, **kwargs: Any) -> "CodecOptions": + """Make a copy of this CodecOptions, overriding some options:: + + >>> from .codec_options import DEFAULT_CODEC_OPTIONS + >>> DEFAULT_CODEC_OPTIONS.tz_aware + False + >>> options = DEFAULT_CODEC_OPTIONS.with_options(tz_aware=True) + >>> options.tz_aware + True + + .. versionadded:: 3.5 + """ + opts = self._options_dict() + opts.update(kwargs) + return CodecOptions(**opts) + + +DEFAULT_CODEC_OPTIONS = CodecOptions() + + +def _parse_codec_options(options: Any) -> CodecOptions: + """Parse BSON codec options.""" + kwargs = {} + for k in set(options) & { + "document_class", + "tz_aware", + "uuidrepresentation", + "unicode_decode_error_handler", + "tzinfo", + "type_registry", + "datetime_conversion", + }: + if k == "uuidrepresentation": + kwargs["uuid_representation"] = options[k] + else: + kwargs[k] = options[k] + return CodecOptions(**kwargs) diff --git a/src/xtquant/xtbson/bson37/codec_options.pyi b/src/xtquant/xtbson/bson37/codec_options.pyi new file mode 100644 index 0000000..2424516 --- /dev/null +++ b/src/xtquant/xtbson/bson37/codec_options.pyi @@ -0,0 +1,108 @@ +# Copyright 2022-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Workaround for https://bugs.python.org/issue43923. +Ideally we would have done this with a single class, but +generic subclasses *must* take a parameter, and prior to Python 3.9 +or in Python 3.7 and 3.8 with `from __future__ import annotations`, +you get the error: "TypeError: 'type' object is not subscriptable". +""" + +import datetime +import abc +import enum +from typing import Tuple, Generic, Optional, Mapping, Any, TypeVar, Type, Dict, Iterable, Tuple, MutableMapping, Callable, Union + + +class TypeEncoder(abc.ABC, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def python_type(self) -> Any: ... + @abc.abstractmethod + def transform_python(self, value: Any) -> Any: ... + +class TypeDecoder(abc.ABC, metaclass=abc.ABCMeta): + @property + @abc.abstractmethod + def bson_type(self) -> Any: ... + @abc.abstractmethod + def transform_bson(self, value: Any) -> Any: ... + +class TypeCodec(TypeEncoder, TypeDecoder, metaclass=abc.ABCMeta): ... + +Codec = Union[TypeEncoder, TypeDecoder, TypeCodec] +Fallback = Callable[[Any], Any] + +class TypeRegistry: + _decoder_map: Dict[Any, Any] + _encoder_map: Dict[Any, Any] + _fallback_encoder: Optional[Fallback] + + def __init__(self, type_codecs: Optional[Iterable[Codec]] = ..., fallback_encoder: Optional[Fallback] = ...) -> None: ... + def __eq__(self, other: Any) -> Any: ... + + +_DocumentType = TypeVar("_DocumentType", bound=Mapping[str, Any]) + +class DatetimeConversion(int, enum.Enum): + DATETIME = ... + DATETIME_CLAMP = ... + DATETIME_MS = ... + DATETIME_AUTO = ... + +class CodecOptions(Tuple, Generic[_DocumentType]): + document_class: Type[_DocumentType] + tz_aware: bool + uuid_representation: int + unicode_decode_error_handler: Optional[str] + tzinfo: Optional[datetime.tzinfo] + type_registry: TypeRegistry + datetime_conversion: Optional[int] + + def __new__( + cls: Type[CodecOptions], + document_class: Optional[Type[_DocumentType]] = ..., + tz_aware: bool = ..., + uuid_representation: Optional[int] = ..., + unicode_decode_error_handler: Optional[str] = ..., + tzinfo: Optional[datetime.tzinfo] = ..., + type_registry: Optional[TypeRegistry] = ..., + datetime_conversion: Optional[int] = ..., + ) -> CodecOptions[_DocumentType]: ... + + # CodecOptions API + def with_options(self, **kwargs: Any) -> CodecOptions[_DocumentType]: ... + + def _arguments_repr(self) -> str: ... + + def _options_dict(self) -> Dict[Any, Any]: ... + + # NamedTuple API + @classmethod + def _make(cls, obj: Iterable) -> CodecOptions[_DocumentType]: ... + + def _asdict(self) -> Dict[str, Any]: ... + + def _replace(self, **kwargs: Any) -> CodecOptions[_DocumentType]: ... + + _source: str + _fields: Tuple[str] + + +DEFAULT_CODEC_OPTIONS: CodecOptions[MutableMapping[str, Any]] +_RAW_BSON_DOCUMENT_MARKER: int + +def _raw_document_class(document_class: Any) -> bool: ... + +def _parse_codec_options(options: Any) -> CodecOptions: ... diff --git a/src/xtquant/xtbson/bson37/datetime_ms.py b/src/xtquant/xtbson/bson37/datetime_ms.py new file mode 100644 index 0000000..e8bdf40 --- /dev/null +++ b/src/xtquant/xtbson/bson37/datetime_ms.py @@ -0,0 +1,158 @@ +# Copyright 2022-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you +# may not use this file except in compliance with the License. You +# may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. See the License for the specific language governing +# permissions and limitations under the License. + +"""Tools for representing the BSON datetime type. + +.. versionadded:: 4.3 +""" + +import calendar +import datetime +import functools +from typing import Any, Union, cast + +from .codec_options import DEFAULT_CODEC_OPTIONS, CodecOptions, DatetimeConversion +from .tz_util import utc + +EPOCH_AWARE = datetime.datetime.fromtimestamp(0, utc) +EPOCH_NAIVE = datetime.datetime.utcfromtimestamp(0) + + +class DatetimeMS: + """Represents a BSON UTC datetime.""" + + __slots__ = ("_value",) + + def __init__(self, value: Union[int, datetime.datetime]): + """Represents a BSON UTC datetime. + + BSON UTC datetimes are defined as an int64 of milliseconds since the + Unix epoch. The principal use of DatetimeMS is to represent + datetimes outside the range of the Python builtin + :class:`~datetime.datetime` class when + encoding/decoding BSON. + + To decode UTC datetimes as a ``DatetimeMS``, `datetime_conversion` in + :class:`~bson.CodecOptions` must be set to 'datetime_ms' or + 'datetime_auto'. See :ref:`handling-out-of-range-datetimes` for + details. + + :Parameters: + - `value`: An instance of :class:`datetime.datetime` to be + represented as milliseconds since the Unix epoch, or int of + milliseconds since the Unix epoch. + """ + if isinstance(value, int): + if not (-(2**63) <= value <= 2**63 - 1): + raise OverflowError("Must be a 64-bit integer of milliseconds") + self._value = value + elif isinstance(value, datetime.datetime): + self._value = _datetime_to_millis(value) + else: + raise TypeError(f"{type(value)} is not a valid type for DatetimeMS") + + def __hash__(self) -> int: + return hash(self._value) + + def __repr__(self) -> str: + return type(self).__name__ + "(" + str(self._value) + ")" + + def __lt__(self, other: Union["DatetimeMS", int]) -> bool: + return self._value < other + + def __le__(self, other: Union["DatetimeMS", int]) -> bool: + return self._value <= other + + def __eq__(self, other: Any) -> bool: + if isinstance(other, DatetimeMS): + return self._value == other._value + return False + + def __ne__(self, other: Any) -> bool: + if isinstance(other, DatetimeMS): + return self._value != other._value + return True + + def __gt__(self, other: Union["DatetimeMS", int]) -> bool: + return self._value > other + + def __ge__(self, other: Union["DatetimeMS", int]) -> bool: + return self._value >= other + + _type_marker = 9 + + def as_datetime(self, codec_options: CodecOptions = DEFAULT_CODEC_OPTIONS) -> datetime.datetime: + """Create a Python :class:`~datetime.datetime` from this DatetimeMS object. + + :Parameters: + - `codec_options`: A CodecOptions instance for specifying how the + resulting DatetimeMS object will be formatted using ``tz_aware`` + and ``tz_info``. Defaults to + :const:`~bson.codec_options.DEFAULT_CODEC_OPTIONS`. + """ + return cast(datetime.datetime, _millis_to_datetime(self._value, codec_options)) + + def __int__(self) -> int: + return self._value + + +# Inclusive and exclusive min and max for timezones. +# Timezones are hashed by their offset, which is a timedelta +# and therefore there are more than 24 possible timezones. +@functools.lru_cache(maxsize=None) +def _min_datetime_ms(tz=datetime.timezone.utc): + return _datetime_to_millis(datetime.datetime.min.replace(tzinfo=tz)) + + +@functools.lru_cache(maxsize=None) +def _max_datetime_ms(tz=datetime.timezone.utc): + return _datetime_to_millis(datetime.datetime.max.replace(tzinfo=tz)) + + +def _millis_to_datetime(millis: int, opts: CodecOptions) -> Union[datetime.datetime, DatetimeMS]: + """Convert milliseconds since epoch UTC to datetime.""" + if ( + opts.datetime_conversion == DatetimeConversion.DATETIME + or opts.datetime_conversion == DatetimeConversion.DATETIME_CLAMP + or opts.datetime_conversion == DatetimeConversion.DATETIME_AUTO + ): + tz = opts.tzinfo or datetime.timezone.utc + if opts.datetime_conversion == DatetimeConversion.DATETIME_CLAMP: + millis = max(_min_datetime_ms(tz), min(millis, _max_datetime_ms(tz))) + elif opts.datetime_conversion == DatetimeConversion.DATETIME_AUTO: + if not (_min_datetime_ms(tz) <= millis <= _max_datetime_ms(tz)): + return DatetimeMS(millis) + + diff = ((millis % 1000) + 1000) % 1000 + seconds = (millis - diff) // 1000 + micros = diff * 1000 + + if opts.tz_aware: + dt = EPOCH_AWARE + datetime.timedelta(seconds=seconds, microseconds=micros) + if opts.tzinfo: + dt = dt.astimezone(tz) + return dt + else: + return EPOCH_NAIVE + datetime.timedelta(seconds=seconds, microseconds=micros) + elif opts.datetime_conversion == DatetimeConversion.DATETIME_MS: + return DatetimeMS(millis) + else: + raise ValueError("datetime_conversion must be an element of DatetimeConversion") + + +def _datetime_to_millis(dtm: datetime.datetime) -> int: + """Convert datetime to milliseconds since epoch UTC.""" + if dtm.utcoffset() is not None: + dtm = dtm - dtm.utcoffset() # type: ignore + return int(calendar.timegm(dtm.timetuple()) * 1000 + dtm.microsecond // 1000) diff --git a/src/xtquant/xtbson/bson37/dbref.py b/src/xtquant/xtbson/bson37/dbref.py new file mode 100644 index 0000000..d08eb88 --- /dev/null +++ b/src/xtquant/xtbson/bson37/dbref.py @@ -0,0 +1,133 @@ +# Copyright 2009-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for manipulating DBRefs (references to MongoDB documents).""" + +from copy import deepcopy +from typing import Any, Mapping, Optional + +from ._helpers import _getstate_slots, _setstate_slots +from .son import SON + + +class DBRef(object): + """A reference to a document stored in MongoDB.""" + + __slots__ = "__collection", "__id", "__database", "__kwargs" + __getstate__ = _getstate_slots + __setstate__ = _setstate_slots + # DBRef isn't actually a BSON "type" so this number was arbitrarily chosen. + _type_marker = 100 + + def __init__( + self, + collection: str, + id: Any, + database: Optional[str] = None, + _extra: Optional[Mapping[str, Any]] = None, + **kwargs: Any + ) -> None: + """Initialize a new :class:`DBRef`. + + Raises :class:`TypeError` if `collection` or `database` is not + an instance of :class:`basestring` (:class:`str` in python 3). + `database` is optional and allows references to documents to work + across databases. Any additional keyword arguments will create + additional fields in the resultant embedded document. + + :Parameters: + - `collection`: name of the collection the document is stored in + - `id`: the value of the document's ``"_id"`` field + - `database` (optional): name of the database to reference + - `**kwargs` (optional): additional keyword arguments will + create additional, custom fields + + .. seealso:: The MongoDB documentation on `dbrefs `_. + """ + if not isinstance(collection, str): + raise TypeError("collection must be an instance of str") + if database is not None and not isinstance(database, str): + raise TypeError("database must be an instance of str") + + self.__collection = collection + self.__id = id + self.__database = database + kwargs.update(_extra or {}) + self.__kwargs = kwargs + + @property + def collection(self) -> str: + """Get the name of this DBRef's collection.""" + return self.__collection + + @property + def id(self) -> Any: + """Get this DBRef's _id.""" + return self.__id + + @property + def database(self) -> Optional[str]: + """Get the name of this DBRef's database. + + Returns None if this DBRef doesn't specify a database. + """ + return self.__database + + def __getattr__(self, key: Any) -> Any: + try: + return self.__kwargs[key] + except KeyError: + raise AttributeError(key) + + def as_doc(self) -> SON[str, Any]: + """Get the SON document representation of this DBRef. + + Generally not needed by application developers + """ + doc = SON([("$ref", self.collection), ("$id", self.id)]) + if self.database is not None: + doc["$db"] = self.database + doc.update(self.__kwargs) + return doc + + def __repr__(self): + extra = "".join([", %s=%r" % (k, v) for k, v in self.__kwargs.items()]) + if self.database is None: + return "DBRef(%r, %r%s)" % (self.collection, self.id, extra) + return "DBRef(%r, %r, %r%s)" % (self.collection, self.id, self.database, extra) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, DBRef): + us = (self.__database, self.__collection, self.__id, self.__kwargs) + them = (other.__database, other.__collection, other.__id, other.__kwargs) + return us == them + return NotImplemented + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __hash__(self) -> int: + """Get a hash value for this :class:`DBRef`.""" + return hash( + (self.__collection, self.__id, self.__database, tuple(sorted(self.__kwargs.items()))) + ) + + def __deepcopy__(self, memo: Any) -> "DBRef": + """Support function for `copy.deepcopy()`.""" + return DBRef( + deepcopy(self.__collection, memo), + deepcopy(self.__id, memo), + deepcopy(self.__database, memo), + deepcopy(self.__kwargs, memo), + ) diff --git a/src/xtquant/xtbson/bson37/decimal128.py b/src/xtquant/xtbson/bson37/decimal128.py new file mode 100644 index 0000000..ab2d1a2 --- /dev/null +++ b/src/xtquant/xtbson/bson37/decimal128.py @@ -0,0 +1,314 @@ +# Copyright 2016-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for working with the BSON decimal128 type. + +.. versionadded:: 3.4 +""" + +import decimal +import struct +from typing import Any, Sequence, Tuple, Type, Union + +_PACK_64 = struct.Struct(" decimal.Context: + """Returns an instance of :class:`decimal.Context` appropriate + for working with IEEE-754 128-bit decimal floating point values. + """ + opts = _CTX_OPTIONS.copy() + opts["traps"] = [] + return decimal.Context(**opts) # type: ignore + + +def _decimal_to_128(value: _VALUE_OPTIONS) -> Tuple[int, int]: + """Converts a decimal.Decimal to BID (high bits, low bits). + + :Parameters: + - `value`: An instance of decimal.Decimal + """ + with decimal.localcontext(_DEC128_CTX) as ctx: + value = ctx.create_decimal(value) + + if value.is_infinite(): + return _NINF if value.is_signed() else _PINF + + sign, digits, exponent = value.as_tuple() + + if value.is_nan(): + if digits: + raise ValueError("NaN with debug payload is not supported") + if value.is_snan(): + return _NSNAN if value.is_signed() else _PSNAN + return _NNAN if value.is_signed() else _PNAN + + significand = int("".join([str(digit) for digit in digits])) + bit_length = significand.bit_length() + + high = 0 + low = 0 + for i in range(min(64, bit_length)): + if significand & (1 << i): + low |= 1 << i + + for i in range(64, bit_length): + if significand & (1 << i): + high |= 1 << (i - 64) + + biased_exponent = exponent + _EXPONENT_BIAS + + if high >> 49 == 1: + high = high & 0x7FFFFFFFFFFF + high |= _EXPONENT_MASK + high |= (biased_exponent & 0x3FFF) << 47 + else: + high |= biased_exponent << 49 + + if sign: + high |= _SIGN + + return high, low + + +class Decimal128(object): + """BSON Decimal128 type:: + + >>> Decimal128(Decimal("0.0005")) + Decimal128('0.0005') + >>> Decimal128("0.0005") + Decimal128('0.0005') + >>> Decimal128((3474527112516337664, 5)) + Decimal128('0.0005') + + :Parameters: + - `value`: An instance of :class:`decimal.Decimal`, string, or tuple of + (high bits, low bits) from Binary Integer Decimal (BID) format. + + .. note:: :class:`~Decimal128` uses an instance of :class:`decimal.Context` + configured for IEEE-754 Decimal128 when validating parameters. + Signals like :class:`decimal.InvalidOperation`, :class:`decimal.Inexact`, + and :class:`decimal.Overflow` are trapped and raised as exceptions:: + + >>> Decimal128(".13.1") + Traceback (most recent call last): + File "", line 1, in + ... + decimal.InvalidOperation: [] + >>> + >>> Decimal128("1E-6177") + Traceback (most recent call last): + File "", line 1, in + ... + decimal.Inexact: [] + >>> + >>> Decimal128("1E6145") + Traceback (most recent call last): + File "", line 1, in + ... + decimal.Overflow: [, ] + + To ensure the result of a calculation can always be stored as BSON + Decimal128 use the context returned by + :func:`create_decimal128_context`:: + + >>> import decimal + >>> decimal128_ctx = create_decimal128_context() + >>> with decimal.localcontext(decimal128_ctx) as ctx: + ... Decimal128(ctx.create_decimal(".13.3")) + ... + Decimal128('NaN') + >>> + >>> with decimal.localcontext(decimal128_ctx) as ctx: + ... Decimal128(ctx.create_decimal("1E-6177")) + ... + Decimal128('0E-6176') + >>> + >>> with decimal.localcontext(DECIMAL128_CTX) as ctx: + ... Decimal128(ctx.create_decimal("1E6145")) + ... + Decimal128('Infinity') + + To match the behavior of MongoDB's Decimal128 implementation + str(Decimal(value)) may not match str(Decimal128(value)) for NaN values:: + + >>> Decimal128(Decimal('NaN')) + Decimal128('NaN') + >>> Decimal128(Decimal('-NaN')) + Decimal128('NaN') + >>> Decimal128(Decimal('sNaN')) + Decimal128('NaN') + >>> Decimal128(Decimal('-sNaN')) + Decimal128('NaN') + + However, :meth:`~Decimal128.to_decimal` will return the exact value:: + + >>> Decimal128(Decimal('NaN')).to_decimal() + Decimal('NaN') + >>> Decimal128(Decimal('-NaN')).to_decimal() + Decimal('-NaN') + >>> Decimal128(Decimal('sNaN')).to_decimal() + Decimal('sNaN') + >>> Decimal128(Decimal('-sNaN')).to_decimal() + Decimal('-sNaN') + + Two instances of :class:`Decimal128` compare equal if their Binary + Integer Decimal encodings are equal:: + + >>> Decimal128('NaN') == Decimal128('NaN') + True + >>> Decimal128('NaN').bid == Decimal128('NaN').bid + True + + This differs from :class:`decimal.Decimal` comparisons for NaN:: + + >>> Decimal('NaN') == Decimal('NaN') + False + """ + + __slots__ = ("__high", "__low") + + _type_marker = 19 + + def __init__(self, value: _VALUE_OPTIONS) -> None: + if isinstance(value, (str, decimal.Decimal)): + self.__high, self.__low = _decimal_to_128(value) + elif isinstance(value, (list, tuple)): + if len(value) != 2: + raise ValueError( + "Invalid size for creation of Decimal128 " + "from list or tuple. Must have exactly 2 " + "elements." + ) + self.__high, self.__low = value # type: ignore + else: + raise TypeError("Cannot convert %r to Decimal128" % (value,)) + + def to_decimal(self) -> decimal.Decimal: + """Returns an instance of :class:`decimal.Decimal` for this + :class:`Decimal128`. + """ + high = self.__high + low = self.__low + sign = 1 if (high & _SIGN) else 0 + + if (high & _SNAN) == _SNAN: + return decimal.Decimal((sign, (), "N")) # type: ignore + elif (high & _NAN) == _NAN: + return decimal.Decimal((sign, (), "n")) # type: ignore + elif (high & _INF) == _INF: + return decimal.Decimal((sign, (), "F")) # type: ignore + + if (high & _EXPONENT_MASK) == _EXPONENT_MASK: + exponent = ((high & 0x1FFFE00000000000) >> 47) - _EXPONENT_BIAS + return decimal.Decimal((sign, (0,), exponent)) + else: + exponent = ((high & 0x7FFF800000000000) >> 49) - _EXPONENT_BIAS + + arr = bytearray(15) + mask = 0x00000000000000FF + for i in range(14, 6, -1): + arr[i] = (low & mask) >> ((14 - i) << 3) + mask = mask << 8 + + mask = 0x00000000000000FF + for i in range(6, 0, -1): + arr[i] = (high & mask) >> ((6 - i) << 3) + mask = mask << 8 + + mask = 0x0001000000000000 + arr[0] = (high & mask) >> 48 + + # cdecimal only accepts a tuple for digits. + digits = tuple(int(digit) for digit in str(int.from_bytes(arr, "big"))) + + with decimal.localcontext(_DEC128_CTX) as ctx: + return ctx.create_decimal((sign, digits, exponent)) + + @classmethod + def from_bid(cls: Type["Decimal128"], value: bytes) -> "Decimal128": + """Create an instance of :class:`Decimal128` from Binary Integer + Decimal string. + + :Parameters: + - `value`: 16 byte string (128-bit IEEE 754-2008 decimal floating + point in Binary Integer Decimal (BID) format). + """ + if not isinstance(value, bytes): + raise TypeError("value must be an instance of bytes") + if len(value) != 16: + raise ValueError("value must be exactly 16 bytes") + return cls((_UNPACK_64(value[8:])[0], _UNPACK_64(value[:8])[0])) # type: ignore + + @property + def bid(self) -> bytes: + """The Binary Integer Decimal (BID) encoding of this instance.""" + return _PACK_64(self.__low) + _PACK_64(self.__high) + + def __str__(self) -> str: + dec = self.to_decimal() + if dec.is_nan(): + # Required by the drivers spec to match MongoDB behavior. + return "NaN" + return str(dec) + + def __repr__(self): + return "Decimal128('%s')" % (str(self),) + + def __setstate__(self, value: Tuple[int, int]) -> None: + self.__high, self.__low = value + + def __getstate__(self) -> Tuple[int, int]: + return self.__high, self.__low + + def __eq__(self, other: Any) -> bool: + if isinstance(other, Decimal128): + return self.bid == other.bid + return NotImplemented + + def __ne__(self, other: Any) -> bool: + return not self == other diff --git a/src/xtquant/xtbson/bson37/errors.py b/src/xtquant/xtbson/bson37/errors.py new file mode 100644 index 0000000..7333b27 --- /dev/null +++ b/src/xtquant/xtbson/bson37/errors.py @@ -0,0 +1,35 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Exceptions raised by the BSON package.""" + + +class BSONError(Exception): + """Base class for all BSON exceptions.""" + + +class InvalidBSON(BSONError): + """Raised when trying to create a BSON object from invalid data.""" + + +class InvalidStringData(BSONError): + """Raised when trying to encode a string containing non-UTF8 data.""" + + +class InvalidDocument(BSONError): + """Raised when trying to create a BSON object from an invalid document.""" + + +class InvalidId(BSONError): + """Raised when trying to create an ObjectId from invalid data.""" diff --git a/src/xtquant/xtbson/bson37/int64.py b/src/xtquant/xtbson/bson37/int64.py new file mode 100644 index 0000000..ed4dfa5 --- /dev/null +++ b/src/xtquant/xtbson/bson37/int64.py @@ -0,0 +1,39 @@ +# Copyright 2014-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""A BSON wrapper for long (int in python3)""" + +from typing import Any + + +class Int64(int): + """Representation of the BSON int64 type. + + This is necessary because every integral number is an :class:`int` in + Python 3. Small integral numbers are encoded to BSON int32 by default, + but Int64 numbers will always be encoded to BSON int64. + + :Parameters: + - `value`: the numeric value to represent + """ + + __slots__ = () + + _type_marker = 18 + + def __getstate__(self) -> Any: + return {} + + def __setstate__(self, state: Any) -> None: + pass diff --git a/src/xtquant/xtbson/bson37/json_util.py b/src/xtquant/xtbson/bson37/json_util.py new file mode 100644 index 0000000..3d8d13e --- /dev/null +++ b/src/xtquant/xtbson/bson37/json_util.py @@ -0,0 +1,903 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for using Python's :mod:`json` module with BSON documents. + +This module provides two helper methods `dumps` and `loads` that wrap the +native :mod:`json` methods and provide explicit BSON conversion to and from +JSON. :class:`~bson.json_util.JSONOptions` provides a way to control how JSON +is emitted and parsed, with the default being the Relaxed Extended JSON format. +:mod:`~bson.json_util` can also generate Canonical or legacy `Extended JSON`_ +when :const:`CANONICAL_JSON_OPTIONS` or :const:`LEGACY_JSON_OPTIONS` is +provided, respectively. + +.. _Extended JSON: https://github.com/mongodb/specifications/blob/master/source/extended-json.rst + +Example usage (deserialization): + +.. doctest:: + + >>> from .json_util import loads + >>> loads('[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$scope": {}, "$code": "function x() { return 1; }"}}, {"bin": {"$type": "80", "$binary": "AQIDBA=="}}]') + [{'foo': [1, 2]}, {'bar': {'hello': 'world'}}, {'code': Code('function x() { return 1; }', {})}, {'bin': Binary(b'...', 128)}] + +Example usage with :const:`RELAXED_JSON_OPTIONS` (the default): + +.. doctest:: + + >>> from . import Binary, Code + >>> from .json_util import dumps + >>> dumps([{'foo': [1, 2]}, + ... {'bar': {'hello': 'world'}}, + ... {'code': Code("function x() { return 1; }")}, + ... {'bin': Binary(b"\x01\x02\x03\x04")}]) + '[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }"}}, {"bin": {"$binary": {"base64": "AQIDBA==", "subType": "00"}}}]' + +Example usage (with :const:`CANONICAL_JSON_OPTIONS`): + +.. doctest:: + + >>> from . import Binary, Code + >>> from .json_util import dumps, CANONICAL_JSON_OPTIONS + >>> dumps([{'foo': [1, 2]}, + ... {'bar': {'hello': 'world'}}, + ... {'code': Code("function x() { return 1; }")}, + ... {'bin': Binary(b"\x01\x02\x03\x04")}], + ... json_options=CANONICAL_JSON_OPTIONS) + '[{"foo": [{"$numberInt": "1"}, {"$numberInt": "2"}]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }"}}, {"bin": {"$binary": {"base64": "AQIDBA==", "subType": "00"}}}]' + +Example usage (with :const:`LEGACY_JSON_OPTIONS`): + +.. doctest:: + + >>> from . import Binary, Code + >>> from .json_util import dumps, LEGACY_JSON_OPTIONS + >>> dumps([{'foo': [1, 2]}, + ... {'bar': {'hello': 'world'}}, + ... {'code': Code("function x() { return 1; }", {})}, + ... {'bin': Binary(b"\x01\x02\x03\x04")}], + ... json_options=LEGACY_JSON_OPTIONS) + '[{"foo": [1, 2]}, {"bar": {"hello": "world"}}, {"code": {"$code": "function x() { return 1; }", "$scope": {}}}, {"bin": {"$binary": "AQIDBA==", "$type": "00"}}]' + +Alternatively, you can manually pass the `default` to :func:`json.dumps`. +It won't handle :class:`~bson.binary.Binary` and :class:`~bson.code.Code` +instances (as they are extended strings you can't provide custom defaults), +but it will be faster as there is less recursion. + +.. note:: + If your application does not need the flexibility offered by + :class:`JSONOptions` and spends a large amount of time in the `json_util` + module, look to + `python-bsonjs `_ for a nice + performance improvement. `python-bsonjs` is a fast BSON to MongoDB + Extended JSON converter for Python built on top of + `libbson `_. `python-bsonjs` works best + with PyMongo when using :class:`~bson.raw_bson.RawBSONDocument`. +""" + +import base64 +import datetime +import json +import math +import re +import uuid +from typing import Any, Dict, Mapping, Optional, Sequence, Tuple, Type, Union, cast + +from .binary import ALL_UUID_SUBTYPES, UUID_SUBTYPE, Binary, UuidRepresentation +from .code import Code +from .codec_options import CodecOptions, DatetimeConversion +from .datetime_ms import ( + EPOCH_AWARE, + DatetimeMS, + _datetime_to_millis, + _max_datetime_ms, + _millis_to_datetime, +) +from .dbref import DBRef +from .decimal128 import Decimal128 +from .int64 import Int64 +from .max_key import MaxKey +from .min_key import MinKey +from .objectid import ObjectId +from .regex import Regex +from .son import RE_TYPE, SON +from .timestamp import Timestamp +from .tz_util import utc + +_RE_OPT_TABLE = { + "i": re.I, + "l": re.L, + "m": re.M, + "s": re.S, + "u": re.U, + "x": re.X, +} + + +class DatetimeRepresentation: + LEGACY = 0 + """Legacy MongoDB Extended JSON datetime representation. + + :class:`datetime.datetime` instances will be encoded to JSON in the + format `{"$date": }`, where `dateAsMilliseconds` is + a 64-bit signed integer giving the number of milliseconds since the Unix + epoch UTC. This was the default encoding before PyMongo version 3.4. + + .. versionadded:: 3.4 + """ + + NUMBERLONG = 1 + """NumberLong datetime representation. + + :class:`datetime.datetime` instances will be encoded to JSON in the + format `{"$date": {"$numberLong": ""}}`, + where `dateAsMilliseconds` is the string representation of a 64-bit signed + integer giving the number of milliseconds since the Unix epoch UTC. + + .. versionadded:: 3.4 + """ + + ISO8601 = 2 + """ISO-8601 datetime representation. + + :class:`datetime.datetime` instances greater than or equal to the Unix + epoch UTC will be encoded to JSON in the format `{"$date": ""}`. + :class:`datetime.datetime` instances before the Unix epoch UTC will be + encoded as if the datetime representation is + :const:`~DatetimeRepresentation.NUMBERLONG`. + + .. versionadded:: 3.4 + """ + + +class JSONMode: + LEGACY = 0 + """Legacy Extended JSON representation. + + In this mode, :func:`~bson.json_util.dumps` produces PyMongo's legacy + non-standard JSON output. Consider using + :const:`~bson.json_util.JSONMode.RELAXED` or + :const:`~bson.json_util.JSONMode.CANONICAL` instead. + + .. versionadded:: 3.5 + """ + + RELAXED = 1 + """Relaxed Extended JSON representation. + + In this mode, :func:`~bson.json_util.dumps` produces Relaxed Extended JSON, + a mostly JSON-like format. Consider using this for things like a web API, + where one is sending a document (or a projection of a document) that only + uses ordinary JSON type primitives. In particular, the ``int``, + :class:`~bson.int64.Int64`, and ``float`` numeric types are represented in + the native JSON number format. This output is also the most human readable + and is useful for debugging and documentation. + + .. seealso:: The specification for Relaxed `Extended JSON`_. + + .. versionadded:: 3.5 + """ + + CANONICAL = 2 + """Canonical Extended JSON representation. + + In this mode, :func:`~bson.json_util.dumps` produces Canonical Extended + JSON, a type preserving format. Consider using this for things like + testing, where one has to precisely specify expected types in JSON. In + particular, the ``int``, :class:`~bson.int64.Int64`, and ``float`` numeric + types are encoded with type wrappers. + + .. seealso:: The specification for Canonical `Extended JSON`_. + + .. versionadded:: 3.5 + """ + + +class JSONOptions(CodecOptions): + """Encapsulates JSON options for :func:`dumps` and :func:`loads`. + + :Parameters: + - `strict_number_long`: If ``True``, :class:`~bson.int64.Int64` objects + are encoded to MongoDB Extended JSON's *Strict mode* type + `NumberLong`, ie ``'{"$numberLong": "" }'``. Otherwise they + will be encoded as an `int`. Defaults to ``False``. + - `datetime_representation`: The representation to use when encoding + instances of :class:`datetime.datetime`. Defaults to + :const:`~DatetimeRepresentation.LEGACY`. + - `strict_uuid`: If ``True``, :class:`uuid.UUID` object are encoded to + MongoDB Extended JSON's *Strict mode* type `Binary`. Otherwise it + will be encoded as ``'{"$uuid": "" }'``. Defaults to ``False``. + - `json_mode`: The :class:`JSONMode` to use when encoding BSON types to + Extended JSON. Defaults to :const:`~JSONMode.LEGACY`. + - `document_class`: BSON documents returned by :func:`loads` will be + decoded to an instance of this class. Must be a subclass of + :class:`collections.MutableMapping`. Defaults to :class:`dict`. + - `uuid_representation`: The :class:`~bson.binary.UuidRepresentation` + to use when encoding and decoding instances of :class:`uuid.UUID`. + Defaults to :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`. + - `tz_aware`: If ``True``, MongoDB Extended JSON's *Strict mode* type + `Date` will be decoded to timezone aware instances of + :class:`datetime.datetime`. Otherwise they will be naive. Defaults + to ``False``. + - `tzinfo`: A :class:`datetime.tzinfo` subclass that specifies the + timezone from which :class:`~datetime.datetime` objects should be + decoded. Defaults to :const:`~bson.tz_util.utc`. + - `datetime_conversion`: Specifies how UTC datetimes should be decoded + within BSON. Valid options include 'datetime_ms' to return as a + DatetimeMS, 'datetime' to return as a datetime.datetime and + raising a ValueError for out-of-range values, 'datetime_auto' to + return DatetimeMS objects when the underlying datetime is + out-of-range and 'datetime_clamp' to clamp to the minimum and + maximum possible datetimes. Defaults to 'datetime'. See + :ref:`handling-out-of-range-datetimes` for details. + - `args`: arguments to :class:`~bson.codec_options.CodecOptions` + - `kwargs`: arguments to :class:`~bson.codec_options.CodecOptions` + + .. seealso:: The specification for Relaxed and Canonical `Extended JSON`_. + + .. versionchanged:: 4.0 + The default for `json_mode` was changed from :const:`JSONMode.LEGACY` + to :const:`JSONMode.RELAXED`. + The default for `uuid_representation` was changed from + :const:`~bson.binary.UuidRepresentation.PYTHON_LEGACY` to + :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`. + + .. versionchanged:: 3.5 + Accepts the optional parameter `json_mode`. + + .. versionchanged:: 4.0 + Changed default value of `tz_aware` to False. + """ + + json_mode: int + strict_number_long: bool + datetime_representation: int + strict_uuid: bool + + def __new__( + cls: Type["JSONOptions"], + strict_number_long: Optional[bool] = None, + datetime_representation: Optional[int] = None, + strict_uuid: Optional[bool] = None, + json_mode: int = JSONMode.RELAXED, + *args: Any, + **kwargs: Any + ) -> "JSONOptions": + kwargs["tz_aware"] = kwargs.get("tz_aware", False) + if kwargs["tz_aware"]: + kwargs["tzinfo"] = kwargs.get("tzinfo", utc) + if datetime_representation not in ( + DatetimeRepresentation.LEGACY, + DatetimeRepresentation.NUMBERLONG, + DatetimeRepresentation.ISO8601, + None, + ): + raise ValueError( + "JSONOptions.datetime_representation must be one of LEGACY, " + "NUMBERLONG, or ISO8601 from DatetimeRepresentation." + ) + self = cast(JSONOptions, super(JSONOptions, cls).__new__(cls, *args, **kwargs)) + if json_mode not in (JSONMode.LEGACY, JSONMode.RELAXED, JSONMode.CANONICAL): + raise ValueError( + "JSONOptions.json_mode must be one of LEGACY, RELAXED, " + "or CANONICAL from JSONMode." + ) + self.json_mode = json_mode + if self.json_mode == JSONMode.RELAXED: + if strict_number_long: + raise ValueError("Cannot specify strict_number_long=True with JSONMode.RELAXED") + if datetime_representation not in (None, DatetimeRepresentation.ISO8601): + raise ValueError( + "datetime_representation must be DatetimeRepresentation." + "ISO8601 or omitted with JSONMode.RELAXED" + ) + if strict_uuid not in (None, True): + raise ValueError("Cannot specify strict_uuid=False with JSONMode.RELAXED") + self.strict_number_long = False + self.datetime_representation = DatetimeRepresentation.ISO8601 + self.strict_uuid = True + elif self.json_mode == JSONMode.CANONICAL: + if strict_number_long not in (None, True): + raise ValueError("Cannot specify strict_number_long=False with JSONMode.RELAXED") + if datetime_representation not in (None, DatetimeRepresentation.NUMBERLONG): + raise ValueError( + "datetime_representation must be DatetimeRepresentation." + "NUMBERLONG or omitted with JSONMode.RELAXED" + ) + if strict_uuid not in (None, True): + raise ValueError("Cannot specify strict_uuid=False with JSONMode.RELAXED") + self.strict_number_long = True + self.datetime_representation = DatetimeRepresentation.NUMBERLONG + self.strict_uuid = True + else: # JSONMode.LEGACY + self.strict_number_long = False + self.datetime_representation = DatetimeRepresentation.LEGACY + self.strict_uuid = False + if strict_number_long is not None: + self.strict_number_long = strict_number_long + if datetime_representation is not None: + self.datetime_representation = datetime_representation + if strict_uuid is not None: + self.strict_uuid = strict_uuid + return self + + def _arguments_repr(self) -> str: + return ( + "strict_number_long=%r, " + "datetime_representation=%r, " + "strict_uuid=%r, json_mode=%r, %s" + % ( + self.strict_number_long, + self.datetime_representation, + self.strict_uuid, + self.json_mode, + super(JSONOptions, self)._arguments_repr(), + ) + ) + + def _options_dict(self) -> Dict[Any, Any]: + # TODO: PYTHON-2442 use _asdict() instead + options_dict = super(JSONOptions, self)._options_dict() + options_dict.update( + { + "strict_number_long": self.strict_number_long, + "datetime_representation": self.datetime_representation, + "strict_uuid": self.strict_uuid, + "json_mode": self.json_mode, + } + ) + return options_dict + + def with_options(self, **kwargs: Any) -> "JSONOptions": + """ + Make a copy of this JSONOptions, overriding some options:: + + >>> from .json_util import CANONICAL_JSON_OPTIONS + >>> CANONICAL_JSON_OPTIONS.tz_aware + True + >>> json_options = CANONICAL_JSON_OPTIONS.with_options(tz_aware=False, tzinfo=None) + >>> json_options.tz_aware + False + + .. versionadded:: 3.12 + """ + opts = self._options_dict() + for opt in ("strict_number_long", "datetime_representation", "strict_uuid", "json_mode"): + opts[opt] = kwargs.get(opt, getattr(self, opt)) + opts.update(kwargs) + return JSONOptions(**opts) + + +LEGACY_JSON_OPTIONS: JSONOptions = JSONOptions(json_mode=JSONMode.LEGACY) +""":class:`JSONOptions` for encoding to PyMongo's legacy JSON format. + +.. seealso:: The documentation for :const:`bson.json_util.JSONMode.LEGACY`. + +.. versionadded:: 3.5 +""" + +CANONICAL_JSON_OPTIONS: JSONOptions = JSONOptions(json_mode=JSONMode.CANONICAL) +""":class:`JSONOptions` for Canonical Extended JSON. + +.. seealso:: The documentation for :const:`bson.json_util.JSONMode.CANONICAL`. + +.. versionadded:: 3.5 +""" + +RELAXED_JSON_OPTIONS: JSONOptions = JSONOptions(json_mode=JSONMode.RELAXED) +""":class:`JSONOptions` for Relaxed Extended JSON. + +.. seealso:: The documentation for :const:`bson.json_util.JSONMode.RELAXED`. + +.. versionadded:: 3.5 +""" + +DEFAULT_JSON_OPTIONS: JSONOptions = RELAXED_JSON_OPTIONS +"""The default :class:`JSONOptions` for JSON encoding/decoding. + +The same as :const:`RELAXED_JSON_OPTIONS`. + +.. versionchanged:: 4.0 + Changed from :const:`LEGACY_JSON_OPTIONS` to + :const:`RELAXED_JSON_OPTIONS`. + +.. versionadded:: 3.4 +""" + + +def dumps(obj: Any, *args: Any, **kwargs: Any) -> str: + """Helper function that wraps :func:`json.dumps`. + + Recursive function that handles all BSON types including + :class:`~bson.binary.Binary` and :class:`~bson.code.Code`. + + :Parameters: + - `json_options`: A :class:`JSONOptions` instance used to modify the + encoding of MongoDB Extended JSON types. Defaults to + :const:`DEFAULT_JSON_OPTIONS`. + + .. versionchanged:: 4.0 + Now outputs MongoDB Relaxed Extended JSON by default (using + :const:`DEFAULT_JSON_OPTIONS`). + + .. versionchanged:: 3.4 + Accepts optional parameter `json_options`. See :class:`JSONOptions`. + """ + json_options = kwargs.pop("json_options", DEFAULT_JSON_OPTIONS) + return json.dumps(_json_convert(obj, json_options), *args, **kwargs) + + +def loads(s: str, *args: Any, **kwargs: Any) -> Any: + """Helper function that wraps :func:`json.loads`. + + Automatically passes the object_hook for BSON type conversion. + + Raises ``TypeError``, ``ValueError``, ``KeyError``, or + :exc:`~bson.errors.InvalidId` on invalid MongoDB Extended JSON. + + :Parameters: + - `json_options`: A :class:`JSONOptions` instance used to modify the + decoding of MongoDB Extended JSON types. Defaults to + :const:`DEFAULT_JSON_OPTIONS`. + + .. versionchanged:: 4.0 + Now loads :class:`datetime.datetime` instances as naive by default. To + load timezone aware instances utilize the `json_options` parameter. + See :ref:`tz_aware_default_change` for an example. + + .. versionchanged:: 3.5 + Parses Relaxed and Canonical Extended JSON as well as PyMongo's legacy + format. Now raises ``TypeError`` or ``ValueError`` when parsing JSON + type wrappers with values of the wrong type or any extra keys. + + .. versionchanged:: 3.4 + Accepts optional parameter `json_options`. See :class:`JSONOptions`. + """ + json_options = kwargs.pop("json_options", DEFAULT_JSON_OPTIONS) + kwargs["object_pairs_hook"] = lambda pairs: object_pairs_hook(pairs, json_options) + return json.loads(s, *args, **kwargs) + + +def _json_convert(obj: Any, json_options: JSONOptions = DEFAULT_JSON_OPTIONS) -> Any: + """Recursive helper method that converts BSON types so they can be + converted into json. + """ + if hasattr(obj, "items"): + return SON(((k, _json_convert(v, json_options)) for k, v in obj.items())) + elif hasattr(obj, "__iter__") and not isinstance(obj, (str, bytes)): + return list((_json_convert(v, json_options) for v in obj)) + try: + return default(obj, json_options) + except TypeError: + return obj + + +def object_pairs_hook( + pairs: Sequence[Tuple[str, Any]], json_options: JSONOptions = DEFAULT_JSON_OPTIONS +) -> Any: + return object_hook(json_options.document_class(pairs), json_options) + + +def object_hook(dct: Mapping[str, Any], json_options: JSONOptions = DEFAULT_JSON_OPTIONS) -> Any: + if "$oid" in dct: + return _parse_canonical_oid(dct) + if ( + isinstance(dct.get("$ref"), str) + and "$id" in dct + and isinstance(dct.get("$db"), (str, type(None))) + ): + return _parse_canonical_dbref(dct) + if "$date" in dct: + return _parse_canonical_datetime(dct, json_options) + if "$regex" in dct: + return _parse_legacy_regex(dct) + if "$minKey" in dct: + return _parse_canonical_minkey(dct) + if "$maxKey" in dct: + return _parse_canonical_maxkey(dct) + if "$binary" in dct: + if "$type" in dct: + return _parse_legacy_binary(dct, json_options) + else: + return _parse_canonical_binary(dct, json_options) + if "$code" in dct: + return _parse_canonical_code(dct) + if "$uuid" in dct: + return _parse_legacy_uuid(dct, json_options) + if "$undefined" in dct: + return None + if "$numberLong" in dct: + return _parse_canonical_int64(dct) + if "$timestamp" in dct: + tsp = dct["$timestamp"] + return Timestamp(tsp["t"], tsp["i"]) + if "$numberDecimal" in dct: + return _parse_canonical_decimal128(dct) + if "$dbPointer" in dct: + return _parse_canonical_dbpointer(dct) + if "$regularExpression" in dct: + return _parse_canonical_regex(dct) + if "$symbol" in dct: + return _parse_canonical_symbol(dct) + if "$numberInt" in dct: + return _parse_canonical_int32(dct) + if "$numberDouble" in dct: + return _parse_canonical_double(dct) + return dct + + +def _parse_legacy_regex(doc: Any) -> Any: + pattern = doc["$regex"] + # Check if this is the $regex query operator. + if not isinstance(pattern, (str, bytes)): + return doc + flags = 0 + # PyMongo always adds $options but some other tools may not. + for opt in doc.get("$options", ""): + flags |= _RE_OPT_TABLE.get(opt, 0) + return Regex(pattern, flags) + + +def _parse_legacy_uuid(doc: Any, json_options: JSONOptions) -> Union[Binary, uuid.UUID]: + """Decode a JSON legacy $uuid to Python UUID.""" + if len(doc) != 1: + raise TypeError("Bad $uuid, extra field(s): %s" % (doc,)) + if not isinstance(doc["$uuid"], str): + raise TypeError("$uuid must be a string: %s" % (doc,)) + if json_options.uuid_representation == UuidRepresentation.UNSPECIFIED: + return Binary.from_uuid(uuid.UUID(doc["$uuid"])) + else: + return uuid.UUID(doc["$uuid"]) + + +def _binary_or_uuid(data: Any, subtype: int, json_options: JSONOptions) -> Union[Binary, uuid.UUID]: + # special handling for UUID + if subtype in ALL_UUID_SUBTYPES: + uuid_representation = json_options.uuid_representation + binary_value = Binary(data, subtype) + if uuid_representation == UuidRepresentation.UNSPECIFIED: + return binary_value + if subtype == UUID_SUBTYPE: + # Legacy behavior: use STANDARD with binary subtype 4. + uuid_representation = UuidRepresentation.STANDARD + elif uuid_representation == UuidRepresentation.STANDARD: + # subtype == OLD_UUID_SUBTYPE + # Legacy behavior: STANDARD is the same as PYTHON_LEGACY. + uuid_representation = UuidRepresentation.PYTHON_LEGACY + return binary_value.as_uuid(uuid_representation) + + if subtype == 0: + return cast(uuid.UUID, data) + return Binary(data, subtype) + + +def _parse_legacy_binary(doc: Any, json_options: JSONOptions) -> Union[Binary, uuid.UUID]: + if isinstance(doc["$type"], int): + doc["$type"] = "%02x" % doc["$type"] + subtype = int(doc["$type"], 16) + if subtype >= 0xFFFFFF80: # Handle mongoexport values + subtype = int(doc["$type"][6:], 16) + data = base64.b64decode(doc["$binary"].encode()) + return _binary_or_uuid(data, subtype, json_options) + + +def _parse_canonical_binary(doc: Any, json_options: JSONOptions) -> Union[Binary, uuid.UUID]: + binary = doc["$binary"] + b64 = binary["base64"] + subtype = binary["subType"] + if not isinstance(b64, str): + raise TypeError("$binary base64 must be a string: %s" % (doc,)) + if not isinstance(subtype, str) or len(subtype) > 2: + raise TypeError("$binary subType must be a string at most 2 characters: %s" % (doc,)) + if len(binary) != 2: + raise TypeError('$binary must include only "base64" and "subType" components: %s' % (doc,)) + + data = base64.b64decode(b64.encode()) + return _binary_or_uuid(data, int(subtype, 16), json_options) + + +def _parse_canonical_datetime( + doc: Any, json_options: JSONOptions +) -> Union[datetime.datetime, DatetimeMS]: + """Decode a JSON datetime to python datetime.datetime.""" + dtm = doc["$date"] + if len(doc) != 1: + raise TypeError("Bad $date, extra field(s): %s" % (doc,)) + # mongoexport 2.6 and newer + if isinstance(dtm, str): + # Parse offset + if dtm[-1] == "Z": + dt = dtm[:-1] + offset = "Z" + elif dtm[-6] in ("+", "-") and dtm[-3] == ":": + # (+|-)HH:MM + dt = dtm[:-6] + offset = dtm[-6:] + elif dtm[-5] in ("+", "-"): + # (+|-)HHMM + dt = dtm[:-5] + offset = dtm[-5:] + elif dtm[-3] in ("+", "-"): + # (+|-)HH + dt = dtm[:-3] + offset = dtm[-3:] + else: + dt = dtm + offset = "" + + # Parse the optional factional seconds portion. + dot_index = dt.rfind(".") + microsecond = 0 + if dot_index != -1: + microsecond = int(float(dt[dot_index:]) * 1000000) + dt = dt[:dot_index] + + aware = datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S").replace( + microsecond=microsecond, tzinfo=utc + ) + + if offset and offset != "Z": + if len(offset) == 6: + hours, minutes = offset[1:].split(":") + secs = int(hours) * 3600 + int(minutes) * 60 + elif len(offset) == 5: + secs = int(offset[1:3]) * 3600 + int(offset[3:]) * 60 + elif len(offset) == 3: + secs = int(offset[1:3]) * 3600 + if offset[0] == "-": + secs *= -1 + aware = aware - datetime.timedelta(seconds=secs) + + if json_options.tz_aware: + if json_options.tzinfo: + aware = aware.astimezone(json_options.tzinfo) + if json_options.datetime_conversion == DatetimeConversion.DATETIME_MS: + return DatetimeMS(aware) + return aware + else: + aware_tzinfo_none = aware.replace(tzinfo=None) + if json_options.datetime_conversion == DatetimeConversion.DATETIME_MS: + return DatetimeMS(aware_tzinfo_none) + return aware_tzinfo_none + return _millis_to_datetime(int(dtm), json_options) + + +def _parse_canonical_oid(doc: Any) -> ObjectId: + """Decode a JSON ObjectId to bson.objectid.ObjectId.""" + if len(doc) != 1: + raise TypeError("Bad $oid, extra field(s): %s" % (doc,)) + return ObjectId(doc["$oid"]) + + +def _parse_canonical_symbol(doc: Any) -> str: + """Decode a JSON symbol to Python string.""" + symbol = doc["$symbol"] + if len(doc) != 1: + raise TypeError("Bad $symbol, extra field(s): %s" % (doc,)) + return str(symbol) + + +def _parse_canonical_code(doc: Any) -> Code: + """Decode a JSON code to bson.code.Code.""" + for key in doc: + if key not in ("$code", "$scope"): + raise TypeError("Bad $code, extra field(s): %s" % (doc,)) + return Code(doc["$code"], scope=doc.get("$scope")) + + +def _parse_canonical_regex(doc: Any) -> Regex: + """Decode a JSON regex to bson.regex.Regex.""" + regex = doc["$regularExpression"] + if len(doc) != 1: + raise TypeError("Bad $regularExpression, extra field(s): %s" % (doc,)) + if len(regex) != 2: + raise TypeError( + 'Bad $regularExpression must include only "pattern"' + 'and "options" components: %s' % (doc,) + ) + opts = regex["options"] + if not isinstance(opts, str): + raise TypeError( + "Bad $regularExpression options, options must be string, was type %s" % (type(opts)) + ) + return Regex(regex["pattern"], opts) + + +def _parse_canonical_dbref(doc: Any) -> DBRef: + """Decode a JSON DBRef to bson.dbref.DBRef.""" + return DBRef(doc.pop("$ref"), doc.pop("$id"), database=doc.pop("$db", None), **doc) + + +def _parse_canonical_dbpointer(doc: Any) -> Any: + """Decode a JSON (deprecated) DBPointer to bson.dbref.DBRef.""" + dbref = doc["$dbPointer"] + if len(doc) != 1: + raise TypeError("Bad $dbPointer, extra field(s): %s" % (doc,)) + if isinstance(dbref, DBRef): + dbref_doc = dbref.as_doc() + # DBPointer must not contain $db in its value. + if dbref.database is not None: + raise TypeError("Bad $dbPointer, extra field $db: %s" % (dbref_doc,)) + if not isinstance(dbref.id, ObjectId): + raise TypeError("Bad $dbPointer, $id must be an ObjectId: %s" % (dbref_doc,)) + if len(dbref_doc) != 2: + raise TypeError("Bad $dbPointer, extra field(s) in DBRef: %s" % (dbref_doc,)) + return dbref + else: + raise TypeError("Bad $dbPointer, expected a DBRef: %s" % (doc,)) + + +def _parse_canonical_int32(doc: Any) -> int: + """Decode a JSON int32 to python int.""" + i_str = doc["$numberInt"] + if len(doc) != 1: + raise TypeError("Bad $numberInt, extra field(s): %s" % (doc,)) + if not isinstance(i_str, str): + raise TypeError("$numberInt must be string: %s" % (doc,)) + return int(i_str) + + +def _parse_canonical_int64(doc: Any) -> Int64: + """Decode a JSON int64 to bson.int64.Int64.""" + l_str = doc["$numberLong"] + if len(doc) != 1: + raise TypeError("Bad $numberLong, extra field(s): %s" % (doc,)) + return Int64(l_str) + + +def _parse_canonical_double(doc: Any) -> float: + """Decode a JSON double to python float.""" + d_str = doc["$numberDouble"] + if len(doc) != 1: + raise TypeError("Bad $numberDouble, extra field(s): %s" % (doc,)) + if not isinstance(d_str, str): + raise TypeError("$numberDouble must be string: %s" % (doc,)) + return float(d_str) + + +def _parse_canonical_decimal128(doc: Any) -> Decimal128: + """Decode a JSON decimal128 to bson.decimal128.Decimal128.""" + d_str = doc["$numberDecimal"] + if len(doc) != 1: + raise TypeError("Bad $numberDecimal, extra field(s): %s" % (doc,)) + if not isinstance(d_str, str): + raise TypeError("$numberDecimal must be string: %s" % (doc,)) + return Decimal128(d_str) + + +def _parse_canonical_minkey(doc: Any) -> MinKey: + """Decode a JSON MinKey to bson.min_key.MinKey.""" + if type(doc["$minKey"]) is not int or doc["$minKey"] != 1: + raise TypeError("$minKey value must be 1: %s" % (doc,)) + if len(doc) != 1: + raise TypeError("Bad $minKey, extra field(s): %s" % (doc,)) + return MinKey() + + +def _parse_canonical_maxkey(doc: Any) -> MaxKey: + """Decode a JSON MaxKey to bson.max_key.MaxKey.""" + if type(doc["$maxKey"]) is not int or doc["$maxKey"] != 1: + raise TypeError("$maxKey value must be 1: %s", (doc,)) + if len(doc) != 1: + raise TypeError("Bad $minKey, extra field(s): %s" % (doc,)) + return MaxKey() + + +def _encode_binary(data: bytes, subtype: int, json_options: JSONOptions) -> Any: + if json_options.json_mode == JSONMode.LEGACY: + return SON([("$binary", base64.b64encode(data).decode()), ("$type", "%02x" % subtype)]) + return { + "$binary": SON([("base64", base64.b64encode(data).decode()), ("subType", "%02x" % subtype)]) + } + + +def default(obj: Any, json_options: JSONOptions = DEFAULT_JSON_OPTIONS) -> Any: + # We preserve key order when rendering SON, DBRef, etc. as JSON by + # returning a SON for those types instead of a dict. + if isinstance(obj, ObjectId): + return {"$oid": str(obj)} + if isinstance(obj, DBRef): + return _json_convert(obj.as_doc(), json_options=json_options) + if isinstance(obj, datetime.datetime): + if json_options.datetime_representation == DatetimeRepresentation.ISO8601: + if not obj.tzinfo: + obj = obj.replace(tzinfo=utc) + assert obj.tzinfo is not None + if obj >= EPOCH_AWARE: + off = obj.tzinfo.utcoffset(obj) + if (off.days, off.seconds, off.microseconds) == (0, 0, 0): # type: ignore + tz_string = "Z" + else: + tz_string = obj.strftime("%z") + millis = int(obj.microsecond / 1000) + fracsecs = ".%03d" % (millis,) if millis else "" + return { + "$date": "%s%s%s" % (obj.strftime("%Y-%m-%dT%H:%M:%S"), fracsecs, tz_string) + } + + millis = _datetime_to_millis(obj) + if json_options.datetime_representation == DatetimeRepresentation.LEGACY: + return {"$date": millis} + return {"$date": {"$numberLong": str(millis)}} + if isinstance(obj, DatetimeMS): + if ( + json_options.datetime_representation == DatetimeRepresentation.ISO8601 + and 0 <= int(obj) <= _max_datetime_ms() + ): + return default(obj.as_datetime(), json_options) + elif json_options.datetime_representation == DatetimeRepresentation.LEGACY: + return {"$date": str(int(obj))} + return {"$date": {"$numberLong": str(int(obj))}} + if json_options.strict_number_long and isinstance(obj, Int64): + return {"$numberLong": str(obj)} + if isinstance(obj, (RE_TYPE, Regex)): + flags = "" + if obj.flags & re.IGNORECASE: + flags += "i" + if obj.flags & re.LOCALE: + flags += "l" + if obj.flags & re.MULTILINE: + flags += "m" + if obj.flags & re.DOTALL: + flags += "s" + if obj.flags & re.UNICODE: + flags += "u" + if obj.flags & re.VERBOSE: + flags += "x" + if isinstance(obj.pattern, str): + pattern = obj.pattern + else: + pattern = obj.pattern.decode("utf-8") + if json_options.json_mode == JSONMode.LEGACY: + return SON([("$regex", pattern), ("$options", flags)]) + return {"$regularExpression": SON([("pattern", pattern), ("options", flags)])} + if isinstance(obj, MinKey): + return {"$minKey": 1} + if isinstance(obj, MaxKey): + return {"$maxKey": 1} + if isinstance(obj, Timestamp): + return {"$timestamp": SON([("t", obj.time), ("i", obj.inc)])} + if isinstance(obj, Code): + if obj.scope is None: + return {"$code": str(obj)} + return SON([("$code", str(obj)), ("$scope", _json_convert(obj.scope, json_options))]) + if isinstance(obj, Binary): + return _encode_binary(obj, obj.subtype, json_options) + if isinstance(obj, bytes): + return _encode_binary(obj, 0, json_options) + if isinstance(obj, uuid.UUID): + if json_options.strict_uuid: + binval = Binary.from_uuid(obj, uuid_representation=json_options.uuid_representation) + return _encode_binary(binval, binval.subtype, json_options) + else: + return {"$uuid": obj.hex} + if isinstance(obj, Decimal128): + return {"$numberDecimal": str(obj)} + if isinstance(obj, bool): + return obj + if json_options.json_mode == JSONMode.CANONICAL and isinstance(obj, int): + if -(2**31) <= obj < 2**31: + return {"$numberInt": str(obj)} + return {"$numberLong": str(obj)} + if json_options.json_mode != JSONMode.LEGACY and isinstance(obj, float): + if math.isnan(obj): + return {"$numberDouble": "NaN"} + elif math.isinf(obj): + representation = "Infinity" if obj > 0 else "-Infinity" + return {"$numberDouble": representation} + elif json_options.json_mode == JSONMode.CANONICAL: + # repr() will return the shortest string guaranteed to produce the + # original value, when float() is called on it. + return {"$numberDouble": str(repr(obj))} + raise TypeError("%r is not JSON serializable" % obj) diff --git a/src/xtquant/xtbson/bson37/max_key.py b/src/xtquant/xtbson/bson37/max_key.py new file mode 100644 index 0000000..b4f38d0 --- /dev/null +++ b/src/xtquant/xtbson/bson37/max_key.py @@ -0,0 +1,55 @@ +# Copyright 2010-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Representation for the MongoDB internal MaxKey type. +""" +from typing import Any + + +class MaxKey(object): + """MongoDB internal MaxKey type.""" + + __slots__ = () + + _type_marker = 127 + + def __getstate__(self) -> Any: + return {} + + def __setstate__(self, state: Any) -> None: + pass + + def __eq__(self, other: Any) -> bool: + return isinstance(other, MaxKey) + + def __hash__(self) -> int: + return hash(self._type_marker) + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __le__(self, other: Any) -> bool: + return isinstance(other, MaxKey) + + def __lt__(self, dummy: Any) -> bool: + return False + + def __ge__(self, dummy: Any) -> bool: + return True + + def __gt__(self, other: Any) -> bool: + return not isinstance(other, MaxKey) + + def __repr__(self): + return "MaxKey()" diff --git a/src/xtquant/xtbson/bson37/min_key.py b/src/xtquant/xtbson/bson37/min_key.py new file mode 100644 index 0000000..babc655 --- /dev/null +++ b/src/xtquant/xtbson/bson37/min_key.py @@ -0,0 +1,55 @@ +# Copyright 2010-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Representation for the MongoDB internal MinKey type. +""" +from typing import Any + + +class MinKey(object): + """MongoDB internal MinKey type.""" + + __slots__ = () + + _type_marker = 255 + + def __getstate__(self) -> Any: + return {} + + def __setstate__(self, state: Any) -> None: + pass + + def __eq__(self, other: Any) -> bool: + return isinstance(other, MinKey) + + def __hash__(self) -> int: + return hash(self._type_marker) + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __le__(self, dummy: Any) -> bool: + return True + + def __lt__(self, other: Any) -> bool: + return not isinstance(other, MinKey) + + def __ge__(self, other: Any) -> bool: + return isinstance(other, MinKey) + + def __gt__(self, dummy: Any) -> bool: + return False + + def __repr__(self): + return "MinKey()" diff --git a/src/xtquant/xtbson/bson37/objectid.py b/src/xtquant/xtbson/bson37/objectid.py new file mode 100644 index 0000000..beda531 --- /dev/null +++ b/src/xtquant/xtbson/bson37/objectid.py @@ -0,0 +1,286 @@ +# Copyright 2009-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for working with MongoDB ObjectIds. +""" + +import binascii +import calendar +import datetime +import os +import struct +import threading +import time +from random import SystemRandom +from typing import Any, NoReturn, Optional, Type, Union + +from .errors import InvalidId +from .tz_util import utc + +_MAX_COUNTER_VALUE = 0xFFFFFF + + +def _raise_invalid_id(oid: str) -> NoReturn: + raise InvalidId( + "%r is not a valid ObjectId, it must be a 12-byte input" + " or a 24-character hex string" % oid + ) + + +def _random_bytes() -> bytes: + """Get the 5-byte random field of an ObjectId.""" + return os.urandom(5) + + +class ObjectId(object): + """A MongoDB ObjectId.""" + + _pid = os.getpid() + + _inc = SystemRandom().randint(0, _MAX_COUNTER_VALUE) + _inc_lock = threading.Lock() + + __random = _random_bytes() + + __slots__ = ("__id",) + + _type_marker = 7 + + def __init__(self, oid: Optional[Union[str, "ObjectId", bytes]] = None) -> None: + """Initialize a new ObjectId. + + An ObjectId is a 12-byte unique identifier consisting of: + + - a 4-byte value representing the seconds since the Unix epoch, + - a 5-byte random value, + - a 3-byte counter, starting with a random value. + + By default, ``ObjectId()`` creates a new unique identifier. The + optional parameter `oid` can be an :class:`ObjectId`, or any 12 + :class:`bytes`. + + For example, the 12 bytes b'foo-bar-quux' do not follow the ObjectId + specification but they are acceptable input:: + + >>> ObjectId(b'foo-bar-quux') + ObjectId('666f6f2d6261722d71757578') + + `oid` can also be a :class:`str` of 24 hex digits:: + + >>> ObjectId('0123456789ab0123456789ab') + ObjectId('0123456789ab0123456789ab') + + Raises :class:`~bson.errors.InvalidId` if `oid` is not 12 bytes nor + 24 hex digits, or :class:`TypeError` if `oid` is not an accepted type. + + :Parameters: + - `oid` (optional): a valid ObjectId. + + .. seealso:: The MongoDB documentation on `ObjectIds `_. + + .. versionchanged:: 3.8 + :class:`~bson.objectid.ObjectId` now implements the `ObjectID + specification version 0.2 + `_. + """ + if oid is None: + self.__generate() + elif isinstance(oid, bytes) and len(oid) == 12: + self.__id = oid + else: + self.__validate(oid) + + @classmethod + def from_datetime(cls: Type["ObjectId"], generation_time: datetime.datetime) -> "ObjectId": + """Create a dummy ObjectId instance with a specific generation time. + + This method is useful for doing range queries on a field + containing :class:`ObjectId` instances. + + .. warning:: + It is not safe to insert a document containing an ObjectId + generated using this method. This method deliberately + eliminates the uniqueness guarantee that ObjectIds + generally provide. ObjectIds generated with this method + should be used exclusively in queries. + + `generation_time` will be converted to UTC. Naive datetime + instances will be treated as though they already contain UTC. + + An example using this helper to get documents where ``"_id"`` + was generated before January 1, 2010 would be: + + >>> gen_time = datetime.datetime(2010, 1, 1) + >>> dummy_id = ObjectId.from_datetime(gen_time) + >>> result = collection.find({"_id": {"$lt": dummy_id}}) + + :Parameters: + - `generation_time`: :class:`~datetime.datetime` to be used + as the generation time for the resulting ObjectId. + """ + offset = generation_time.utcoffset() + if offset is not None: + generation_time = generation_time - offset + timestamp = calendar.timegm(generation_time.timetuple()) + oid = struct.pack(">I", int(timestamp)) + b"\x00\x00\x00\x00\x00\x00\x00\x00" + return cls(oid) + + @classmethod + def is_valid(cls: Type["ObjectId"], oid: Any) -> bool: + """Checks if a `oid` string is valid or not. + + :Parameters: + - `oid`: the object id to validate + + .. versionadded:: 2.3 + """ + if not oid: + return False + + try: + ObjectId(oid) + return True + except (InvalidId, TypeError): + return False + + @classmethod + def _random(cls) -> bytes: + """Generate a 5-byte random number once per process.""" + pid = os.getpid() + if pid != cls._pid: + cls._pid = pid + cls.__random = _random_bytes() + return cls.__random + + def __generate(self) -> None: + """Generate a new value for this ObjectId.""" + + # 4 bytes current time + oid = struct.pack(">I", int(time.time())) + + # 5 bytes random + oid += ObjectId._random() + + # 3 bytes inc + with ObjectId._inc_lock: + oid += struct.pack(">I", ObjectId._inc)[1:4] + ObjectId._inc = (ObjectId._inc + 1) % (_MAX_COUNTER_VALUE + 1) + + self.__id = oid + + def __validate(self, oid: Any) -> None: + """Validate and use the given id for this ObjectId. + + Raises TypeError if id is not an instance of + (:class:`basestring` (:class:`str` or :class:`bytes` + in python 3), ObjectId) and InvalidId if it is not a + valid ObjectId. + + :Parameters: + - `oid`: a valid ObjectId + """ + if isinstance(oid, ObjectId): + self.__id = oid.binary + elif isinstance(oid, str): + if len(oid) == 24: + try: + self.__id = bytes.fromhex(oid) + except (TypeError, ValueError): + _raise_invalid_id(oid) + else: + _raise_invalid_id(oid) + else: + raise TypeError( + "id must be an instance of (bytes, str, ObjectId), not %s" % (type(oid),) + ) + + @property + def binary(self) -> bytes: + """12-byte binary representation of this ObjectId.""" + return self.__id + + @property + def generation_time(self) -> datetime.datetime: + """A :class:`datetime.datetime` instance representing the time of + generation for this :class:`ObjectId`. + + The :class:`datetime.datetime` is timezone aware, and + represents the generation time in UTC. It is precise to the + second. + """ + timestamp = struct.unpack(">I", self.__id[0:4])[0] + return datetime.datetime.fromtimestamp(timestamp, utc) + + def __getstate__(self) -> bytes: + """return value of object for pickling. + needed explicitly because __slots__() defined. + """ + return self.__id + + def __setstate__(self, value: Any) -> None: + """explicit state set from pickling""" + # Provide backwards compatability with OIDs + # pickled with pymongo-1.9 or older. + if isinstance(value, dict): + oid = value["_ObjectId__id"] + else: + oid = value + # ObjectIds pickled in python 2.x used `str` for __id. + # In python 3.x this has to be converted to `bytes` + # by encoding latin-1. + if isinstance(oid, str): + self.__id = oid.encode("latin-1") + else: + self.__id = oid + + def __str__(self) -> str: + return binascii.hexlify(self.__id).decode() + + def __repr__(self): + return "ObjectId('%s')" % (str(self),) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, ObjectId): + return self.__id == other.binary + return NotImplemented + + def __ne__(self, other: Any) -> bool: + if isinstance(other, ObjectId): + return self.__id != other.binary + return NotImplemented + + def __lt__(self, other: Any) -> bool: + if isinstance(other, ObjectId): + return self.__id < other.binary + return NotImplemented + + def __le__(self, other: Any) -> bool: + if isinstance(other, ObjectId): + return self.__id <= other.binary + return NotImplemented + + def __gt__(self, other: Any) -> bool: + if isinstance(other, ObjectId): + return self.__id > other.binary + return NotImplemented + + def __ge__(self, other: Any) -> bool: + if isinstance(other, ObjectId): + return self.__id >= other.binary + return NotImplemented + + def __hash__(self) -> int: + """Get a hash value for this :class:`ObjectId`.""" + return hash(self.__id) diff --git a/src/xtquant/xtbson/bson37/py.typed b/src/xtquant/xtbson/bson37/py.typed new file mode 100644 index 0000000..0f40570 --- /dev/null +++ b/src/xtquant/xtbson/bson37/py.typed @@ -0,0 +1,2 @@ +# PEP-561 Support File. +# "Package maintainers who wish to support type checking of their code MUST add a marker file named py.typed to their package supporting typing". diff --git a/src/xtquant/xtbson/bson37/raw_bson.py b/src/xtquant/xtbson/bson37/raw_bson.py new file mode 100644 index 0000000..3739351 --- /dev/null +++ b/src/xtquant/xtbson/bson37/raw_bson.py @@ -0,0 +1,196 @@ +# Copyright 2015-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing raw BSON documents. + +Inserting and Retrieving RawBSONDocuments +========================================= + +Example: Moving a document between different databases/collections + +.. doctest:: + + >>> import bson + >>> from pymongo import MongoClient + >>> from .raw_bson import RawBSONDocument + >>> client = MongoClient(document_class=RawBSONDocument) + >>> client.drop_database('db') + >>> client.drop_database('replica_db') + >>> db = client.db + >>> result = db.test.insert_many([{'_id': 1, 'a': 1}, + ... {'_id': 2, 'b': 1}, + ... {'_id': 3, 'c': 1}, + ... {'_id': 4, 'd': 1}]) + >>> replica_db = client.replica_db + >>> for doc in db.test.find(): + ... print(f"raw document: {doc.raw}") + ... print(f"decoded document: {bson.decode(doc.raw)}") + ... result = replica_db.test.insert_one(doc) + raw document: b'...' + decoded document: {'_id': 1, 'a': 1} + raw document: b'...' + decoded document: {'_id': 2, 'b': 1} + raw document: b'...' + decoded document: {'_id': 3, 'c': 1} + raw document: b'...' + decoded document: {'_id': 4, 'd': 1} + +For use cases like moving documents across different databases or writing binary +blobs to disk, using raw BSON documents provides better speed and avoids the +overhead of decoding or encoding BSON. +""" + +from typing import Any, ItemsView, Iterator, Mapping, Optional + +from . import _get_object_size, _raw_to_dict +from .codec_options import _RAW_BSON_DOCUMENT_MARKER +from .codec_options import DEFAULT_CODEC_OPTIONS as DEFAULT +from .codec_options import CodecOptions +from .son import SON + + +def _inflate_bson( + bson_bytes: bytes, codec_options: CodecOptions, raw_array: bool = False +) -> Mapping[Any, Any]: + """Inflates the top level fields of a BSON document. + + :Parameters: + - `bson_bytes`: the BSON bytes that compose this document + - `codec_options`: An instance of + :class:`~bson.codec_options.CodecOptions` whose ``document_class`` + must be :class:`RawBSONDocument`. + """ + # Use SON to preserve ordering of elements. + return _raw_to_dict( + bson_bytes, 4, len(bson_bytes) - 1, codec_options, SON(), raw_array=raw_array + ) + + +class RawBSONDocument(Mapping[str, Any]): + """Representation for a MongoDB document that provides access to the raw + BSON bytes that compose it. + + Only when a field is accessed or modified within the document does + RawBSONDocument decode its bytes. + """ + + __slots__ = ("__raw", "__inflated_doc", "__codec_options") + _type_marker = _RAW_BSON_DOCUMENT_MARKER + + def __init__(self, bson_bytes: bytes, codec_options: Optional[CodecOptions] = None) -> None: + """Create a new :class:`RawBSONDocument` + + :class:`RawBSONDocument` is a representation of a BSON document that + provides access to the underlying raw BSON bytes. Only when a field is + accessed or modified within the document does RawBSONDocument decode + its bytes. + + :class:`RawBSONDocument` implements the ``Mapping`` abstract base + class from the standard library so it can be used like a read-only + ``dict``:: + + >>> from . import encode + >>> raw_doc = RawBSONDocument(encode({'_id': 'my_doc'})) + >>> raw_doc.raw + b'...' + >>> raw_doc['_id'] + 'my_doc' + + :Parameters: + - `bson_bytes`: the BSON bytes that compose this document + - `codec_options` (optional): An instance of + :class:`~bson.codec_options.CodecOptions` whose ``document_class`` + must be :class:`RawBSONDocument`. The default is + :attr:`DEFAULT_RAW_BSON_OPTIONS`. + + .. versionchanged:: 3.8 + :class:`RawBSONDocument` now validates that the ``bson_bytes`` + passed in represent a single bson document. + + .. versionchanged:: 3.5 + If a :class:`~bson.codec_options.CodecOptions` is passed in, its + `document_class` must be :class:`RawBSONDocument`. + """ + self.__raw = bson_bytes + self.__inflated_doc: Optional[Mapping[str, Any]] = None + # Can't default codec_options to DEFAULT_RAW_BSON_OPTIONS in signature, + # it refers to this class RawBSONDocument. + if codec_options is None: + codec_options = DEFAULT_RAW_BSON_OPTIONS + elif not issubclass(codec_options.document_class, RawBSONDocument): + raise TypeError( + "RawBSONDocument cannot use CodecOptions with document " + "class %s" % (codec_options.document_class,) + ) + self.__codec_options = codec_options + # Validate the bson object size. + _get_object_size(bson_bytes, 0, len(bson_bytes)) + + @property + def raw(self) -> bytes: + """The raw BSON bytes composing this document.""" + return self.__raw + + def items(self) -> ItemsView[str, Any]: + """Lazily decode and iterate elements in this document.""" + return self.__inflated.items() + + @property + def __inflated(self) -> Mapping[str, Any]: + if self.__inflated_doc is None: + # We already validated the object's size when this document was + # created, so no need to do that again. + # Use SON to preserve ordering of elements. + self.__inflated_doc = self._inflate_bson(self.__raw, self.__codec_options) + return self.__inflated_doc + + @staticmethod + def _inflate_bson(bson_bytes: bytes, codec_options: CodecOptions) -> Mapping[Any, Any]: + return _inflate_bson(bson_bytes, codec_options) + + def __getitem__(self, item: str) -> Any: + return self.__inflated[item] + + def __iter__(self) -> Iterator[str]: + return iter(self.__inflated) + + def __len__(self) -> int: + return len(self.__inflated) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, RawBSONDocument): + return self.__raw == other.raw + return NotImplemented + + def __repr__(self): + return "%s(%r, codec_options=%r)" % ( + self.__class__.__name__, + self.raw, + self.__codec_options, + ) + + +class _RawArrayBSONDocument(RawBSONDocument): + """A RawBSONDocument that only expands sub-documents and arrays when accessed.""" + + @staticmethod + def _inflate_bson(bson_bytes: bytes, codec_options: CodecOptions) -> Mapping[Any, Any]: + return _inflate_bson(bson_bytes, codec_options, raw_array=True) + + +DEFAULT_RAW_BSON_OPTIONS: CodecOptions = DEFAULT.with_options(document_class=RawBSONDocument) +_RAW_ARRAY_BSON_OPTIONS: CodecOptions = DEFAULT.with_options(document_class=_RawArrayBSONDocument) +"""The default :class:`~bson.codec_options.CodecOptions` for +:class:`RawBSONDocument`. +""" diff --git a/src/xtquant/xtbson/bson37/regex.py b/src/xtquant/xtbson/bson37/regex.py new file mode 100644 index 0000000..f0d2466 --- /dev/null +++ b/src/xtquant/xtbson/bson37/regex.py @@ -0,0 +1,135 @@ +# Copyright 2013-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing MongoDB regular expressions. +""" + +import re +from typing import Any, Generic, Pattern, Type, TypeVar, Union + +from ._helpers import _getstate_slots, _setstate_slots +from .son import RE_TYPE + + +def str_flags_to_int(str_flags: str) -> int: + flags = 0 + if "i" in str_flags: + flags |= re.IGNORECASE + if "l" in str_flags: + flags |= re.LOCALE + if "m" in str_flags: + flags |= re.MULTILINE + if "s" in str_flags: + flags |= re.DOTALL + if "u" in str_flags: + flags |= re.UNICODE + if "x" in str_flags: + flags |= re.VERBOSE + + return flags + + +_T = TypeVar("_T", str, bytes) + + +class Regex(Generic[_T]): + """BSON regular expression data.""" + + __slots__ = ("pattern", "flags") + + __getstate__ = _getstate_slots + __setstate__ = _setstate_slots + + _type_marker = 11 + + @classmethod + def from_native(cls: Type["Regex"], regex: "Pattern[_T]") -> "Regex[_T]": + """Convert a Python regular expression into a ``Regex`` instance. + + Note that in Python 3, a regular expression compiled from a + :class:`str` has the ``re.UNICODE`` flag set. If it is undesirable + to store this flag in a BSON regular expression, unset it first:: + + >>> pattern = re.compile('.*') + >>> regex = Regex.from_native(pattern) + >>> regex.flags ^= re.UNICODE + >>> db.collection.insert_one({'pattern': regex}) + + :Parameters: + - `regex`: A regular expression object from ``re.compile()``. + + .. warning:: + Python regular expressions use a different syntax and different + set of flags than MongoDB, which uses `PCRE`_. A regular + expression retrieved from the server may not compile in + Python, or may match a different set of strings in Python than + when used in a MongoDB query. + + .. _PCRE: http://www.pcre.org/ + """ + if not isinstance(regex, RE_TYPE): + raise TypeError("regex must be a compiled regular expression, not %s" % type(regex)) + + return Regex(regex.pattern, regex.flags) + + def __init__(self, pattern: _T, flags: Union[str, int] = 0) -> None: + """BSON regular expression data. + + This class is useful to store and retrieve regular expressions that are + incompatible with Python's regular expression dialect. + + :Parameters: + - `pattern`: string + - `flags`: (optional) an integer bitmask, or a string of flag + characters like "im" for IGNORECASE and MULTILINE + """ + if not isinstance(pattern, (str, bytes)): + raise TypeError("pattern must be a string, not %s" % type(pattern)) + self.pattern: _T = pattern + + if isinstance(flags, str): + self.flags = str_flags_to_int(flags) + elif isinstance(flags, int): + self.flags = flags + else: + raise TypeError("flags must be a string or int, not %s" % type(flags)) + + def __eq__(self, other: Any) -> bool: + if isinstance(other, Regex): + return self.pattern == other.pattern and self.flags == other.flags + else: + return NotImplemented + + __hash__ = None # type: ignore + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __repr__(self): + return "Regex(%r, %r)" % (self.pattern, self.flags) + + def try_compile(self) -> "Pattern[_T]": + """Compile this :class:`Regex` as a Python regular expression. + + .. warning:: + Python regular expressions use a different syntax and different + set of flags than MongoDB, which uses `PCRE`_. A regular + expression retrieved from the server may not compile in + Python, or may match a different set of strings in Python than + when used in a MongoDB query. :meth:`try_compile()` may raise + :exc:`re.error`. + + .. _PCRE: http://www.pcre.org/ + """ + return re.compile(self.pattern, self.flags) diff --git a/src/xtquant/xtbson/bson37/son.py b/src/xtquant/xtbson/bson37/son.py new file mode 100644 index 0000000..e4238b4 --- /dev/null +++ b/src/xtquant/xtbson/bson37/son.py @@ -0,0 +1,208 @@ +# Copyright 2009-present MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for creating and manipulating SON, the Serialized Ocument Notation. + +Regular dictionaries can be used instead of SON objects, but not when the order +of keys is important. A SON object can be used just like a normal Python +dictionary.""" + +import copy +import re +from collections.abc import Mapping as _Mapping +from typing import ( + Any, + Dict, + Iterable, + Iterator, + List, + Mapping, + Optional, + Pattern, + Tuple, + Type, + TypeVar, + Union, +) + +# This sort of sucks, but seems to be as good as it gets... +# This is essentially the same as re._pattern_type +RE_TYPE: Type[Pattern[Any]] = type(re.compile("")) + +_Key = TypeVar("_Key") +_Value = TypeVar("_Value") +_T = TypeVar("_T") + + +class SON(Dict[_Key, _Value]): + """SON data. + + A subclass of dict that maintains ordering of keys and provides a + few extra niceties for dealing with SON. SON provides an API + similar to collections.OrderedDict. + """ + + __keys: List[Any] + + def __init__( + self, + data: Optional[Union[Mapping[_Key, _Value], Iterable[Tuple[_Key, _Value]]]] = None, + **kwargs: Any + ) -> None: + self.__keys = [] + dict.__init__(self) + self.update(data) + self.update(kwargs) + + def __new__(cls: Type["SON[_Key, _Value]"], *args: Any, **kwargs: Any) -> "SON[_Key, _Value]": + instance = super(SON, cls).__new__(cls, *args, **kwargs) + instance.__keys = [] + return instance + + def __repr__(self): + result = [] + for key in self.__keys: + result.append("(%r, %r)" % (key, self[key])) + return "SON([%s])" % ", ".join(result) + + def __setitem__(self, key: _Key, value: _Value) -> None: + if key not in self.__keys: + self.__keys.append(key) + dict.__setitem__(self, key, value) + + def __delitem__(self, key: _Key) -> None: + self.__keys.remove(key) + dict.__delitem__(self, key) + + def copy(self) -> "SON[_Key, _Value]": + other: SON[_Key, _Value] = SON() + other.update(self) + return other + + # TODO this is all from UserDict.DictMixin. it could probably be made more + # efficient. + # second level definitions support higher levels + def __iter__(self) -> Iterator[_Key]: + for k in self.__keys: + yield k + + def has_key(self, key: _Key) -> bool: + return key in self.__keys + + def iterkeys(self) -> Iterator[_Key]: + return self.__iter__() + + # fourth level uses definitions from lower levels + def itervalues(self) -> Iterator[_Value]: + for _, v in self.items(): + yield v + + def values(self) -> List[_Value]: # type: ignore[override] + return [v for _, v in self.items()] + + def clear(self) -> None: + self.__keys = [] + super(SON, self).clear() + + def setdefault(self, key: _Key, default: _Value) -> _Value: # type: ignore[override] + try: + return self[key] + except KeyError: + self[key] = default + return default + + def pop(self, key: _Key, *args: Union[_Value, _T]) -> Union[_Value, _T]: + if len(args) > 1: + raise TypeError("pop expected at most 2 arguments, got " + repr(1 + len(args))) + try: + value = self[key] + except KeyError: + if args: + return args[0] + raise + del self[key] + return value + + def popitem(self) -> Tuple[_Key, _Value]: + try: + k, v = next(iter(self.items())) + except StopIteration: + raise KeyError("container is empty") + del self[k] + return (k, v) + + def update(self, other: Optional[Any] = None, **kwargs: _Value) -> None: # type: ignore[override] + # Make progressively weaker assumptions about "other" + if other is None: + pass + elif hasattr(other, "items"): + for k, v in other.items(): + self[k] = v + elif hasattr(other, "keys"): + for k in other.keys(): + self[k] = other[k] + else: + for k, v in other: + self[k] = v + if kwargs: + self.update(kwargs) + + def get(self, key: _Key, default: Optional[Union[_Value, _T]] = None) -> Union[_Value, _T, None]: # type: ignore[override] + try: + return self[key] + except KeyError: + return default + + def __eq__(self, other: Any) -> bool: + """Comparison to another SON is order-sensitive while comparison to a + regular dictionary is order-insensitive. + """ + if isinstance(other, SON): + return len(self) == len(other) and list(self.items()) == list(other.items()) + return self.to_dict() == other + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __len__(self) -> int: + return len(self.__keys) + + def to_dict(self) -> Dict[_Key, _Value]: + """Convert a SON document to a normal Python dictionary instance. + + This is trickier than just *dict(...)* because it needs to be + recursive. + """ + + def transform_value(value: Any) -> Any: + if isinstance(value, list): + return [transform_value(v) for v in value] + elif isinstance(value, _Mapping): + return dict([(k, transform_value(v)) for k, v in value.items()]) + else: + return value + + return transform_value(dict(self)) + + def __deepcopy__(self, memo: Dict[int, "SON[_Key, _Value]"]) -> "SON[_Key, _Value]": + out: SON[_Key, _Value] = SON() + val_id = id(self) + if val_id in memo: + return memo[val_id] + memo[val_id] = out + for k, v in self.items(): + if not isinstance(v, RE_TYPE): + v = copy.deepcopy(v, memo) + out[k] = v + return out diff --git a/src/xtquant/xtbson/bson37/timestamp.py b/src/xtquant/xtbson/bson37/timestamp.py new file mode 100644 index 0000000..3eb1534 --- /dev/null +++ b/src/xtquant/xtbson/bson37/timestamp.py @@ -0,0 +1,124 @@ +# Copyright 2010-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tools for representing MongoDB internal Timestamps. +""" + +import calendar +import datetime +from typing import Any, Union + +from ._helpers import _getstate_slots, _setstate_slots +from .tz_util import utc + +UPPERBOUND = 4294967296 + + +class Timestamp(object): + """MongoDB internal timestamps used in the opLog.""" + + __slots__ = ("__time", "__inc") + + __getstate__ = _getstate_slots + __setstate__ = _setstate_slots + + _type_marker = 17 + + def __init__(self, time: Union[datetime.datetime, int], inc: int) -> None: + """Create a new :class:`Timestamp`. + + This class is only for use with the MongoDB opLog. If you need + to store a regular timestamp, please use a + :class:`~datetime.datetime`. + + Raises :class:`TypeError` if `time` is not an instance of + :class: `int` or :class:`~datetime.datetime`, or `inc` is not + an instance of :class:`int`. Raises :class:`ValueError` if + `time` or `inc` is not in [0, 2**32). + + :Parameters: + - `time`: time in seconds since epoch UTC, or a naive UTC + :class:`~datetime.datetime`, or an aware + :class:`~datetime.datetime` + - `inc`: the incrementing counter + """ + if isinstance(time, datetime.datetime): + offset = time.utcoffset() + if offset is not None: + time = time - offset + time = int(calendar.timegm(time.timetuple())) + if not isinstance(time, int): + raise TypeError("time must be an instance of int") + if not isinstance(inc, int): + raise TypeError("inc must be an instance of int") + if not 0 <= time < UPPERBOUND: + raise ValueError("time must be contained in [0, 2**32)") + if not 0 <= inc < UPPERBOUND: + raise ValueError("inc must be contained in [0, 2**32)") + + self.__time = time + self.__inc = inc + + @property + def time(self) -> int: + """Get the time portion of this :class:`Timestamp`.""" + return self.__time + + @property + def inc(self) -> int: + """Get the inc portion of this :class:`Timestamp`.""" + return self.__inc + + def __eq__(self, other: Any) -> bool: + if isinstance(other, Timestamp): + return self.__time == other.time and self.__inc == other.inc + else: + return NotImplemented + + def __hash__(self) -> int: + return hash(self.time) ^ hash(self.inc) + + def __ne__(self, other: Any) -> bool: + return not self == other + + def __lt__(self, other: Any) -> bool: + if isinstance(other, Timestamp): + return (self.time, self.inc) < (other.time, other.inc) + return NotImplemented + + def __le__(self, other: Any) -> bool: + if isinstance(other, Timestamp): + return (self.time, self.inc) <= (other.time, other.inc) + return NotImplemented + + def __gt__(self, other: Any) -> bool: + if isinstance(other, Timestamp): + return (self.time, self.inc) > (other.time, other.inc) + return NotImplemented + + def __ge__(self, other: Any) -> bool: + if isinstance(other, Timestamp): + return (self.time, self.inc) >= (other.time, other.inc) + return NotImplemented + + def __repr__(self): + return "Timestamp(%s, %s)" % (self.__time, self.__inc) + + def as_datetime(self) -> datetime.datetime: + """Return a :class:`~datetime.datetime` instance corresponding + to the time portion of this :class:`Timestamp`. + + The returned datetime's timezone is UTC. + """ + return datetime.datetime.fromtimestamp(self.__time, utc) diff --git a/src/xtquant/xtbson/bson37/tz_util.py b/src/xtquant/xtbson/bson37/tz_util.py new file mode 100644 index 0000000..8106c77 --- /dev/null +++ b/src/xtquant/xtbson/bson37/tz_util.py @@ -0,0 +1,52 @@ +# Copyright 2010-2015 MongoDB, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Timezone related utilities for BSON.""" + +from datetime import datetime, timedelta, tzinfo +from typing import Optional, Tuple, Union + +ZERO: timedelta = timedelta(0) + + +class FixedOffset(tzinfo): + """Fixed offset timezone, in minutes east from UTC. + + Implementation based from the Python `standard library documentation + `_. + Defining __getinitargs__ enables pickling / copying. + """ + + def __init__(self, offset: Union[float, timedelta], name: str) -> None: + if isinstance(offset, timedelta): + self.__offset = offset + else: + self.__offset = timedelta(minutes=offset) + self.__name = name + + def __getinitargs__(self) -> Tuple[timedelta, str]: + return self.__offset, self.__name + + def utcoffset(self, dt: Optional[datetime]) -> timedelta: + return self.__offset + + def tzname(self, dt: Optional[datetime]) -> str: + return self.__name + + def dst(self, dt: Optional[datetime]) -> timedelta: + return ZERO + + +utc: FixedOffset = FixedOffset(0, "UTC") +"""Fixed offset timezone representing UTC.""" diff --git a/src/xtquant/xtconn.py b/src/xtquant/xtconn.py new file mode 100644 index 0000000..f82b485 --- /dev/null +++ b/src/xtquant/xtconn.py @@ -0,0 +1,196 @@ +#coding:utf-8 + +from .xtdatacenter import try_create_client + +### config +localhost = '127.0.0.1' + +### function +status_callback = None + +def try_create_connection(addr): + ''' + addr: 'localhost:58610' + ''' + ip, port = addr.split(':') + if not ip: + ip = localhost + if not port: + raise Exception('invalid port') + + cl = try_create_client() + cl.set_config_addr(addr) + + global status_callback + if status_callback: + cl.registerCommonControlCallback("watchxtquantstatus", status_callback) + + ec, msg = cl.connect() + if ec < 0: + raise Exception((ec, msg)) + return cl + + +def create_connection(addr): + try: + return try_create_connection(addr) + except Exception as e: + return None + + +def scan_all_server_instance(): + ''' + 扫描当前环境下所有XTQuant服务实例 + + return: list + [ config1, config2,... ] + + config: dict + { + 'ip': '127.0.0.1', 'port': 58610, + 'is_running': False, + 'client_type': 'research', + 'data_dir': 'xtquant_server/datadir', + } + ''' + + import os, sys + import json + + result = [] + + try: + config_dir = os.path.abspath(os.path.join(os.environ['USERPROFILE'], '.xtquant')) + + for f in os.scandir(config_dir): + full_path = f.path + + f_xtdata_cfg = os.path.join(full_path, 'xtdata.cfg') + if not os.path.exists(f_xtdata_cfg): + continue + + try: + config = json.load(open(f_xtdata_cfg, 'r', encoding = 'utf-8')) + + ip = config.get('ip', None) + if not ip: + config['ip'] = localhost + + port = config.get('port', None) + if not port: + continue + + except Exception as e: + continue + + is_running = False + + f_running_status = os.path.join(full_path, 'running_status') + if os.path.exists(f_running_status): + try: + os.remove(f_running_status) + except PermissionError: + is_running = True + except Exception as e: + pass + + config['is_running'] = is_running + + result.append(config) + + except Exception as e: + pass + + return result + + +def get_internal_server_addr(): + ''' + 获取内部XTQuant服务地址 + + return: str + '127.0.0.1:58610' + ''' + try: + from .xtdatacenter import get_local_server_port + local_server_port = get_local_server_port() + if local_server_port: + return f'127.0.0.1:{local_server_port}' + except: + pass + return None + + +def scan_available_server_addr(): + ''' + 扫描当前环境下可用的XTQuant服务实例 + + return: list + [ '0.0.0.0:58610', '0.0.0.0:58611', ... ] + ''' + + import os, sys + import json + + result = [] + + internal_server_addr = get_internal_server_addr() + if internal_server_addr: + result.append(internal_server_addr) + + try: + result_scan = [] + + inst_list = scan_all_server_instance() + + for config in inst_list: + try: + if not config.get('is_running', False): + continue + + ip = config.get('ip', None) + port = config.get('port', None) + if not ip or not port: + continue + + addr = f'{ip}:{port}' + + root_dir = os.path.normpath(config.get('root_dir', '')) + if root_dir and os.path.normpath(sys.executable).find(root_dir) == 0: + result_scan.insert(0, addr) + else: + result_scan.append(addr) + + except Exception as e: + continue + + except Exception as e: + pass + + result += result_scan + + result = list(dict.fromkeys(result)) + + return result + + +def connect_any(addr_list, start_port, end_port): + ''' + addr_list: [ addr, ... ] + addr: 'localhost:58610' + ''' + for addr in addr_list: + try: + port = int(addr.split(':')[1]) + if start_port > port or port > end_port: + continue + + cl = create_connection(addr) + if cl: + return cl + except Exception as e: + continue + + return None + + diff --git a/src/xtquant/xtconstant.py b/src/xtquant/xtconstant.py new file mode 100644 index 0000000..009bf68 --- /dev/null +++ b/src/xtquant/xtconstant.py @@ -0,0 +1,1173 @@ +#coding=utf-8 + + +""" +常量定义模块 +""" + + +""" +账号类型 +""" +# 期货 +FUTURE_ACCOUNT = 1 +# 股票 +SECURITY_ACCOUNT = 2 +# 信用 +CREDIT_ACCOUNT = 3 +# 期货期权 +FUTURE_OPTION_ACCOUNT = 5 +# 股票期权 +STOCK_OPTION_ACCOUNT = 6 +# 沪港通 +HUGANGTONG_ACCOUNT = 7 +# 美股收益互换 +INCOME_SWAP_ACCOUNT = 8 +# 全国股转账号 +NEW3BOARD_ACCOUNT = 10 +# 深港通 +SHENGANGTONG_ACCOUNT = 11 +# 场外理财账户 +AT_OFFSITEBANKING = 13 +# 期货外盘 +AT_OUTTER_FUTURE = 1001 +# IB +AT_IB = 1002 +# 场外托管 +AT_NS_TRUSTBANK = 15001 +# 银行间账号 +AT_INTERBANK = 15002 +# 银行账号 +AT_BANK = 15003 +# 场外账号 +AT_OTC = 15005 + +ACCOUNT_TYPE_DICT = { + FUTURE_ACCOUNT : 'FUTURE', + SECURITY_ACCOUNT : 'STOCK', + CREDIT_ACCOUNT : 'CREDIT', + FUTURE_OPTION_ACCOUNT : 'FUTURE_OPTION', + STOCK_OPTION_ACCOUNT : 'STOCK_OPTION', + HUGANGTONG_ACCOUNT : 'HUGANGTONG', + SHENGANGTONG_ACCOUNT : 'SHENGANGTONG', + NEW3BOARD_ACCOUNT : 'NEW3BOARD', + INCOME_SWAP_ACCOUNT: 'INCOME_SWAP', + AT_OFFSITEBANKING : 'OFFSITEBANKING', + AT_OUTTER_FUTURE : 'OUTTER_FUTURE', + AT_IB : 'IB', + AT_NS_TRUSTBANK : 'NS_TRUSTBANK', + AT_INTERBANK : 'INTERBANK', + AT_BANK : 'BANK', + AT_OTC : 'OTC', +} + + +""" +委托类型 +""" +#/ *期货六键风格 * / +FUTURE_OPEN_LONG = 0 # 开多 +FUTURE_CLOSE_LONG_HISTORY = 1 # 平昨多 +FUTURE_CLOSE_LONG_TODAY = 2 # 平今多 +FUTURE_OPEN_SHORT = 3 # 开空 +FUTURE_CLOSE_SHORT_HISTORY = 4 # 平昨空 +FUTURE_CLOSE_SHORT_TODAY = 5 # 平今空 +# / *期货四键风格 * / +FUTURE_CLOSE_LONG_TODAY_FIRST = 6 # 平多,优先平今 +FUTURE_CLOSE_LONG_HISTORY_FIRST = 7 # 平多,优先平昨 +FUTURE_CLOSE_SHORT_TODAY_FIRST = 8 # 平空,优先平今 +FUTURE_CLOSE_SHORT_HISTORY_FIRST = 9 # 平空,优先平昨 + +# / *期货两键风格 * / +FUTURE_CLOSE_LONG_TODAY_HISTORY_THEN_OPEN_SHORT = 10 # 卖出,如有多仓,优先平仓,优先平今,如有余量,再开空 +FUTURE_CLOSE_LONG_HISTORY_TODAY_THEN_OPEN_SHORT = 11 # 卖出,如有多仓,优先平仓,优先平昨,如有余量,再开空 +FUTURE_CLOSE_SHORT_TODAY_HISTORY_THEN_OPEN_LONG = 12 # 买入,如有空仓,优先平仓,优先平今,如有余量,再开多 +FUTURE_CLOSE_SHORT_HISTORY_TODAY_THEN_OPEN_LONG = 13 # 买入,如有空仓,优先平仓,优先平昨,如有余量,再开多 +FUTURE_OPEN = 14 # 买入,不优先平仓 +FUTURE_CLOSE = 15 # 卖出,不优先平仓 + +# / *期货 - 跨商品套利 * / +FUTURE_ARBITRAGE_OPEN = 16 # 开仓 +FUTURE_ARBITRAGE_CLOSE_HISTORY_FIRST = 17 # 平, 优先平昨 +FUTURE_ARBITRAGE_CLOSE_TODAY_FIRST = 18 # 平, 优先平今 + +# / *期货展期 * / +FUTURE_RENEW_LONG_CLOSE_HISTORY_FIRST = 19 # 看多, 优先平昨 +FUTURE_RENEW_LONG_CLOSE_TODAY_FIRST = 20 # 看多,优先平今 +FUTURE_RENEW_SHORT_CLOSE_HISTORY_FIRST = 21 # 看空,优先平昨 +FUTURE_RENEW_SHORT_CLOSE_TODAY_FIRST = 22 # 看空,优先平今 + +# / *股票期权 * / +STOCK_OPTION_BUY_OPEN = 48 # 买入开仓,以下用于个股期权交易业务 +STOCK_OPTION_SELL_CLOSE = 49 # 卖出平仓 +STOCK_OPTION_SELL_OPEN = 50 # 卖出开仓 +STOCK_OPTION_BUY_CLOSE = 51 # 买入平仓 +STOCK_OPTION_COVERED_OPEN = 52 # 备兑开仓 +STOCK_OPTION_COVERED_CLOSE = 53 # 备兑平仓 +STOCK_OPTION_CALL_EXERCISE = 54 # 认购行权 +STOCK_OPTION_PUT_EXERCISE = 55 # 认沽行权 +STOCK_OPTION_SECU_LOCK = 56 # 证券锁定 +STOCK_OPTION_SECU_UNLOCK = 57 # 证券解锁 + +# /*期货期权*/ +OPTION_FUTURE_OPTION_EXERCISE = 100 # 期货期权行权 + +# /*组合期货*/ +COMPOSE_OPEN_LONG = 110 # 组合开多 +COMPOSE_OPEN_SHORT = 111 # 组合开空 +COMPOSE_CLOSE_LONG_TODAY_FIRST = 112 # 组合平多-优先平今 +COMPOSE_CLOSE_LONG_HISTORY_FIRST = 113 # 组合平多-优先平昨 +COMPOSE_CLOSE_SHORT_TODAY_FIRST = 114 # 组合平空-优先平今 +COMPOSE_CLOSE_SHORT_HISTORY_FIRST = 115 # 组合平空-优先平昨 +COMPOSE_ONEKEY_FUTURE_TODAY_FIRST = 116 # 一键期货-优先平今 +COMPOSE_ONEKEY_FUTURE_HISTORY_FIRST = 117 # 一键期货-优先平昨 +COMPOSE_FUTURE_ADJUST_TODAY_FIRST = 118 # 组合调仓-优先平今 +COMPOSE_FUTURE_ADJUST_HISTORY_FIRST = 119 # 组合调仓-优先平昨 + +# / *组合期权 * / +COMPOSE_OPTION_COMB_EXERCISE = 137 # 组合行权 +COMPOSE_OPTION_BUILD_COMB_STRATEGY = 138 # 构建组合策略 +COMPOSE_OPTION_RELEASE_COMB_STRATEGY = 139 # 解除组合策略 + +# /*期货套利*/ +FUTURE_HEDGE = 400 # 期货套利 + +# /*ETF申赎*/ +ETF_PURCHASE = 134 # 申购 +ETF_REDEMPTION = 135 # 赎回 + +STOCK_BUY = 23 +STOCK_SELL = 24 +CREDIT_BUY = 23 #担保品买入 +CREDIT_SELL = 24 #担保品卖出 +CREDIT_FIN_BUY = 27 #融资买入 +CREDIT_SLO_SELL = 28 #融券卖出 +CREDIT_BUY_SECU_REPAY = 29 #买券还券 +CREDIT_DIRECT_SECU_REPAY = 30 #直接还券 +CREDIT_SELL_SECU_REPAY = 31 #卖券还款 +CREDIT_DIRECT_CASH_REPAY = 32 #直接还款 +CREDIT_FIN_BUY_SPECIAL = 40 #专项融资买入 +CREDIT_SLO_SELL_SPECIAL = 41 #专项融券卖出 +CREDIT_BUY_SECU_REPAY_SPECIAL = 42 #专项买券还券 +CREDIT_DIRECT_SECU_REPAY_SPECIAL = 43 #专项直接还券 +CREDIT_SELL_SECU_REPAY_SPECIAL = 44 #专项卖券还款 +CREDIT_DIRECT_CASH_REPAY_SPECIAL = 45 #专项直接还款 + +ORDER_TYPE_SET = { + STOCK_BUY + , STOCK_SELL + , CREDIT_BUY + , CREDIT_SELL + , CREDIT_FIN_BUY + , CREDIT_SLO_SELL + , CREDIT_BUY_SECU_REPAY + , CREDIT_DIRECT_SECU_REPAY + , CREDIT_SELL_SECU_REPAY + , CREDIT_DIRECT_CASH_REPAY + , CREDIT_FIN_BUY_SPECIAL + , CREDIT_SLO_SELL_SPECIAL + , CREDIT_BUY_SECU_REPAY_SPECIAL + , CREDIT_DIRECT_SECU_REPAY_SPECIAL + , CREDIT_SELL_SECU_REPAY_SPECIAL + , CREDIT_DIRECT_CASH_REPAY_SPECIAL +} + +""" +报价类型 +""" +# 最新价 +LATEST_PRICE = 5 +# 指定价/限价 +FIX_PRICE = 11 +# 市价最优价[郑商所][期货] +MARKET_BEST = 18 +# 市价即成剩撤[大商所][期货] +MARKET_CANCEL = 19 +# 市价全额成交或撤[大商所][期货] +MARKET_CANCEL_ALL = 20 +# 市价最优一档即成剩撤[中金所][期货] +MARKET_CANCEL_1 = 21 +# 市价最优五档即成剩撤[中金所][期货] +MARKET_CANCEL_5 = 22 +# 市价最优一档即成剩转[中金所][期货] +MARKET_CONVERT_1 = 23 +# 市价最优五档即成剩转[中金所][期货] +MARKET_CONVERT_5 = 24 +# 最优五档即时成交剩余撤销[上交所][股票] +MARKET_SH_CONVERT_5_CANCEL = 42 +# 最优五档即时成交剩转限价[上交所][股票] +MARKET_SH_CONVERT_5_LIMIT = 43 +# 对手方最优价格委托[上交所[股票]][深交所[股票][期权]] +MARKET_PEER_PRICE_FIRST = 44 +# 本方最优价格委托[上交所[股票]][深交所[股票][期权]] +MARKET_MINE_PRICE_FIRST = 45 +# 即时成交剩余撤销委托[深交所][股票][期权] +MARKET_SZ_INSTBUSI_RESTCANCEL = 46 +# 最优五档即时成交剩余撤销[深交所][股票][期权] +MARKET_SZ_CONVERT_5_CANCEL = 47 +# 全额成交或撤销委托[深交所][股票][期权] +MARKET_SZ_FULL_OR_CANCEL = 48 + + +""" +市场类型 +""" +# 上海市场 +SH_MARKET = 0 +# 深圳市场 +SZ_MARKET = 1 +# 北交所 +MARKET_ENUM_BEIJING = 70 +# 上期所 +MARKET_ENUM_SHANGHAI_FUTURE = 3 +# 大商所 +MARKET_ENUM_DALIANG_FUTURE = 4 +# 郑商所 +MARKET_ENUM_ZHENGZHOU_FUTURE = 5 +# 中金所 +MARKET_ENUM_INDEX_FUTURE = 2 +# 能源中心 +MARKET_ENUM_INTL_ENERGY_FUTURE = 6 +# 广期所 +MARKET_ENUM_GUANGZHOU_FUTURE = 75 +# 上海期权 +MARKET_ENUM_SHANGHAI_STOCK_OPTION = 7 +# 深圳期权 +MARKET_ENUM_SHENZHEN_STOCK_OPTION = 67 + +""" +市场类型-字符串 +""" +# 上交所 +MARKET_SHANGHAI = 'SH' +# 深交所 +MARKET_SHENZHEN = 'SZ' +# 北交所 +MARKET_BEIJING = 'BJ' +# 上期所 +MARKET_SHANGHAI_FUTURE = 'SF' +# 大商所 +MARKET_DALIANG_FUTURE = 'DF' +# 郑商所 +MARKET_ZHENGZHOU_FUTURE = 'ZF' +# 中金所 +MARKET_INDEX_FUTURE = 'IF' +# 能源中心 +MARKET_INTL_ENERGY_FUTURE = 'INE' +# 广期所 +MARKET_GUANGZHOU_FUTURE = 'GF' +# 上海期权 +MARKET_SHANGHAI_STOCK_OPTION = 'SHO' +# 深圳期权 +MARKET_SHENZHEN_STOCK_OPTION = 'SZO' + +MARKET_STR_TO_ENUM_MAPPING = { + MARKET_SHANGHAI : SH_MARKET, + MARKET_SHENZHEN : SZ_MARKET, + MARKET_BEIJING : MARKET_ENUM_BEIJING, + MARKET_SHANGHAI_FUTURE : MARKET_ENUM_SHANGHAI_FUTURE, + MARKET_DALIANG_FUTURE : MARKET_ENUM_DALIANG_FUTURE, + MARKET_ZHENGZHOU_FUTURE : MARKET_ENUM_ZHENGZHOU_FUTURE, + MARKET_INDEX_FUTURE : MARKET_ENUM_INDEX_FUTURE, + MARKET_INTL_ENERGY_FUTURE: MARKET_ENUM_INTL_ENERGY_FUTURE, + MARKET_GUANGZHOU_FUTURE : MARKET_ENUM_GUANGZHOU_FUTURE, + MARKET_SHANGHAI_STOCK_OPTION : MARKET_ENUM_SHANGHAI_STOCK_OPTION, + MARKET_SHENZHEN_STOCK_OPTION : MARKET_ENUM_SHENZHEN_STOCK_OPTION, +} + + +""" +委托状态 +""" +# 未报 +ORDER_UNREPORTED = 48 +# 待报 +ORDER_WAIT_REPORTING = 49 +# 已报 +ORDER_REPORTED = 50 +# 已报待撤 +ORDER_REPORTED_CANCEL = 51 +# 部成待撤 +ORDER_PARTSUCC_CANCEL = 52 +# 部撤 +ORDER_PART_CANCEL = 53 +# 已撤 +ORDER_CANCELED = 54 +# 部成 +ORDER_PART_SUCC = 55 +# 已成 +ORDER_SUCCEEDED = 56 +# 废单 +ORDER_JUNK = 57 +# 未知 +ORDER_UNKNOWN = 255 + + +""" +账号状态 +""" +#无效 +ACCOUNT_STATUS_INVALID = -1 +#正常 +ACCOUNT_STATUS_OK = 0 +#连接中 +ACCOUNT_STATUS_WAITING_LOGIN = 1 +#登陆中 +ACCOUNT_STATUSING = 2 +#失败 +ACCOUNT_STATUS_FAIL = 3 +#初始化中 +ACCOUNT_STATUS_INITING = 4 +#数据刷新校正中 +ACCOUNT_STATUS_CORRECTING = 5 +#收盘后 +ACCOUNT_STATUS_CLOSED = 6 +#穿透副链接断开 +ACCOUNT_STATUS_ASSIS_FAIL = 7 +#系统停用(总线使用-密码错误超限) +ACCOUNT_STATUS_DISABLEBYSYS = 8 +#用户停用(总线使用) +ACCOUNT_STATUS_DISABLEBYUSER = 9 + +""" +指令交易类型 +""" +#无效值 +TDT_INVALID = 0x00000000 +#股票交易 +TDT_STOCK = 0x00000001 +#期货交易 +TDT_FUTURE = 0x00000002 +#组合交易 +TDT_COMPOSE = 0x00000004 +#信用交易 +TDT_CREDIT = 0x00000008 +#黄金T+D交易 +TDT_GOLD = 0x00000010 +#股票期权 +TDT_STK_OPTION = 0x00000020 +#外盘 +TDT_OUTTER = 0x00000040 +#沪港通 +TDT_HUGANGTONG = 0x00000080 +#全国股转 +TDT_NEW3BOARD = 0x00000100 +#场外业务 +TDT_NON_STANDARD = 0x00000200 +#期货期权 +TDT_FUTURE_OPTION = 0x00000400 +#电子盘交易 +TDT_ELECTRONIC = 0x00000800 +#ETF申赎 +TDT_ETF = 0x00001000 +#全业务 +TDT_PB_FULL = 0x00002000 +#深港通 +TDT_SHENGANGTONG = 0x00004000 +#银行间业务 +TDT_INTERBANK = 0x00008000 +#风控员界面 +TDT_RISK = 0x00010000 +#日内回转界面 +TDT_PF_REVOLVING = 0x00020000 +#数字货币 +TDT_DIGICOIN = 0x00040000 +#银行账号 +TDT_BANK = 0x00040001 +#投组管理 +TDT_PORTFOLIO = 0x00080000 +#固收业务 +TDT_FICC = 0x00100000 +#券商理财 +TDT_BROKER_FINANCING = 0x00200000 +#转融通 +TDT_LMT = 0x00400000 +#收益互换 +TDT_INCOME_SWAP = 0x00800000 +#快捷交易 +TDT_FAST_TRADE = 0x01000000 +#转托管 +TDT_TOC = 0x02000000 +#利率互换 +TDT_IRS = 0x04000000 +#债券投标 +TDT_BTD = 0x08000000 +#网下新股 +TDT_OFF_IPO = 0x10000000 +#融券通 +TDT_SECLENDING = 0x20000000 +#转账录入 +TDT_TRANSFER = 0x40000000 + +#超int上限 +#这里的数值是相关的业务全部求和的 例如TDT_NOT_COMPOSE = 上面全部相加 减去TDT_COMPOSE TDT_NORMALTRADE是上面所有的去掉TDT_NON_STANDARD以及TDT_INTERBANK +#不包含组合交易的其他交易类型 +TDT_NOT_COMPOSE = 0x20F0DFFB +#普通交易类型,不包含非标业务和银行间业务 +TDT_NORMALTRADE = 0x3FF07DFF + +#占位 +#所有交易界面 +TDT_TRADE = 0x7FF4FFFF +#所有界面 +TDT_ALL = 0x3FF3FFFF +#综合交易界面 +TDT_INTEGRATED = 0x000C5DFF + + +""" +指令状态 +""" +#风控检查中 +OCS_CHECKING = -1 +#审批中 +OCS_APPROVING = 0 +#已驳回 +OCS_REJECTED = 1 +#运行中 +OCS_RUNNING = 2 +#撤销中 +OCS_CANCELING_DEPRECATED = 3 +#已完成 +OCS_FINISHED = 4 +#已撤销 +OCS_STOPPED = 5 +#强制撤销 +OCS_FORCE_COMPLETED_DEPRECATED = 6 +#风控驳回 +OCS_CHECKFAILED = 7 +#撤销审批中 +OCS_CANCELING_APPROVING = 8 +#撤销驳回 +OCS_CANCELING_REJECTED = 9 +#预埋指令 +OCS_PRESETTING = 10 +#撤销指令至撤销人 +OCS_CANCEL_TO_USER = 11 +#驳回指令至上一级 +OCS_CANCEL_REJECT_TO_UPPER_LEVEL = 12 +#补单 +OCS_PATCH_RUNNNING = 13 +#暂停指令并暂停任务 +OCS_PAUSE_PAUSEORDER = 14 +#暂停指令并撤销任务 +OCS_PAUSE_CANCELORDER = 15 +#场外:转账确认 +OCS_NS_TRANSFERCONFIRM = 101 +#场外:已结算 +OCS_NS_SETTLEUP = 102 +#场外:撤销中 +OCS_NS_CANCELING = 103 +#场外:认购确认中 +OCS_OTC_SUBSCRIBE_CONFIRMING = 104 +#场外:TA确认中 +OCS_OTC_TA_CONFIRMING = 105 +#场外:基金成立中 +OCS_OTC_FUND_ESTABLISHING = 106 +#场外:交收确认中 +OCS_OTC_SETTLE_CONFIRMING = 107 +#场外:询价成交确认中 +OCS_OTC_QUERY_CONFIRMING = 108 +#场外:存款成交确认中 +OCS_OTC_DEPOSIT_CONFIRMING = 109 +#场外:支取成交确认中 +OCS_OTC_DRAW_CONFIRMING = 110 +#已完成 +OCS_INTERBANK_DEAL_FINISHED = 201 +#已结束 +OCS_INTERBANK_SETTLE_FINISHED = 202 +#置为完成 +OCS_INTERBANK_MANAUL_FINISHED = 203 +#锁定中 +OCS_INTERBANK_LOCK = 204 +#任务创建运行 +OCS_TASK_STATUS_RUNNING = 1001 +#任务被撤销了 +OCS_TASK_STATUS_CANCELED = 1002 +#任务完成 +OCS_TASK_STATUS_FINISHED = 1003 +#任务被暂停了 +OCS_TASK_STATUS_PAUSED = 1004 +#指令回溯 +OCS_INTERBANK_CMD_ROLLBACK = 1100 +#指令解锁 +OCS_INTERBANK_CMD_UNLOCK = 1101 +#目前只作留痕用 +OCS_CANCELING_ORDER = 1300 +#改价中 +OCS_CHANGE_PRICE_ING = 1400 +#改价成功 +OCS_CHANGE_PRICE_SUCCESS = 1401 +#改价失败 +OCS_CHANGE_PRICE_FAIL = 1402 +#改触价 +OCS_CHANGE_PRICE_TRIGGER_PRICE = 1403 +#算法指令改单中 +OCS_CHANGE_COMMAND = 1404 +#普通指令准备改单中 +OCS_INORDER_TO_CHANGE_COMMAND_NORMAL = 1405 +#普通指令改单中 +OCS_CHANGE_COMMAND_NORMAL = 1406 +#风控员确认中 +OCS_RISKCONTROLER_APPROVING = 1407 +#无效值 +OCS_CMD_INVALID = -2 + +""" +指令操作类型 +""" +#未知 +OPT_INVALID = -1 +#开多 +OPT_OPEN_LONG = 0 +#平昨多,平多 +OPT_CLOSE_LONG_HISTORY = 1 +#平今多 +OPT_CLOSE_LONG_TODAY = 2 +#开空 +OPT_OPEN_SHORT = 3 +#平昨空,平空 +OPT_CLOSE_SHORT_HISTORY = 4 +#平今空 +OPT_CLOSE_SHORT_TODAY = 5 +#平多优先平今 +OPT_CLOSE_LONG_TODAY_FIRST = 6 +#平多优先平昨 +OPT_CLOSE_LONG_HISTORY_FIRST = 7 +#平空优先平今 +OPT_CLOSE_SHORT_TODAY_FIRST = 8 +#平空优先平昨 +OPT_CLOSE_SHORT_HISTORY_FIRST = 9 +#卖出优先平今 +OPT_CLOSE_LONG_TODAY_HISTORY_THEN_OPEN_SHORT = 10 +#卖出优先平昨 +OPT_CLOSE_LONG_HISTORY_TODAY_THEN_OPEN_SHORT = 11 +#买入优先平今 +OPT_CLOSE_SHORT_TODAY_HISTORY_THEN_OPEN_LONG = 12 +#买入优先平昨 +OPT_CLOSE_SHORT_HISTORY_TODAY_THEN_OPEN_LONG = 13 +#平多 +OPT_CLOSE_LONG = 14 +#平空 +OPT_CLOSE_SHORT = 15 +#买入,开仓,买入 +OPT_OPEN = 16 +#卖出,平仓,卖出 +OPT_CLOSE = 17 +#买入 +OPT_BUY = 18 +#卖出 +OPT_SELL = 19 +#融资买入 +OPT_FIN_BUY = 20 +#融券卖出 +OPT_SLO_SELL = 21 +#买券还券 +OPT_BUY_SECU_REPAY = 22 +#直接还券 +OPT_DIRECT_SECU_REPAY = 23 +#卖券还款 +OPT_SELL_CASH_REPAY = 24 +#直接还款 +OPT_DIRECT_CASH_REPAY = 25 +#基金申购 +OPT_FUND_SUBSCRIBE = 26 +#基金赎回 +OPT_FUND_REDEMPTION = 27 +#基金合并 +OPT_FUND_MERGE = 28 +#基金分拆 +OPT_FUND_SPLIT = 29 +#质押入库 +OPT_PLEDGE_IN = 30 +#质押出库 +OPT_PLEDGE_OUT = 31 +#买入开仓 +OPT_OPTION_BUY_OPEN = 32 +#卖出平仓 +OPT_OPTION_SELL_CLOSE = 33 +#卖出开仓 +OPT_OPTION_SELL_OPEN = 34 +#买入平仓 +OPT_OPTION_BUY_CLOSE = 35 +#备兑开仓 +OPT_OPTION_COVERED_OPEN = 36 +#备兑平仓 +OPT_OPTION_COVERED_CLOSE = 37 +#认购行权 +OPT_OPTION_CALL_EXERCISE = 38 +#认沽行权 +OPT_OPTION_PUT_EXERCISE = 39 +#证券锁定 +OPT_OPTION_SECU_LOCK = 40 +#证券解锁 +OPT_OPTION_SECU_UNLOCK = 41 +#定价买入 +OPT_N3B_PRICE_BUY = 42 +#定价卖出 +OPT_N3B_PRICE_SELL = 43 +#成交确认买入 +OPT_N3B_CONFIRM_BUY = 44 +#成交确认卖出 +OPT_N3B_CONFIRM_SELL = 45 +#互报成交确认买入 +OPT_N3B_REPORT_CONFIRM_BUY = 46 +#互报成交确认卖出 +OPT_N3B_REPORT_CONFIRM_SELL = 47 +#限价买入 +OPT_N3B_LIMIT_PRICE_BUY = 48 +#限价卖出 +OPT_N3B_LIMIT_PRICE_SELL = 49 +#期货期权行权 +OPT_FUTURE_OPTION_EXERCISE = 50 +#可转债转股 +OPT_CONVERT_BONDS = 51 +#可转债回售 +OPT_SELL_BACK_BONDS = 52 +#股票配股 +OPT_STK_ALLOTMENT = 53 +#股票增发 +OPT_STK_INCREASE_SHARE = 54 +#担保品划入 +OPT_COLLATERAL_TRANSFER_IN = 55 +#担保品划出 +OPT_COLLATERAL_TRANSFER_OUT = 56 +#意向申报买入 +OPT_BLOCK_INTENTION_BUY = 57 +#意向申报卖出 +OPT_BLOCK_INTENTION_SELL = 58 +#定价申报买入 +OPT_BLOCK_PRICE_BUY = 59 +#定价申报卖出 +OPT_BLOCK_PRICE_SELL = 60 +#成交申报买入 +OPT_BLOCK_CONFIRM_BUY = 61 +#成交申报卖出 +OPT_BLOCK_CONFIRM_SELL = 62 +#盘后定价买入 +OPT_BLOCK_CLOSE_PRICE_BUY = 63 +#盘后定价卖出 +OPT_BLOCK_CLOSE_PRICE_SELL = 64 +#黄金交割买 +OPT_GOLD_PRICE_DELIVERY_BUY = 65 +#黄金交割卖 +OPT_GOLD_PRICE_DELIVERY_SELL = 66 +#黄金中立仓买 +OPT_GOLD_PRICE_MIDDLE_BUY = 67 +#黄金中立仓卖 +OPT_GOLD_PRICE_MIDDLE_SELL = 68 +#组合交易一键买卖 +OPT_COMPOSE_ONEKEY_BUYSELL = 69 +#组合交易港股通买入 +OPT_COMPOSE_GGT_BUY = 70 +#组合交易港股通卖出 +OPT_COMPOSE_GGT_SELL = 71 +#零股卖出 +OPT_ODD_SELL = 72 +#成份股买入 +OPT_ETF_STOCK_BUY = 73 +#成份股卖出 +OPT_ETF_STOCK_SELL = 74 +# +OPT_OTC_FUND_BEGIN = 200 +#认购 +OPT_OTC_FUND_SUBSCRIBE = OPT_OTC_FUND_BEGIN +#申购 +OPT_OTC_FUND_PURCHASE = 201 +#赎回 +OPT_OTC_FUND_REDEMPTION = 202 +#转换 +OPT_OTC_FUND_CONVERT = 203 +#分红方式变更 +OPT_OTC_FUND_BONUS_TYPE_UPDATE = 204 +#协议存款 +OPT_OTC_CONTRACTUAL_DEPOSIT = 205 +#非协议存款 +OPT_OTC_NON_CONTRACTUAL_DEPOSIT = 206 +#协议存款询价 +OPT_OTC_CONTRACTUAL_DEPOSIT_ASK = 207 +#非协议存款询价 +OPT_OTC_NON_CONTRACTUAL_DEPOSIT_ASK = 208 +#场外非协议活期存款 +OPT_OTC_NON_CONTRACTUAL_DEPOSIT_CUR = 209 +#存单支取 +OPT_OTC_DRAW_DEPOSIT = 210 +#网下询价 +OPT_OTC_STOCK_INQUIRY = 230 +#网下申购 +OPT_OTC_STOCK_PURCHASE = 231 +# 场外操作 +OPT_OPTION_NS_BEGIN = 1001 +#入金 +OPT_OPTION_NS_DEPOSIT = OPT_OPTION_NS_BEGIN +#出金 +OPT_OPTION_NS_WITHDRAW = 1002 +#互转 +OPT_OPTION_NS_INOUT = 1003 +#ETF申购 +OPT_ETF_PURCHASE = 1004 +#ETF赎回 +OPT_ETF_REDEMPTION = 1005 +#外盘买入 +OPT_OUTER_BUY = 1006 +#外盘卖出 +OPT_OUTER_SELL = 1007 +#外盘可平买仓 +OPT_OUTER_CAN_CLOSE_BUY = 1008 +#外盘可平卖仓 +OPT_OUTER_CAN_CLOSE_SELL = 1009 +#专项融券卖出 +OPT_SLO_SELL_SPECIAL = 1010 +#专项买券还券 +OPT_BUY_SECU_REPAY_SPECIAL = 1011 +#专项直接还券 +OPT_DIRECT_SECU_REPAY_SPECIAL = 1012 +#限价买入 +OPT_NEEQ_O3B_LIMIT_PRICE_BUY = 1013 +#限价卖出 +OPT_NEEQ_O3B_LIMIT_PRICE_SELL = 1014 +#现券买入 +OPT_IBANK_BOND_BUY = 1015 +#现券卖出 +OPT_IBANK_BOND_SELL = 1016 +#质押式融资回购 +OPT_IBANK_FUND_REPURCHASE = 1017 +#质押式融券回购 +OPT_IBANK_BOND_REPURCHASE = 1018 +#质押式融资购回 +OPT_IBANK_BOND_REPAY = 1019 +#质押式融券购回 +OPT_IBANK_FUND_RETRIEVE = 1020 +#融券息费 +OPT_INTEREST_FEE = 1021 +#专项融资买入 +OPT_FIN_BUY_SPECIAL = 1022 +#专项卖券还款 +OPT_SELL_CASH_REPAY_SPECIAL = 1023 +#专项直接还款 +OPT_DIRECT_CASH_REPAY_SPECIAL = 1024 +#货币基金申购 +OPT_FUND_PRICE_BUY = 1025 +#货币基金赎回 +OPT_FUND_PRICE_SELL = 1026 +#集合竞价买入 +OPT_N3B_CALL_AUCTION_BUY = 1027 +#集合竞价卖出 +OPT_N3B_CALL_AUCTION_SELL = 1028 +#盘后协议买入 +OPT_N3B_AFTER_HOURS_BUY = 1029 +#盘后协议卖出 +OPT_N3B_AFTER_HOURS_SELL = 1030 +#ETF套利 +OPT_ETF_HEDGE = 1031 +#报价回购买入 +OPT_QUOTATION_REPURCHASE_BUY = 1032 +#报价回购终止续做 +OPT_QUOTATION_REPURCHASE_STOP = 1033 +#报价回购提前购回 +OPT_QUOTATION_REPURCHASE_BEFORE = 1034 +#报价回购购回预约 +OPT_QUOTATION_REPURCHASE_RESERVATION = 1035 +#报价回购取消预约 +OPT_QUOTATION_REPURCHASE_CANCEL = 1036 +#成交申报配对买入 +OPT_BLOCK_CONFIRM_MATCH_BUY = 1037 +#成交申报配对卖出 +OPT_BLOCK_CONFIRM_MATCH_SELL = 1038 +#期货期权放弃行权 +OPT_FUTURE_OPTION_ABANDON = 1039 +#一键划转 +OPT_ONEKEY_TRANSFER = 1040 +#一键划入 +OPT_ONEKEY_TRANSFER_IN = 1041 +#一键划出 +OPT_ONEKEY_TRANSFER_OUT = 1042 +#盘后定价买入 +OPT_AFTER_FIX_BUY = 1043 +#盘后定价卖出 +OPT_AFTER_FIX_SELL = 1044 +#成交申报正回购 +OPT_AGREEMENT_REPURCHASE_TRANSACTION_DEC_FORWARD = 1045 +#成交申报逆回购 +OPT_AGREEMENT_REPURCHASE_TRANSACTION_DEC_REVERSE = 1046 +#到期确认 +OPT_AGREEMENT_REPURCHASE_EXPIRE_CONFIRM = 1047 +#提前购回正回购 +OPT_AGREEMENT_REPURCHASE_ADVANCE_REPURCHASE = 1048 +#提前购回逆回购 +OPT_AGREEMENT_REPURCHASE_ADVANCE_REVERSE = 1049 +#到期续做正回购 +OPT_AGREEMENT_REPURCHASE_EXPIRE_RENEW = 1050 +#到期续做逆回购 +OPT_AGREEMENT_REPURCHASE_EXPIRE_REVERSE = 1051 +#现券买入 +OPT_TRANSACTION_IN_CASH_BUY = 1052 +#现券卖出 +OPT_TRANSACTION_IN_CASH_SELL = 1053 +#买断式融资回购 +OPT_OUTRIGHT_REPO_FUND_REPURCHASE = 1054 +#买断式融券回购 +OPT_OUTRIGHT_REPO_BOND_REPURCHASE = 1055 +#买断式融资购回 +OPT_OUTRIGHT_REPO_BOND_REPAY = 1056 +#买断式融券购回 +OPT_OUTRIGHT_REPO_FUND_RETRIEVE = 1057 +#分销买入 +OPT_DISTRIBUTION_BUYING = 1058 +#固定利率换浮动利率 +OPT_FIXRATE_TO_FLOATINGRATE = 1059 +#浮动利率换固定利率 +OPT_FLOATINGRATE_TO_FIXRATE = 1060 +#银行间转出托管 +OPT_IBANK_TRANSFER_OUT = 1061 +#银行间转入托管 +OPT_IBANK_TRANSFER_IN = 1062 +#意向申报正回购买入 +OPT_AGREEMENT_REPURCHASE_INTENTION_BUY = 1063 +#意向申报逆回购卖出 +OPT_AGREEMENT_REPURCHASE_INTENTION_SELL = 1064 +#协议回购成交申报确认 +OPT_AGREEMENT_REPURCHASE_BIZ_APPLY_CONFIRM = 1065 +#协议回购成交申报拒绝 +OPT_AGREEMENT_REPURCHASE_BIZ_APPLY_REJECT = 1066 +#协议回购到期续做申报确认 +OPT_AGREEMENT_REPURCHASE_CONTINUE_CONFIRM = 1067 +#协议回购到期续做申报拒绝 +OPT_AGREEMENT_REPURCHASE_CONTINUE_REJECT = 1068 +#协议回购换券申报 +OPT_AGREEMENT_REPURCHASE_INTENTION_CHANGE_BONDS = 1069 +#协议回购换券申报确认 +OPT_AGREEMENT_REPURCHASE_INTENTION_CHANGE_BONDS_CONFIRM = 1070 +#协议回购换券申报拒绝 +OPT_AGREEMENT_REPURCHASE_INTENTION_CHANGE_BONDS_REJECT = 1071 +#协议回购正回购提前终止申报确认 +OPT_AGREEMENT_REPURCHASE_STOP_AHEAD_CONFIRM = 1072 +#协议回购正回购提前终止申报拒绝 +OPT_AGREEMENT_REPURCHASE_STOP_AHEAD_REJECT = 1073 +#协议回购正回购方解除质押申报 +OPT_AGREEMENT_REPURCHASE_RELEASE_PLEDGE = 1074 +#协议回购正回购解除质押申报确认 +OPT_AGREEMENT_REPURCHASE_RELEASE_PLEDGE_CONFIRM = 1075 +#协议回购正回购解除质押申报拒绝 +OPT_AGREEMENT_REPURCHASE_RELEASE_PLEDGE_REJECT = 1076 +#到期确认卖出 +OPT_AGREEMENT_REPURCHASE_EXPIRE_CONFIRM_SELL = 1077 +# 债券分销 +OPT_LOAN_DISTRIBUTION_BUY = 1078 +#优先股竞价买入 +OPT_PREFERENCE_SHARES_BIDDING_BUY = 1079 +#优先股竞价卖出 +OPT_PREFERENCE_SHARES_BIDDING_SELL = 1080 +# 债券转托管 +OPT_TOC_BOND = 1081 +# 基金转托管 +OPT_TOC_FUND = 1082 +#同业拆入 +OPT_IBANK_BORROW = 1083 +#同业拆出 +OPT_IBANK_LOAN = 1084 +#拆入还款 +OPT_IBANK_BORROW_REPAY = 1085 +#拆出还款 +OPT_IBANK_LOAN_REPAY = 1086 +#理财产品申购 +OPT_FINANCIAL_PRODUCT_BUY = 1087 +#理财产品赎回 +OPT_FINANCIAL_PRODUCT_SELL = 1088 +#组合行权 +OPT_OPTION_COMB_EXERCISE = 1089 +#构建组合策略 +OPT_OPTION_BUILD_COMB_STRATEGY = 1090 +#解除组合策略 +OPT_OPTION_RELEASE_COMB_STRATEGY = 1091 +#协议回购逆回购提前终止申报确认 +OPT_AGREEMENT_REPURCHASE_REVERSE_STOP_AHEAD_CONFIRM = 1092 +#协议回购逆回购提前终止申报拒绝 +OPT_AGREEMENT_REPURCHASE_REVERSE_STOP_AHEAD_REJECT = 1093 +#协议回购逆回购方解除质押申报 +OPT_AGREEMENT_REPURCHASE_REVERSE_RELEASE_PLEDGE = 1094 +#协议回购逆回购解除质押申报确认 +OPT_AGREEMENT_REPURCHASE_REVERSE_RELEASE_PLEDGE_CONFIRM = 1095 +#协议回购逆回购解除质押申报拒绝 +OPT_AGREEMENT_REPURCHASE_REVERSE_RELEASE_PLEDGE_REJECT = 1096 +#债券投标 +OPT_BOND_TENDER = 1097 +#理财产品认购 +OPT_FINANCIAL_PRODUCT_CALL = 1098 +#北交所买入 +OPT_NEEQ_O3B_CONTINUOUS_AUCTION_BUY = 1099 +#北交所卖出 +OPT_NEEQ_O3B_CONTINUOUS_AUCTION_SELL = 1100 +#询价申报 +OPT_NEEQ_O3B_ASK_PRICE = 1101 +#申购申报 +OPT_NEEQ_O3B_PRICE_CONFIRM = 1102 +#大宗交易买入 +OPT_NEEQ_O3B_BLOCKTRADING_BUY = 1103 +#大宗交易卖出 +OPT_NEEQ_O3B_BLOCKTRADING_SELL = 1104 +#转融通非约定出借申报 +OPT_LMT_LOAN_SET = 1105 +#转融通约定出借申报 +OPT_LMT_LOAN_CONVENTION = 1106 +#转融通出借展期 +OPT_LMT_LOAN_RENEWAL = 1107 +#转融通出借提前了结 +OPT_LMT_LOAN_SETTLE_EARLY = 1108 +#跨市场ETF场内申购 +OPT_CROSS_MARKET_IN_ETF_PURCHASE = 1109 +#跨市场ETF场内赎回 +OPT_CROSS_MARKET_IN_ETF_REDEMPTION = 1110 +#跨市场ETF场外申购 +OPT_CROSS_MARKET_OUT_ETF_PURCHASE = 1111 +#跨市场ETF场外申购 +OPT_CROSS_MARKET_OUT_ETF_REDEMPTION = 1112 +#券源预约 +OPT_CREDIT_APPOINTMENT = 1113 +#网下申购-公开发行询价 +OPT_OFF_IPO_PUB_PRICE = 1114 +#网下申购-公开发行申购 +OPT_OFF_IPO_PUB_PURCHASE = 1115 +#网下申购-非公开发行询价 +OPT_OFF_IPO_NON_PUB_PRICE = 1116 +#网下申购-非公开发行申购 +OPT_OFF_IPO_NON_PUB_PURCHASE = 1117 +#债券回售 +OPT_IBANK_PUT = 1118 +#债券借贷融入 +OPT_IBANK_BOND_BORROW = 1119 +#债券借贷融出 +OPT_IBANK_BOND_LEND = 1120 +#债券借贷融入购回 +OPT_IBANK_BOND_BORROW_REPAY = 1121 +#债券借贷融出购回 +OPT_IBANK_BOND_LEND_RETRIEVE = 1122 +#债券借贷-质押券置换 +OPT_IBANK_BOND_DISPLACE = 1123 +#融券通-预约融券融入 +OPT_LENDING_INTEGRATE_INTO = 1124 +#融券通-预约融券融出 +OPT_LENDING_MELT_OUT = 1125 +#点击成交申报买入 +OPT_FICC_MANUAL_DECLARE_BUY = 1126 +#点击成交申报卖出 +OPT_FICC_MANUAL_DECLARE_SELL = 1127 +#点击成交确认买入 +OPT_FICC_MANUAL_CONFIRM_BUY_CONFIRM = 1128 +#点击成交拒绝买入 +OPT_FICC_MANUAL_CONFIRM_BUY_REJECT = 1129 +#点击成交确认卖出 +OPT_FICC_MANUAL_CONFIRM_SELL_CONFIRM = 1130 +#点击成交拒绝卖出 +OPT_FICC_MANUAL_CONFIRM_SELL_REJECT = 1131 +#协商成交申报买入 +OPT_FICC_CONSULT_DECLARE_BUY = 1132 +#协商成交申报卖出 +OPT_FICC_CONSULT_DECLARE_SELL = 1133 +#协商成交确认买入 +OPT_FICC_CONSULT_CONFIRM_BUY_CONFIRM = 1134 +#协商成交拒绝买入 +OPT_FICC_CONSULT_CONFIRM_BUY_REJECT = 1135 +#协商成交确认卖出 +OPT_FICC_CONSULT_CONFIRM_SELL_CONFIRM = 1136 +#协商成交拒绝卖出 +OPT_FICC_CONSULT_CONFIRM_SELL_REJECT = 1137 +#询价成交申报买入 +OPT_FICC_ENQUIRY_DECLARE_BUY = 1138 +#询价成交申报卖出 +OPT_FICC_ENQUIRY_DECLARE_SELL = 1139 +#询价成交报价回复确认买入 +OPT_FICC_ENQUIRY_REPLAY_BUY_CONFIRM = 1140 +#询价成交报价回复拒绝买入 +OPT_FICC_ENQUIRY_REPLAY_BUY_REJECT = 1141 +#询价成交报价回复确认卖出 +OPT_FICC_ENQUIRY_REPLAY_SELL_CONFIRM = 1142 +#询价成交报价回复拒绝卖出 +OPT_FICC_ENQUIRY_REPLAY_SELL_REJECT = 1143 +#询价成交询价成交确认买入 +OPT_FICC_ENQUIRY_INQUIRY_BUY_CONFIRM = 1144 +#询价成交询价成交拒绝买入 +OPT_FICC_ENQUIRY_INQUIRY_BUY_REJECT = 1145 +#询价成交询价成交确认卖出 +OPT_FICC_ENQUIRY_INQUIRY_SELL_CONFIRM = 1146 +#询价成交询价成交拒绝卖出 +OPT_FICC_ENQUIRY_INQUIRY_SELL_REJECT = 1147 +#竞买成交竞买预约买入 +OPT_FICC_BINDDING_RESERVE_BUY = 1148 +#竞买成交竞买预约卖出 +OPT_FICC_BINDDING_RESERVE_SELL = 1149 +#竞买成交竞买申报买入 +OPT_FICC_BINDDING_DECLARE_BUY = 1150 +#竞买成交竞买申报卖出 +OPT_FICC_BINDDING_DECLARE_SELL = 1151 +#竞买成交应价申报买入 +OPT_FICC_BINDDING_PRICE_DECLARE_BUY = 1152 +#竞买成交应价申报卖出 +OPT_FICC_BINDDING_PRICE_DECLARE_SELL = 1153 +#买入优先平仓 +OPT_OPTION_BUY_CLOSE_THEN_OPEN = 1154 +#卖出优先平仓 +OPT_OPTION_SELL_CLOSE_THEN_OPEN = 1155 +#资金划入 +OPT_FUND_TRANSFER_IN = 1156 +#资金划出 +OPT_FUND_TRANSFER_OUT = 1157 +#基金认购 +OPT_STOCK_FUND_SUBSCRIBE = 1158 +#现货买入 +OPT_OTC_SPOT_GOODS_BUY = 1159 +#现货卖出 +OPT_OTC_SPOT_GOODS_SELL = 1160 +#即时还券 +OPT_TIMELY_SECU_REPAY = 1161 +#专项即时还券 +OPT_TIMELY_SECU_REPAY_SPECIAL = 1162 +#协商成交合并确认买入 +OPT_FICC_CONSULT_MERGE_BUY_CONFIRM = 1163 +#协商成交合并拒绝买入 +OPT_FICC_CONSULT_MERGE_BUY_REJECT = 1164 +#协商成交合并确认卖出 +OPT_FICC_CONSULT_MERGE_SELL_CONFIRM = 1165 +#协商成交合并拒绝卖出 +OPT_FICC_CONSULT_MERGE_SELL_REJECT = 1166 +#买入交易解除申报 +OPT_FICC_TRADECANCEL_DECLARE_BUY = 1167 +#卖出交易解除申报 +OPT_FICC_TRADECANCEL_DECLARE_SELL = 1168 +#买入交易解除接受 +OPT_FICC_TRADECANCEL_CONFIRM_BUY_CONFIRM = 1169 +#买入交易解除拒绝 +OPT_FICC_TRADECANCEL_CONFIRM_BUY_REJECT = 1170 +#卖出交易解除接受 +OPT_FICC_TRADECANCEL_CONFIRM_SELL_CONFIRM = 1171 +#卖出交易解除拒绝 +OPT_FICC_TRADECANCEL_CONFIRM_SELL_REJECT = 1172 + + +DIRECTION_FLAG_BUY = 48 #买入 +DIRECTION_FLAG_SELL = 49 #卖出 +def getDirectionByOpType(opt): + if opt in ( + OPT_BUY, OPT_OPEN_LONG, OPT_CLOSE_SHORT_TODAY_HISTORY_THEN_OPEN_LONG, OPT_CLOSE_SHORT_HISTORY_TODAY_THEN_OPEN_LONG, + OPT_CLOSE_SHORT_TODAY, OPT_CLOSE_SHORT_HISTORY, OPT_CLOSE_SHORT_TODAY_FIRST, OPT_CLOSE_SHORT_HISTORY_FIRST, + OPT_FIN_BUY, OPT_FIN_BUY_SPECIAL, OPT_BUY_SECU_REPAY, OPT_BUY_SECU_REPAY_SPECIAL, OPT_OPTION_BUY_CLOSE, + OPT_OPTION_BUY_OPEN, OPT_OPTION_COVERED_CLOSE, OPT_OPTION_CALL_EXERCISE, OPT_N3B_PRICE_BUY, OPT_N3B_CONFIRM_BUY, + OPT_N3B_REPORT_CONFIRM_BUY, OPT_N3B_LIMIT_PRICE_BUY, OPT_NEEQ_O3B_LIMIT_PRICE_BUY, OPT_FUND_SUBSCRIBE, + OPT_FUND_PRICE_BUY, OPT_ETF_PURCHASE, OPT_FUND_MERGE, OPT_OUTER_BUY, OPT_IBANK_BOND_BUY, OPT_DISTRIBUTION_BUYING, + OPT_IBANK_FUND_REPURCHASE, OPT_IBANK_BOND_REPAY, OPT_GOLD_PRICE_MIDDLE_BUY, OPT_GOLD_PRICE_DELIVERY_BUY, + OPT_BLOCK_INTENTION_BUY, OPT_BLOCK_PRICE_BUY, OPT_BLOCK_CONFIRM_BUY, OPT_BLOCK_CONFIRM_MATCH_BUY, + OPT_BLOCK_CLOSE_PRICE_BUY, OPT_COLLATERAL_TRANSFER_IN, OPT_N3B_CALL_AUCTION_BUY, OPT_N3B_AFTER_HOURS_BUY, + OPT_CLOSE_SHORT, OPT_PLEDGE_OUT, OPT_AFTER_FIX_BUY, OPT_QUOTATION_REPURCHASE_BUY, OPT_OPTION_SECU_LOCK, + OPT_NEEQ_O3B_CONTINUOUS_AUCTION_BUY, OPT_NEEQ_O3B_ASK_PRICE, OPT_NEEQ_O3B_PRICE_CONFIRM, + OPT_NEEQ_O3B_BLOCKTRADING_BUY, OPT_TRANSACTION_IN_CASH_BUY, OPT_OUTRIGHT_REPO_FUND_REPURCHASE, + OPT_OUTRIGHT_REPO_BOND_REPAY, OPT_AGREEMENT_REPURCHASE_TRANSACTION_DEC_FORWARD, + OPT_AGREEMENT_REPURCHASE_ADVANCE_REPURCHASE, OPT_AGREEMENT_REPURCHASE_EXPIRE_RENEW, + OPT_AGREEMENT_REPURCHASE_INTENTION_BUY, OPT_FINANCIAL_PRODUCT_BUY, OPT_FINANCIAL_PRODUCT_CALL, + OPT_OPTION_RELEASE_COMB_STRATEGY, OPT_OTC_NON_CONTRACTUAL_DEPOSIT, OPT_OTC_CONTRACTUAL_DEPOSIT, + OPT_OTC_FUND_SUBSCRIBE, OPT_OTC_FUND_PURCHASE, OPT_OTC_CONTRACTUAL_DEPOSIT_ASK, OPT_OTC_NON_CONTRACTUAL_DEPOSIT_ASK, + OPT_CONVERT_BONDS, OPT_OFF_IPO_PUB_PRICE, OPT_OFF_IPO_PUB_PURCHASE, OPT_OFF_IPO_NON_PUB_PRICE, + OPT_OFF_IPO_NON_PUB_PURCHASE, OPT_OPTION_BUY_CLOSE_THEN_OPEN, OPT_FICC_MANUAL_DECLARE_BUY, + OPT_FICC_MANUAL_CONFIRM_BUY_CONFIRM, OPT_FICC_MANUAL_CONFIRM_BUY_REJECT, OPT_FICC_CONSULT_DECLARE_BUY, + OPT_FICC_CONSULT_CONFIRM_BUY_CONFIRM, OPT_FICC_CONSULT_CONFIRM_BUY_REJECT, OPT_FICC_ENQUIRY_DECLARE_BUY, + OPT_FICC_ENQUIRY_REPLAY_BUY_CONFIRM, OPT_FICC_ENQUIRY_REPLAY_BUY_REJECT, OPT_FICC_ENQUIRY_INQUIRY_BUY_CONFIRM, + OPT_FICC_ENQUIRY_INQUIRY_BUY_REJECT, OPT_FICC_BINDDING_RESERVE_BUY, OPT_FICC_BINDDING_DECLARE_BUY, + OPT_FICC_BINDDING_PRICE_DECLARE_BUY, OPT_FUND_TRANSFER_IN): + return DIRECTION_FLAG_BUY + else: + return DIRECTION_FLAG_SELL + +'''执行顺序''' +#主动腿比例优先 +EESO_ActiveFirst = 0 +#同时报单 +EESO_ConcurrentlyOrder = 1 +#主动腿完全优先 +EESO_ActiveFirstFull = 2 + +'''比较标志''' +#无效 +EFHST_INVALID = -1 +#大于 +EFHST_GREATER = 0 +#大于等于 +EFHST_GREATER_EQUAL = 1 +#小于 +EFHST_LESS = 2 +#小于等于 +EFHST_LESS_EQUAL = 3 +#无 +EFHST_NONE_SYMBOL = 4 + +'''报价类型''' +PRTP_INVALID = -1 +#卖5 +PRTP_SALE5 = 0 +#卖4 +PRTP_SALE4 = 1 +#卖3 +PRTP_SALE3 = 2 +#卖2 +PRTP_SALE2 = 3 +#卖1 +PRTP_SALE1 = 4 +#最新价 +PRTP_LATEST = 5 +#买1 +PRTP_BUY1 = 6 +#买2 +PRTP_BUY2 = 7 +#买3 +PRTP_BUY3 = 8 +#买4 +PRTP_BUY4 = 9 +#买5 +PRTP_BUY5 = 10 +#指定价 +PRTP_FIX = 11 +#市价_涨跌停价 +PRTP_MARKET = 12 +#挂单价 +PRTP_HANG = 13 +#对手价 +PRTP_COMPETE = 14 + +""" +划拨方向 +""" +#/ *资金划拨* / +FUNDS_TRANSFER_NORMAL_TO_SPEED = 510 # 资金划拨-普通柜台到极速柜台 +FUNDS_TRANSFER_SPEED_TO_NORMAL = 511 # 资金划拨-极速柜台到普通柜台 +NODE_FUNDS_TRANSFER_SH_TO_SZ = 512 # 节点资金划拨-上海节点到深圳节点 +NODE_FUNDS_TRANSFER_SZ_TO_SH = 513 # 节点资金划拨-深圳节点到上海节点 +#/ *股份划拨* / +SECU_TRANSFER_NORMAL_TO_SPEED = 520 # 股份划拨-普通柜台划到极速柜台 +SECU_TRANSFER_SPEED_TO_NORMAL = 521 # 股份划拨-极速柜台划到普通柜台 + +""" +股份划拨类型 +""" +#股票账户客户划拨 +TRANS_TRANSFER_SHARE = 0 +#融资融券账户专项头寸划拨 +TRANS_TRANSFER_SPECIAL_POSITIONS = 1 +#融资融券账户客户划拨 +TRANS_TRANSFER_CREDIT_SHARE = 2 + +""" +多空方向,股票不需要 +""" +#多 +DIRECTION_FLAG_LONG = 48 +#空 +DIRECTION_FLAG_SHORT = 49 + +""" +交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等 +""" +OFFSET_FLAG_OPEN = 48 +OFFSET_FLAG_CLOSE = 49 +OFFSET_FLAG_FORCECLOSE = 50 +OFFSET_FLAG_CLOSETODAY = 51 +OFFSET_FLAG_ClOSEYESTERDAY = 52 +OFFSET_FLAG_FORCEOFF = 53 +OFFSET_FLAG_LOCALFORCECLOSE = 54 \ No newline at end of file diff --git a/src/xtquant/xtdata.ini b/src/xtquant/xtdata.ini new file mode 100644 index 0000000..c3846c7 --- /dev/null +++ b/src/xtquant/xtdata.ini @@ -0,0 +1,17 @@ +[app] +appName=IPythonApiClient +netThreadNum=8 +dispatcherThreadNum=8 +logPath=xtdata.log4cxx +logWatch=0 +reportSeconds=20 +appendDate=1 + +[client_xtdata] +tagTemplate=xtdata +address=127.0.0.1:58610 +timeoutSecond=0 +keepAliveCheckSecond=0 +reconnectSecond=3 +requestTimeoutSecond=150 +watchlog=1 diff --git a/src/xtquant/xtdata.log4cxx b/src/xtquant/xtdata.log4cxx new file mode 100644 index 0000000..1ccf735 --- /dev/null +++ b/src/xtquant/xtdata.log4cxx @@ -0,0 +1,18 @@ +log4j.logger.TTConsole=ERROR,ca +log4j.logger.TTStdFile=ERROR,ca +log4j.logger.TTDbgFile=ERROR,ca + +# 文件输出1 +#log4j.appender.fa1=org.apache.log4j.DailyRollingFileAppender +#log4j.appender.fa1.datePattern='.'yyyy-MM-dd +#log4j.appender.fa1.MaxFileSize=500MB +#log4j.appender.fa1.MaxBackupIndex=10 +#log4j.appender.fa1.File=log/xtquant.log +#log4j.appender.fa1.Append=true +#log4j.appender.fa1.layout=org.apache.log4j.PatternLayout +#log4j.appender.fa1.layout.ConversionPattern=%d [%p] [%t] %m%n + +# 控制台输出 +log4j.appender.ca=org.apache.log4j.ConsoleAppender +log4j.appender.ca.layout=org.apache.log4j.PatternLayout +log4j.appender.ca.layout.ConversionPattern=%d [%p] [%t] %m%n diff --git a/src/xtquant/xtdata.py b/src/xtquant/xtdata.py new file mode 100644 index 0000000..e53534b --- /dev/null +++ b/src/xtquant/xtdata.py @@ -0,0 +1,3352 @@ +#coding:utf-8 + +import os as _OS_ +import time as _TIME_ +import traceback as _TRACEBACK_ + +from . import xtbson as _BSON_ + + + +__all__ = [ + 'subscribe_quote' + , 'subscribe_whole_quote' + , 'unsubscribe_quote' + , 'run' + , 'get_market_data' + , 'get_local_data' + , 'get_full_tick' + , 'get_divid_factors' + , 'get_l2_quote' + , 'get_l2_order' + , 'get_l2_transaction' + , 'download_history_data' + , 'get_financial_data' + , 'download_financial_data' + , 'get_instrument_detail' + , 'get_instrument_type' + , 'get_trading_dates' + , 'get_sector_list' + , 'get_stock_list_in_sector' + , 'download_sector_data' + , 'add_sector' + , 'remove_sector' + , 'get_index_weight' + , 'download_index_weight' + , 'get_holidays' + , 'get_trading_calendar' + , 'get_trading_time' + , 'get_etf_info' + , 'download_etf_info' + , 'get_main_contract' + , 'download_history_contracts' + , 'download_cb_data' + , 'get_cb_info' + , 'create_sector_folder' + , 'create_sector' + , 'remove_stock_from_sector' + , 'reset_sector' + , 'get_period_list' + , 'download_his_st_data' +] + +def try_except(func): + import sys + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception: + exc_type, exc_instance, exc_traceback = sys.exc_info() + formatted_traceback = ''.join(_TRACEBACK_.format_tb(exc_traceback)) + message = '\n{0} raise {1}:{2}'.format( + formatted_traceback, + exc_type.__name__, + exc_instance + ) + # raise exc_type(message) + # print(message) + return None + + return wrapper + + +### config + +debug_mode = 0 + +default_data_dir = '../userdata_mini/datadir' +__data_dir_from_server = default_data_dir +data_dir = None + +enable_hello = True + + +### connection + +__client = None +__client_last_spec = ('', None) + +__hk_broke_info = {} +__download_version = None + + +def connect(ip = '', port = None, remember_if_success = True): + global __client + global __data_dir_from_server + global __download_version + + if __client: + if __client.is_connected(): + return __client + + __client.shutdown() + __client = None + __data_dir_from_server = default_data_dir + + from . import xtconn + + if not port and (ip != '' and ip != '127.0.0.1' and ip != 'localhost'): + raise Exception("远程地址不支持仅输入IP") + + if isinstance(port, int): + if ip: + server_list = [f'{ip}:{port}'] + else: + server_list = [f'127.0.0.1:{port}', f'localhost:{port}'] + else: + server_list = xtconn.scan_available_server_addr() + + default_addr = '127.0.0.1:58610' + if not default_addr in server_list: + server_list.append(default_addr) + + start_port = 0 + end_port = 65535 + + if isinstance(port, tuple): + start_port = port[0] + end_port = port[1] + + if start_port > end_port: + start_port, end_port = end_port, start_port + + __client = xtconn.connect_any(server_list, start_port, end_port) + + if not __client or not __client.is_connected(): + raise Exception("无法连接xtquant服务,请检查QMT-投研版或QMT-极简版是否开启") + + if remember_if_success: + global __client_last_spec + __client_last_spec = (ip, port) + + __data_dir_from_server = __client.get_data_dir() + if __data_dir_from_server == "": + __data_dir_from_server = _OS_.path.join(__client.get_app_dir(), default_data_dir) + + __data_dir_from_server = _OS_.path.abspath(__data_dir_from_server) + + try: + __download_version = _BSON_call_common( + __client.commonControl, 'getapiversion', {} + ).get('downloadversion', None) + except: + pass + + hello() + return __client + + +def reconnect(ip = '', port = None, remember_if_success = True): + global __client + global __data_dir_from_server + + if __client: + __client.shutdown() + __client = None + __data_dir_from_server = default_data_dir + + return connect(ip, port, remember_if_success) + + +def disconnect(): + global __client + global __data_dir_from_server + + if __client: + __client.shutdown() + __client = None + __data_dir_from_server = default_data_dir + return + + +def get_client(): + global __client + + if not __client or not __client.is_connected(): + global __client_last_spec + + ip, port = __client_last_spec + __client = connect(ip, port, False) + + return __client + + +def hello(): + global __client + global enable_hello + + if not enable_hello: + return + + server_info = None + peer_addr = None + __data_dir_from_server = None + + try: + server_info = _BSON_.BSON.decode(__client.get_server_tag()) + peer_addr = __client.get_peer_addr() + __data_dir_from_server = __client.get_data_dir() + except Exception as e: + pass + + print( +f'''***** xtdata连接成功 ***** +服务信息: {server_info} +服务地址: {peer_addr} +数据路径: {__data_dir_from_server} +设置xtdata.enable_hello = False可隐藏此消息 +''' + ) + return + + +def get_current_data_dir(): + global data_dir + global __data_dir_from_server + return data_dir if data_dir != None else __data_dir_from_server + + +__meta_field_list = {} + +def get_field_list(metaid): + global __meta_field_list + + if not __meta_field_list: + x = open(_OS_.path.join(_OS_.path.dirname(__file__), 'config', 'metaInfo.json'), 'r', encoding="utf-8").read() + metainfo = eval(x) + + for meta in metainfo: + filed_dict = {} + metadetail = metainfo.get(str(meta), {}) + filed = metadetail.get('fields', {}) + for key in filed: + filed_dict[key] = filed[key].get('desc', key) + + filed_dict['G'] = 'time' + filed_dict['S'] = 'stock' + __meta_field_list[meta] = filed_dict + + return __meta_field_list.get(str(metaid), {}) + + +### utils + +def create_array(shape, dtype_tuple, capsule, size): + import numpy as np + import ctypes + + ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(ctypes.c_char) + ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p] + buff = ctypes.pythonapi.PyCapsule_GetPointer(capsule, None) + base_type = size * buff._type_ + + for dim in shape[::-1]: + base_type = dim * base_type + p_arr_type = ctypes.POINTER(base_type) + obj = ctypes.cast(buff, p_arr_type).contents + obj._base = capsule + return np.ndarray(shape = shape, dtype = np.dtype(dtype_tuple), buffer = obj) + +from .xtdatacenter import register_create_nparray as __register_create_nparray +__register_create_nparray(create_array) + + +def _BSON_call_common(interface, func, param): + return _BSON_.BSON.decode(interface(func, _BSON_.BSON.encode(param))) + + +### function + +def get_stock_list_in_sector(sector_name, real_timetag = -1): + ''' + 获取板块成份股,支持客户端左侧板块列表中任意的板块,包括自定义板块 + :param sector_name: (str)板块名称 + :real_timetag: 时间:1512748800000 或 ‘20171209’,可缺省,缺省为获取最新成份,不缺省时获取对应时间的历史成份 + :return: list + ''' + client = get_client() + for illegalstr in ['\\', '/', ':', '*', '?', '"', '<', '>', '|']: + sector_name = sector_name.replace(illegalstr, '') + + if isinstance(real_timetag, str): + if real_timetag != '': + real_timetag = int(_TIME_.mktime(_TIME_.strptime(real_timetag, '%Y%m%d')) * 1000) + else: + real_timetag = -1 + + return client.get_stock_list_in_sector(sector_name, real_timetag) + + +def get_index_weight(index_code): + ''' + 获取某只股票在某指数中的绝对权重 + :param index_code: (str)指数名称 + :return: dict + ''' + client = get_client() + return client.get_weight_in_index(index_code) + + +def get_financial_data(stock_list, table_list=[], start_time='', end_time='', report_type='report_time'): + ''' + 获取财务数据 + :param stock_list: (list)合约代码列表 + :param table_list: (list)报表名称列表 + :param start_time: (str)起始时间 + :param end_time: (str)结束时间 + :param report_type: (str) 时段筛选方式 'announce_time' / 'report_time' + :return: + field: list[str] + date: list[int] + stock: list[str] + value: list[list[float]] + ''' + client = get_client() + all_table = { + 'Balance' : 'ASHAREBALANCESHEET' + , 'Income' : 'ASHAREINCOME' + , 'CashFlow' : 'ASHARECASHFLOW' + , 'Capital' : 'CAPITALSTRUCTURE' + , 'HolderNum' : 'SHAREHOLDER' + , 'Top10Holder' : 'TOP10HOLDER' + , 'Top10FlowHolder' : 'TOP10FLOWHOLDER' + , 'PershareIndex' : 'PERSHAREINDEX' + } + + if not table_list: + table_list = list(all_table.keys()) + + all_table_upper = {table.upper() : all_table[table] for table in all_table} + req_list = [] + names = {} + for table in table_list: + req_table = all_table_upper.get(table.upper(), table) + req_list.append(req_table) + names[req_table] = table + + data = {} + sl_len = 20 + stock_list2 = [stock_list[i : i + sl_len] for i in range(0, len(stock_list), sl_len)] + for sl in stock_list2: + data2 = client.get_financial_data(sl, req_list, start_time, end_time, report_type) + for s in data2: + data[s] = data2[s] + + import math + def conv_date(data, key, key2): + if key in data: + tmp_data = data[key] + if math.isnan(tmp_data): + if key2 not in data or math.isnan(data[key2]): + data[key] = '' + else: + tmp_data = data[key2] + data[key] = _TIME_.strftime('%Y%m%d', _TIME_.localtime(tmp_data / 1000)) + return + + result = {} + import pandas as pd + for stock in data: + stock_data = data[stock] + result[stock] = {} + for table in stock_data: + table_data = stock_data[table] + for row_data in table_data: + conv_date(row_data, 'm_anntime', 'm_timetag') + conv_date(row_data, 'm_timetag', '') + conv_date(row_data, 'declareDate', '') + conv_date(row_data, 'endDate', '') + result[stock][names.get(table, table)] = pd.DataFrame(table_data) + return result + + +def get_market_data_ori( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True, enable_read_from_server = True + , data_dir = None +): + client = get_client() + enable_read_from_local = period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', 'tick', '1w', '1mon', '1q', '1hy', '1y'} + global debug_mode + + if data_dir == None: + data_dir = get_current_data_dir() + + return client.get_market_data3(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data, 'v2', enable_read_from_local, enable_read_from_server, debug_mode, data_dir) + + +def get_market_data( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True +): + ''' + 获取历史行情数据 + :param field_list: 行情数据字段列表,[]为全部字段 + K线可选字段: + "time" #时间戳 + "open" #开盘价 + "high" #最高价 + "low" #最低价 + "close" #收盘价 + "volume" #成交量 + "amount" #成交额 + "settle" #今结算 + "openInterest" #持仓量 + 分笔可选字段: + "time" #时间戳 + "lastPrice" #最新价 + "open" #开盘价 + "high" #最高价 + "low" #最低价 + "lastClose" #前收盘价 + "amount" #成交总额 + "volume" #成交总量 + "pvolume" #原始成交总量 + "stockStatus" #证券状态 + "openInt" #持仓量 + "lastSettlementPrice" #前结算 + "askPrice1", "askPrice2", "askPrice3", "askPrice4", "askPrice5" #卖一价~卖五价 + "bidPrice1", "bidPrice2", "bidPrice3", "bidPrice4", "bidPrice5" #买一价~买五价 + "askVol1", "askVol2", "askVol3", "askVol4", "askVol5" #卖一量~卖五量 + "bidVol1", "bidVol2", "bidVol3", "bidVol4", "bidVol5" #买一量~买五量 + :param stock_list: 股票代码 "000001.SZ" + :param period: 周期 分笔"tick" 分钟线"1m"/"5m"/"15m" 日线"1d" + Level2行情快照"l2quote" Level2行情快照补充"l2quoteaux" Level2逐笔委托"l2order" Level2逐笔成交"l2transaction" Level2大单统计"l2transactioncount" Level2委买委卖队列"l2orderqueue" + Level1逐笔成交统计一分钟“transactioncount1m” Level1逐笔成交统计日线“transactioncount1d” + 期货仓单“warehousereceipt” 期货席位“futureholderrank” 互动问答“interactiveqa” + :param start_time: 起始时间 "20200101" "20200101093000" + :param end_time: 结束时间 "20201231" "20201231150000" + :param count: 数量 -1全部/n: 从结束时间向前数n个 + :param dividend_type: 除权类型"none" "front" "back" "front_ratio" "back_ratio" + :param fill_data: 对齐时间戳时是否填充数据,仅对K线有效,分笔周期不对齐时间戳 + 为True时,以缺失数据的前一条数据填充 + open、high、low、close 为前一条数据的close + amount、volume为0 + settle、openInterest 和前一条数据相同 + 为False时,缺失数据所有字段填NaN + :return: 数据集,分笔数据和K线数据格式不同 + period为'tick'时:{stock1 : value1, stock2 : value2, ...} + stock1, stock2, ... : 合约代码 + value1, value2, ... : np.ndarray 数据列表,按time增序排列 + period为其他K线周期时:{field1 : value1, field2 : value2, ...} + field1, field2, ... : 数据字段 + value1, value2, ... : pd.DataFrame 字段对应的数据,各字段维度相同,index为stock_list,columns为time_list + ''' + if period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', '1w', '1mon', '1q', '1hy', '1y'}: + import pandas as pd + index, data = get_market_data_ori(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data) + + result = {} + for field in data: + result[field] = pd.DataFrame(data[field], index = index[0], columns = index[1]) + return result + + return get_market_data_ori(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data) + + +def get_market_data_ex_ori( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True, enable_read_from_server = True + , data_dir = None +): + client = get_client() + enable_read_from_local = period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', 'tick', '1w', '1mon', '1q', '1hy', '1y'} + global debug_mode + + if data_dir == None: + data_dir = get_current_data_dir() + + return client.get_market_data3(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data, 'v3', enable_read_from_local, enable_read_from_server, debug_mode, data_dir) + + +def get_market_data_ex( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True +): + if period == 'hkbrokerqueue' or period == 'hkbrokerqueue2' or period == (1820, 0): + showbrokename = period == 'hkbrokerqueue2' + return get_broker_queue_data(stock_list, start_time, end_time, count, showbrokename) + + period = _get_tuple_period(period) or period + if isinstance(period, tuple): + return _get_market_data_ex_tuple_period(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data) + + if period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', '1w', '1mon', '1q', '1hy', '1y'}: + return _get_market_data_ex_ori_221207(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data) + + import pandas as pd + result = {} + + ifield = 'time' + query_field_list = field_list if (not field_list) or (ifield in field_list) else [ifield] + field_list + ori_data = get_market_data_ex_ori(query_field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data) + + if not ori_data: + return result + + fl = field_list + stime_fmt = '%Y%m%d' if period == '1d' else '%Y%m%d%H%M%S' + if fl: + fl2 = fl if ifield in fl else [ifield] + fl + for s in ori_data: + sdata = pd.DataFrame(ori_data[s], columns = fl2) + sdata2 = sdata[fl] + sdata2.index = [timetag_to_datetime(t, stime_fmt) for t in sdata[ifield]] + result[s] = sdata2 + else: + needconvert, metaid = _needconvert_period(period) + if needconvert: + convert_field_list = get_field_list(metaid) + + for s in ori_data: + odata = ori_data[s] + if convert_field_list: + convert_data_list = [] + for data in odata: + convert_data = _convert_component_info(data, convert_field_list) + convert_data_list.append(convert_data) + odata = convert_data_list + + sdata = pd.DataFrame(odata) + sdata.index = [timetag_to_datetime(t, stime_fmt) for t in sdata[ifield]] + result[s] = sdata + else: + for s in ori_data: + sdata = pd.DataFrame(ori_data[s]) + sdata.index = [timetag_to_datetime(t, stime_fmt) for t in sdata[ifield]] + result[s] = sdata + + return result + + +def _get_market_data_ex_ori_221207( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True, enable_read_from_server = True + , data_dir = None +): + import numpy as np + import pandas as pd + client = get_client() + enable_read_from_local = period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', 'tick', '1w', '1mon', '1q', '1hy', '1y'} + global debug_mode + + if data_dir == None: + data_dir = get_current_data_dir() + + ret = client.get_market_data3(field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data, 'v4', enable_read_from_local, + enable_read_from_server, debug_mode, data_dir) + result = {} + for stock, index, npdatas in ret: + data = {field: np.frombuffer(b, fi) for field, fi, b in npdatas} + result[stock] = pd.DataFrame(data=data, index=index) + return result + +def _get_market_data_ex_221207( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True, enable_read_from_server = True +): + ifield = 'time' + query_field_list = field_list if (not field_list) or (ifield in field_list) else [ifield] + field_list + + if period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', '1w', '1mon', '1q', '1hy', '1y'}: + ori_data = _get_market_data_ex_ori_221207(query_field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data, enable_read_from_server) + else: + ori_data = get_market_data_ex_ori(query_field_list, stock_list, period, start_time, end_time, count, dividend_type, fill_data, enable_read_from_server) + + import pandas as pd + result = {} + + fl = field_list + + if fl: + fl2 = fl if ifield in fl else [ifield] + fl + for s in ori_data: + sdata = pd.DataFrame(ori_data[s], columns = fl2) + sdata2 = sdata[fl] + sdata2.index = pd.to_datetime((sdata[ifield] + 28800000) * 1000000) + result[s] = sdata2 + else: + for s in ori_data: + sdata = pd.DataFrame(ori_data[s]) + sdata.index = pd.to_datetime((sdata[ifield] + 28800000) * 1000000) + result[s] = sdata + + return result + + +get_market_data3 = _get_market_data_ex_221207 + +def _get_data_file_path(stocklist, period, date = '20380119'): + + if isinstance(period, tuple): + metaid, periodNum = period + periodstr = '' + else: + periodstr = period + metaid = -1 + periodNum = -1 + + data = { + 'stocklist': stocklist + , 'period': periodstr + , 'metaid':metaid + , 'periodNum':periodNum + , 'date':date + } + + client = get_client() + + path_result = _BSON_call_common( + client.commonControl, 'getdatafilepath' + , data + ) + return path_result.get('result', {}) + +__TUPLE_PERIODS = { + 'warehousereceipt' : (4015,86400000, '') + , 'futureholderrank' : (5008,86400000, '') + , 'interactiveqa' : (7011, 86400000, '') + , 'dividendplaninfo' : (2025, 86401000, '') + , 'etfredemptionlist' : (2004, 86401000, '') + , 'historymaincontract' : (5004, 86400000, '') + , 'brokerqueue' : (1820,0, '港股委托经纪人队列') + , 'brokerqueue2' : (1820,0, '港股委托经纪人队列(对结果进行转换)') + , 'brokerinfo' : (2038,86401000, '') + , 'delistchangebond' : (4020, 86401000, '') + , 'replacechangebond' : (4021, 86401000, '') + , 'optionhistorycontract' : (9502, 86400000, '') + , 'etfiopv1m' : (4011, 60000, '') + , 'etfiopv1d' : (4011, 86400000, '') + , 'announcement' : (9000, 86400000, '') + , 'hktdetails' : (2033, 86400000, '') + , 'stocklistchange' : (2012, 86400000, '') + , 'riskfreerate' : (2032, 86400000, '') + #以下内置已加 + , 'etfstatistics': (3030, 0, '') + , 'etfstatisticsl2': (1830, 0, '') + , 'northfinancechange1m': (3006, 60000, '') + , 'northfinancechange1d': (3006, 86400000, '') + , 'stoppricedata': (9506, 86400000, '') +} + +__STR_PERIODS = { + (3001,60000) : '1m' + , (3001,300000) : '5m' + , (3001,900000) : '15m' + , (3001,1800000) : '30m' + , (3001,3600000) : '60m' + , (3001,3600000) : '1h' + , (3001,86400000) : '1d' +} + +def _needconvert_period(period): + datas = { + 'snapshotindex' : 3004 + , 'etfiopv' : 4011 + } + return period in datas, datas.get(period, -1) + +def _get_tuple_period(period): + if isinstance(period, tuple): + return __STR_PERIODS.get(period, None) + else: + res = __TUPLE_PERIODS.get(period, None) + if res: + metaid, p, desc = res + return (metaid, p) + else: + return None + + +def _get_market_data_ex_tuple_period_ori( + stock_list = [], period = () + , start_time = '', end_time = '' + , count = -1 +): + client = get_client() + + data_path_dict = _get_data_file_path(stock_list, period) + + import pandas as pd + + ori_data = {} + for stockcode in data_path_dict: + file_name = data_path_dict[stockcode] + data_list = client.read_local_data(file_name, start_time, end_time, count) + + cdata_list = [] + for data in data_list: + cdata_list.append(_BSON_.BSON.decode(data)) + + ori_data[stockcode] = cdata_list + + return ori_data + + +def _convert_component_info(data, convert_field_list): + if not isinstance(data, dict): + return data + + new_data = {} + for key, value in data.items(): + name = convert_field_list.get(key, key) + if isinstance(value, dict): + new_data[name] = _convert_component_info(value, convert_field_list) + elif isinstance(value, list): + new_data[name] = [_convert_component_info(item, convert_field_list) for item in value] + else: + new_data[name] = value + + return new_data + +def _get_market_data_ex_tuple_period( + field_list = [], stock_list = [], period = '1d' + , start_time = '', end_time = '', count = -1 + , dividend_type = 'none', fill_data = True, enable_read_from_server = True +): + if not isinstance(period, tuple): + return {} + + all_data = _get_market_data_ex_tuple_period_ori(stock_list, period, start_time, end_time, count) + + metaid, periodNum = period + convert_field_list = get_field_list(metaid) + + import pandas as pd + + ori_data = {} + for stockcode,data_list in all_data.items(): + if convert_field_list: + convert_data_list = [] + for data in data_list: + convert_data = _convert_component_info(data, convert_field_list) + convert_data_list.append(convert_data) + data_list = convert_data_list + ori_data[stockcode] = pd.DataFrame(data_list) + + return ori_data + + +def get_data_dir(): + cl = get_client() + return _OS_.path.abspath(cl.get_data_dir()) + + +def get_local_data(field_list=[], stock_list=[], period='1d', start_time='', end_time='', count=-1, + dividend_type='none', fill_data=True, data_dir=None): + if data_dir == None: + data_dir = get_current_data_dir() + + if period in {'1m', '5m', '15m', '30m', '60m', '1h', '1d', '1w', '1mon', '1q', '1hy', '1y'}: + return _get_market_data_ex_ori_221207(field_list, stock_list, period, start_time, end_time, count, + dividend_type, fill_data, False, data_dir) + + import pandas as pd + result = {} + + ifield = 'time' + query_field_list = field_list if (not field_list) or (ifield in field_list) else [ifield] + field_list + ori_data = get_market_data_ex_ori(query_field_list, stock_list, period, start_time, end_time, count, dividend_type, + fill_data, False, data_dir) + + if not ori_data: + return result + + fl = field_list + stime_fmt = '%Y%m%d' if period == '1d' else '%Y%m%d%H%M%S' + if fl: + fl2 = fl if ifield in fl else [ifield] + fl + for s in ori_data: + sdata = pd.DataFrame(ori_data[s], columns = fl2) + sdata2 = sdata[fl] + sdata2.index = [timetag_to_datetime(t, stime_fmt) for t in sdata[ifield]] + result[s] = sdata2 + else: + for s in ori_data: + sdata = pd.DataFrame(ori_data[s]) + sdata.index = [timetag_to_datetime(t, stime_fmt) for t in sdata[ifield]] + result[s] = sdata + + return result + + +def get_l2_quote(field_list=[], stock_code='', start_time='', end_time='', count=-1): + ''' + level2实时行情 + ''' + global debug_mode + client = get_client() + datas = client.get_market_data3(field_list, [stock_code], 'l2quote', start_time, end_time, count, 'none', False, '', False, True, debug_mode, '') + if datas: + return datas[stock_code] + return None + + +def get_l2_order(field_list=[], stock_code='', start_time='', end_time='', count=-1): + ''' + level2逐笔委托 + ''' + global debug_mode + client = get_client() + datas = client.get_market_data3(field_list, [stock_code], 'l2order', start_time, end_time, count, 'none', False, '', False, True, debug_mode, '') + if datas: + return datas[stock_code] + return None + + +def get_l2_transaction(field_list=[], stock_code='', start_time='', end_time='', count=-1): + ''' + level2逐笔成交 + ''' + global debug_mode + client = get_client() + datas = client.get_market_data3(field_list, [stock_code], 'l2transaction', start_time, end_time, count, 'none', False, '', False, True, debug_mode, '') + if datas: + return datas[stock_code] + return None + + +def get_divid_factors(stock_code, start_time='', end_time=''): + ''' + 获取除权除息日及对应的权息 + :param stock_code: (str)股票代码 + :param date: (str)日期 + :return: pd.DataFrame 数据集 + ''' + client = get_client() + datas = client.get_divid_factors(stock_code, start_time, end_time) + import pandas as pd + datas = pd.DataFrame(datas).T + return datas + + +@try_except +def getDividFactors(stock_code, date): + client = get_client() + resData = client.get_divid_factors(stock_code, date) + res = {resData[i]: [resData[i + 1][j] for j in + range(0, len(resData[i + 1]), 1)] for i in range(0, len(resData), 2)} + if isinstance(res, dict): + for k, v in res.items(): + if isinstance(v, list) and len(v) > 5: + v[5] = int(v[5]) + return res + + +def get_main_contract(code_market: str, start_time: str = "", end_time: str = ""): + ''' + 获取主力合约/历史主力合约 + 注意:获取历史主力合约需要先调用下载函数xtdata.download_history_data(symbol, 'historymaincontract', '', '') + Args: + code_market: 主力连续合约code,如"IF00.IF","AP00.ZF" + start_time: 开始时间(可不填),格式为"%Y%m%d",默认为"" + end_time: 结束时间(可不填),格式为"%Y%m%d",默认为"" + Return: + str:默认取当前主力合约代码 + str:当指定start_time,不指定end_time时,返回指定日期主力合约代码 + pd.Series:当指定start_time,end_time,返回区间内主力合约组成的Series,index为时间戳 + Example: + xtdata.get_main_contract("AP00.ZF") # 取当前主力合约 + + xtdata.get_main_contract("AP00.ZF","20230101") # 取历史某一天主力合约 + + xtdata.get_main_contract("AP00.ZF","20230101","20240306") # 取某个时间段的主力合约序列 + ''' + period = 'historymaincontract' + marker_code = code_market.split(".")[1] + + if start_time == "" and end_time == "": + client = get_client() + return client.get_main_contract(code_market) + "." + marker_code + elif start_time and end_time == "": + # 当指定start_time时,返回指定日期主力合约代码\n + data = get_market_data_ex([], [code_market], period)[code_market] + s_timetag = datetime_to_timetag(start_time, "%Y%m%d") + + data = data.loc[data.iloc[:, 0] < s_timetag] + if data.shape[0] > 0: + return data['合约在交易所的代码'].iloc[-1] + "." + marker_code + else: + return '' + elif start_time and end_time: + import pandas as pd + data = get_market_data_ex([], [code_market], period)[code_market] + s_timetag = datetime_to_timetag(start_time, "%Y%m%d") + e_timetag = datetime_to_timetag(end_time, "%Y%m%d") + + data = data.loc[(data.iloc[:, 0] <= e_timetag) & (data.iloc[:, 0] >= s_timetag)] + if data.shape[0] > 0: + index = data.iloc[:, 0] + values = data['合约在交易所的代码'] + "." + marker_code + + res = pd.Series(index=index.values, data=values.values) + res = res.loc[res.ne(res.shift(1))] + return res + else: + return '' + + +def get_sec_main_contract(code_market: str, start_time: str = "", end_time: str = ""): + ''' + 获取次主力合约/历史次主力合约 + 注意:获取历史次主力合约需要先调用下载函数xtdata.download_history_data(symbol, 'historymaincontract', '', '') + Args: + code_market: 主力连续合约code,如"IF00.IF","AP00.ZF" + start_time: 开始时间(可不填),格式为"%Y%m%d",默认为"" + end_time: 结束时间(可不填),格式为"%Y%m%d",默认为"" + Return: + str:默认取当前次主力合约代码 + str:当指定start_time,不指定end_time时,返回指定日期次主力合约代码 + pd.Series:当指定start_time,end_time,返回区间内次主力合约组成的Series,index为时间戳 + Example: + xtdata.get_sec_main_contract("AP00.ZF") # 取当前次主力合约 + + xtdata.get_sec_main_contract("AP00.ZF","20230101") # 取历史某一天次主力合约 + + xtdata.get_sec_main_contract("AP00.ZF","20230101","20240306") # 取某个时间段的次主力合约序列 + ''' + period = 'historymaincontract' + marker_code = code_market.split(".")[1] + + if start_time == "" and end_time == "": + client = get_client() + code = code_market.split(".")[0] + if code.endswith('00'): + return client.get_main_contract(code + '1' + '.' + marker_code) + "." + marker_code + elif start_time and end_time == "": + # 当指定start_time时,返回指定日期主力合约代码\n + data = get_market_data_ex([], [code_market], period)[code_market] + s_timetag = datetime_to_timetag(start_time, "%Y%m%d") + + data = data.loc[data.iloc[:, 0] < s_timetag] + if data.shape[0] > 0: + return data['次主力合约代码'].iloc[-1] + "." + marker_code + else: + return '' + elif start_time and end_time: + import pandas as pd + data = get_market_data_ex([], [code_market], period)[code_market] + s_timetag = datetime_to_timetag(start_time, "%Y%m%d") + e_timetag = datetime_to_timetag(end_time, "%Y%m%d") + + data = data.loc[(data.iloc[:, 0] <= e_timetag) & (data.iloc[:, 0] >= s_timetag)] + if data.shape[0] > 0: + index = data.iloc[:, 0] + values = data['次主力合约代码'] + "." + marker_code + + res = pd.Series(index=index.values, data=values.values) + res = res.loc[res.ne(res.shift(1))] + return res + else: + return '' + + +def datetime_to_timetag(datetime, format = "%Y%m%d%H%M%S"): + if len(datetime) == 8: + format = "%Y%m%d" + timetag = _TIME_.mktime(_TIME_.strptime(datetime, format)) + return timetag * 1000 + +def timetag_to_datetime(timetag, format): + ''' + 将毫秒时间转换成日期时间 + :param timetag: (int)时间戳毫秒数 + :param format: (str)时间格式 + :return: str + ''' + return timetagToDateTime(timetag, format) + + +@try_except +def timetagToDateTime(timetag, format): + import time + timetag = timetag / 1000 + time_local = _TIME_.localtime(timetag) + return _TIME_.strftime(format, time_local) + + +def get_trading_dates(market, start_time='', end_time='', count=-1): + ''' + 根据市场获取交易日列表 + : param market: 市场代码 e.g. 'SH','SZ','IF','DF','SF','ZF'等 + : param start_time: 起始时间 '20200101' + : param end_time: 结束时间 '20201231' + : param count: 数据个数,-1为全部数据 + :return list(long) 毫秒数的时间戳列表 + ''' + client = get_client() + datas = client.get_trading_dates_by_market(market, start_time, end_time, count) + return datas + + +def get_full_tick(code_list): + ''' + 获取盘口tick数据 + :param code_list: (list)stock.market组成的股票代码列表 + :return: dict + {'stock.market': {dict}} + ''' + import json + + client = get_client() + resp_json = client.get_full_tick(code_list) + return json.loads(resp_json) + + +def subscribe_callback_wrapper(callback): + import traceback + def subscribe_callback(datas): + try: + if type(datas) == bytes: + datas = _BSON_.BSON.decode(datas) + if callback: + callback(datas) + except: + print('subscribe callback error:', callback) + _TRACEBACK_.print_exc() + return subscribe_callback + +def subscribe_callback_wrapper_1820(callback): + import traceback + def subscribe_callback(datas): + try: + if type(datas) == bytes: + datas = _BSON_.BSON.decode(datas) + datas = _covert_hk_broke_data(datas) + if callback: + callback(datas) + except: + print('subscribe callback error:', callback) + _TRACEBACK_.print_exc() + + return subscribe_callback + + +def subscribe_callback_wrapper_convert(callback, metaid): + import traceback + convert_field_list = get_field_list(metaid) + def subscribe_callback(datas): + try: + if type(datas) == bytes: + datas = _BSON_.BSON.decode(datas) + if convert_field_list: + for s in datas: + sdata = datas[s] + convert_data_list = [] + for data in sdata: + convert_data = _convert_component_info(data, convert_field_list) + convert_data_list.append(convert_data) + datas[s] = convert_data_list + if callback: + callback(datas) + except: + print('subscribe callback error:', callback) + _TRACEBACK_.print_exc() + + return subscribe_callback + +def subscribe_quote(stock_code, period='1d', start_time='', end_time='', count=0, callback=None): + ''' + 订阅股票行情数据 + :param stock_code: 股票代码 e.g. "000001.SZ" + :param period: 周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d"等周期 + :param start_time: 开始时间,格式YYYYMMDD/YYYYMMDDhhmmss/YYYYMMDDhhmmss.milli,e.g."20200427" "20200427093000" "20200427093000.000" + 若取某日全量历史数据,时间需要具体到秒,e.g."20200427093000" + :param end_time: 结束时间 同“开始时间” + :param count: 数量 -1全部/n: 从结束时间向前数n个 + :param callback: + 订阅回调函数onSubscribe(datas) + :param datas: {stock : [data1, data2, ...]} 数据字典 + :return: int 订阅序号 + ''' + return subscribe_quote2(stock_code, period, start_time, end_time, count, None, callback) + +def subscribe_quote2(stock_code, period='1d', start_time='', end_time='', count=0, dividend_type = None, callback=None): + ''' + 订阅股票行情数据第二版 + 与第一版相比增加了除权参数dividend_type,默认None + + :param stock_code: 股票代码 e.g. "000001.SZ" + :param period: 周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d"等周期 + :param start_time: 开始时间,格式YYYYMMDD/YYYYMMDDhhmmss/YYYYMMDDhhmmss.milli,e.g."20200427" "20200427093000" "20200427093000.000" + 若取某日全量历史数据,时间需要具体到秒,e.g."20200427093000" + :param end_time: 结束时间 同“开始时间” + :param count: 数量 -1全部/n: 从结束时间向前数n个 + :param dividend_type: 除权类型"none" "front" "back" "front_ratio" "back_ratio" + :param callback: + 订阅回调函数onSubscribe(datas) + :param datas: {stock : [data1, data2, ...]} 数据字典 + :return: int 订阅序号 + ''' + if callback: + needconvert, metaid = _needconvert_period(period) + if needconvert: + callback = subscribe_callback_wrapper_convert(callback, metaid) + elif period == 'brokerqueue2': + callback = subscribe_callback_wrapper_1820(callback) + else: + callback = subscribe_callback_wrapper(callback) + + period = _get_tuple_period(period) or period + if isinstance(period, tuple): + metaid, periodNum = period + meta = {'stockCode': stock_code, 'period': period, 'metaid': metaid, 'periodnum': periodNum, 'dividendtype': dividend_type} + else: + meta = {'stockCode': stock_code, 'period': period, 'metaid': -1, 'periodnum': -1, 'dividendtype': dividend_type} + region = {'startTime': start_time, 'endTime': end_time, 'count': count} + + client = get_client() + return client.subscribe_quote(_BSON_.BSON.encode(meta), _BSON_.BSON.encode(region), callback) + + +def subscribe_l2thousand(stock_code, gear_num = 0, callback = None): + ''' + 订阅千档盘口 + ''' + if callback: + callback = subscribe_callback_wrapper(callback) + + meta = {'stockCode': stock_code, 'period': 'l2thousand', 'metaid': -1, 'periodnum': -1} + region = {'thousandGearNum': gear_num, 'thousandDetailGear': 0, 'thousandDetailNum': 0} + + client = get_client() + return client.subscribe_quote(_BSON_.BSON.encode(meta), _BSON_.BSON.encode(region), callback) + + +def subscribe_l2thousand_queue( + stock_code, callback = None + , gear = None + , price = None +): + ''' + 根据档位或价格订阅千档 + stock_code: 股票代码 e.g. "000001.SZ" + callback: + 订阅回调函数onSubscribe(datas) + gear: 按档位订阅 eg. + price: 单个价格:float, 价格范围:eg.[8.66, 8.88], 一组价格list + return: int 订阅序号 + 例: + def on_data(datas): + for stock_code in datas: + print(stock_code, datas[stock_code]) + subscribe_l2thousand_queue(‘000001.SZ’, callback = on_data, gear = 3)#订阅买卖3档数据 + subscribe_l2thousand_queue(‘000001.SZ’, callback = on_data, price = (8.68, 8.88))#订阅[8.68, 8.88]价格区间的数据 + ''' + + if callback: + callback = subscribe_callback_wrapper(callback) + + if gear is not None and price is not None: + raise Exception('不能同时订阅档位和价格!') + + if gear is None: + gear = 0 + if price is not None: + if isinstance(price, float): + price = [int(price * 10000)] + elif isinstance(price, tuple): + sprice, eprice = price + price = [i for i in range(int(sprice * 10000), int((eprice + 0.01) * 10000), int(0.01 * 10000))] + else: + price = [i * 10000 for i in price] + price.sort() + + meta = {'stockCode': stock_code, 'isSubscribeByType': True, 'gear': gear, 'price': price, 'period': 'l2thousand', + 'metaid': -1, 'periodnum': -1} + region = {'thousandDetailGear': 1000, 'thousandDetailNum': 1000} + + client = get_client() + return client.subscribe_quote(_BSON_.BSON.encode(meta), _BSON_.BSON.encode(region), callback) + + +def get_l2thousand_queue(stock_code, gear = None, price = None): + ''' + 根据档位或价格获取前档 + stock_code 股票代码 e.g. "000001.SZ" + gear: Optional[int], + price: Optional[list(float), tuple(2)] + ''' + if gear is None: + gear = 0 + if price is not None: + if isinstance(price, float): + price = [int(price * 10000)] + elif isinstance(price, tuple): + sprice, eprice = price + price = [i for i in range(int(sprice * 10000), int((eprice + 0.01) * 10000), int(0.01 * 10000))] + else: + price = [i * 10000 for i in price] + price.sort() + + client = get_client() + + data = {} + data['stockcode'] = stock_code + data['period'] = 'l2thousand' + data['gear'] = gear + data['price'] = price + + result_bson = client.commonControl('getl2thousandqueue', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + + +def subscribe_whole_quote(code_list, callback=None): + ''' + 订阅全推数据 + :param code_list: 市场代码列表 ["SH", "SZ"] + :param callback: + 订阅回调函数onSubscribe(datas) + :param datas: {stock1 : data1, stock2 : data2, ...} 数据字典 + :return: int 订阅序号 + ''' + if callback: + callback = subscribe_callback_wrapper(callback) + + client = get_client() + return client.subscribe_whole_quote(code_list, callback) + + +def unsubscribe_quote(seq): + ''' + :param seq: 订阅接口subscribe_quote返回的订阅号 + :return: + ''' + client = get_client() + return client.unsubscribe_quote(seq) + + +def run(): + '''阻塞线程接收行情回调''' + import time + client = get_client() + while True: + _TIME_.sleep(3) + if not client.is_connected(): + raise Exception('行情服务连接断开') + break + return + +def create_sector_folder(parent_node,folder_name,overwrite = True): + ''' + 创建板块目录节点 + :parent_node str: 父节点,''为'我的' (默认目录) + :sector_name str: 要创建的板块目录名称 + :overwrite bool:是否覆盖 True为跳过,False为在folder_name后增加数字编号,编号为从1开始自增的第一个不重复的值 + ''' + client = get_client() + data = {} + data['parent'] = parent_node + data['foldername'] = folder_name + data['overwrite'] = overwrite + result_bson = client.commonControl('createsectorfolder', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + +def create_sector(parent_node,sector_name,overwrite = True): + ''' + 创建板块 + :parent_node str: 父节点,''为'我的' (默认目录) + :sector_name str: 要创建的板块名 + :overwrite bool:是否覆盖 True为跳过,False为在sector_name后增加数字编号,编号为从1开始自增的第一个不重复的值 + ''' + client = get_client() + data = {} + data['parent'] = parent_node + data['sectorname'] = sector_name + data['overwrite'] = overwrite + result_bson = client.commonControl('createsector', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + +def get_sector_list(): + ''' + 获取板块列表 + :return: (list[str]) + ''' + client = get_client() + return client.get_sector_list() + + +def add_sector(sector_name, stock_list): + ''' + 增加自定义板块 + :param sector_name: 板块名称 e.g. "我的自选" + :param stock_list: (list)stock.market组成的股票代码列表 + ''' + client = get_client() + data = {} + data['sectorname'] = sector_name + data['stocklist'] = stock_list + result_bson = client.commonControl('addsector', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + +def remove_stock_from_sector(sector_name, stock_list): + ''' + 移除板块成分股 + :param sector_name: 板块名称 e.g. "我的自选" + :stock_list: (list)stock.market组成的股票代码列表 + ''' + client = get_client() + data = {} + data['sectorname'] = sector_name + data['stocklist'] = stock_list + result_bson = client.commonControl('removestockfromsector', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + +def remove_sector(sector_name): + ''' + 删除自定义板块 + :param sector_name: 板块名称 e.g. "我的自选" + ''' + client = get_client() + data = {} + data['sectorname'] = sector_name + result_bson = client.commonControl('removesector', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + +def reset_sector(sector_name, stock_list): + ''' + 重置板块 + :param sector_name: 板块名称 e.g. "我的自选" + :stock_list: (list)stock.market组成的股票代码列表 + ''' + client = get_client() + data = {} + data['sectorname'] = sector_name + data['stocklist'] = stock_list + result_bson = client.commonControl('resetsector', _BSON_.BSON.encode(data)) + result = _BSON_.BSON.decode(result_bson) + return result.get('result') + +def _get_instrument_detail(stock_code): + from . import xtutil + + client = get_client() + inst = client.get_instrument_detail(stock_code) + if not inst: + return None + + inst = xtutil.read_from_bson_buffer(inst) + + if len(inst) != 1: + return None + return inst[0] + +def get_instrument_detail(stock_code, iscomplete = False): + ''' + 获取合约信息 + :param stock_code: 股票代码 e.g. "600000.SH" + :return: dict + ExchangeID(str):合约市场代码 + , InstrumentID(str):合约代码 + , InstrumentName(str):合约名称 + , ProductID(str):合约的品种ID(期货) + , ProductName(str):合约的品种名称(期货) + , ProductType(str):合约的类型 + , ExchangeCode(str):交易所代码 + , UniCode(str):统一规则代码 + , CreateDate(str):上市日期(期货) + , OpenDate(str):IPO日期(股票) + , ExpireDate(str):退市日或者到期日 + , PreClose(double):前收盘价格 + , SettlementPrice(double):前结算价格 + , UpStopPrice(double):当日涨停价 + , DownStopPrice(double):当日跌停价 + , FloatVolume(double):流通股本 + , TotalVolume(double):总股本 + , LongMarginRatio(double):多头保证金率 + , ShortMarginRatio(double):空头保证金率 + , PriceTick(double):最小变价单位 + , VolumeMultiple(int):合约乘数(对期货以外的品种,默认是1) + , MainContract(int):主力合约标记 + , LastVolume(int):昨日持仓量 + , InstrumentStatus(int):合约停牌状态 + , IsTrading(bool):合约是否可交易 + , IsRecent(bool):是否是近月合约, + ''' + + inst = _get_instrument_detail(stock_code) + if not inst: + return None + + if iscomplete: + if 'ExtendInfo' in inst: + for field in inst['ExtendInfo']: + inst[field] = inst['ExtendInfo'][field] + del inst['ExtendInfo'] + + def convNum2Str(field): + if field in inst and isinstance(inst[field], int): + inst[field] = str(inst[field]) + + convNum2Str('CreateDate') + convNum2Str('OpenDate') + convNum2Str('ExpireDate') + convNum2Str('EndDelivDate') + + if inst.get('FloatVolume', None) is None: + inst['FloatVolume'] = inst.get('FloatVolumn') + + if inst.get('TotalVolume', None) is None: + inst['TotalVolume'] = inst.get('TotalVolumn') + + return inst + + field_list = [ + 'ExchangeID' + , 'InstrumentID' + , 'InstrumentName' + , 'ProductID' + , 'ProductName' + , 'ProductType' + , 'ExchangeCode' + , 'UniCode' + , 'CreateDate' + , 'OpenDate' + , 'ExpireDate' + , 'PreClose' + , 'SettlementPrice' + , 'UpStopPrice' + , 'DownStopPrice' + , 'FloatVolume' + , 'TotalVolume' + , 'LongMarginRatio' + , 'ShortMarginRatio' + , 'PriceTick' + , 'VolumeMultiple' + , 'MainContract' + , 'LastVolume' + , 'InstrumentStatus' + , 'IsTrading' + , 'IsRecent' + ] + ret = {} + for field in field_list: + ret[field] = inst.get(field) + + exfield_list = [ + 'ProductTradeQuota' + , 'ContractTradeQuota' + , 'ProductOpenInterestQuota' + , 'ContractOpenInterestQuota' + ] + inst_ex = inst.get('ExtendInfo', {}) + for field in exfield_list: + ret[field] = inst_ex.get(field) + + def convNum2Str(field): + if field in ret and isinstance(ret[field], int): + ret[field] = str(ret[field]) + convNum2Str('CreateDate') + convNum2Str('OpenDate') + convNum2Str('ExpireDate') + + if ret.get('FloatVolume', None) is None: + ret['FloatVolume'] = inst.get('FloatVolumn') + + if ret.get('TotalVolume', None) is None: + ret['TotalVolume'] = inst.get('TotalVolumn') + + return ret + + +def download_index_weight(): + ''' + 下载指数权重数据 + ''' + client = get_client() + client.down_index_weight() + + +def download_history_contracts(): + ''' + 下载过期合约数据 + ''' + client = get_client() + client.down_history_contracts() + + +def _download_history_data_by_metaid(stock_code, metaid, period, start_time = '', end_time = '', incrementally = True): + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'downloadmetadata' + , { + 'stockcode': stock_code + , 'metaid': metaid + , 'period': period + , 'starttime': start_time + , 'endtime': end_time + , 'incrementally': incrementally + } + ) + return + + +def _download_history_data(stock_code, period, start_time = '', end_time = ''): + cl = get_client() + cl.supply_history_data(stock_code, period, start_time, end_time) + return + + +def download_history_data(stock_code, period, start_time = '', end_time = '', incrementally = None): + ''' + :param stock_code: str 品种代码,例如:'000001.SZ' + :param period: str 数据周期 + :param start_time: str 开始时间 + 格式为 YYYYMMDD 或 YYYYMMDDhhmmss 或 '' + 例如:'20230101' '20231231235959' + 空字符串代表全部,自动扩展到完整范围 + :param end_time: str 结束时间 格式同开始时间 + :param incrementally: 是否增量下载 + bool: 是否增量下载 + None: 使用start_time控制,start_time为空则增量下载 + ''' + + client = get_client() + + if __download_version is None: + if incrementally is None: + incrementally = False if start_time else True + + period = _get_tuple_period(period) or period + + if isinstance(period, tuple): + metaid, periodNum = period + return _download_history_data_by_metaid(stock_code, metaid, periodNum, start_time, end_time, incrementally) + + return _download_history_data(stock_code, period, start_time, end_time) + else: + return download_history_data2([stock_code], period, start_time, end_time, None, incrementally) + + +supply_history_data = download_history_data + + +def download_history_data2(stock_list, period, start_time='', end_time='', callback=None, incrementally = None): + ''' + :param stock_list: 股票代码列表 e.g. ["000001.SZ"] + :param period: 周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d" + :param start_time: 开始时间,格式YYYYMMDD/YYYYMMDDhhmmss/YYYYMMDDhhmmss.milli,e.g."20200427" "20200427093000" "20200427093000.000" + 若取某日全量历史数据,时间需要具体到秒,e.g."20200427093000" + :param end_time: 结束时间 同上,若是未来某时刻会被视作当前时间 + :return: bool 是否成功 + ''' + client = get_client() + + if isinstance(stock_list, str): + stock_list = [stock_list] + + if incrementally is None: + incrementally = False if start_time else True + + param = {'incrementally' : incrementally} + + period = _get_tuple_period(period) or period + if isinstance(period, tuple): + metaid, periodNum = period + period = '' + param['metaid'] = metaid + param['period'] = periodNum + + status = [False, 0, 1, ''] + def on_progress(data): + try: + finished = data['finished'] + total = data['total'] + done = (finished >= total) + status[0] = done + status[1] = finished + status[2] = total + + try: + if callback: + callback(data) + except: + pass + + return done + except: + status[0] = True + status[3] = 'exception' + return True + result = client.supply_history_data2(stock_list, period, start_time, end_time, _BSON_.BSON.encode(param), on_progress) + if not result: + import time + try: + while not status[0] and client.is_connected(): + _TIME_.sleep(0.1) + except: + if status[1] < status[2]: + client.stop_supply_history_data2() + _TRACEBACK_.print_exc() + if not client.is_connected(): + raise Exception('行情服务连接断开') + if status[3]: + raise Exception('下载数据失败:' + status[3]) + return + + +def download_financial_data(stock_list, table_list=[], start_time='', end_time='', incrementally = None): + ''' + :param stock_list: 股票代码列表 + :param table_list: 财务数据表名列表,[]为全部表 + 可选范围:['Balance','Income','CashFlow','Capital','Top10FlowHolder','Top10Holder','HolderNum','PershareIndex'] + :param start_time: 开始时间,格式YYYYMMDD,e.g."20200427" + :param end_time: 结束时间 同上,若是未来某时刻会被视作当前时间 + ''' + client = get_client() + if not table_list: + table_list = ['Balance','Income','CashFlow','Capital','Top10FlowHolder','Top10Holder','HolderNum','PershareIndex'] + + for table in table_list: + download_history_data2(stock_list, table, start_time, end_time, None, incrementally) + + +def download_financial_data2(stock_list, table_list=[], start_time='', end_time='', callback=None): + ''' + :param stock_list: 股票代码列表 + :param table_list: 财务数据表名列表,[]为全部表 + 可选范围:['Balance','Income','CashFlow','Capital','Top10FlowHolder','Top10Holder','HolderNum','PershareIndex'] + :param start_time: 开始时间,格式YYYYMMDD,e.g."20200427" + :param end_time: 结束时间 同上,若是未来某时刻会被视作当前时间 + ''' + client = get_client() + if not table_list: + table_list = ['Balance','Income','CashFlow','Capital','Top10FlowHolder','Top10Holder','HolderNum','PershareIndex'] + + data = {} + data['total'] = len(table_list) * len(stock_list) + finish = 0 + for stock_code in stock_list: + for table in table_list: + client.supply_history_data(stock_code, table, start_time, end_time) + + finish = finish + 1 + try: + data['finished'] = finish + callback(data) + except: + pass + + if not client.is_connected(): + raise Exception('行情服务连接断开') + break + + +def get_instrument_type(stock_code, variety_list = None): + ''' + 判断证券类型 + :param stock_code: 股票代码 e.g. "600000.SH" + :return: dict{str : bool} {类型名:是否属于该类型} + ''' + client = get_client() + v_dct = client.get_stock_type(stock_code)#默认处理得到全部品种的信息 + if not v_dct: + return {} + v_dct1 = {} + if variety_list == None or len(variety_list) == 0:#返回该stock_code所有的品种的T/None(False) + v_dct1={k: v for k, v in v_dct.items() if v} + return v_dct1 + + for v in variety_list: + if v in v_dct: + v_dct1[v] = v_dct[v] + return v_dct1 + +get_stock_type = get_instrument_type + + +def download_sector_data(): + ''' + 下载行业板块数据 + ''' + client = get_client() + client.down_all_sector_data() + +def download_holiday_data(incrementally = True): + cl = get_client() + + inst = _BSON_call_common( + cl.commonControl + , 'downloadholidaydata' + , { + 'incrementally': incrementally + } + ) + return inst + +def get_holidays(): + ''' + 获取节假日列表 + :return: 8位int型日期 + ''' + client = get_client() + return [str(d) for d in client.get_holidays()] + + +def get_market_last_trade_date(market): + client = get_client() + return client.get_market_last_trade_date(market) + +def get_trading_calendar(market, start_time = '', end_time = ''): + ''' + 获取指定市场交易日历 + :param market: str 市场 + :param start_time: str 起始时间 '20200101' + :param end_time: str 结束时间 '20201231' + :return: + ''' + import datetime as dt + + if market not in ["SH", "SZ"]: + raise Exception("暂不支持除SH,SZ以外市场的交易日历") + + client = get_client() + + tdl = client.get_trading_dates_by_market(market, '', '', -1) + tdl = [dt.datetime.fromtimestamp(tt / 1000) for tt in tdl] + if not tdl: + raise Exception('交易日列表为空') + + download_holiday_data(incrementally=True) + hl = client.get_holidays() + if not hl: + raise Exception(f'节假日数据为空') + hl = [dt.datetime(hh // 10000, ((hh // 100) % 100), hh % 100, 0, 0) for hh in hl] + + if start_time: + ss = dt.datetime.strptime(start_time, '%Y%m%d') + ts = max(ss - dt.timedelta(days = 1), tdl[-1]) + else: + ss = tdl[0] + ts = tdl[-1] + + if end_time: + te = dt.datetime.strptime(end_time, '%Y%m%d') + else: + te = dt.datetime(hl[-1].year, 12, 31, 0, 0) + + if hl[-1].year < te.year: + raise Exception(f'end_time({end_time}) 超出现有节假日数据({hl[-1].year}1231)') + + hdset = set(hl) + + res = [tt for tt in tdl if tt >= ss] + tt = ts + dt.timedelta(days = 1) + while tt <= te: + if tt not in hdset and tt.weekday() < 5: + res.append(tt) + + tt += dt.timedelta(days = 1) + + return [tt.strftime('%Y%m%d') for tt in res] + + +def get_trading_time(stockcode): + ''' + 返回指定股票的交易时段 + :param stockcode: 代码.市场 例如 '600000.SH' + :return: 返回交易时段列表,第一位是开始时间,第二位结束时间,第三位交易类型 (2 - 开盘竞价, 3 - 连续交易, 8 - 收盘竞价, 9 - 盘后定价) + :note: 需要转换为datetime时,可以用以下方法转换 + import datetime as dt + dt.datetime.combine(dt.date.today(), dt.time()) + dt.timedelta(seconds = 34200) + ''' + cl = get_client() + + split_codes = stockcode.rsplit('.', 1) + if len(split_codes) == 2: + code = split_codes[0] + market = split_codes[1] + else: + return [] + + inst = _BSON_call_common( + cl.commonControl, 'gettradingtime', { + 'market': market + , 'code': code + } + ) + return inst.get('result', []) + +def is_stock_type(stock, tag): + client = get_client() + return client.is_stock_type(stock, tag) + +def download_cb_data(): + client = get_client() + return client.down_cb_data() + +def get_cb_info(stockcode): + client = get_client() + inst = client.get_cb_info(stockcode) + return _BSON_.BSON.decode(inst) + +def get_option_detail_data(optioncode): + inst = _get_instrument_detail(optioncode) + if not inst: + return None + + ret = {} + market = inst.get('ExchangeID') + if market == 'SHO' or market == "SZO" \ + or ((market == "CFFEX" or market == "IF") and inst.get('InstrumentID').find('-') >= 0) \ + or (market in ['SF', 'SHFE', 'DF', 'DCE', 'INE', 'GF', 'GFEX', 'ZF', 'CZCE'] and inst.get('ExtendInfo', {}).get('OptionType') in [0, 1]): + field_list = [ + 'ExchangeID' + , 'InstrumentID' + , 'InstrumentName' + , 'ProductID' + , 'ProductType' + , 'OpenDate' + , 'CreateDate' + , 'ExpireDate' + , 'PreClose' + , 'SettlementPrice' + , 'UpStopPrice' + , 'DownStopPrice' + , 'LongMarginRatio' + , 'ShortMarginRatio' + , 'PriceTick' + , 'VolumeMultiple' + , 'MaxMarketOrderVolume' + , 'MinMarketOrderVolume' + , 'MaxLimitOrderVolume' + , 'MinLimitOrderVolume' + ] + ret = {} + for field in field_list: + ret[field] = inst.get(field) + + exfield_list = [ + 'OptUnit' + , 'MarginUnit' + , 'OptUndlCode' + , 'OptUndlMarket' + , 'OptUndlCodeFull' + , 'OptExercisePrice' + , 'NeeqExeType' + , 'OptUndlRiskFreeRate' + , 'OptUndlHistoryRate' + , 'EndDelivDate' + ] + inst_ex = inst.get('ExtendInfo', {}) + for field in exfield_list: + ret[field] = inst_ex.get(field) + + def convNum2Str(field): + if field in ret and isinstance(ret[field], int): + ret[field] = str(ret[field]) + + convNum2Str('ExpireDate') + convNum2Str('CreateDate') + convNum2Str('OpenDate') + convNum2Str('EndDelivDate') + + if 1: + optType = '' + + if not optType: + instrumentName = inst.get('InstrumentName') + if '购' in instrumentName: + optType = 'CALL' + elif '沽' in instrumentName: + optType = 'PUT' + + if not optType: + OptionType = inst.get('ExtendInfo').get('OptionType') + if OptionType == 0: + optType = 'CALL' + elif OptionType == 1: + optType = 'PUT' + + ret['optType'] = optType + + ret['OptUndlCodeFull'] = ret['OptUndlCode'] + '.' + ret['OptUndlMarket'] + + ProductCode = ret['ProductID'] + if ProductCode.endswith('_o'): + ProductCode = ProductCode[:-2] + '.' + ret['OptUndlMarket'] + elif market in ['ZF', 'CZCE']: + ProductCode = ProductCode[:-1] + '.' + ret['OptUndlMarket'] + else: + ProductCode = ret['OptUndlCodeFull'] + ret['ProductCode'] = ProductCode + return ret + + +def get_option_undl_data(undl_code_ref): + def get_option_undl(opt_code): + inst = get_option_detail_data(opt_code) + if inst and 'OptUndlCode' in inst and 'OptUndlMarket' in inst: + return inst['OptUndlCode'] + '.' + inst['OptUndlMarket'] + return '' + + if undl_code_ref: + c_undl_code_ref = undl_code_ref + inst = get_instrument_detail(undl_code_ref) + if inst and 'UniCode' in inst: + marketcodeList = undl_code_ref.split('.') + if (len(marketcodeList) != 2): + return [] + c_undl_code_ref = inst['UniCode'] + '.' + marketcodeList[1] + + opt_list = [] + if undl_code_ref.endswith('.SH'): + if undl_code_ref == "000016.SH" or undl_code_ref == "000300.SH" or undl_code_ref == "000852.SH" or undl_code_ref == "000905.SH": + opt_list = get_stock_list_in_sector('中金所') + else: + opt_list = get_stock_list_in_sector('上证期权') + if undl_code_ref.endswith('.SZ'): + opt_list = get_stock_list_in_sector('深证期权') + if undl_code_ref.endswith('.SF') or undl_code_ref.endswith('.SHFE'): + opt_list = get_stock_list_in_sector('上期所期权') + if undl_code_ref.endswith('.ZF') or undl_code_ref.endswith('.CZCE'): + opt_list = get_stock_list_in_sector('郑商所期权') + if undl_code_ref.endswith('.DF') or undl_code_ref.endswith('.DCE'): + opt_list = get_stock_list_in_sector('大商所期权') + if undl_code_ref.endswith('.GF') or undl_code_ref.endswith('.GFEX'): + opt_list = get_stock_list_in_sector('广期所期权') + if undl_code_ref.endswith('.INE'): + opt_list = get_stock_list_in_sector('能源中心期权') + data = [] + for opt_code in opt_list: + undl_code = get_option_undl(opt_code) + if undl_code == c_undl_code_ref: + data.append(opt_code) + return data + else: + opt_list = [] + category_list = ['上证期权', '深证期权', '中金所', '上期所期权', '郑商所期权', '大商所期权', '广期所期权', '能源中心期权'] + for category in category_list: + one_list = get_stock_list_in_sector(category) + opt_list += one_list + + result = {} + for opt_code in opt_list: + undl_code = get_option_undl(opt_code) + if undl_code: + if undl_code in result: + result[undl_code].append(opt_code) + else: + result[undl_code] = [opt_code] + return result + + +def get_option_list(undl_code, dedate, opttype = "", isavailavle = False): + result = [] + + marketcodeList = undl_code.split('.') + if (len(marketcodeList) != 2): + return [] + undlCode = marketcodeList[0] + undlMarket = marketcodeList[1] + inst_data = get_instrument_detail(undl_code) + if inst_data and 'UniCode' in inst_data: + undlCode = inst_data['UniCode'] + market = "" + if (undlMarket == "SH"): + if undlCode == "000016" or undlCode == "000300" or undlCode == "000852" or undlCode == "000905": + market = 'IF' + else: + market = "SHO" + elif (undlMarket == "SZ"): + market = "SZO" + else: + market = undlMarket + if (opttype.upper() == "C"): + opttype = "CALL" + elif (opttype.upper() == "P"): + opttype = "PUT" + optList = [] + if market == 'SHO': + optList += get_stock_list_in_sector('上证期权') + optList += get_stock_list_in_sector('过期上证期权') + elif market == 'SZO': + optList += get_stock_list_in_sector('深证期权') + optList += get_stock_list_in_sector('过期深证期权') + elif market == 'IF': + optList += get_stock_list_in_sector('中金所') + optList += get_stock_list_in_sector('过期中金所') + elif market == 'SF' or market == 'SHFE': + optList += get_stock_list_in_sector('上期所期权') + optList += get_stock_list_in_sector('过期上期所') + elif market == 'ZF' or market == 'CZCE': + optList += get_stock_list_in_sector('郑商所期权') + optList += get_stock_list_in_sector('过期郑商所') + elif market == 'DF' or market == 'DCE': + optList += get_stock_list_in_sector('大商所期权') + optList += get_stock_list_in_sector('过期大商所') + elif market == 'GF' or market == 'GFEX': + optList += get_stock_list_in_sector('广期所期权') + optList += get_stock_list_in_sector('过期广期所') + elif market == 'INE': + optList += get_stock_list_in_sector('能源中心期权') + optList += get_stock_list_in_sector('过期能源中心') + for opt in optList: + if (opt.find(market) < 0): + continue + inst = get_option_detail_data(opt) + if not inst: + continue + if (opttype.upper() != "" and opttype.upper() != inst["optType"]): + continue + if ((len(dedate) == 6 and inst['ExpireDate'].find(dedate) < 0)): + continue + if (len(dedate) == 8): # option is trade,guosen demand + createDate = inst['CreateDate'] + openDate = inst['OpenDate'] + if (createDate > '0'): + openDate = min(openDate, createDate) + if (openDate < '20150101' or openDate > dedate): + continue + endDate = inst['ExpireDate'] + if (isavailavle and endDate < dedate): + continue + if inst['OptUndlCode'].find(undlCode) >= 0: + result.append(opt) + return result + + +def get_his_option_list(undl_code, dedate): + ''' + 获取历史上某日的指定品种期权信息列表 + :param undl_code: (str)标的代码,格式 stock.market e.g."000300.SH" + :param date: (str)日期 格式YYYYMMDD,e.g."20200427" + :return: dataframe + ''' + if not dedate: + return None + + data = get_his_option_list_batch(undl_code, dedate, dedate) + return data.get(dedate, None) + + +def get_his_option_list_batch(undl_code, start_time = '', end_time = ''): + ''' + 获取历史上某段时间的指定品种期权信息列表 + :param undl_code: (str)标的代码,格式 stock.market e.g."000300.SH" + :param start_time,start_time: (str)日期 格式YYYYMMDD,e.g."20200427" + :return: {date : dataframe} + ''' + split_codes = undl_code.rsplit('.', 1) + if len(split_codes) == 2: + stockcode = split_codes[0] + market = split_codes[1] + + optmarket = market + optcode = stockcode + product = stockcode + + isstockopt = False + + if market == 'SH': + if undl_code in ["000016.SH", "000300.SH", "000852.SH", "000905.SH"]: + optmarket = 'IF' + else: + optmarket = 'SHO' + optcode = 'XXXXXX' + isstockopt = True + elif market == 'SZ': + optmarket = 'SZO' + optcode = 'XXXXXX' + isstockopt = True + else: + detail = get_instrument_detail(undl_code) + if detail: + optcode = detail.get('ProductID', optcode) + product = optcode + + code = optcode + '.' + optmarket + + end_time1 = end_time + if end_time: + import datetime as dt + time_tag = int(dt.datetime.strptime(end_time, '%Y%m%d').timestamp() * 1000) + time_tag = time_tag + 31 * 86400000 + end_time1 = timetag_to_datetime(time_tag, '%Y%m%d') + + data_all = get_market_data_ex( + [] + , [code] + , period='optionhistorycontract' + , start_time = start_time + , end_time = end_time1 + ).get(code, None) + + if data_all.empty: + return {} + + if isstockopt: + select = f'''标的市场 == '{market}' and 标的编码 == '{stockcode}' ''' + data_all = data_all.loc[data_all.eval(select)].reset_index() + + data_all['期权完整代码'] = data_all['期权编码'] + '.' + data_all['期权市场'] + data_all['标的完整代码'] = data_all['标的编码'] + '.' + data_all['标的市场'] + data_all['期货品种'] = product + + date_list = get_trading_dates(optmarket, start_time, end_time) + + result = {} + min_opne_date = 0 + for timetag in date_list: + dedate = int(timetag_to_datetime(timetag, '%Y%m%d')) + + if dedate < min_opne_date: + continue + + data1 = data_all.loc[data_all['time'] >= timetag].reset_index() + if data1.empty: + continue + + data_time = data1.loc[0]['time'] + select = f'''time == {data_time} and 上市日 <= {dedate} and 到期日 >= {dedate} and 方向 != '' ''' + + data2 = data_all.loc[data_all.eval(select)].reset_index().drop(['index', 'time'], axis=1) + if data2.empty: + select = f'''time == {data_time} ''' + data3 = data_all.loc[data_all.eval(select)].reset_index() + min_opne_date = data3['上市日'].min() + else: + result[str(dedate)] = data2 + + return result + + +def get_ipo_info(start_time = '', end_time = ''): + client = get_client() + data = client.get_ipo_info(start_time, end_time) + pylist = [ + 'securityCode' #证券代码 + , 'codeName' #代码简称 + , 'market' #所属市场 + , 'actIssueQty' #发行总量 单位:股 + , 'onlineIssueQty' #网上发行量 单位:股 + , 'onlineSubCode' #申购代码 + , 'onlineSubMaxQty' #申购上限 单位:股 + , 'publishPrice' #发行价格 + , 'startDate' #申购开始日期 + , 'onlineSubMinQty' #最小申购数,单位:股 + , 'isProfit' #是否已盈利 0:上市时尚未盈利 1:上市时已盈利 + , 'industryPe' #行业市盈率 + , 'beforePE' #发行前市盈率 + , 'afterPE' #发行后市盈率 + , 'listedDate' #上市日期 + , 'declareDate' #中签号公布日期 + , 'paymentDate' #中签缴款日 + , 'lwr' #中签率 + ] + result = [] + for datadict in data: + resdict = {} + for field in pylist: + resdict[field] = datadict.get(field) + result.append(resdict) + return result + + +def get_markets(): + ''' + 获取所有可选的市场 + 返回 dict + { <市场代码>: <市场名称>, ... } + ''' + return { + 'SH': '上交所' + , 'SZ': '深交所' + , 'BJ': '北交所' + , 'HK': '港交所' + , 'HGT': '沪港通' + , 'SGT': '深港通' + , 'IF': '中金所' + , 'SF': '上期所' + , 'DF': '大商所' + , 'ZF': '郑商所' + , 'GF': '广期所' + , 'INE': '能源交易所' + , 'SHO': '上证期权' + , 'SZO': '深证期权' + , 'BKZS': '板块指数' + } + + +def get_wp_market_list(): + ''' + 获取所有外盘的市场 + 返回 list + ''' + return _BSON_call_common(get_client().commonControl, 'getwpmarketlist', {}) + + +def get_his_st_data(stock_code): + fileName = _OS_.path.join(get_data_dir(), '..', 'data', 'SH_XXXXXX_2011_86400000.csv') + + try: + with open(fileName, "r") as f: + datas = f.readlines() + except: + return {} + + status = [] + for data in datas: + cols = data.split(',') + if len(cols) >= 4 and cols[0] == stock_code: + status.append((cols[2], cols[3])) + + if not status: + return {} + + result = {} + i = 0 + while i < len(status): + start = status[i][0] + flag = status[i][1] + + i += 1 + + end = '20380119' + if i < len(status): + end = status[i][0] + + realStatus = '' + if (flag == '1'): + realStatus = 'ST' + elif (flag == '2'): + realStatus = '*ST' + elif (flag == '3'): + realStatus = 'PT' + else: + continue + + if realStatus not in result: + result[realStatus] = [] + result[realStatus].append([start, end]) + + return result + + +def subscribe_formula(formula_name, stock_code, period, start_time = '', end_time = '', count = -1, dividend_type = None, extend_param = {}, callback = None): + cl = get_client() + + result = _BSON_.BSON.decode(cl.commonControl('createrequestid', _BSON_.BSON.encode({}))) + request_id = result['result'] + + data = { + 'formulaname': formula_name, 'stockcode': stock_code, 'period': period + , 'starttime': start_time, 'endtime': end_time, 'count': count + , 'dividendtype': dividend_type if dividend_type else 'none' + , 'extendparam': extend_param + , 'create': True + } + + if callback: + callback = subscribe_callback_wrapper(callback) + + cl.subscribeFormula(request_id, _BSON_.BSON.encode(data), callback) + return request_id + + +def get_formula_result(request_id, start_time = '', end_time = '', count = -1): + cl = get_client() + res = _BSON_.BSON.decode( + cl.commonControl( + 'getformularesult' + , _BSON_.BSON.encode({ + 'requestid': request_id + , 'starttime': start_time + , 'endtime': end_time + , 'count': count + }) + ) + ) + return res + + +def bind_formula(request_id, callback = None): + cl = get_client() + + if callback: + callback = subscribe_callback_wrapper(callback) + + cl.subscribeFormula(request_id, _BSON_.BSON.encode({}), callback) + return + + +def unsubscribe_formula(request_id): + cl = get_client() + cl.unsubscribeFormula(request_id) + return + + +def call_formula( + formula_name, stock_code, period + , start_time = '', end_time = '', count = -1 + , dividend_type = None, extend_param = {} +): + cl = get_client() + + result = _BSON_.BSON.decode(cl.commonControl('createrequestid', _BSON_.BSON.encode({}))) + request_id = result['result'] + + data = { + 'formulaname': formula_name, 'stockcode': stock_code, 'period': period + , 'starttime': start_time, 'endtime': end_time, 'count': count + , 'dividendtype': dividend_type if dividend_type else 'none' + , 'extendparam': extend_param + , 'create': True + } + + data = cl.subscribeFormulaSync(request_id, _BSON_.BSON.encode(data)) + return _BSON_.BSON.decode(data) + +gmd = get_market_data +gmd2 = get_market_data_ex +gmd3 = get_market_data3 +gld = get_local_data +t2d = timetag_to_datetime +gsl = get_stock_list_in_sector + + +def reset_market_trading_day_list(market, datas): + cl = get_client() + + result = _BSON_call_common( + cl.custom_data_control, 'createmarketchange' + , { + 'market': market + } + ) + cid = result['cid'] + + result = _BSON_call_common( + cl.custom_data_control, 'addtradingdaytochange' + , { + 'cid': cid + , 'datas': datas + , 'coverall': True + } + ) + + result = _BSON_call_common( + cl.custom_data_control, 'finishmarketchange' + , { + 'cid': cid + #, 'abort': False + , 'notifyupdate': True + } + ) + return + + +def reset_market_stock_list(market, datas): + cl = get_client() + + result = _BSON_call_common( + cl.custom_data_control, 'createmarketchange' + , { + 'market': market + } + ) + cid = result['cid'] + + result = _BSON_call_common( + cl.custom_data_control, 'addstocktochange' + , { + 'cid': cid + , 'datas': datas + , 'coverall': True + } + ) + + result = _BSON_call_common( + cl.custom_data_control, 'finishmarketchange' + , { + 'cid': cid + #, 'abort': False + , 'notifyupdate': True + } + ) + return + + +def push_custom_data(meta, datas, coverall = False): + cl = get_client() + if period in ['1m', '5m', '15m', '30m', '60m', '1h', '2h', '3h', '4h', '1d']: + type = 3001 + + ans = [] + fields = get_field_name(type) + for data in datas: + params = {} + for k, v in data.items(): + if k in fields: + params[fields[k]] = v + ans.append(params) + + result = _BSON_call_common( + cl.custom_data_control, 'pushcustomdata' + , { + "meta": meta + , 'datas': datas + , 'coverall': coverall + } + ) + return + +def get_period_list(): + client = get_client() + result = _BSON_.BSON.decode(client.commonControl('getperiodlist', _BSON_.BSON.encode({}))) + p_list = result['result'] + + result = [] + for k, v in __TUPLE_PERIODS.items(): + if len(v) >= 3 and v[2]: + flag = True + for i in p_list: + if k == i.get('name', None): + flag = False + break + if flag: + result.append({'name': k, 'desc': v[2]}) + + result.extend(p_list) + return result + + +def gen_factor_index( + data_name, formula_name, vars, sector_list + , start_time = '', end_time = '', period = '1d' + , dividend_type = 'none' +): + ''' + 生成因子指数扩展数据 + ''' + running_info = { + 'result':{} + ,'finished':0 + ,'total':0 + } + def onPushProgress(data): + running_info['finished'] = data.get('finished',-1) + if running_info['finished'] == -1: + running_info['result'] = data + else: + running_info['total'] = data.get('total', -1) + + callback = subscribe_callback_wrapper(onPushProgress) + + cl = get_client() + cl.registerCommonControlCallback("genfactorindex", callback) + _BSON_call_common( + cl.commonControl + , 'genfactorindex' + , { + 'data_name': data_name + , 'formula_name': formula_name + , 'vars': vars + , 'sector_list': sector_list + , 'start_time': start_time + , 'end_time': end_time + , 'period': period + , 'dividend_type': dividend_type + } + ) + + last_finished = running_info['finished'] + time_count = 0 + while not running_info['result']: + _TIME_.sleep(1) + if last_finished != running_info['finished']: + last_finished = running_info['finished'] + time_count = 0 + else: + time_count += 1 + if time_count > 20: + time_count = 0 + if get_client(): + print(f'因子指数扩展数据生成进度长时间未更新,' + f'当前进度{running_info["finished"]}/{running_info["total"]}') + + return running_info['result'] + + +def create_formula(formula_name, formula_content, formula_params = {}): + ''' + 创建策略 + + formula_name: str 策略名称 + formula_content: str 策略内容 + formula_params: dict 策略参数 + + 返回: None + 如果成功,返回None + 如果失败,会抛出异常信息 + ''' + data = { + 'formula_name': formula_name + ,'content': formula_content + } + + if formula_params: + data.update(formula_params) + + return _BSON_call_common( + get_client().commonControl + , 'createformula' + , data + ) + + +def import_formula(formula_name, file_path): + ''' + 导入策略 + + formula_name: str 策略名称 + file_path: str 文件路径 + 一般为.rzrk文件,可以从qmt客户端导出得到 + ''' + return _BSON_call_common(get_client().commonControl + , 'importformula' + , {'formula_name': formula_name, 'file_path': file_path} + ) + + +def del_formula(formula_name): + ''' + 删除策略 + + formula_name: str 策略名称 + ''' + return _BSON_call_common(get_client().commonControl + , 'delformula' + , {'formula_name': formula_name} + ) + + +def get_formulas(): + ''' + 查询所有的策略 + ''' + return _BSON_call_common(get_client().commonControl, 'getformulas', {}) + + +def read_feather(file_path): + ''' + 读取feather格式的arrow文件 + :param file_path: (str) + :return: param_bin: (dict), df: (pandas.DataFrame) + ''' + import sys + if sys.version_info.major > 2: + from pyarrow import feather + if sys.version_info.minor > 6: + table = feather.read_table(source=file_path, columns=None, memory_map=True, use_threads=True) + else: + table = feather.read_table(source=file_path, columns=None, memory_map=True) + + metadata = table.schema.metadata + param_bin_bytes = metadata.get(b'param_bin') + #param_str_bytes = metadata.get(b'param_str') + + param_bin = _BSON_.BSON.decode(param_bin_bytes) + #param_str = param_str_bytes.decode('utf-8') + df = table.to_pandas(use_threads=True) + return param_bin, df + + return None, None + + +def write_feather(dest_path, param, df): + ''' + 将panads.DataFrame转换为arrow.Table以feather格式写入文件 + :param dest_path: (str)路径 + :param param: (dict) schema的metadata + :param df: (pandas.DataFrame) 数据 + :return: (bool) 成功/失败 + ''' + import json, sys + if sys.version_info.major > 2: + from pyarrow import feather, Schema, Table + schema = Schema.from_pandas(df).with_metadata({ + 'param_bin' : _BSON_.BSON.encode(param), + 'param_str' : json.dumps(param) + }) + table = Table.from_pandas(df, schema=schema) + feather.write_feather(table, dest_path) + return True + + return False + + +class QuoteServer: + def __init__(self, info = {}): + ''' + info: { + 'ip': '218.16.123.121' + , 'port': 55300 + , 'username': 'test' + , 'pwd': 'testpwd' + } + ''' + self.info = info + + ip = info.get('ip', None) + port = info.get('port', None) + + if not ip or not port: + raise f'invalid address, ip:{ip}, port:{port}' + return + + def _BSON_call_common(self, interface, func, param): + return _BSON_.BSON.decode(interface(func, _BSON_.BSON.encode(param))) + + def __str__(self): + return str(self.info) + + def connect(self): + ''' + 连接到这个地址 + ''' + cl = get_client() + + return self._BSON_call_common( + cl.commonControl, 'quoteserverconnect' + , { + 'ip': self.info['ip'] + , 'port': self.info['port'] + , 'info': self.info + , 'operation': 'login' + } + ) + + def disconnect(self): + ''' + 断开连接 + ''' + cl = get_client() + + result = self._BSON_call_common( + cl.commonControl, 'quoteserverconnect' + , { + 'ip': self.info['ip'] + , 'port': self.info['port'] + , 'info': self.info + , 'operation': 'logout' + } + ) + return + + def set_key(self, key_list = []): + ''' + 设置数据key到这个地址,后续会使用这个地址获取key对应的市场数据 + + key_list: [key, ...] + key: + f'{market}_{level}' + market: + SH, SZ, ... + level: + 'L1' # level 1 + 'L2' # level 2 + ''' + cl = get_client() + + result = self._BSON_call_common( + cl.commonControl, 'quoteserversetkey' + , { + 'ip': self.info['ip'] + , 'port': self.info['port'] + , 'info': self.info + , 'keys': key_list + } + ) + return + + def test_load(self): + ''' + 获取这个地址的负载情况 + ''' + cl = get_client() + + result = self._BSON_call_common( + cl.commonControl, 'testload' + , { + 'ip': self.info['ip'] + , 'port': self.info['port'] + , 'info': self.info + } + ) + return result + + def get_available_quote_key(self): + ''' + 获取这个地址可支持的数据key + ''' + cl = get_client() + + inst = self._BSON_call_common( + cl.commonControl, 'getavailablekey' + , { + 'ip': self.info['ip'] + , 'port': self.info['port'] + , 'info': self.info + } + ) + result = inst.get('result', []) + + return result + + def get_server_list(self): + ''' + 获取这个地址的服务器组列表 + ''' + cl = get_client() + + inst = self._BSON_call_common( + cl.commonControl, 'getserverlist' + , { + 'ip': self.info['ip'] + , 'port': self.info['port'] + , 'info': self.info + } + ) + + inst = inst.get('result', []) + + result = [QuoteServer(info) for info in inst] + return result + + +def get_quote_server_config(): + ''' + 获取连接配置 + + result: [info, ...] + ''' + cl = get_client() + + inst = _BSON_call_common( + cl.commonControl, 'getquoteserverconfig', {} + ) + inst = inst.get('result', []) + + result = [QuoteServer(info) for info in inst] + return result + + +def get_quote_server_status(): + ''' + 获取当前全局连接状态 + + result: { + quote_key: info + , ... + } + ''' + cl = get_client() + + inst = _BSON_call_common( + cl.commonControl, 'getquoteserverstatus', {} + ) + inst = inst.get('result', []) + + result = {} + for pair in inst: + key = pair.get('key', '') + info = pair.get('info', {}) + result[key] = QuoteServer(info) + return result + + +def watch_quote_server_status(callback): + ''' + 监控全局连接状态变化 + + def callback(info): + #info: {address : 'ip:port', status: ''} + #status: 'connected', 'disconnected' + return + ''' + cl = get_client() + + if callback: + callback = subscribe_callback_wrapper(callback) + + cl.registerCommonControlCallback("watchquoteserverstatus", callback) + _BSON_call_common(cl.commonControl, "watchquoteserverstatus", {}) + return + +def fetch_quote(root_path, key_list): + root_path = _OS_.path.abspath(root_path) + cl = get_client() + inst = _BSON_call_common( + cl.commonControl, 'fetchquote', { + 'dir': root_path + } + ) + + config_dir = _OS_.path.join(root_path, 'userdata_mini', 'users', 'xtquoterconfig.xml') + if not _OS_.path.isfile(config_dir): + return + + import xml.etree.ElementTree as ET + + tree = ET.parse(config_dir) + quoter_server_list = tree.find('QuoterServers') + quoter_server_list = quoter_server_list.findall('QuoterServer') + + qs_infos = {} + for server in quoter_server_list: + quoter_type = server.attrib['quotertype'] + if quoter_type != '0': + continue + + info = {'ip': server.attrib['address'], 'port': int(server.attrib['port']), 'username': server.attrib['username'], 'pwd': server.attrib['password']} + qs = QuoteServer(info) + relate_servers = qs.get_server_list() + for rs in relate_servers: + keys = rs.info.get('keys', []) + keys = ['0_' + key for key in keys if '0_' + key in key_list] + + if keys: + addr = (rs.info['ip'], rs.info['port']) + rs.info['keys'] = keys + qs_infos[addr] = rs + + servers = {} + for qs in qs_infos.values(): + qs.info.update(qs.test_load()) + for key in qs.info['keys']: + if key not in servers: + servers[key] = [] + servers[key].append(qs) + + for p in servers.items(): + p[1].sort(key = lambda x: x.info.get('delay', 1000000.0)) + + for key_servers in servers.items(): + for qs in key_servers[1]: + if qs.info['load'] != 1000000.0 and qs.info['delay'] != 1000000.0 and qs.info['accessible']: + qs.set_key([key_servers[0]]) + break + + return + + +def get_etf_info(): + period = _get_tuple_period('etfredemptionlist') + if not isinstance(period, tuple): + return {} + + all_data = _get_market_data_ex_tuple_period_ori(['XXXXXX.SH', 'XXXXXX.SZ'], period) + + metaid, periodNum = period + convert_field_list = get_field_list(metaid) + + result = {} + for stockcode, data_list in all_data.items(): + market = stockcode.split('.')[1] + + for data in data_list: + convert_data = {'market': market} + + if convert_field_list: + data = _convert_component_info(data, convert_field_list) + convert_data.update(data) + + stock_market = '' + if '基金代码' in data: + stock_market = data['基金代码'] + '.' + market + + convert_market = {'1': 'SH', '2': 'SZ', '3': 'HK', '4': 'BJ'} + if '成份股信息' in convert_data: + for sub_data in convert_data['成份股信息']: + if '成份股所属市场' in sub_data and '成份股代码' in sub_data and str(sub_data['成份股所属市场']) in convert_market: + sub_data['成份股代码'] = sub_data['成份股代码'] + '.' + convert_market[str(sub_data['成份股所属市场'])] + sub_data['成份股所属市场'] = convert_market[str(sub_data['成份股所属市场'])] + + if stock_market: + result[stock_market] = convert_data + + return result + + +def download_etf_info(): + for stock_code in ['XXXXXX.SH', 'XXXXXX.SZ']: + download_history_data(stock_code, 'etfredemptionlist', '', '') + + return + + +def download_his_st_data(): + ''' + 下载历史st数据 + ''' + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'downloadhisstdata', {} + ) + return result + + +def get_hk_broker_dict(): + global __hk_broke_info + + if not __hk_broke_info: + data = _get_market_data_ex_tuple_period_ori(['XXXXXX.HK'], (2038, 86401000), '', '') + + for a in data['XXXXXX.HK']: + list = a['1'] + name = a['0'] + for id in list: + __hk_broke_info[id] = name + + return __hk_broke_info + + +def _covert_hk_broke_data(ori_data = {}): + broke_dict = get_hk_broker_dict() + for s in ori_data: + sdata = ori_data[s] + for data in sdata: + for Broker in data['bidbrokerqueues']: + bidBrokerQueues = Broker['brokers'] + listbid = [] + for brokerid in bidBrokerQueues: + brokername = broke_dict.get(brokerid, '') + listbid.append((brokerid, brokername)) + Broker['brokers'] = listbid + + for Broker in data['askbrokerqueues']: + askBrokerQueues = Broker['brokers'] + listask = [] + for brokerid in askBrokerQueues: + brokername = broke_dict.get(brokerid, '') + listask.append((brokerid, brokername)) + Broker['brokers'] = listask + + return ori_data + + +def get_broker_queue_data(stock_list = [], start_time = '', end_time = '', count = -1, show_broker_name = False): + ori_data = get_market_data_ex_ori([], stock_list, 'hkbrokerqueue', start_time, end_time, count) + + if show_broker_name: + return _covert_hk_broke_data(ori_data) + return ori_data + + +def watch_xtquant_status(callback): + ''' + 监控xtquant连接状态变化 + + def callback(info): + #info: {address : 'ip:port', status: ''} + #status: 'connected', 'disconnected' + return + ''' + if callback: + callback = subscribe_callback_wrapper(callback) + + from . import xtconn + xtconn.status_callback = callback + return + + +def get_full_kline(field_list = [], stock_list = [], period = '1m' + , start_time = '', end_time = '', count = 1 + , dividend_type = 'none', fill_data = True): + ''' + k线全推获取最新交易日数据 + ''' + cl = get_client() + + all_data = _BSON_call_common( + cl.commonControl + , 'getfullkline' + , { + "stocklist": stock_list + , "period": period + , "starttime": start_time + , "endtime": end_time + , "count": count + , "dividendtype": dividend_type + , "fillData": fill_data + , "fields": field_list + } + ) + + import pandas as pd + data = all_data.get('result', {}) + index = all_data.get('stock', []) + column = all_data.get('stime', []) + + result = {} + for field in data: + result[field] = pd.DataFrame(data[field], index = index, columns = column) + return result + + +def generate_index_data( + formula_name, formula_param = {} + , stock_list = [], period = '1d', dividend_type = 'none' + , start_time = '', end_time = '' + , fill_mode = 'fixed', fill_value = float('nan') + , result_path = None +): + ''' + formula_name: + str 模型名称 + formula_param: + dict 模型参数 + 例如 {'param1': 1.0, 'param2': 'sym'} + stock_list: + list 股票列表 + period: + str 周期 + '1m' '5m' '1d' + dividend_type: + str 复权方式 + 'none' - 不复权 + 'front_ratio' - 等比前复权 + 'back_ratio' - 等比后复权 + start_time: + str 起始时间 '20240101' '20240101000000' + '' - '19700101' + end_time: + str 结束时间 '20241231' '20241231235959' + '' - '20380119' + fill_mode: + str 空缺填充方式 + 'fixed' - 固定值填充 + 'forward' - 向前延续 + fill_value: + float 填充数值 + float('nan') - 以NaN填充 + result_path: + str 结果文件路径,feather格式 + ''' + cl = get_client() + + result = _BSON_call_common(cl.commonControl, 'createrequestid', {}) + request_id = result['result'] + + result = _BSON_call_common( + cl.commonControl + , 'generateindexdata' + , { + 'requestid': request_id + , 'formulaname': formula_name + , 'formulaparam': formula_param + , 'stocklist': stock_list + , 'period': period + , 'dividendtype': dividend_type + , 'starttime': start_time + , 'endtime': end_time + , 'fillmode': fill_mode + , 'fillvalue': fill_value + , 'resultpath': result_path + } + ) + + taskid = result['taskid'] + + status = _BSON_call_common(cl.commonControl, 'querytaskstatus', {'taskid': taskid}) + + from tqdm import tqdm + + with tqdm(total = 1.0, dynamic_ncols = True) as pbar: + totalcount = 1.0 + finishedcount = 0.0 + + if not status.get('done', True): + import time + + while not status.get('done', True): + totalcount = status.get('totalcount', 1.0) + finishedcount = status.get('finishedcount', 0.0) + + pbar.total = totalcount + pbar.update(finishedcount - pbar.n) + + time.sleep(0.5) + status = _BSON_call_common(cl.commonControl, 'querytaskstatus', {'taskid': taskid}) + + pbar.update(totalcount - pbar.n) + + if status.get('errorcode', None): + raise Exception(status) + + return + + +def download_tabular_data(stock_list, period, start_time = '', end_time = '', incrementally = None, download_type = 'validationbypage', source = ''): + ''' + 下载表数据,可以按条数或按时间范围下载 + + stock_list: + list 股票列表 + period: + str 周期 + '1m' '5m' '1d' + start_time: + str 起始时间 '20240101' '20240101000000' + '' - '19700101' + end_time: + str 结束时间 '20241231' '20241231235959' + '' - '20380119' + incrementally: + bool 是否增量 + 'fixed' - 固定值填充 + 'forward' - 向前延续 + download_type: + str 下载类型 + 'bypage' - 按条数下载 + 'byregion' - 按时间范围下载 + 'validatebypage' - 数据校验按条数下载 + source: + str 指定下载地址 + ''' + if incrementally is None: + incrementally = False if start_time else True + + if isinstance(stock_list, str): + stock_list = [stock_list] + + if isinstance(period, tuple): + metaid, periodNum = period + periodstr = '' + else: + periodstr = period + metaid = -1 + periodNum = -1 + + param = { + 'stocklist': stock_list + , 'period': periodstr + , 'metaid': metaid + , 'periodNum': periodNum + , 'starttime' : start_time + , 'endtime' : end_time + , 'incrementally': incrementally + , 'type': download_type + , 'source': source + } + + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'downloadtabulardata', param + ) + + seq = result['seq'] + + + status = _BSON_call_common( + cl.commonControl, 'getdownloadworkprogress', {'seq' : seq} + ) + + from tqdm import tqdm + + with tqdm(total=1.0, dynamic_ncols=True) as pbar: + if not status.get('done', True): + import time + + while not status.get('done', True): + #print(status) + totalcount = status.get('totalcount', 1.0) + finishedcount = status.get('finishedcount', 0.0) + percentage = finishedcount / max(totalcount, 1.0) + + pbar.update(percentage - pbar.n) + + _TIME_.sleep(1) + status = _BSON_call_common( + cl.commonControl, 'getdownloadworkprogress', {'seq': seq} + ) + + pbar.update(1.0 - pbar.n) + + if status.get('errormsg', None): + raise Exception(status) + + return + +def get_trading_contract_list(stockcode, date = None): + ''' + 获取当前主力合约可交易标的列表 + + stockcode: + str, 合约代码,需要用主力合约 + date: + str, 查询日期, 8位日期格式,默认为最新交易日 + ''' + split_codes = stockcode.rsplit('.', 1) + if len(split_codes) == 2: + code = split_codes[0] + market = split_codes[1].upper() + else: + return [] + + if not date: + date = timetag_to_datetime(get_market_last_trade_date(market), "%Y%m%d") + date = int(date[:8]) + + result_set = set() + product_id = code.replace('00', '') + + stock_list = [] + + if market == 'IF' or market == 'CFFEX': + stock_list += get_stock_list_in_sector('中金所') + stock_list += get_stock_list_in_sector('过期中金所') + elif market == 'SF' or market == 'SHFE': + stock_list += get_stock_list_in_sector('上期所') + stock_list += get_stock_list_in_sector('过期上期所') + elif market == 'DF' or market == 'DCE': + stock_list += get_stock_list_in_sector('大商所') + stock_list += get_stock_list_in_sector('过期大商所') + elif market == 'ZF' or market == 'CZCE': + stock_list += get_stock_list_in_sector('郑商所') + stock_list += get_stock_list_in_sector('过期郑商所') + elif market == 'GF' or market == 'GFEX': + stock_list += get_stock_list_in_sector('广期所') + stock_list += get_stock_list_in_sector('过期广期所') + elif market == 'INE': + stock_list += get_stock_list_in_sector('能源中心') + stock_list += get_stock_list_in_sector('过期能源中心') + + for it in stock_list: + inst = get_instrument_detail(it) + if not inst: + continue + if inst['ProductID'] == product_id: + s_date = int(inst['OpenDate']) + e_date = inst['ExpireDate'] + if s_date and e_date and s_date <= date <= e_date: + result_set.add(inst['ExchangeCode'] + '.' + market) + + return list(result_set) + + +def get_trading_period(stock_code): + ''' + 获取合约最新交易时间段 + stock_code: 合约市场代码,例如:600000.SH + 返回值:dict + {market, codeRegex, product, category, tradings: [type, bartime:[dayoffset, start, end]]} + market:市场 + codeRegex:代码匹配规则 + product:产品类型 + category:证券分类 + codeRegex, product, category,三个规则,每次只有一个规则有数据。数据中*代表任意 + tradings, list: + type:交易类型(2盘前竞价,3连续交易,8尾盘竞价) + dayoffset:交易日偏移 + start, int:开始时间,时分秒 + end, int:结束时间,时分秒 + ''' + cl = get_client() + + result = _BSON_call_common( + cl.commonControl + , 'getopenclosetradetimebystock' + , { + "stockMarket" : stock_code + } + ) + + return result + + +def get_kline_trading_period(stock_code): + ''' + 与交易时间相似,区别在于把尾盘竞价和盘中交易合并 + ''' + cl = get_client() + + result = _BSON_call_common( + cl.commonControl + , 'getopencloseklinetimebystock' + , { + "stockMarket": stock_code + } + ) + + return result + + +def get_all_trading_periods(): + ''' + 获取全部市场划分出来的交易时间段 + ''' + cl = get_client() + + result = _BSON_call_common( + cl.commonControl + , 'getopenclosealltradetime' + , { + } + ) + + return result.get('result', []) + + +def get_all_kline_trading_periods(): + ''' + 获取全部市场划分出来的K线交易时间段 + ''' + cl = get_client() + + result = _BSON_call_common( + cl.commonControl + , 'getopencloseallklinetime' + , { + } + ) + + return result.get('result', []) + + +def get_authorized_market_list(): + ''' + 获取所有已授权的市场 + 返回 list + ''' + return _BSON_call_common(get_client().commonControl, 'getauthorizedmarketlist', {}).get('result', []) + + +from .metatable import * + diff --git a/src/xtquant/xtdata_config.py b/src/xtquant/xtdata_config.py new file mode 100644 index 0000000..dbe27ca --- /dev/null +++ b/src/xtquant/xtdata_config.py @@ -0,0 +1 @@ +client_guid = "" \ No newline at end of file diff --git a/src/xtquant/xtdatacenter.py b/src/xtquant/xtdatacenter.py new file mode 100644 index 0000000..ae785b6 --- /dev/null +++ b/src/xtquant/xtdatacenter.py @@ -0,0 +1,300 @@ +#coding:utf-8 + +import os as _OS_ + +from . import datacenter as __dc + +__all__ = [ + 'set_token', + 'set_data_home_dir', + 'init', + 'shutdown', + 'listen', + 'get_local_server_port', + 'register_create_nparray', + 'try_create_client', + 'RPCClient', +] + +### config + +__curdir = _OS_.path.dirname(_OS_.path.abspath(__file__)) + +__rpc_config_dir = _OS_.path.join(__curdir, 'config') +__rpc_config_file = _OS_.path.join(__curdir, 'xtdata.ini') +__rpc_init_status = __dc.rpc_init(__rpc_config_dir) +if __rpc_init_status < 0: + raise Exception(f'rpc init failed, error_code:{__rpc_init_status}, configdir:{__rpc_config_dir}') + +__config_dir = _OS_.path.join(__curdir, 'config') +__data_home_dir = 'data' + +__quote_token = '' + +init_complete = False + +### function +get_local_server_port = __dc.get_local_server_port +register_create_nparray = __dc.register_create_nparray +RPCClient = __dc.IPythonApiClient + +def try_create_client(): + ''' + 尝试创建RPCClient,如果失败,会抛出异常 + ''' + cl = RPCClient() + cl.init() + + ec = cl.load_config(__rpc_config_file, 'client_xtdata') + if ec < 0: + raise f'load config failed, file:{__rpc_config_file}' + return cl + + +def set_token(token = ''): + ''' + 设置用于登录行情服务的token,此接口应该先于init调用 + token获取地址:https://xuntou.net/#/userInfo?product=xtquant + 迅投投研服务平台 - 用户中心 - 个人设置 - 接口TOKEN + ''' + global __quote_token + __quote_token = token + return + + +def set_data_home_dir(data_home_dir): + ''' + 设置数据存储目录,此接口应该先于init调用 + datacenter启动后,会在data_home_dir目录下建立若干目录存储数据 + 如果不设置存储目录,会使用默认路径 + 在datacenter作为独立行情服务的场景下,data_home_dir可以任意设置 + 如果想使用现有数据,data_home_dir对应QMT的f'{安装目录}',或对应极简模式的f'{安装目录}/userdata_mini' + ''' + global __data_home_dir + __data_home_dir = data_home_dir + return + + +def set_config_dir(config_dir): + ''' + 设置配置文件目录,此接口应该先于init调用 + 通常情况配置文件内置,不需要调用这个接口 + ''' + global __config_dir + __config_dir = config_dir + return + + +def set_kline_mirror_enabled(enable): + ''' + 设置K线全推功能是否开启,此接口应该先于init调用 + 此功能默认关闭,启用后,实时K线数据将优先从K线全推获取 + 此功能仅vip用户可用 + ''' + __dc.set_kline_mirror_enabled(['SH', 'SZ'] if enable else []) + return + + +def set_kline_mirror_markets(markets): + ''' + 设置开启指定市场的K线全推,此接口应该先于init调用 + 此功能默认关闭,启用后,实时K线数据将优先从K线全推获取 + 此功能仅vip用户可用 + + markets: list, 市场列表 + 例如 ['SH', 'SZ', 'BJ'] 为开启上交所、深交所、北交所的K线全推 + ''' + __dc.set_kline_mirror_enabled(markets) + return + + +def set_allow_optmize_address(allow_list = []): + ''' + 设置连接池,行情仅从连接池内的地址中选择连接,此接口应该先于init调用 + 地址格式为'127.0.0.1:55300' + 设置为空时,行情从全部的可用地址中选择连接 + ''' + __dc.set_allow_optmize_address(allow_list) + return + + +def set_wholequote_market_list(market_list = []): + ''' + 设置启动时加载全推行情的市场,此接口应该先于init调用 + 未设置时启动时不加载全推行情 + 未加载全推行情的市场,会在实际使用数据的时候加载 + + markets: list, 市场列表 + 例如 ['SH', 'SZ', 'BJ'] 为启动时加载上交所、深交所、北交所的全推行情 + ''' + __dc.set_wholequote_market_list(market_list) + return + + +def set_future_realtime_mode(enable): + ''' + 设置期货周末夜盘是否使用实际时间,此接口应该先于init调用 + ''' + __dc.set_future_realtime_mode(enable) + return + + +def set_init_markets(markets = []): + ''' + 设置初始化的市场列表,仅加载列表市场的合约,此接口应该先于init调用 + + markets: list, 市场列表 + 例如 ['SH', 'SZ', 'BJ'] 为加载上交所、深交所、北交所的合约 + 传空list时,加载全部市场的合约 + + 未设置时,默认加载全部市场的合约 + ''' + __dc.set_watch_market_list(markets) + return + + +def set_index_mirror_enabled(enable): + ''' + 设置指标全推功能是否开启,此接口应该先于init调用 + 此功能默认关闭 + ''' + __dc.set_index_mirror_enabled(["SH", "SZ", "SHO", "SZO", "IF", "DF", "SF", "ZF", "GF", "INE"] if enable else []) + return + + +def set_index_mirror_markets(markets): + ''' + 设置开启指定市场的指标全推,此接口应该先于init调用 + 此功能默认关闭 + + markets: list, 市场列表 + 例如 ['SH', 'SZ', 'BJ'] 为开启上交所、深交所、北交所的指标全推 + ''' + __dc.set_index_mirror_enabled(markets) + return + + +def init(start_local_service = True): + ''' + 初始化行情模块 + start_local_service: bool + 如果start_local_service为True,会额外启动一个默认本地监听,以支持datacenter作为独立行情服务时的xtdata内置连接 + ''' + import time + + __dc.set_config_dir(__config_dir) + __dc.set_data_home_dir(__data_home_dir) + __dc.set_token(__quote_token) + __dc.log_init() + __dc.start_init_quote() + + status = __dc.get_status() + while not status.get('init_done', False): + status = __dc.get_status() + time.sleep(0.5) + + from . import xtbson as bson + + result = __dc.fetch_auth_markets() + + if result['done'] == 0: + status = bson.decode(__dc.fetch_server_list_status()) + + status_show = {} + + for info in status.values(): + srv_addr = info['loginparam']['ip'] + ':' + str(info['loginparam']['port']) + + if info['errorcode'] != 0: + status_show[srv_addr] = info['boerror'] + else: + status_show[srv_addr] = info['resultdesc'] + + raise ConnectionError(f'行情连接初始化异常, 当前状态:{status_show}') + + market_keys = result.get('markets', []) + ''' + market_keys = [ + 'SH', 'SZ' + , 'IF', 'SF', 'DF', 'ZF', 'GF', 'INE' + ] + ''' + + result = __dc.fetch_init_result([f'0_{mkt}_L1' for mkt in market_keys]) + + for mkt, boinfo in result.items(): + info = bson.decode(boinfo) + + if info['done'] == 1: + if info['errorcode'] != 0: + srv_addr = info['loginparam']['ip'] + ':' + str(info['loginparam']['port']) + error = info['boerror'] + + raise ConnectionError(f'行情连接初始化异常 {mkt} {srv_addr} {error}') + + if info['resultcode'] != 0: + srv_addr = info['loginparam']['ip'] + ':' + str(info['loginparam']['port']) + error = info['resultdesc'] + reason = info['reason'] + + raise ConnectionError(f'行情连接初始化异常 {mkt} {srv_addr} {error} {reason}') + else: + status = bson.decode(__dc.fetch_server_list_status()) + + status_show = {} + + for info in status.values(): + srv_addr = info['loginparam']['ip'] + ':' + str(info['loginparam']['port']) + + if info['errorcode'] != 0: + status_show[srv_addr] = info['boerror'] + else: + status_show[srv_addr] = info['resultdesc'] + + raise ConnectionError(f'行情连接初始化异常 {mkt}, 当前状态:{status_show}') + + global init_complete + init_complete = True + + if start_local_service: + listen('127.0.0.1', 58609) + return + + +def shutdown(): + ''' + 关闭行情模块,停止所有服务和监听端口 + ''' + __dc.shutdown() + return + + +def listen(ip = '0.0.0.0', port = 58610): + ''' + 独立行情服务模式,启动监听端口,支持xtdata.connect接入 + ip: + str, '0.0.0.0' + port: + int, 指定监听端口 + tuple, 指定监听端口范围,从port[0]至port[1]逐个尝试监听 + 返回: + (ip, port), 表示监听的结果 + 示例: + from xtquant import xtdatacenter as xtdc + ip, port = xtdc.listen('0.0.0.0', 58610) + ip, port = xtdc.listen('0.0.0.0', (58610, 58620)) + ''' + global init_complete + if not init_complete: + raise Exception("尚未初始化, 请优先调用init进行初始化") + + if isinstance(port, tuple): + port_start, port_end = port + result = __dc.listen(ip, port_start, port_end) + else: + result = __dc.listen(ip, port, port) + + if result[1] == 0: + raise OSError(f'监听端口失败: {port}, 请检查端口是否被占用') + + return result diff --git a/src/xtquant/xtextend.py b/src/xtquant/xtextend.py new file mode 100644 index 0000000..dac9a76 --- /dev/null +++ b/src/xtquant/xtextend.py @@ -0,0 +1,138 @@ + +class FileLock: + def __init__(this, path, auto_lock = False): + this.path = path + this.fhandle = None + if auto_lock: + this.lock() + return + + def is_lock(this): + import os + if os.path.exists(this.path): + try: + os.remove(this.path) + return False + except Exception as e: + return True + return False + + def lock(this): + if this.fhandle: + raise this.fhandle + try: + this.fhandle = open(this.path, 'w') + except Exception as e: + return False + return True + + def unlock(this): + if not this.fhandle: + raise this.fhandle + this.fhandle.close() + this.fhandle = None + return True + + def clean(this): + import os + if not os.path.exists(this.path): + return True + try: + if os.path.isfile(this.path): + os.remove(this.path) + return True + except Exception as e: + pass + return False + +class Extender: + from ctypes import c_float, c_short + value_type = c_float + rank_type = c_short + + def __init__(self, base_dir): + import os + self.base_dir = os.path.join(base_dir, 'EP') + + def read_config(self): + import json, os + data = None + with open(os.path.join(self.file, 'config'), 'r', encoding='utf-8') as f: + data = json.loads(f.read()) + + if data: + self.stocklist = [] + for i in range(1, len(data['stocklist']), 2): + for stock in data['stocklist'][i]: + self.stocklist.append("%s.%s" % (stock, data['stocklist'][i - 1])) + + self.timedatelist = data['tradedatelist'] + + def read_data(self, data, time_indexs, stock_length): + from ctypes import c_float, c_short, sizeof, cast, POINTER + res = {} + num = (sizeof(self.value_type) + sizeof(self.rank_type)) * stock_length + for time_index in time_indexs: + index = num * time_index + value_data = data[index: index + sizeof(self.value_type) * stock_length] + values = cast(value_data, POINTER(c_float)) + rank_data = data[index + sizeof(self.value_type) * stock_length: index + num] + ranks = cast(rank_data, POINTER(c_short)) + res[self.timedatelist[time_index]] = [(round(values[i], 3), ranks[i]) for i in range(stock_length)] + + return res + + def format_time(self, times): + import time + if type(times) == str: + return int(time.mktime(time.strptime(times, '%Y%m%d'))) * 1000 + elif type(times) == int: + if times < 0: + return self.timedatelist[times] + elif times < ((1 << 31) - 1): + return times * 1000 + else: + return times + + def show_extend_data(self, file, times): + import time, os + self.file = os.path.join(self.base_dir, file + '_Xdat') + if not os.path.isdir(self.file): + return "No such file" + + fs = FileLock(os.path.join(self.file, 'filelock'), False) + + while fs.is_lock(): + print('文件被占用') + time.sleep(1) + fs.lock() + + self.read_config() + + time_list = [] + + if not times: + time_list = self.timedatelist + elif type(times) == list: + time_list.extend([self.format_time(i) for i in times]) + else: + time_list.append(self.format_time(times)) + + + time_index = [self.timedatelist.index(time) for time in time_list if self.timedatelist.count(time) != 0] + + stock_length = len(self.stocklist) + data = None + with open(os.path.join(self.file, 'data'), 'rb') as f: + data = f.read() + fs.unlock() + res = self.read_data(data, time_index, stock_length) + return self.stocklist, res + + +def show_extend_data(file, times): + import os + from . import xtdata as xd + exd = Extender(os.path.join(xd.init_data_dir(), '..', 'datadir')) + + return exd.show_extend_data(file, times) diff --git a/src/xtquant/xtstocktype.py b/src/xtquant/xtstocktype.py new file mode 100644 index 0000000..19f8d8a --- /dev/null +++ b/src/xtquant/xtstocktype.py @@ -0,0 +1,373 @@ +XT_GE_BANK_LOAN= 10051 +XT_GE_BJ= 20002 +XT_GE_BOND_DISTRIBUTION= 100200 +XT_GE_DF_ARBITAGE_FTOPTION= 100056 +XT_GE_DF_FTOPTION= 100052 +XT_GE_EXTRA_300_ETF= 100101 +XT_GE_EXTRA_50_ETF= 100100 +XT_GE_EXTRA_ALLOW_PLEDGE= 100105 +XT_GE_EXTRA_BLOCK_TRADING= 100102 +XT_GE_EXTRA_CB_ETF= 100026 +XT_GE_EXTRA_CB_LOF= 100027 +XT_GE_EXTRA_CLOSED_ENDED_FUNDS= 100014 +XT_GE_EXTRA_DIRECTIONAL_CONVERTIBALE_BOND= 100104 +XT_GE_EXTRA_ETF= 100013 +XT_GE_EXTRA_FICC= 100090 +XT_GE_EXTRA_FI_ETF= 100034 +XT_GE_EXTRA_FUND= 100004 +XT_GE_EXTRA_GF= 100036 +XT_GE_EXTRA_GLR= 100020 +XT_GE_EXTRA_GOLD= 100022 +XT_GE_EXTRA_INTRA_DAY= 100030 +XT_GE_EXTRA_LOAN= 100016 +XT_GE_EXTRA_LOAN_ETF= 100038 +XT_GE_EXTRA_LOF= 100037 +XT_GE_EXTRA_MAIN_BOARD= 100029 +XT_GE_EXTRA_MARKET_CF= 100006 +XT_GE_EXTRA_MARKET_FU= 100007 +XT_GE_EXTRA_MARKET_ST= 100008 +XT_GE_EXTRA_MONETARY_FUND= 100024 +XT_GE_EXTRA_NOT_CLOSING_AUCTION_MATCH= 100070 +XT_GE_EXTRA_POLICY_JRZ= 100019 +XT_GE_EXTRA_PUBLIC_INFRASTRUCTURE_FUND= 100103 +XT_GE_EXTRA_RATE_BOND= 100080 +XT_GE_EXTRA_REPURCHASE_DAY_1= 100040 +XT_GE_EXTRA_REPURCHASE_DAY_14= 100045 +XT_GE_EXTRA_REPURCHASE_DAY_2= 100041 +XT_GE_EXTRA_REPURCHASE_DAY_28= 100046 +XT_GE_EXTRA_REPURCHASE_DAY_28_UPPER= 100047 +XT_GE_EXTRA_REPURCHASE_DAY_3= 100042 +XT_GE_EXTRA_REPURCHASE_DAY_4= 100043 +XT_GE_EXTRA_REPURCHASE_DAY_7= 100044 +XT_GE_EXTRA_REPURCHASE_IMPAWN= 100021 +XT_GE_EXTRA_RTMF= 100023 +XT_GE_EXTRA_SH_CORPORATE_LOAN= 100106 +XT_GE_EXTRA_SH_DISTRIBUTION= 100031 +XT_GE_EXTRA_SH_IPO= 100025 +XT_GE_EXTRA_SH_LOAN= 100039 +XT_GE_EXTRA_STANDARD_BOND= 100018 +XT_GE_EXTRA_STOCK= 100003 +XT_GE_EXTRA_STOCK_A= 100001 +XT_GE_EXTRA_STOCK_B= 100002 +XT_GE_EXTRA_STOCK_EX= 100012 +XT_GE_EXTRA_STOCK_INDEX= 100005 +XT_GE_EXTRA_STOCK_TRANABLE= 100028 +XT_GE_EXTRA_ST_FIX= 100035 +XT_GE_EXTRA_SZ_CGL= 100009 +XT_GE_EXTRA_SZ_CORPORATE_LOAN= 100107 +XT_GE_EXTRA_SZ_GL= 100010 +XT_GE_EXTRA_SZ_GLR= 100017 +XT_GE_EXTRA_SZ_LOAN= 100011 +XT_GE_EXTRA_WARRANT= 100015 +XT_GE_EXTRA_XGED= 100032 +XT_GE_IF_ARBITAGE_FTOPTION= 100057 +XT_GE_IF_FTOPTION= 100053 +XT_GE_INE_FTOPTION= 100058 +XT_GE_MARKET_DS= 5 +XT_GE_MARKET_NEW3BOARD= 9 +XT_GE_MARKET_NEW3BOARD_DELISTED= 20000 +XT_GE_MARKET_OF= 7 +XT_GE_MARKET_OP= 8 +XT_GE_MARKET_SH= 1 +XT_GE_MARKET_SQ= 4 +XT_GE_MARKET_SZ= 2 +XT_GE_MARKET_ZJ= 3 +XT_GE_MARKET_ZS= 6 +XT_GE_NEW3BOARD_PREFERED_SHARES_TRANSFER= 20001 +XT_GE_SF_ARBITAGE_FTOPTION= 100054 +XT_GE_SF_FIXED_INCOME_ETF= 155 +XT_GE_SF_FTOPTION= 100050 +XT_GE_SHARES_ALLOTMEN= 100033 +XT_GE_SH_300_ETF= 351 +XT_GE_SH_50_ETF= 350 +XT_GE_SH_A= 101 +XT_GE_SH_ABS= 113 +XT_GE_SH_ABS_TRANSFER= 300 +XT_GE_SH_ALLOW_PLEDGE_BOND= 359 +XT_GE_SH_ASS= 186 +XT_GE_SH_ASSET_BACKED_SECURITIES= 242 +XT_GE_SH_ASSET_SECURITIZATION= 132 +XT_GE_SH_B= 102 +XT_GE_SH_BONDS_FUNDS= 166 +XT_GE_SH_BOND_OFFER_REPURCHASE= 150 +XT_GE_SH_BOND_PROTOCOL_REPURCHASE= 215 +XT_GE_SH_BOND_RESALE= 214 +XT_GE_SH_BOND_TRIPARTITE_REPURCHASE= 216 +XT_GE_SH_CDR= 196 +XT_GE_SH_CDR_ALLOTMEN= 199 +XT_GE_SH_CDR_DISTRIBUTION= 197 +XT_GE_SH_CDR_SUBSCRIBE= 198 +XT_GE_SH_CENTRAL_GOVERNMENT_LOAN= 130 +XT_GE_SH_CLOSED_ENDED_FUNDS= 140 +XT_GE_SH_CONVERTIBALE_BOND= 135 +XT_GE_SH_CONVERTIBALE_BOND_RESALE= 239 +XT_GE_SH_CONVERTIBLE_BOND_STOCK= 213 +XT_GE_SH_CONVERTIBLE_BOUND_DISTRIBUTION= 164 +XT_GE_SH_CORPORATE_BOND= 115 +XT_GE_SH_CORPORATE_BOND_REPURCHASE= 145 +XT_GE_SH_CORPORATE_LOAN_PLEDGE= 114 +XT_GE_SH_COUPON_GOVERNMENT_LOAN_PLEDGE= 238 +XT_GE_SH_CPB= 138 +XT_GE_SH_CPB_LOAN= 176 +XT_GE_SH_CPB_SWAP= 360 +XT_GE_SH_CREDIT_ASSET_SUPPORTED= 133 +XT_GE_SH_CROSS_BORDER_ETF= 152 +XT_GE_SH_CROSS_BORDER_LOF= 153 +XT_GE_SH_CR_ETF= 244 +XT_GE_SH_CR_ETF_CROSS_MARKET= 250 +XT_GE_SH_CR_FUND_ETF_GOLD= 274 +XT_GE_SH_DESIGNATED_TRANSACTION= 234 +XT_GE_SH_DIRECTIONAL_CONVERTIBALE_BOND= 303 +XT_GE_SH_ENTERPRISE_BOND= 134 +XT_GE_SH_ENTERPRISE_LOAN_PLEDGE= 240 +XT_GE_SH_ENTERPROSE_SUPPORT_AUCTION_BOND= 299 +XT_GE_SH_ENTERPROSE_SUPPORT_BOND= 191 +XT_GE_SH_EPB_TRANSFER= 175 +XT_GE_SH_ETF= 105 +XT_GE_SH_EXCHANGEABLE_BOND_DISTRIBUTION= 233 +XT_GE_SH_EXCHANGEABLE_LOAN= 108 +XT_GE_SH_EXCHANGEABLE_LOAN_PLEDGE= 109 +XT_GE_SH_EXCHANGEABLE_LOAN_SWAP= 110 +XT_GE_SH_FINANCIAL_BONDS= 128 +XT_GE_SH_FUND= 103 +XT_GE_SH_FUND_ETF= 245 +XT_GE_SH_FUND_ETF_CROSS_BORDER= 255 +XT_GE_SH_FUND_ETF_CROSS_MARKET= 251 +XT_GE_SH_FUND_ETF_CR_LOAN= 264 +XT_GE_SH_FUND_IPO= 161 +XT_GE_SH_FUND_RAISING= 223 +XT_GE_SH_FUND_SUBSCRIPTION= 227 +XT_GE_SH_FUND_SUBSCRIPTION_DISTRIBUTION= 228 +XT_GE_SH_GF= 170 +XT_GE_SH_GOLD= 156 +XT_GE_SH_GOVERNMENT_BANK_FINANCE_LOAN_DISTRIBUTE_SALE= 361 +XT_GE_SH_GOVERNMENT_LOAN= 137 +XT_GE_SH_GOVERNMENT_LOAN_DISCOUNT= 129 +XT_GE_SH_GOVERNMENT_LOAN_DISCOUNT_REPURCHASE= 144 +XT_GE_SH_GOVERNMENT_LOAN_DISTRIBUTE_SALE= 146 +XT_GE_SH_GOVERNMENT_LOAN_FUTURES= 217 +XT_GE_SH_GOVERNMENT_LOAN_INTEREST_BEARING= 127 +XT_GE_SH_GOVERNMENT_LOAN_PLEDGE= 237 +XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE= 126 +XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_BUYOUT= 124 +XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_ENTERPRISE= 123 +XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_IMPAWN= 125 +XT_GE_SH_GOVERNMENT_LOAN_REPURCHASE_TRUSTEE_SHIP= 122 +XT_GE_SH_GSF= 185 +XT_GE_SH_INDEX= 104 +XT_GE_SH_INNOVATE_ALLOTMEN= 195 +XT_GE_SH_INNOVATE_DISTRIBUTION= 193 +XT_GE_SH_INNOVATION_CLOSED_ENDED_FUNDS= 154 +XT_GE_SH_INTEREST_RATE_GOVERNMENT_LOAN= 229 +XT_GE_SH_LOAN_CBB_SCB_NEW= 187 +XT_GE_SH_LOAN_CR_ETF= 200 +XT_GE_SH_LOAN_ETF= 174 +XT_GE_SH_LOAN_IPO= 160 +XT_GE_SH_LOAN_ISSUANCE_DISTRIBUTE_SALE= 232 +XT_GE_SH_LOAN_REPURCHASE_DAY_1= 177 +XT_GE_SH_LOAN_REPURCHASE_DAY_14= 182 +XT_GE_SH_LOAN_REPURCHASE_DAY_2= 178 +XT_GE_SH_LOAN_REPURCHASE_DAY_28= 183 +XT_GE_SH_LOAN_REPURCHASE_DAY_28_UPPER= 184 +XT_GE_SH_LOAN_REPURCHASE_DAY_3= 179 +XT_GE_SH_LOAN_REPURCHASE_DAY_4= 180 +XT_GE_SH_LOAN_REPURCHASE_DAY_7= 181 +XT_GE_SH_LOCAL_GOVERNMENT_LOAN= 136 +XT_GE_SH_LOCAL_GOVERNMENT_LOAN_DISTRIBUTE_SALE= 148 +XT_GE_SH_LOCAL_GOVERNMENT_LOAN_ONLINE_DISTRIBUTE_SALE= 362 +XT_GE_SH_LOCAL_GOVERNMENT_LOAN_REPURCHASE= 147 +XT_GE_SH_LOF= 169 +XT_GE_SH_LOW_CORPORATE_BOND= 241 +XT_GE_SH_MONETARY_FUND_SUBSCRIPTION= 275 +XT_GE_SH_MS_PRIVATE_PLACEMENT_BOND= 151 +XT_GE_SH_NEW_SHARES_DISTRIBUTION= 162 +XT_GE_SH_NON_FUND_ETF= 248 +XT_GE_SH_NON_FUND_ETF_CROSS_BORDER= 258 +XT_GE_SH_NON_FUND_ETF_CROSS_MARKET= 254 +XT_GE_SH_NON_FUND_ETF_CR_LOAN= 267 +XT_GE_SH_NON_FUND_ETF_LOAN= 262 +XT_GE_SH_NON_FUND_ETF_MONETARY_FUND= 271 +XT_GE_SH_NON_PUBLIC_CONVERTIBLE_BOND_STOCK= 235 +XT_GE_SH_NON_PUBLIC_CONVERTIBLE_CORPORATE_LOAN= 354 +XT_GE_SH_NON_PUBLIC_CORPORATE_LOAN= 298 +XT_GE_SH_NON_PUBLIC_PREFERED_SHARES_TRANSFER= 117 +XT_GE_SH_OLD_GOVERNMENT_LOAN= 143 +XT_GE_SH_ONLINE_VOTING= 225 +XT_GE_SH_ONLINE_VOTING_B= 226 +XT_GE_SH_ONLINE_VOTING_PASSWORD_SERVICE_B= 236 +XT_GE_SH_OPEN_END_FUND= 189 +XT_GE_SH_OPEN_END_FUND_CONVERSION= 222 +XT_GE_SH_OPEN_END_FUND_CROSS_MARKET= 220 +XT_GE_SH_OPEN_END_FUND_DIVIDEND= 221 +XT_GE_SH_OPEN_END_FUND_SUBSCRIPTION= 219 +XT_GE_SH_OPEN_GF_LOF= 218 +XT_GE_SH_OTHER_MF= 190 +XT_GE_SH_PLACING= 363 +XT_GE_SH_PLACING_FIRST_DISTRIBUTION= 163 +XT_GE_SH_PLEDGE= 142 +XT_GE_SH_POLICY_JRZ= 141 +XT_GE_SH_PRICE_GOVERNMENT_LOAN= 230 +XT_GE_SH_PRIVATELY_LOAN_TRANSFER= 111 +XT_GE_SH_PR_CB_ETF= 173 +XT_GE_SH_PUBLIC_CORPORATE_TRADE_LOAN= 352 +XT_GE_SH_PUBLIC_INFRASTRUCTURE_FUND= 302 +XT_GE_SH_PUBLIC_LOAN_DISTRIBUTE_SALE= 231 +XT_GE_SH_PUBLIC_LOAN_PLEDGE= 212 +XT_GE_SH_PUBLIC_PREFERED_SHARES= 116 +XT_GE_SH_PUBLIC_PREFERED_SHARES_PLACEMENTS= 119 +XT_GE_SH_PUBLIC_PREFERED_SHARES_SUBSCRIBE= 118 +XT_GE_SH_PUBLIC_PREFERED_SHARES_SUBSCRIBE_DISTRIBUTION= 121 +XT_GE_SH_PUBLIC_PREFERED_SHARES_SUBSCRIBE_PRICE= 120 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_1= 201 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_119= 208 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_14= 203 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_154= 209 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_182= 210 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_21= 292 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_210= 294 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_245= 295 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_273= 211 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_28= 204 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_301= 296 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_35= 293 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_357= 297 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_42= 205 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_63= 206 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_7= 202 +XT_GE_SH_QUOTATION_REPURCHASE_DAY_91= 207 +XT_GE_SH_RTMF= 157 +XT_GE_SH_SEO= 172 +XT_GE_SH_SEPERATION_BOND= 131 +XT_GE_SH_SEPERATION_BOND_REPURCHASE= 149 +XT_GE_SH_SHARES_ALLOTMEN= 167 +XT_GE_SH_SHARES_CONVERTIBLE_BOND= 168 +XT_GE_SH_SHORTTERM_CORPORATE_LOAN_TRANSFER= 112 +XT_GE_SH_STANDARD_BOND= 139 +XT_GE_SH_STOCK_IPO= 159 +XT_GE_SH_SUBSCRIBE= 107 +XT_GE_SH_SUBSCRIPTION_ETF= 246 +XT_GE_SH_SUBSCRIPTION_ETF_CROSS_BORDER= 256 +XT_GE_SH_SUBSCRIPTION_ETF_CROSS_MARKET= 252 +XT_GE_SH_SUBSCRIPTION_ETF_CR_LOAN= 265 +XT_GE_SH_SUBSCRIPTION_ETF_GOLD= 272 +XT_GE_SH_SUBSCRIPTION_ETF_LOAN= 260 +XT_GE_SH_SUBSCRIPTION_ETF_MONETARY_FUND= 269 +XT_GE_SH_SUBSCRIPTION_FUND_ETF_GOLD= 273 +XT_GE_SH_SUBSCRIPTION_PRICE= 165 +XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF= 247 +XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_CROSS_BORDER= 257 +XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_CROSS_MARKET= 253 +XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_CR_LOAN= 266 +XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_LOAN= 261 +XT_GE_SH_SUBSCRIPTION_REPAYMENT_ETF_MONETARY_FUND= 270 +XT_GE_SH_SUBSCRIPTION_TECH_BOARD= 278 +XT_GE_SH_TECH_BOARD= 277 +XT_GE_SH_TECH_BOARD_CDR= 288 +XT_GE_SH_TECH_BOARD_CDR_ALLOTMEN= 291 +XT_GE_SH_TECH_BOARD_CDR_DISTRIBUTION= 289 +XT_GE_SH_TECH_BOARD_CDR_SUBSCRIBE= 290 +XT_GE_SH_TECH_BOARD_CONVERTIBLE_BOND= 355 +XT_GE_SH_TECH_BOARD_CONVERTIBLE_BOND_IPO= 356 +XT_GE_SH_TECH_BOARD_CONVERTIBLE_BOND_IPO_DISTRIBUTION= 357 +XT_GE_SH_TECH_BOARD_ETF= 353 +XT_GE_SH_TECH_BOARD_ETF_ETFCODE= 364 +XT_GE_SH_TECH_BOARD_SHARES_CONVERTIBLE_BOND= 358 +XT_GE_SH_TENDER_OFFER= 224 +XT_GE_SH_TMF= 158 +XT_GE_SH_TMFR= 301 +XT_GE_SH_TRANSACTION_ETF= 243 +XT_GE_SH_TRANSACTION_ETF_CROSS_MARKET= 249 +XT_GE_SH_TRANSACTION_ETF_CR_LOAN= 263 +XT_GE_SH_TRANSACTION_ETF_LOAN= 259 +XT_GE_SH_TRANSACTION_ETF_MONETARY_FUND= 268 +XT_GE_SH_WARRANT= 106 +XT_GE_SH_WARRANT_CREATION_CANCEL= 276 +XT_GE_SH_XGED= 171 +XT_GE_SZ_300_ETF= 10071 +XT_GE_SZ_A= 10001 +XT_GE_SZ_ASS= 10027 +XT_GE_SZ_B= 10002 +XT_GE_SZ_CB= 10013 +XT_GE_SZ_CBB= 10019 +XT_GE_SZ_CB_ETF= 10029 +XT_GE_SZ_CB_LOF= 10030 +XT_GE_SZ_CDR_ALLOTMEN= 10056 +XT_GE_SZ_CEF= 10021 +XT_GE_SZ_CYB_CCB= 10033 +XT_GE_SZ_DIRECTIONAL_CONVERTIBALE_BOND= 10077 +XT_GE_SZ_EB= 10014 +XT_GE_SZ_ENTERPROSE_SUPPORT_BOND= 10055 +XT_GE_SZ_ETF= 10008 +XT_GE_SZ_ETF_CROSS_MARKET= 10079 +XT_GE_SZ_EXCHANGEABLE_LOAN= 10078 +XT_GE_SZ_FUND= 10003 +XT_GE_SZ_GEM_BORAD= 10006 +XT_GE_SZ_GEM_BORAD_DR= 10073 +XT_GE_SZ_GF= 10023 +XT_GE_SZ_GLD= 10012 +XT_GE_SZ_GLIB= 10011 +XT_GE_SZ_GLR= 10010 +XT_GE_SZ_GLRA= 10035 +XT_GE_SZ_GOLD= 10036 +XT_GE_SZ_GOV_ALLOW= 10052 +XT_GE_SZ_GSF= 10028 +XT_GE_SZ_ICEF= 10031 +XT_GE_SZ_INDEX= 10007 +XT_GE_SZ_INNOVATE_KZZ= 10053 +XT_GE_SZ_LGL= 10018 +XT_GE_SZ_LOAN_DIRECTIONAL= 10069 +XT_GE_SZ_LOAN_ETF= 10041 +XT_GE_SZ_LOAN_IPO= 10054 +XT_GE_SZ_LOAN_ISSUANCE_DISTRIBUTE_SALE= 10067 +XT_GE_SZ_LOAN_REITS= 10068 +XT_GE_SZ_LOAN_REPURCHASE_DAY_1= 10042 +XT_GE_SZ_LOAN_REPURCHASE_DAY_14= 10047 +XT_GE_SZ_LOAN_REPURCHASE_DAY_2= 10043 +XT_GE_SZ_LOAN_REPURCHASE_DAY_28= 10048 +XT_GE_SZ_LOAN_REPURCHASE_DAY_28_UPPER= 10049 +XT_GE_SZ_LOAN_REPURCHASE_DAY_3= 10044 +XT_GE_SZ_LOAN_REPURCHASE_DAY_4= 10045 +XT_GE_SZ_LOAN_REPURCHASE_DAY_7= 10046 +XT_GE_SZ_LOF= 10022 +XT_GE_SZ_MAIN_BOARD= 10004 +XT_GE_SZ_MAIN_SME_BORAD_DR= 10074 +XT_GE_SZ_MSP_PB= 10016 +XT_GE_SZ_NON_PUBLIC_PREFERED_SHARES_TRANSFER= 10066 +XT_GE_SZ_OLDSHARES_PREFERRED_CONVERTIBLE_BOND= 10072 +XT_GE_SZ_POB= 10050 +XT_GE_SZ_PUBLIC_INFRASTRUCTURE_FUND= 10076 +XT_GE_SZ_RTMF= 10037 +XT_GE_SZ_SA= 10040 +XT_GE_SZ_SB= 10015 +XT_GE_SZ_SCB_PB= 10024 +XT_GE_SZ_SC_SB= 10025 +XT_GE_SZ_SEO= 10039 +XT_GE_SZ_SFMP= 10017 +XT_GE_SZ_SHARES_CONVERTIBLE_BOND= 10075 +XT_GE_SZ_SME_BOARD= 10005 +XT_GE_SZ_SPB= 10026 +XT_GE_SZ_STANDAR_B= 10020 +XT_GE_SZ_WARRANT= 10009 +XT_GE_SZ_XGED= 10038 +XT_GE_SZ_ZB_CCB= 10032 +XT_GE_SZ_ZXB_CCB= 10034 +XT_GE_ZF_ARBITAGE_FTOPTION= 100055 +XT_GE_ZF_FTOPTION= 100051 +XT_PLEDGE_REPURCHASE_SH_DAY_1= 279 +XT_PLEDGE_REPURCHASE_SH_DAY_14= 281 +XT_PLEDGE_REPURCHASE_SH_DAY_180= 285 +XT_PLEDGE_REPURCHASE_SH_DAY_21= 282 +XT_PLEDGE_REPURCHASE_SH_DAY_270= 286 +XT_PLEDGE_REPURCHASE_SH_DAY_30= 283 +XT_PLEDGE_REPURCHASE_SH_DAY_365= 287 +XT_PLEDGE_REPURCHASE_SH_DAY_7= 280 +XT_PLEDGE_REPURCHASE_SH_DAY_90= 284 +XT_PLEDGE_REPURCHASE_SZ_DAY_1= 10057 +XT_PLEDGE_REPURCHASE_SZ_DAY_14= 10059 +XT_PLEDGE_REPURCHASE_SZ_DAY_180= 10063 +XT_PLEDGE_REPURCHASE_SZ_DAY_21= 10060 +XT_PLEDGE_REPURCHASE_SZ_DAY_270= 10064 +XT_PLEDGE_REPURCHASE_SZ_DAY_30= 10061 +XT_PLEDGE_REPURCHASE_SZ_DAY_365= 10065 +XT_PLEDGE_REPURCHASE_SZ_DAY_7= 10058 +XT_PLEDGE_REPURCHASE_SZ_DAY_90= 10062 diff --git a/src/xtquant/xttools.py b/src/xtquant/xttools.py new file mode 100644 index 0000000..6e559a9 --- /dev/null +++ b/src/xtquant/xttools.py @@ -0,0 +1,11 @@ +#coding:utf-8 + +def init_pyside2_path(): + try: + import os, PySide2 + dirname = os.path.dirname(PySide2.__file__) + plugin_path = os.path.join(dirname, 'plugins', 'platforms') + os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path + return True, None + except Exception as e: + return False, e diff --git a/src/xtquant/xttrader.py b/src/xtquant/xttrader.py new file mode 100644 index 0000000..db27699 --- /dev/null +++ b/src/xtquant/xttrader.py @@ -0,0 +1,1476 @@ +#coding=utf-8 + +from . import xtpythonclient as _XTQC_ +from . import xttype as _XTTYPE_ +from . import xtbson as bson +from . import xtconstant as _XTCONST_ + +def title(s = None): + import inspect + if not s: + s = inspect.stack()[1].function + print('-' * 33 + s + '-' * 33) + return + +def cp(s = None): + import inspect + st = inspect.stack() + pos = {'title':st[1].function, 'line':st[1].lineno} + print('-' * 33 + f'{pos}, {s}' + '-' * 33) + return + +# 交易回调类 +class XtQuantTraderCallback(object): + def on_connected(self): + """ + 连接成功推送 + """ + pass + + def on_disconnected(self): + """ + 连接断开推送 + """ + pass + + def on_account_status(self, status): + """ + :param status: XtAccountStatus对象 + :return: + """ + pass + + def on_stock_asset(self, asset): + """ + :param asset: XtAsset对象 + :return: + """ + pass + + def on_stock_order(self, order): + """ + :param order: XtOrder对象 + :return: + """ + pass + + def on_stock_trade(self, trade): + """ + :param trade: XtTrade对象 + :return: + """ + pass + + def on_stock_position(self, position): + """ + :param position: XtPosition对象 + :return: + """ + pass + + def on_order_error(self, order_error): + """ + :param order_error: XtOrderError 对象 + :return: + """ + pass + + def on_cancel_error(self, cancel_error): + """ + :param cancel_error:XtCancelError 对象 + :return: + """ + pass + + def on_order_stock_async_response(self, response): + """ + :param response: XtOrderResponse 对象 + :return: + """ + pass + + def on_cancel_order_stock_async_response(self, response): + """ + :param response: XtCancelOrderResponse 对象 + :return: + """ + pass + + def on_smt_appointment_async_response(self, response): + """ + :param response: XtSmtAppointmentResponse 对象 + :return: + """ + pass + +class XtQuantTrader(object): + def __init__(self, path, session, callback=None): + """ + :param path: mini版迅投极速交易客户端安装路径下,userdata文件夹具体路径 + :param session: 当前任务执行所属的会话id + :param callback: 回调方法 + """ + import asyncio + from threading import current_thread + + self.async_client = _XTQC_.XtQuantAsyncClient(path.encode('gb18030'), 'xtquant', session) + self.callback = callback + + self.connected = False + + self.loop = asyncio.new_event_loop() + if "MainThread" == current_thread().name: + self.oldloop = asyncio.get_event_loop() + asyncio.set_event_loop(self.loop) + self.cbs = {} + + self.executor = None + self.resp_executor = None + + self.relaxed_resp_order_enabled = False + self.relaxed_resp_executor = None + + self.queuing_order_seq = set() # 发起委托的seq,获取resp时移除 + self.handled_async_order_stock_order_id = set() # 已处理了返回的委托order_id + self.queuing_order_errors_byseq = {} # 队列中的委托失败信息,在对应委托尚未返回(检测seq或者order_id)时存入,等待回调error_callback + self.queuing_order_errors_byid = {} + + self.handled_async_cancel_order_stock_order_id = set() + self.handled_async_cancel_order_stock_order_sys_id = set() + self.queuing_cancel_errors_by_order_id = {} + self.queuing_cancel_errors_by_order_sys_id = {} + + + ######################### + #push + def on_common_push_callback_wrapper(argc, callback): + if argc == 0: + def on_push_data(): + self.executor.submit(callback) + return on_push_data + elif argc == 1: + def on_push_data(data): + self.executor.submit(callback, data) + return on_push_data + elif argc == 2: + def on_push_data(data1, data2): + self.executor.submit(callback, data1, data2) + return on_push_data + else: + return None + + #response + def on_common_resp_callback(seq, resp): + callback = self.cbs.pop(seq, None) + if callback: + self.resp_executor.submit(callback, resp) + return + + self.async_client.bindOnSubscribeRespCallback(on_common_resp_callback) + self.async_client.bindOnUnsubscribeRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryStockAssetCallback(on_common_resp_callback) + self.async_client.bindOnQueryStockOrdersCallback(on_common_resp_callback) + self.async_client.bindOnQueryStockTradesCallback(on_common_resp_callback) + self.async_client.bindOnQueryStockPositionsCallback(on_common_resp_callback) + self.async_client.bindOnQueryCreditDetailRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryStkCompactsRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryCreditSubjectsRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryCreditSloCodeRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryCreditAssureRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryNewPurchaseLimitCallback(on_common_resp_callback) + self.async_client.bindOnQueryIPODataCallback(on_common_resp_callback) + self.async_client.bindOnTransferRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryComFundRespCallback(on_common_resp_callback) + self.async_client.bindOnSmtQueryQuoterRespCallback(on_common_resp_callback) + self.async_client.bindOnSmtQueryOrderRespCallback(on_common_resp_callback) + self.async_client.bindOnSmtQueryCompactRespCallback(on_common_resp_callback) + self.async_client.bindOnQueryPositionStatisticsRespCallback(on_common_resp_callback) + self.async_client.bindOnExportDataRespCallback(on_common_resp_callback) + self.async_client.bindOnSyncTransactionFromExternalRespCallback(on_common_resp_callback) + + self.async_client.bindOnQueryAccountInfosCallback(on_common_resp_callback) + self.async_client.bindOnQueryAccountStatusCallback(on_common_resp_callback) + ######################### + + enable_push = 1 + + #order push + + def on_push_OrderStockAsyncResponse(seq, resp): + callback = self.cbs.pop(seq, None) + if callback: + resp = _XTTYPE_.XtOrderResponse(resp.m_strAccountID, resp.m_nOrderID, resp.m_strStrategyName, resp.m_strOrderRemark, resp.m_strErrorMsg, seq) + callback(resp) + self.queuing_order_seq.discard(seq) + e = self.queuing_order_errors_byseq.pop(seq, None) + if not e: + e = self.queuing_order_errors_byid.pop(resp.order_id, None) + if e is not None: + self.callback.on_order_error(e) + else: + self.handled_async_order_stock_order_id.add(resp.order_id) + return + + if enable_push: + self.async_client.bindOnOrderStockRespCallback(on_common_push_callback_wrapper(2, on_push_OrderStockAsyncResponse)) + + def on_push_CancelOrderStockAsyncResponse(seq, resp): + callback = self.cbs.pop(seq, None) + if callback: + resp = _XTTYPE_.XtCancelOrderResponse(resp.m_strAccountID, resp.m_nCancelResult, resp.m_nOrderID, resp.m_strOrderSysID, seq, resp.m_strErrorMsg) + callback(resp) + + if not resp.order_sysid: + e = self.queuing_cancel_errors_by_order_id.pop(resp.order_id, None) + if e is not None: + self.handled_async_cancel_order_stock_order_id.discard(resp.order_id) + self.callback.on_cancel_error(e) + else: + self.handled_async_cancel_order_stock_order_id.add(resp.order_id) + else: + e = self.queuing_cancel_errors_by_order_sys_id.pop(resp.order_sysid, None) + if e is not None: + self.handled_async_cancel_order_stock_order_sys_id.discard(resp.order_sysid) + self.callback.on_cancel_error(e) + else: + self.handled_async_cancel_order_stock_order_sys_id.add(resp.order_sysid) + return + + if enable_push: + self.async_client.bindOnCancelOrderStockRespCallback(on_common_push_callback_wrapper(2, on_push_CancelOrderStockAsyncResponse)) + + def on_push_disconnected(): + if self.callback: + self.callback.on_disconnected() + + if enable_push: + self.async_client.bindOnDisconnectedCallback(on_common_push_callback_wrapper(0, on_push_disconnected)) + + def on_push_AccountStatus(data): + data = _XTTYPE_.XtAccountStatus(data.m_strAccountID, data.m_nAccountType, data.m_nStatus) + self.callback.on_account_status(data) + + if enable_push: + self.async_client.bindOnUpdateAccountStatusCallback(on_common_push_callback_wrapper(1, on_push_AccountStatus)) + + def on_push_StockAsset(data): + self.callback.on_stock_asset(data) + + if enable_push: + self.async_client.bindOnStockAssetCallback(on_common_push_callback_wrapper(1, on_push_StockAsset)) + + def on_push_OrderStock(data): + self.callback.on_stock_order(data) + + if enable_push: + self.async_client.bindOnStockOrderCallback(on_common_push_callback_wrapper(1, on_push_OrderStock)) + + def on_push_StockTrade(data): + self.callback.on_stock_trade(data) + + if enable_push: + self.async_client.bindOnStockTradeCallback(on_common_push_callback_wrapper(1, on_push_StockTrade)) + + def on_push_StockPosition(data): + self.callback.on_stock_position(data) + + if enable_push: + self.async_client.bindOnStockPositionCallback(on_common_push_callback_wrapper(1, on_push_StockPosition)) + + def on_push_OrderError(data): + if data.seq not in self.queuing_order_seq or data.order_id in self.handled_async_order_stock_order_id: + self.handled_async_order_stock_order_id.discard(data.order_id) + self.callback.on_order_error(data) + else: + self.queuing_order_errors_byseq[data.seq] = data + self.queuing_order_errors_byid[data.order_id] = data + + if enable_push: + self.async_client.bindOnOrderErrorCallback(on_common_push_callback_wrapper(1, on_push_OrderError)) + + def on_push_CancelError(data): + if data.order_id in self.handled_async_cancel_order_stock_order_id: + self.handled_async_cancel_order_stock_order_id.discard(data.order_id) + self.callback.on_cancel_error(data) + elif data.order_sysid in self.handled_async_cancel_order_stock_order_sys_id: + self.handled_async_cancel_order_stock_order_sys_id.discard(data.order_sysid) + self.callback.on_cancel_error(data) + else: + self.queuing_cancel_errors_by_order_id[data.order_id] = data + self.queuing_cancel_errors_by_order_sys_id[data.order_sysid] = data + + if enable_push: + self.async_client.bindOnCancelErrorCallback(on_common_push_callback_wrapper(1, on_push_CancelError)) + + def on_push_SmtAppointmentAsyncResponse(seq, resp): + callback = self.cbs.pop(seq, None) + if callback: + resp = _XTTYPE_.XtSmtAppointmentResponse(seq, resp.m_bSuccess, resp.m_strMsg, resp.m_strApplyID) + callback(resp) + return + + if enable_push: + self.async_client.bindOnSmtAppointmentRespCallback(on_common_push_callback_wrapper(2, on_push_SmtAppointmentAsyncResponse)) + + ######################## + + def common_op_async_with_seq(self, seq, callable, callback): + self.cbs[seq] = callback + + def apply(func, *args): + return func(*args) + apply(*callable) + + return seq + + def set_timeout(self, timeout=0): + self.async_client.setTimeout(timeout) + + def common_op_sync_with_seq(self, seq, callable): + from concurrent.futures import Future + future = Future() + self.cbs[seq] = lambda resp:future.set_result(resp) + + def apply(func, *args): + return func(*args) + apply(*callable) + + return future.result() + + ######################### + + + def __del__(self): + import asyncio + from threading import current_thread + if "MainThread" == current_thread().name: + asyncio.set_event_loop(self.oldloop) + + def register_callback(self, callback): + self.callback = callback + + def start(self): + from concurrent.futures import ThreadPoolExecutor + self.async_client.init() + self.async_client.start() + self.executor = ThreadPoolExecutor(max_workers = 1) + self.relaxed_resp_executor = ThreadPoolExecutor(max_workers = 1) + self.resp_executor = self.relaxed_resp_executor if self.relaxed_resp_order_enabled else self.executor + return + + def stop(self): + self.async_client.stop() + self.loop.call_soon_threadsafe(self.loop.stop) + self.executor.shutdown(wait = True) + self.relaxed_resp_executor.shutdown(wait = True) + return + + def connect(self): + result = self.async_client.connect() + self.connected = result == 0 + return result + + def sleep(self, time): + import asyncio + async def sleep_coroutine(time): + await asyncio.sleep(time) + asyncio.run_coroutine_threadsafe(sleep_coroutine(time), self.loop).result() + + def run_forever(self): + import time + while True: + time.sleep(2) + return + + def set_relaxed_response_order_enabled(self, enabled): + self.relaxed_resp_order_enabled = enabled + self.resp_executor = self.relaxed_resp_executor if self.relaxed_resp_order_enabled else self.executor + return + + def subscribe(self, account): + req = _XTQC_.SubscribeReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.subscribeWithSeq, seq, req) + ) + + def unsubscribe(self, account): + req = _XTQC_.UnsubscribeReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.unsubscribeWithSeq, seq, req) + ) + + def order_stock_async(self, account, stock_code, order_type, order_volume, price_type, price, strategy_name='', + order_remark=''): + """ + :param account: 证券账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param order_type: 委托类型, 23:买, 24:卖 + :param order_volume: 委托数量, 股票以'股'为单位, 债券以'张'为单位 + :param price_type: 报价类型, 详见帮助手册 + :param price: 报价价格, 如果price_type为指定价, 那price为指定的价格, 否则填0 + :param strategy_name: 策略名称 + :param order_remark: 委托备注 + :return: 返回下单请求序号, 成功委托后的下单请求序号为大于0的正整数, 如果为-1表示委托失败 + """ + req = _XTQC_.OrderStockReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strStockCode = stock_code + req.m_nOrderType = order_type + req.m_nOrderVolume = int(order_volume) + req.m_nPriceType = price_type + req.m_dPrice = price + req.m_strStrategyName = strategy_name + req.m_strOrderRemark = order_remark + req.m_strOrderRemarkNew = order_remark + req.m_dOrderAmount = order_volume + req.m_strStockCode1 = stock_code + + seq = self.async_client.nextSeq() + self.queuing_order_seq.add(seq) + self.cbs[seq] = self.callback.on_order_stock_async_response + self.async_client.orderStockWithSeq(seq, req) + return seq + + def order_stock(self, account, stock_code, order_type, order_volume, price_type, price, strategy_name='', + order_remark=''): + """ + :param account: 证券账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param order_type: 委托类型, 23:买, 24:卖 + :param order_volume: 委托数量, 股票以'股'为单位, 债券以'张'为单位 + :param price_type: 报价类型, 详见帮助手册 + :param price: 报价价格, 如果price_type为指定价, 那price为指定的价格, 否则填0 + :param strategy_name: 策略名称 + :param order_remark: 委托备注 + :return: 返回下单请求序号, 成功委托后的下单请求序号为大于0的正整数, 如果为-1表示委托失败 + """ + req = _XTQC_.OrderStockReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strStockCode = stock_code + req.m_nOrderType = order_type + req.m_nOrderVolume = int(order_volume) + req.m_nPriceType = price_type + req.m_dPrice = price + req.m_strStrategyName = strategy_name + req.m_strOrderRemark = order_remark + req.m_strOrderRemarkNew = order_remark + req.m_dOrderAmount = order_volume + req.m_strStockCode1 = stock_code + + seq = self.async_client.nextSeq() + self.queuing_order_seq.add(seq) + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.orderStockWithSeq, seq, req) + ) + return resp.order_id + + def cancel_order_stock(self, account, order_id): + """ + :param account: 证券账号 + :param order_id: 委托编号, 报单时返回的编号 + :return: 返回撤单成功或者失败, 0:成功, -1:撤单失败 + """ + req = _XTQC_.CancelOrderStockReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_nOrderID = order_id + + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.cancelOrderStockWithSeq, seq, req) + ) + return resp.cancel_result + + def cancel_order_stock_async(self, account, order_id): + """ + :param account: 证券账号 + :param order_id: 委托编号, 报单时返回的编号 + :return: 返回撤单请求序号, 成功委托后的撤单请求序号为大于0的正整数, 如果为-1表示撤单失败 + """ + req = _XTQC_.CancelOrderStockReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_nOrderID = order_id + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_cancel_order_stock_async_response + self.async_client.cancelOrderStockWithSeq(seq, req) + return seq + + def cancel_order_stock_sysid(self, account, market, sysid): + """ + :param account:证券账号 + :param market: 交易市场 0:上海 1:深圳 + :param sysid: 柜台合同编号 + :return:返回撤单成功或者失败, 0:成功, -1:撤单失败 + """ + req = _XTQC_.CancelOrderStockReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + if isinstance(market, str): + req.m_strMarket = market + req.m_nMarket = _XTCONST_.MARKET_STR_TO_ENUM_MAPPING.get(market, -1) + else: + req.m_nMarket = market + req.m_strOrderSysID = sysid + + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.cancelOrderStockWithSeq, seq, req) + ) + return resp.cancel_result + + def cancel_order_stock_sysid_async(self, account, market, sysid): + """ + :param account:证券账号 + :param market: 交易市场 0:上海 1:深圳 + :param sysid: 柜台编号 + :return:返回撤单请求序号, 成功委托后的撤单请求序号为大于0的正整数, 如果为-1表示撤单失败 + """ + req = _XTQC_.CancelOrderStockReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + if isinstance(market, str): + req.m_strMarket = market + req.m_nMarket = _XTCONST_.MARKET_STR_TO_ENUM_MAPPING.get(market, -1) + else: + req.m_nMarket = market + req.m_strOrderSysID = sysid + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_cancel_order_stock_async_response + self.async_client.cancelOrderStockWithSeq(seq, req) + return seq + + def query_account_infos(self): + """ + :return: 返回账号列表 + """ + req = _XTQC_.QueryAccountInfosReq() + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryAccountInfosWithSeq, seq, req) + ) + + query_account_info = query_account_infos + + def query_account_infos_async(self, callback): + """ + :return: 返回账号列表 + """ + req = _XTQC_.QueryAccountInfosReq() + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryAccountInfosWithSeq, seq, req) + , callback + ) + + def query_account_status(self): + """ + :return: 返回账号状态 + """ + req = _XTQC_.QueryAccountStatusReq() + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryAccountStatusWithSeq, seq, req) + ) + + def query_account_status_async(self, callback): + """ + :return: 返回账号状态 + """ + req = _XTQC_.QueryAccountStatusReq() + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryAccountStatusWithSeq, seq, req) + , callback + ) + + def query_stock_asset(self, account): + """ + :param account: 证券账号 + :return: 返回当前证券账号的资产数据 + """ + req = _XTQC_.QueryStockAssetReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.queryStockAssetWithSeq, seq, req) + ) + + if resp and len(resp): + return resp[0] + return None + + def query_stock_asset_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回当前证券账号的资产数据 + """ + req = _XTQC_.QueryStockAssetReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + def _cb(resp): + callback(resp[0] if resp else None) + resp = self.common_op_async_with_seq( + seq, + (self.async_client.queryStockAssetWithSeq, seq, req) + , _cb + ) + return + + def query_stock_order(self, account, order_id): + """ + :param account: 证券账号 + :param order_id: 订单编号,同步报单接口返回的编号 + :return: 返回订单编号对应的委托对象 + """ + req = _XTQC_.QueryStockOrdersReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_nOrderID = order_id + + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.queryStockOrdersWithSeq, seq, req) + ) + if resp and len(resp): + return resp[0] + return None + + def query_stock_orders(self, account, cancelable_only = False): + """ + :param account: 证券账号 + :param cancelable_only: 仅查询可撤委托 + :return: 返回当日所有委托的委托对象组成的list + """ + req = _XTQC_.QueryStockOrdersReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_bCanCancel = cancelable_only + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryStockOrdersWithSeq, seq, req) + ) + + def query_stock_orders_async(self, account, callback, cancelable_only = False): + """ + :param account: 证券账号 + :param cancelable_only: 仅查询可撤委托 + :return: 返回当日所有委托的委托对象组成的list + """ + req = _XTQC_.QueryStockOrdersReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_bCanCancel = cancelable_only + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryStockOrdersWithSeq, seq, req) + , callback + ) + + def query_stock_trades(self, account): + """ + :param account: 证券账号 + :return: 返回当日所有成交的成交对象组成的list + """ + req = _XTQC_.QueryStockTradesReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryStockTradesWithSeq, seq, req) + ) + + def query_stock_trades_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回当日所有成交的成交对象组成的list + """ + req = _XTQC_.QueryStockTradesReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryStockTradesWithSeq, seq, req) + , callback + ) + + def query_stock_position(self, account, stock_code): + """ + :param account: 证券账号 + :param stock_code: 证券代码, 例如"600000.SH" + :return: 返回证券代码对应的持仓对象 + """ + req = _XTQC_.QueryStockPositionsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strStockCode = stock_code + req.m_strStockCode1 = stock_code + + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.queryStockPositionsWithSeq, seq, req) + ) + if resp and len(resp): + return resp[0] + return None + + def query_stock_positions(self, account): + """ + :param account: 证券账号 + :return: 返回当日所有持仓的持仓对象组成的list + """ + req = _XTQC_.QueryStockPositionsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryStockPositionsWithSeq, seq, req) + ) + + def query_stock_positions_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回当日所有持仓的持仓对象组成的list + """ + req = _XTQC_.QueryStockPositionsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq + , (self.async_client.queryStockPositionsWithSeq, seq, req) + , callback + ) + + def query_credit_detail(self, account): + """ + :param account: 证券账号 + :return: 返回当前证券账号的资产数据 + """ + req = _XTQC_.QueryCreditDetailReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryCreditDetailWithSeq, seq, req) + ) + + def query_credit_detail_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回当前证券账号的资产数据 + """ + req = _XTQC_.QueryCreditDetailReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryCreditDetailWithSeq, seq, req) + , callback + ) + + def query_stk_compacts(self, account): + """ + :param account: 证券账号 + :return: 返回负债合约 + """ + req = _XTQC_.QueryStkCompactsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryStkCompactsWithSeq, seq, req) + ) + + def query_stk_compacts_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回负债合约 + """ + req = _XTQC_.QueryStkCompactsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryStkCompactsWithSeq, seq, req) + , callback + ) + + def query_credit_subjects(self, account): + """ + :param account: 证券账号 + :return: 返回融资融券标的 + """ + req = _XTQC_.QueryCreditSubjectsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryCreditSubjectsWithSeq, seq, req) + ) + + def query_credit_subjects_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回融资融券标的 + """ + req = _XTQC_.QueryCreditSubjectsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryCreditSubjectsWithSeq, seq, req) + , callback + ) + + def query_credit_slo_code(self, account): + """ + :param account: 证券账号 + :return: 返回可融券数据 + """ + req = _XTQC_.QueryCreditSloCodeReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryCreditSloCodeWithSeq, seq, req) + ) + + def query_credit_slo_code_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回可融券数据 + """ + req = _XTQC_.QueryCreditSloCodeReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryCreditSloCodeWithSeq, seq, req) + , callback + ) + + def query_credit_assure(self, account): + """ + :param account: 证券账号 + :return: 返回标的担保品 + """ + req = _XTQC_.QueryCreditAssureReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryCreditAssureWithSeq, seq, req) + ) + + def query_credit_assure_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回标的担保品 + """ + req = _XTQC_.QueryCreditAssureReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryCreditAssureWithSeq, seq, req) + , callback + ) + + def query_new_purchase_limit(self, account): + """ + :param account: 证券账号 + :return: 返回账户新股申购额度数据 + """ + req = _XTQC_.QueryNewPurchaseLimitReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + new_purchase_limit_list = self.common_op_sync_with_seq( + seq, + (self.async_client.queryNewPurchaseLimitWithSeq, seq, req) + ) + new_purchase_limit_result = dict() + for item in new_purchase_limit_list: + new_purchase_limit_result[item.m_strNewPurchaseLimitKey] = item.m_nNewPurchaseLimitValue + return new_purchase_limit_result + + def query_new_purchase_limit_async(self, account, callback): + """ + :param account: 证券账号 + :return: 返回账户新股申购额度数据 + """ + req = _XTQC_.QueryNewPurchaseLimitReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryNewPurchaseLimitWithSeq, seq, req) + , callback + ) + + def query_ipo_data(self): + """ + :return: 返回新股新债信息 + """ + req = _XTQC_.QueryIPODataReq() + req.m_strIPOType = '' + + seq = self.async_client.nextSeq() + ipo_data_list = self.common_op_sync_with_seq( + seq, + (self.async_client.queryIPODataWithSeq, seq, req) + ) + ipo_data_result = dict() + for item in ipo_data_list: + ipo_data_result[item.m_strIPOCode] = { + 'name': item.m_strIPOName, + 'type': item.m_strIPOType, + 'maxPurchaseNum': item.m_nMaxPurchaseNum, + 'minPurchaseNum': item.m_nMinPurchaseNum, + 'purchaseDate': item.m_strPurchaseDate, + 'issuePrice': item.m_dIssuePrice, + } + return ipo_data_result + + def query_ipo_data_async(self, callback): + """ + :return: 返回新股新债信息 + """ + req = _XTQC_.QueryIPODataReq() + req.m_strIPOType = '' + + seq = self.async_client.nextSeq() + return self.common_op_async_with_seq( + seq, + (self.async_client.queryIPODataWithSeq, seq, req) + , callback + ) + + def fund_transfer(self, account, transfer_direction, price): + """ + :param account: 证券账号 + :param transfer_direction: 划拨方向 + :param price: 划拨金额 + :return: 返回划拨操作结果 + """ + req = _XTQC_.TransferParam() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_nOrderType = transfer_direction + req.m_dPrice = price + + seq = self.async_client.nextSeq() + transfer_result = self.common_op_sync_with_seq( + seq, + (self.async_client.transferWithSeq, seq, req) + ) + return transfer_result.m_bSuccess, transfer_result.m_strMsg + + def secu_transfer(self, account, transfer_direction, stock_code, volume, transfer_type): + """ + :param account: 证券账号 + :param transfer_direction: 划拨方向 + :param stock_code: 证券代码, 例如"SH600000" + :param volume: 划拨数量, 股票以'股'为单位, 债券以'张'为单位 + :param transfer_type: 划拨类型 + :return: 返回划拨操作结果 + """ + req = _XTQC_.TransferParam() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_nOrderType = transfer_direction + req.m_strStockCode = stock_code + req.m_nOrderVolume = volume + req.m_nCreditTransferType = transfer_type + req.m_strStockCode1 = stock_code + + seq = self.async_client.nextSeq() + transfer_result = self.common_op_sync_with_seq( + seq, + (self.async_client.transferWithSeq, seq, req) + ) + return transfer_result.m_bSuccess, transfer_result.m_strMsg + + def query_com_fund(self, account): + """ + :param account: 证券账号 + :return: 返回普通柜台资金信息 + """ + req = _XTQC_.QueryComFundReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + fund_list = self.common_op_sync_with_seq( + seq, + (self.async_client.queryComFundWithSeq, seq, req) + ) + result = dict() + if fund_list[0]: + result = { + 'success': fund_list[0].m_bSuccess, + 'error': fund_list[0].m_strMsg, + 'currentBalance': fund_list[0].m_dCurrentBalance, + 'enableBalance': fund_list[0].m_dEnableBalance, + 'fetchBalance': fund_list[0].m_dFetchBalance, + 'interest': fund_list[0].m_dInterest, + 'assetBalance': fund_list[0].m_dAssetBalance, + 'fetchCash': fund_list[0].m_dFetchCash, + 'marketValue': fund_list[0].m_dMarketValue, + 'debt': fund_list[0].m_dDebt, + } + return result + + def query_com_position(self, account): + """ + :param account: 证券账号 + :return: 返回普通柜台持仓信息 + """ + req = _XTQC_.QueryComPositionReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + position_list = self.common_op_sync_with_seq( + seq, + (self.async_client.queryComPositionWithSeq, seq, req) + ) + result = list() + for item in position_list: + result.append( + { + 'success': item.m_bSuccess, + 'error': item.m_strMsg, + 'stockAccount': item.m_strAccountID, + 'exchangeType': item.m_strExchangeType, + 'stockCode': item.m_strStockCode, + 'stockName': item.m_strStockName, + 'totalAmt': item.m_dTotalAmt, + 'enableAmount': item.m_dEnableAmount, + 'lastPrice': item.m_dLastPrice, + 'costPrice': item.m_dCostPrice, + 'income': item.m_dIncome, + 'incomeRate': item.m_dIncomeRate, + 'marketValue': item.m_dMarketValue, + 'costBalance': item.m_dCostBalance, + 'bsOnTheWayVol': item.m_nBsOnTheWayVol, + 'prEnableVol': item.m_nPrEnableVol, + 'stockCode1': item.m_strStockCode1, + }) + return result + + def smt_query_quoter(self, account): + """ + :param account: 证券账号 + :return: 返回券源行情信息 + """ + req = _XTQC_.SmtQueryQuoterReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + quoter_list = self.common_op_sync_with_seq( + seq, + (self.async_client.smtQueryQuoterWithSeq, seq, req) + ) + result = list() + for item in quoter_list: + result.append( + { + 'success': item.m_bSuccess, + 'error': item.m_strMsg, + 'finType': item.m_strFinType, + 'stockType': item.m_strStockType, + 'date': item.m_nDate, + 'code': item.m_strCode, + 'codeName': item.m_strCodeName, + 'exchangeType': item.m_strExchangeType, + 'fsmpOccupedRate': item.m_dFsmpOccupedRate, + 'fineRate': item.m_dFineRate, + 'fsmpreendRate': item.m_dFsmpreendRate, + 'usedRate': item.m_dUsedRate, + 'unUusedRate': item.m_dUnUusedRate, + 'initDate': item.m_nInitDate, + 'endDate': item.m_nEndDate, + 'enableSloAmountT0': item.m_dEnableSloAmountT0, + 'enableSloAmountT3': item.m_dEnableSloAmountT3, + 'srcGroupId': item.m_strSrcGroupID, + 'applyMode': item.m_strApplyMode, + 'lowDate': item.m_nLowDate + }) + return result + + def smt_negotiate_order_async(self, account, src_group_id, order_code, date, amount, apply_rate, dict_param={}): + """ + :param account: 证券账号 + :param src_group_id: 来源组编号 + :param order_code: 证券代码,如'600000.SH' + :param date: 期限天数 + :param amount: 委托数量 + :param apply_rate: 资券申请利率 + :return: 返回约券请求序号, 成功请求后的序号为大于0的正整数, 如果为-1表示请求失败 + 注: + 目前有如下参数通过一个可缺省的字典传递,键名与参数名称相同 + subFareRate: 提前归还利率 + fineRate: 罚息利率 + """ + req = _XTQC_.SmtNegotiateOrderReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strSrcGroupID = src_group_id + req.m_strOrderCode = order_code + req.m_nDate = date + req.m_nAmount = amount + req.m_dApplyRate = apply_rate + + if 'subFareRate' in dict_param: + req.m_dSubFareRate = dict_param['subFareRate'] + if 'fineRate' in dict_param: + req.m_dFineRate = dict_param['fineRate'] + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_smt_appointment_async_response + self.async_client.smtNegotiateOrderWithSeq(seq, req) + return seq + + def smt_appointment_order_async(self, account, order_code, date, amount, apply_rate): + """ + :param account: 证券账号 + :param order_code: 证券代码,如'600000.SH' + :param date: 期限天数 + :param amount: 委托数量 + :param apply_rate: 资券申请利率 + :return: 返回约券请求序号, 成功请求后的序号为大于0的正整数, 如果为-1表示请求失败 + """ + req = _XTQC_.SmtAppointmentOrderReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strOrderCode = order_code + req.m_nDate = date + req.m_nAmount = amount + req.m_dApplyRate = apply_rate + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_smt_appointment_async_response + self.async_client.smtAppointmentOrderWithSeq(seq, req) + return seq + + def smt_appointment_cancel_async(self, account, apply_id): + """ + :param account: 证券账号 + :param apply_id: 资券申请编号 + :return: 返回约券撤单请求序号, 成功请求后的序号为大于0的正整数, 如果为-1表示请求失败 + """ + req = _XTQC_.SmtAppointmentCancelReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strApplyId = applyId + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_smt_appointment_async_response + self.async_client.smtAppointmentCancelWithSeq(seq, req) + return seq + + def smt_query_order(self, account): + """ + :param account: 证券账号 + :return: 返回券源行情信息 + """ + req = _XTQC_.SmtQueryOrderReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + order_list = self.common_op_sync_with_seq( + seq, + (self.async_client.smtQueryOrderWithSeq, seq, req) + ) + result = list() + for item in order_list: + result.append( + { + 'success': item.m_bSuccess, + 'error': item.m_strMsg, + 'initDate': item.m_nInitDate, + 'currDate': item.m_nCurrDate, + 'currTime': item.m_nCurrTime, + 'applyId': item.m_strApplyID, + 'srcGroupId': item.m_strSrcGroupID, + 'cashcompactId': item.m_strCashcompactID, + 'applyMode': item.m_strApplyMode, + 'finType': item.m_strFinType, + 'exchangeType': item.m_strExchangeType, + 'code': item.m_strCode, + 'codeName': item.m_strCodeName, + 'date': item.m_nDate, + 'applyRate': item.m_dApplyRate, + 'entrustBalance': item.m_dEntrustBalance, + 'entrustAmount': item.m_dEntrustAmount, + 'businessBalance': item.m_dBusinessBalance, + 'businessAmount': item.m_dBusinessAmount, + 'validDate': item.m_nValidDate, + 'dateClear': item.m_nDateClear, + 'entrustNo': item.m_strEntrustNo, + 'applyStatus': item.m_strApplyStatus, + 'usedRate': item.m_dUsedRate, + 'unUusedRate': item.m_dUnUusedRate, + 'comGroupId': item.m_strComGroupID + }) + return result + + def smt_query_compact(self, account): + """ + :param account: 证券账号 + :return: 返回券源行情信息 + """ + req = _XTQC_.SmtQueryCompactReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + compact_list = self.common_op_sync_with_seq( + seq, + (self.async_client.smtQueryCompactWithSeq, seq, req) + ) + result = list() + for item in compact_list: + result.append( + { + 'success': item.m_bSuccess, + 'error': item.m_strMsg, + 'createDate': item.m_nCreateDate, + 'cashcompactId': item.m_strCashcompactID, + 'oriCashcompactId': item.m_strOriCashcompactID, + 'applyId': item.m_strApplyID, + 'srcGroupId': item.m_strSrcGroupID, + 'comGroupId': item.m_strComGroupID, + 'finType': item.m_strFinType, + 'exchangeType': item.m_strExchangeType, + 'code': item.m_strCode, + 'codeName': item.m_strCodeName, + 'date': item.m_nDate, + 'beginCompacAmount': item.m_dBeginCompacAmount, + 'beginCompacBalance': item.m_dBeginCompacBalance, + 'compacAmount': item.m_dCompacAmount, + 'compacBalance': item.m_dCompacBalance, + 'returnAmount': item.m_dReturnAmount, + 'returnBalance': item.m_dReturnBalance, + 'realBuyAmount': item.m_dRealBuyAmount, + 'fsmpOccupedRate': item.m_dFsmpOccupedRate, + 'compactInterest': item.m_dCompactInterest, + 'compactFineInterest': item.m_dCompactFineInterest, + 'repaidInterest': item.m_dRepaidInterest, + 'repaidFineInterest': item.m_dRepaidFineInterest, + 'fineRate': item.m_dFineRate, + 'preendRate': item.m_dPreendRate, + 'compactType': item.m_strCompactType, + 'postponeTimes': item.m_nPostponeTimes, + 'compactStatus': item.m_strCompactStatus, + 'lastInterestDate': item.m_nLastInterestDate, + 'interestEndDate': item.m_nInterestEndDate, + 'validDate': item.m_nValidDate, + 'dateClear': item.m_nDateClear, + 'usedAmount': item.m_dUsedAmount, + 'usedBalance': item.m_dUsedBalance, + 'usedRate': item.m_dUsedRate, + 'unUusedRate': item.m_dUnUusedRate, + 'srcGroupName': item.m_strSrcGroupName, + 'repaidDate': item.m_nRepaidDate, + 'preOccupedInterest': item.m_dPreOccupedInterest, + 'compactInterestx': item.m_dCompactInterestx, + 'enPostponeAmount': item.m_dEnPostponeAmount, + 'postponeStatus': item.m_strPostponeStatus, + 'applyMode': item.m_strApplyMode + }) + return result + + def smt_compact_renewal_async(self, account, cash_compact_id, order_code, defer_days, defer_num, apply_rate): + """ + :param account: 证券账号 + :param cash_compact_id: 头寸合约编号 + :param order_code: 证券代码,如'600000.SH' + :param defer_days: 申请展期天数 + :param defer_num: 申请展期数量 + :param apply_rate: 资券申请利率 + :return: 返回约券展期请求序号, 成功请求后的序号为大于0的正整数, 如果为-1表示请求失败 + """ + req = _XTQC_.SmtCompactRenewalReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strCompactId = cash_compact_id + req.m_strOrderCode = order_code + req.m_nDeferDays = defer_days + req.m_nDeferNum = defer_num + req.m_dApplyRate = apply_rate + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_smt_appointment_async_response + self.async_client.smtCompactRenewalWithSeq(seq, req) + return seq + + def smt_compact_return_async(self, account, src_group_id, cash_compact_id, order_code, occur_amount): + """ + :param account: 证券账号 + :param src_group_id: 来源组编号 + :param cash_compact_id: 头寸合约编号 + :param order_code: 证券代码,如'600000.SH' + :param occur_amount: 发生数量 + :return: 返回约券归还请求序号, 成功请求后的序号为大于0的正整数, 如果为-1表示请求失败 + """ + req = _XTQC_.SmtCompactReturnReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + req.m_strSrcGroupId = src_group_id + req.m_strCompactId = cash_compact_id + req.m_strOrderCode = order_code + req.m_nOccurAmount = occur_amount + + seq = self.async_client.nextSeq() + self.cbs[seq] = self.callback.on_smt_appointment_async_response + self.async_client.smtCompactReturnWithSeq(seq, req) + return seq + + def query_position_statistics(self, account): + """ + :param account: 证券账号 + :return: 返回当日所有持仓统计的持仓对象组成的list + """ + req = _XTQC_.QueryPositionStatisticsReq() + req.m_nAccountType = account.account_type + req.m_strAccountID = account.account_id + + seq = self.async_client.nextSeq() + return self.common_op_sync_with_seq( + seq, + (self.async_client.queryPositionStatisticsWithSeq, seq, req) + ) + + def export_data(self, account, result_path, data_type, start_time = None, end_time = None, user_param = {}): + """ + :param account: 证券账号 + :param result_path: 导出路径,包含文件名及.csv后缀,如'C:\\Users\\Desktop\\test\\deal.csv' + :param data_type: 数据类型,如'deal' + :param start_time: 开始时间 + :param end_time: 结束时间 + :param user_param: 用户参数 + :return: 返回dict格式的结果反馈信息 + """ + fix_param = dict() + fix_param['accountID'] = account.account_id + fix_param['accountType'] = account.account_type + fix_param['resultPath'] = result_path + fix_param['dataType'] = data_type + fix_param['startTime'] = start_time + fix_param['endTime'] = end_time + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.exportDataWithSeq, seq, bson.BSON.encode(fix_param), bson.BSON.encode(user_param)) + ) + import json + result = json.loads(resp) + return result + + def query_data(self, account, result_path, data_type, start_time = None, end_time = None, user_param = {}): + """ + 入参同export_data + :return: 返回dict格式的数据信息 + """ + result = self.export_data(account, result_path, data_type, start_time, end_time, user_param) + if 'error' in result.keys(): + return result + else: + import pandas as pd + import os + data = pd.read_csv(result_path) + os.remove(result_path) + return data + + def sync_transaction_from_external(self, operation, data_type, account, deal_list): + """ + :param operation: 操作类型,有"UPDATE","REPLACE","ADD","DELETE" + :param data_type: 数据类型,有"DEAL" + :param account: 证券账号 + :param deal_list: 成交列表,每一项是Deal成交对象的参数字典,键名参考官网数据字典,大小写保持一致 + :return: 返回dict格式的结果反馈信息 + """ + fix_param = dict() + fix_param['operation'] = operation + fix_param['dataType'] = data_type + fix_param['accountID'] = account.account_id + fix_param['accountType'] = account.account_type + bson_list = [bson.BSON.encode(it) for it in deal_list] + seq = self.async_client.nextSeq() + resp = self.common_op_sync_with_seq( + seq, + (self.async_client.syncTransactionFromExternalWithSeq, seq, bson.BSON.encode(fix_param), bson_list) + ) + import json + result = json.loads(resp) + return result + diff --git a/src/xtquant/xttype.py b/src/xtquant/xttype.py new file mode 100644 index 0000000..67a77e1 --- /dev/null +++ b/src/xtquant/xttype.py @@ -0,0 +1,373 @@ +#coding=utf-8 +from . import xtconstant as _XTCONST_ + +""" +定义Python的数据结构,给Python策略使用 +包含股票+信用 +""" + +class StockAccount(object): + """ + 定义证券账号类, 用于证券账号的报撤单等 + """ + def __new__(cls, account_id, account_type = 'STOCK'): + """ + :param account_id: 资金账号 + :return: 若资金账号不为字符串,返回类型错误 + """ + if not isinstance(account_id, str): + return u"资金账号必须为字符串类型" + return super(StockAccount, cls).__new__(cls) + + def __init__(self, account_id, account_type = 'STOCK'): + """ + :param account_id: 资金账号 + """ + account_type = account_type.upper() + for int_type, str_type in _XTCONST_.ACCOUNT_TYPE_DICT.items(): + if account_type == str_type: + self.account_type = int_type + self.account_id = account_id + return + raise Exception("不支持的账号类型:{}!".format(account_type)) + + +class XtAsset(object): + """ + 迅投股票账号资金结构 + """ + def __init__(self, account_id, cash, frozen_cash, market_value, total_asset): + """ + :param account_id: 资金账号 + :param cash: 可用 + :param frozen_cash: 冻结 + :param market_value: 持仓市值 + :param total_asset: 总资产 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.cash = cash + self.frozen_cash = frozen_cash + self.market_value = market_value + self.total_asset = total_asset + + +class XtOrder(object): + """ + 迅投股票委托结构 + """ + def __init__(self, account_id, stock_code, + order_id, order_sysid, order_time, order_type, order_volume, + price_type, price, traded_volume, traded_price, + order_status, status_msg, strategy_name, order_remark, direction, offset_flag, + stock_code1): + """ + :param account_id: 资金账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param order_id: 委托编号 + :param order_sysid: 柜台编号 + :param order_time: 报单时间 + :param order_type: 委托类型, 23:买, 24:卖 + :param order_volume: 委托数量, 股票以'股'为单位, 债券以'张'为单位 + :param price_type: 报价类型, 详见帮助手册 + :param price: 报价价格,如果price_type为指定价, 那price为指定的价格,否则填0 + :param traded_volume: 成交数量, 股票以'股'为单位, 债券以'张'为单位 + :param traded_price: 成交均价 + :param order_status: 委托状态 + :param status_msg: 委托状态描述, 如废单原因 + :param strategy_name: 策略名称 + :param order_remark: 委托备注 + :param direction: 多空, 股票不需要 + :param offset_flag: 交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.stock_code = stock_code + self.order_id = order_id + self.order_sysid = order_sysid + self.order_time = order_time + self.order_type = order_type + self.order_volume = order_volume + self.price_type = price_type + self.price = price + self.traded_volume = traded_volume + self.traded_price = traded_price + self.order_status = order_status + self.status_msg = status_msg + self.strategy_name = strategy_name + self.order_remark = order_remark + self.direction = direction + self.offset_flag = offset_flag + self.stock_code1 = stock_code1 + + +class XtTrade(object): + """ + 迅投股票成交结构 + """ + def __init__(self, account_id, stock_code, + order_type, traded_id, traded_time, traded_price, traded_volume, traded_amount, + order_id, order_sysid, strategy_name, order_remark, direction, offset_flag, + stock_code1, commission): + """ + :param account_id: 资金账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param order_type: 委托类型 + :param traded_id: 成交编号 + :param traded_time: 成交时间 + :param traded_price: 成交均价 + :param traded_volume: 成交数量, 股票以'股'为单位, 债券以'张'为单位 + :param traded_amount: 成交金额 + :param order_id: 委托编号 + :param order_sysid: 柜台编号 + :param strategy_name: 策略名称 + :param order_remark: 委托备注 + :param direction: 多空, 股票不需要 + :param offset_flag: 交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等 + :param commission: 手续费 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.order_type = order_type + self.stock_code = stock_code + self.traded_id = traded_id + self.traded_time = traded_time + self.traded_price = traded_price + self.traded_volume = traded_volume + self.traded_amount = traded_amount + self.order_id = order_id + self.order_sysid = order_sysid + self.strategy_name = strategy_name + self.order_remark = order_remark + self.direction = direction + self.offset_flag = offset_flag + self.stock_code1 = stock_code1 + self.commission = commission + + +class XtPosition(object): + """ + 迅投股票持仓结构 + """ + def __init__(self, account_id, stock_code, + volume, can_use_volume, open_price, market_value, + frozen_volume, on_road_volume, yesterday_volume, avg_price, direction, + stock_code1): + """ + :param account_id: 资金账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param volume: 持仓数量,股票以'股'为单位, 债券以'张'为单位 + :param can_use_volume: 可用数量, 股票以'股'为单位, 债券以'张'为单位 + :param open_price: 开仓价 + :param market_value: 市值 + :param frozen_volume: 冻结数量 + :param on_road_volume: 在途股份 + :param yesterday_volume: 昨夜拥股 + :param avg_price: 成本价 + :param direction: 多空, 股票不需要 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.stock_code = stock_code + self.volume = volume + self.can_use_volume = can_use_volume + self.open_price = open_price + self.market_value = market_value + self.frozen_volume = frozen_volume + self.on_road_volume = on_road_volume + self.yesterday_volume = yesterday_volume + self.avg_price = avg_price + self.direction = direction + self.stock_code1 = stock_code1 + + +class XtOrderError(object): + """ + 迅投股票委托失败结构 + """ + def __init__(self, account_id, order_id, + error_id=None, error_msg=None, + strategy_name=None, order_remark=None): + """ + :param account_id: 资金账号 + :param order_id: 订单编号 + :param error_id: 报单失败错误码 + :param error_msg: 报单失败具体信息 + :param strategy_name: 策略名称 + :param order_remark: 委托备注 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.order_id = order_id + self.error_id = error_id + self.error_msg = error_msg + self.strategy_name = strategy_name + self.order_remark = order_remark + + +class XtCancelError(object): + """ + 迅投股票委托撤单失败结构 + """ + def __init__(self, account_id, order_id, market, order_sysid, + error_id=None, error_msg=None): + """ + :param account_id: 资金账号 + :param order_id: 订单编号 + :param market: 交易市场 0:上海 1:深圳 + :param order_sysid: 柜台委托编号 + :param error_id: 撤单失败错误码 + :param error_msg: 撤单失败具体信息 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.order_id = order_id + self.market = market + self.order_sysid = order_sysid + self.error_id = error_id + self.error_msg = error_msg + + +class XtOrderResponse(object): + """ + 迅投异步下单接口对应的委托反馈 + """ + def __init__(self, account_id, order_id, strategy_name, order_remark, error_msg, seq): + """ + :param account_id: 资金账号 + :param order_id: 订单编号 + :param strategy_name: 策略名称 + :param order_remark: 委托备注 + :param seq: 下单请求序号 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.order_id = order_id + self.strategy_name = strategy_name + self.order_remark = order_remark + self.error_msg = error_msg + self.seq = seq + +class XtCancelOrderResponse(object): + """ + 迅投异步委托撤单请求返回结构 + """ + def __init__(self, account_id, cancel_result, order_id, order_sysid, seq, error_msg): + """ + :param account_id: 资金账号 + :param cancel_result: 撤单结果 + :param order_id: 订单编号 + :param order_sysid: 柜台委托编号 + :param seq: 撤单请求序号 + :param error_msg: 撤单反馈信息 + """ + self.account_type = _XTCONST_.SECURITY_ACCOUNT + self.account_id = account_id + self.cancel_result = cancel_result + self.order_id = order_id + self.order_sysid = order_sysid + self.seq = seq + self.error_msg = error_msg + + +class XtCreditOrder(XtOrder): + """ + 迅投信用委托结构 + """ + def __init__(self, account_id, stock_code, + order_id, order_time, order_type, order_volume, + price_type, price, traded_volume, traded_price, + order_status, status_msg, order_remark, contract_no, + stock_code1): + """ + :param account_id: 资金账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param order_id: 委托编号 + :param order_time: 报单时间 + :param order_type: 委托类型, 23:买, 24:卖 + :param order_volume: 委托数量, 股票以'股'为单位, 债券以'张'为单位 + :param price_type: 报价类型, 详见帮助手册 + :param price: 报价价格,如果price_type为指定价, 那price为指定的价格,否则填0 + :param traded_volume: 成交数量, 股票以'股'为单位, 债券以'张'为单位 + :param traded_price: 成交均价 + :param order_status: 委托状态 + :param status_msg: 委托状态描述, 如废单原因 + :param order_remark: 委托备注 + :param contract_no: 两融合同编号 + """ + self.account_type = _XTCONST_.CREDIT_ACCOUNT + self.account_id = account_id + self.stock_code = stock_code + self.order_id = order_id + self.order_time = order_time + self.order_type = order_type + self.order_volume = order_volume + self.price_type = price_type + self.price = price + self.traded_volume = traded_volume + self.traded_price = traded_price + self.order_status = order_status + self.status_msg = status_msg + self.order_remark = order_remark + self.contract_no = contract_no + self.stock_code1 = stock_code1 + + +class XtCreditDeal(object): + """ + 迅投信用成交结构 + """ + def __init__(self, account_id, stock_code, + traded_id, traded_time, traded_price, + traded_volume, order_id, contract_no, + stock_code1): + """ + :param account_id: 资金账号 + :param stock_code: 证券代码, 例如"600000.SH" + :param traded_id: 成交编号 + :param traded_time: 成交时间 + :param traded_price: 成交均价 + :param traded_volume: 成交数量, 股票以'股'为单位, 债券以'张'为单位 + :param order_id: 委托编号 + :param contract_no: 两融合同编号 + """ + self.account_type = _XTCONST_.CREDIT_ACCOUNT + self.account_id = account_id + self.stock_code = stock_code + self.traded_id = traded_id + self.traded_time = traded_time + self.traded_price = traded_price + self.traded_volume = traded_volume + self.order_id = order_id + self.contract_no = contract_no + self.stock_code1 = stock_code1 + +class XtAccountStatus(object): + """ + 迅投账号状态结构 + """ + def __init__(self, account_id, account_type, status): + """ + :param account_id: 资金账号 + :param account_type: 账号状态 + :param status: 账号状态,详细见账号状态定义 + """ + self.account_type = account_type + self.account_id = account_id + self.status = status + +class XtSmtAppointmentResponse(object): + """ + 迅投约券相关异步接口的反馈 + """ + def __init__(self, seq, success, msg, apply_id): + """ + :param seq: 异步请求序号 + :param success: 申请是否成功 + :param msg: 反馈信息 + :param apply_id: 若申请成功返回资券申请编号 + """ + self.seq = seq + self.success = success + self.msg = msg + self.apply_id = apply_id diff --git a/src/xtquant/xtutil.py b/src/xtquant/xtutil.py new file mode 100644 index 0000000..5501c8c --- /dev/null +++ b/src/xtquant/xtutil.py @@ -0,0 +1,52 @@ +#coding:utf-8 + +from . import xtbson as _BSON_ + + +def read_from_bson_buffer(buffer): + import ctypes as ct + result = [] + + pos = 0 + while 1: + if pos + 4 < len(buffer): + dlen_buf = buffer[pos : pos + 4] + else: + break + + dlen = ct.cast(dlen_buf, ct.POINTER(ct.c_int32))[0] + if dlen >= 5: + try: + data_buf = buffer[pos : pos + dlen] + pos += dlen + + result.append(_BSON_.decode(data_buf)) + except Exception as e: + pass + else: + break + + return result + + +def write_to_bson_buffer(data_list): + buffer = b'' + + for data in data_list: + buffer += _BSON_.encode(data) + + return buffer + + +def read_from_feather_file(file): + import feather as fe + meta = {} + return meta, fe.read_dataframe(file) + + +def write_to_feather_file(data, file, meta = None): + import feather as fe + if not meta: + meta = {} + return + diff --git a/src/xtquant/xtview.py b/src/xtquant/xtview.py new file mode 100644 index 0000000..b9f8408 --- /dev/null +++ b/src/xtquant/xtview.py @@ -0,0 +1,326 @@ +#coding:utf-8 + +from . import xtbson as _BSON_ + +### connection + +__client = None +__client_last_spec = ('', None) + + +def connect(ip = '', port = None, remember_if_success = True): + global __client + + if __client: + if __client.is_connected(): + return __client + + __client.shutdown() + __client = None + + from . import xtconn + + if not ip: + ip = 'localhost' + + if port: + server_list = [f'{ip}:{port}'] + __client = xtconn.connect_any(server_list) + else: + server_list = xtconn.scan_available_server_addr() + + default_addr = 'localhost:58610' + if not default_addr in server_list: + server_list.append(default_addr) + + __client = xtconn.connect_any(server_list) + + if not __client or not __client.is_connected(): + raise Exception("无法连接xtquant服务,请检查QMT-投研版或QMT-极简版是否开启") + + if remember_if_success: + global __client_last_spec + __client_last_spec = (ip, port) + + return __client + + +def reconnect(ip = '', port = None, remember_if_success = True): + global __client + + if __client: + __client.shutdown() + __client = None + + return connect(ip, port, remember_if_success) + + +def get_client(): + global __client + + if not __client or not __client.is_connected(): + global __client_last_spec + + ip, port = __client_last_spec + __client = connect(ip, port, False) + + return __client + + +### utils +def try_except(func): + import sys + import traceback + + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception: + exc_type, exc_instance, exc_traceback = sys.exc_info() + formatted_traceback = ''.join(traceback.format_tb(exc_traceback)) + message = '\n{0} raise {1}:{2}'.format( + formatted_traceback, + exc_type.__name__, + exc_instance + ) + # raise exc_type(message) + print(message) + return None + + return wrapper + +def _BSON_call_common(interface, func, param): + return _BSON_.BSON.decode(interface(func, _BSON_.BSON.encode(param))) + +def create_view(viewID, view_type, title, group_id): + client = get_client() + return client.createView(viewID, view_type, title, group_id) + +#def reset_view(viewID): +# return + +def close_view(viewID): + client = get_client() + return client.closeView(viewID) + +#def set_view_index(viewID, datas): +# ''' +# 设置模型指标属性 +# index: { "output1": { "datatype": se::OutputDataType } } +# ''' +# client = get_client() +# return client.setViewIndex(viewID, datas) + +def push_view_data(viewID, datas): + ''' + 推送模型结果数据 + datas: { "timetags: [t1, t2, ...], "outputs": { "output1": [value1, value2, ...], ... }, "overwrite": "full/increase" } + ''' + client = get_client() + bresult = client.pushViewData(viewID, 'index', _BSON_.BSON.encode(datas)) + return _BSON_.BSON.decode(bresult) + +def switch_graph_view(stock_code = None, period = None, dividendtype = None, graphtype = None): + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'switchgraphview' + , { + "stockcode": stock_code + , "period": period + , "dividendtype": dividendtype + , "graphtype": graphtype + } + ) + +def add_schedule(schedule_name, begin_time = '', finish_time = '', interval = 60, run = False, only_work_date = False, always_run = False): + """ + ToDo: 向客户端添加调度任务 + Args: + schedule_name(str): 调度任务的方案名 + + begin_time(str) : 定时下载开始的时间 格式为'%H%M%S' + + interval(int) : 下载任务执行间隔,单位为秒, 例如要每24小时执行一次则填写 60*60*24 + + run(bool) : 是否自动运行, 默认为False + + only_work_date(bool) : 是否仅工作日运行, 默认为False + + always_run(bool) : 当前时间超过设定时间的情况下是否运行, 默认为False + + Return: + None + Example:: + + # 向客户端添加一个每日下载沪深A股市场的日K任务 + from xtquant import xtview, xtdata + stock_list = xtdata.get_stock_list_in_sector("沪深A股") + xtview.add_schedule( + schedule_name = "test计划", + begin_time ="150500", + interval = 60*60*24, + run = True, + only_work_date = True, + always_run = False) + + """ + + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'addschedule' + , { + 'name': schedule_name + , 'starttime': -1 if begin_time == '' else int(begin_time) + , 'endtime': -1 + , 'interval': interval * 1000 + , 'run': run + , 'onlyworkdate': only_work_date + , 'alwaysrun': always_run + } + ) + +def add_schedule_download_task(schedule_name, stock_code = [], period = '', recentday = 0, start_time = '', end_time = '', incrementally = False): + ''' + Args: + stock_code(list) : 下载标的的code组成的list + + period(str) : 下载数据的周期, 参考gmd + + recentday(int) : *仅在非增量的情况下生效* + 下载当日往前 N 个周期的数据, 当此参数不为0时,start_time不生效, 否则下载全部数据 + + start_time(str) : 下载数据的起始时间 格式为 '%Y%m%d' 或者 '%Y%m%d%H%M%S' + + end_time(str) : 下载数据的结束时间 格式为 '%Y%m%d' 或者 '%Y%m%d%H%M%S' + + incrementally(bool) : 是否增量下载, 默认为False + + Return: + None + Example:: + # 向客户端现存的调度方案中添加一个下载任务 + xtview.add_schedule_download_task( + schedule_name = "test计划", + stock_code = stock_list + period = "1d" ) + """ + ''' + + d_stockcode = {} + for stock in stock_code: + sp_stock = stock.split('.') + if len(sp_stock) == 2: + if sp_stock[1] not in d_stockcode: + d_stockcode[sp_stock[1]] = [] + + d_stockcode[sp_stock[1]].append(sp_stock[0]) + else: + d_stockcode[stock] = [] + + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'addscheduledownloadtask' + , { + 'name': schedule_name + , 'market': list(d_stockcode.keys()) + , 'stockcode': list(d_stockcode.values()) + , 'period': period + , 'recentday': recentday + , 'starttime': start_time + , 'endtime': end_time + , 'incrementally': incrementally + } + ) + return + +def modify_schedule_task(schedule_name, begin_time = '', finish_time = '', interval = 60, run = False, only_work_date = False, always_run = False): + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'modifyschedule' + , { + 'name': schedule_name + , 'starttime': -1 if begin_time == '' else int(begin_time) + , 'endtime': -1 + , 'interval': interval * 1000 + , 'run': run + , 'onlyworkdate': only_work_date + , 'alwaysrun': always_run + } + ) + +def remove_schedule(schedule_name): + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'removeschedule' + , { + 'name': schedule_name + } + ) + return + +def remove_schedule_download_task(schedule_name, task_id): + cl = get_client() + + result = _BSON_call_common( + cl.commonControl, 'removescheduledownloadtask' + , { + 'name': schedule_name + , 'taskids': task_id + } + ) + return + +def query_schedule_task(): + cl = get_client() + + inst = _BSON_call_common( + cl.commonControl, 'queryschedule', {} + ) + + return inst.get('result', []) + + +def push_xtview_data(data_type, time, datas): + cl = get_client() + timeData = 0 + types = [] + numericDatas = [] + stringDatas = [] + if type(time) == int: + name_list = list(datas.keys()) + value_list = [] + for name in name_list: + value_list.append([datas[name]]) + timeData = [time] + if type(time) == list: + time_list = time + name_list = list(datas.keys()) + value_list = list(datas.values()) + timeData = time_list + + for value in value_list: + if isinstance(value[0], str): + stringDatas.append(value) + types.append(3) + else: + numericDatas.append(value) + types.append(0) + + result = _BSON_call_common( + cl.custom_data_control, 'pushxtviewdata' + , { + 'dataType': data_type + ,'timetags': timeData + , 'names' : name_list + , 'types' : types + , 'numericDatas' : numericDatas + , 'stringDatas' : stringDatas + } + ) + return + diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/test_real_trader.py b/tests/test_real_trader.py deleted file mode 100644 index 0b76ddb..0000000 --- a/tests/test_real_trader.py +++ /dev/null @@ -1,59 +0,0 @@ -import unittest -from unittest.mock import patch, MagicMock -import os -import sys -sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from src.real_trader import RealTrader - -class TestRealTrader(unittest.TestCase): - def setUp(self): - self.trader = RealTrader() - - def test_init(self): - """测试初始化""" - self.assertEqual(self.trader._exe_path, r"C:\\ths\\xiadan.exe") - - @patch('easytrader.use') - def test_login(self, mock_use): - """测试登录功能""" - mock_trader = MagicMock() - mock_use.return_value = mock_trader - - self.trader.login() - - mock_use.assert_called_once_with("ths5.19") - mock_trader.enable_type_keys_for_editor.assert_called_once() - mock_trader.prepare.assert_called_once_with( - user=self.trader._ACCOUNT, - password=self.trader._PASSWORD, - exe_path=self.trader._exe_path - ) - - @patch('easytrader.use') - def test_get_balance(self, mock_use): - """测试获取余额""" - mock_trader = MagicMock() - mock_use.return_value = mock_trader - expected_balance = {'资金余额': 1000} - mock_trader.balance = expected_balance - - self.trader.login() - balance = self.trader.get_balance() - - self.assertEqual(balance, expected_balance) - - @patch('easytrader.use') - def test_get_positions(self, mock_use): - """测试获取持仓""" - mock_trader = MagicMock() - mock_use.return_value = mock_trader - expected_positions = [{'证券代码': '000001', '证券名称': '平安银行'}] - mock_trader.position = expected_positions - - self.trader.login() - positions = self.trader.get_positions() - - self.assertEqual(positions, expected_positions) - -if __name__ == '__main__': - unittest.main() diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..7c107bb --- /dev/null +++ b/uv.lock @@ -0,0 +1,447 @@ +version = 1 +revision = 1 +requires-python = ">=3.10.11" + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458 }, +] + +[[package]] +name = "certifi" +version = "2025.4.26" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/9e/c05b3920a3b7d20d3d3310465f50348e5b3694f4f88c6daf736eef3024c4/certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", size = 160705 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013 }, + { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285 }, + { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449 }, + { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892 }, + { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123 }, + { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943 }, + { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063 }, + { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578 }, + { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629 }, + { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778 }, + { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453 }, + { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479 }, + { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790 }, + { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 }, + { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 }, + { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 }, + { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 }, + { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 }, + { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 }, + { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 }, + { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 }, + { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 }, + { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 }, + { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 }, + { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 }, + { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 }, + { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, + { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, + { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, + { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, + { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, + { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, + { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, + { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, + { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, + { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, + { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, + { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, + { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "deprecated" +version = "1.2.18" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998 }, +] + +[[package]] +name = "flask" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/50/dff6380f1c7f84135484e176e0cac8690af72fa90e932ad2a0a60e28c69b/flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac", size = 680824 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/47/93213ee66ef8fae3b93b3e29206f6b251e65c97bd91d8e1c5596ef15af0a/flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136", size = 102979 }, +] + +[[package]] +name = "flask-limiter" +version = "3.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "limits" }, + { name = "ordered-set" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/75/92b237dd4f6e19196bc73007fff288ab1d4c64242603f3c401ff8fc58a42/flask_limiter-3.12.tar.gz", hash = "sha256:f9e3e3d0c4acd0d1ffbfa729e17198dd1042f4d23c130ae160044fc930e21300", size = 303162 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/ba/40dafa278ee6a4300179d2bf59a1aa415165c26f74cfa17462132996186b/flask_limiter-3.12-py3-none-any.whl", hash = "sha256:b94c9e9584df98209542686947cf647f1ede35ed7e4ab564934a2bb9ed46b143", size = 28490 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "limits" +version = "5.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecated" }, + { name = "packaging" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/94/a04e64f487a56f97aff67c53df609cc19d5c3f3e7e5697ec8a1ff8413829/limits-5.1.0.tar.gz", hash = "sha256:b298e4af0b47997da03cbeee9df027ddc2328f8630546125e81083bb56311827", size = 94655 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/00/876a5ec60addda62ee13ac4b588a5afc0d1a86a431645a91711ceae834cf/limits-5.1.0-py3-none-any.whl", hash = "sha256:f368d4572ac3ef8190cb8b9911ed481175a0b4189894a63cac95cae39ebeb147", size = 60472 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "ordered-set" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/ca/bfac8bc689799bcca4157e0e0ced07e70ce125193fc2e166d2e685b7e2fe/ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8", size = 12826 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/55/af02708f230eb77084a299d7b08175cff006dea4f2721074b92cdb0296c0/ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", size = 7634 }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "real-trader" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "flask" }, + { name = "flask-limiter" }, + { name = "requests" }, + { name = "schedule" }, +] + +[package.metadata] +requires-dist = [ + { name = "flask", specifier = ">=3.1.0" }, + { name = "flask-limiter", specifier = ">=3.12" }, + { name = "requests", specifier = ">=2.32.3" }, + { name = "schedule", specifier = ">=1.2.2" }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "rich" +version = "13.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 }, +] + +[[package]] +name = "schedule" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/91/b525790063015759f34447d4cf9d2ccb52cdee0f1dd6ff8764e863bcb74c/schedule-1.2.2.tar.gz", hash = "sha256:15fe9c75fe5fd9b9627f3f19cc0ef1420508f9f9a46f45cd0769ef75ede5f0b7", size = 26452 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/a7/84c96b61fd13205f2cafbe263cdb2745965974bdf3e0078f121dfeca5f02/schedule-1.2.2-py3-none-any.whl", hash = "sha256:5bef4a2a0183abf44046ae0d164cadcac21b1db011bdd8102e4a0c1e91e06a7d", size = 12220 }, +] + +[[package]] +name = "typing-extensions" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/37/23083fcd6e35492953e8d2aaaa68b860eb422b34627b13f2ce3eb6106061/typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef", size = 106967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 }, +] + +[[package]] +name = "urllib3" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, +] + +[[package]] +name = "wrapt" +version = "1.17.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/d1/1daec934997e8b160040c78d7b31789f19b122110a75eca3d4e8da0049e1/wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984", size = 53307 }, + { url = "https://files.pythonhosted.org/packages/1b/7b/13369d42651b809389c1a7153baa01d9700430576c81a2f5c5e460df0ed9/wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22", size = 38486 }, + { url = "https://files.pythonhosted.org/packages/62/bf/e0105016f907c30b4bd9e377867c48c34dc9c6c0c104556c9c9126bd89ed/wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7", size = 38777 }, + { url = "https://files.pythonhosted.org/packages/27/70/0f6e0679845cbf8b165e027d43402a55494779295c4b08414097b258ac87/wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c", size = 83314 }, + { url = "https://files.pythonhosted.org/packages/0f/77/0576d841bf84af8579124a93d216f55d6f74374e4445264cb378a6ed33eb/wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72", size = 74947 }, + { url = "https://files.pythonhosted.org/packages/90/ec/00759565518f268ed707dcc40f7eeec38637d46b098a1f5143bff488fe97/wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061", size = 82778 }, + { url = "https://files.pythonhosted.org/packages/f8/5a/7cffd26b1c607b0b0c8a9ca9d75757ad7620c9c0a9b4a25d3f8a1480fafc/wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2", size = 81716 }, + { url = "https://files.pythonhosted.org/packages/7e/09/dccf68fa98e862df7e6a60a61d43d644b7d095a5fc36dbb591bbd4a1c7b2/wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c", size = 74548 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/067021fa3c8814952c5e228d916963c1115b983e21393289de15128e867e/wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62", size = 81334 }, + { url = "https://files.pythonhosted.org/packages/4b/0d/9d4b5219ae4393f718699ca1c05f5ebc0c40d076f7e65fd48f5f693294fb/wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563", size = 36427 }, + { url = "https://files.pythonhosted.org/packages/72/6a/c5a83e8f61aec1e1aeef939807602fb880e5872371e95df2137142f5c58e/wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f", size = 38774 }, + { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308 }, + { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488 }, + { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776 }, + { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776 }, + { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420 }, + { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199 }, + { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307 }, + { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025 }, + { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879 }, + { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419 }, + { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773 }, + { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799 }, + { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821 }, + { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919 }, + { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721 }, + { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899 }, + { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222 }, + { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707 }, + { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685 }, + { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567 }, + { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672 }, + { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865 }, + { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800 }, + { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824 }, + { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920 }, + { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690 }, + { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861 }, + { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174 }, + { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721 }, + { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763 }, + { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585 }, + { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676 }, + { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871 }, + { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312 }, + { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062 }, + { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155 }, + { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471 }, + { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208 }, + { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339 }, + { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232 }, + { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476 }, + { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377 }, + { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986 }, + { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750 }, + { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594 }, +]

    @Nsfi+Zca{eq`4W>SI9Ob2KalJL+9@* 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 literal 0 HcmV?d00001 diff --git a/src/xtquant/log4cxx.dll b/src/xtquant/log4cxx.dll new file mode 100644 index 0000000000000000000000000000000000000000..ee8e8801e593996e735543ac87b394b203d5eb87 GIT binary patch literal 2136576 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­)Raqac(+>cVEJjZCm(*cnvH4vf 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%0Aei_N_6&P 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 z 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ⅆ+13gUK>5MT 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

&;{bEt4#B^o zN@<%HI#e(vdM}r;#7J$oc**3#)?4i7VUXE zHXoVp{-Cd$#FiRg#>REE3F5*w`2N_#=G$va%FQ-7&{80;4E5S}0k zs~Q@)`lmR85$YfE#4IRu@4RKBwuSy7!X!-+`RDxSMgiR$TBWt|*KFcHR;RTxDcLh{;341?yB~fK z6U6HN#&-#zE#MRbr#K7eYAdI`Zzj=YAyPmZ?EYquk{6P8u`Iu~H_5qhS&}AkJ3D(< zQ8G1=EQkl6cWmTPx`uL@)8D2gUQ*)sXmGGK_<9@0s`@fG^9ohQMcnll)ns)E_P|V!FkNS;UC8^IK55$c0FT#Of5fr2~e$_#(v=VgBb7 zN&Z%e!(9m5F0Xr5n$C1_EA+L3{Ri4HM1AuT)XH*H4G(8Rj;d81;bmKyLgT;9r} zN2==Gf8t-F=m3 zI$!JH97K^xnaC(V-rQ&96HwFu&28`T@)J-wI|ljzMscw}B=;n_#kn_+rqnV~KzR-K zQ8CW8ctv{X`R+>JY-&*re1&ayI{x?27Q`l;M^V{?y<9&CsdNBl6Z#}?Rph9cqXO#m zla@lmO{EyW-QoYRzfx-hqDSY7{iD>{V7H@w@Kh$%zIR7uc07CrgP^N2nymI1i~a%j zE||=UP^#tw-t;05HKMx|X?v zRv7!n>Jviju7pDJR)Go^oQ=GG8hcw$%&OY^q-5^0nG_sKV@za9HLheeGN9AEKKU@w|}` zQ7~$(3q{P%Zfz%?LHD^ST?eM`1p4KAJZlq^AZ>)3?5xpD0E^oFqM9upbjLM)8#Sz{ zMH9T_Jmd7%TPgWTVfkt0j@PmXj@?cLB~n+ryzr4~1KpQ0 zhk36l;?_q$>iWtmcB`_#=j->Y(QnPHXZ3?>32S#x+N~%#r$#xmh?^#yw$R0wur_ka$bJ$8|{{SL^b* z8og<+ZC6i~!;gOm>y}Yh(`2){m-D&2#2IfL*-x2SiQqO&zQ`3;8C%F1UVK3bd;GchVh~0*W5Al%EcWH@ z15THaJgSvkD-hw>!R+>~#b&IiKextfz1BkwppDQ7q=&~(r}X#r5qWiNIM@&}48DM{ zQ-Q8wfq%oqN~YTZvbUSs$_y z<2$(8#e=ariC4>{A@B^T222IiQplR^8lVnixsv`Cy5q^;uNKzY01jb{n=8{N6}sUe zseF8-2kFTvzlhr{tR`iz*h*06JsIOWOcq(4CZHK!ld^m@W#@aYAV;P>UsQ-mv0NWB zNGC_AK@+i%quJg6g-}hxN8<{ol9r(W?@n?@v=&HPfuXlpfuGT_VqUpzI%^GOdlKcb ziuW@H=Sy!gz_g6eij+T_7jho-W6fZO6ar8V54kfk0yWowvila5Q;C##^T*Oncm5Nh z1^Ny-YPeTVauX@NiL6;VkyZLHle&0WhKr@Ux6n|!BEP);0xjjoBD9q!4;mtUAM#4S z{?C2q0XaeXc^lt(UiLEmqya(!e2G>$xdQkFlM0+xf3mLz$GxEfOth=5(7j#RgAn{{l&(&n%PlW*p{d^q zFJ_uuNeJ*his+lo^|O@phoVc}Wg!F45d@_g^Rv#gAHsgH(7eEq8G?l%$BsMk6OZEw zR)iI5V-9Gj@x99R-t1%20`Z834++z{;alMT$-URRl4d#YX zwneYg*BYUOeCB(E{3BM62;)`iyKvYiZ0Sa8>D*!)IC3svtTnsaUS)J~DI%(na~>i- z1xcC+qS7(wGE%h}&MOH;_v?_RRTsrqV&CToSh=?8cvJ|AwSV=LV&))oOi-T=@jVr4hG0}Nd9s7S?H>siVr_mM*P zR6|Xs7BE;Mt^3-TB9cI@nukZr{FU&LajzN5n0VoHKVK|mO*sFF)t;yCIpV=Dj`-Ks zZ=qjw!y}R8(R%0&a#LXH?OAe6e@=Yhd#U0kP;>1n*a&aUnAVqW41GA}7O{7^vQ3Q) zYAiXrj0CsQdoS;NPLJ^*%D4FQwJCMz4 zUXd+L$$@@7{s7&V`!zHqf5SYAM4=goxN2P&xsf2^3y4p>M1uV-dUWo-@R5TACi-sC z?~FYA+?cn{4-<7$jfgXDj52X1We$VdsexB>3Z|yiuwqiqfU0zvH^I!o8y3CYir#3= z!C~gP&%l|gTBuy%Vv1R(1Vf`R)XJw)B=uYq1@e-|N^@ITTt-?(HL=|wxp8(8;i&cW)D zO)>;%s*#>#heFwVD7(xpY{FI?L@%^~Ay#=qHZ)Bu z%3g{%!?G+0H}eNhpsuTXFkFaf527OY$ook+cEv@??j-W_cqc7WdPkSwr^kZ^T91RD z-C_1B>BGZXkK$Fi)+~pYmz=9r0ftvXUc&8P&^Xj$Ws(S5?!F(N*9(q#*b-6T3aHEC zUfzj$M(xcPXk%@*vChSwY+3nO>LYdHY17QxdN&(iN=bB%EgtQNro`bPSEjq3{ozrWm zBEVR7Q)_CE35BoLX3KIQYR63wS(wQX;mU!{Aiiz|u)5khSEYYP5jc#cziWKXh_|in z@wV#xnBiS!#wQDQ3av2Ad}Fo>oE0_(j}L*-a?q!PS~#4`RiFBlLHkH=fNN<8x77eM zLQf`qlIiGCH)t8u?c1(~FdssMV}@`%SR1_@enSQ-0aH_exmGOQd`3no9ED!9D8rFj;~7hxcj@FL?`@}=!Ey&J)h*0&cSv; zG}}L9`rAb~W}aj=LaLW&@1w1Y_y5~YFB4vyWE@ZwwRFn8kH1qFz&*6hWSwAVMPD`)`|i=DD-)Rr;rOR%)OD z|4}}|UFW*sr61cX>pTBopDa&u`{K&d_KEA|*O><(l2Da!U-}M}LHE9RqX)Z7kuj8R zJJ4MHS=WAL(5tWM0rbY}ZQHB7UF_o$FMDnAjL@#E)%0{z-`jQIme; zH{*v6TQekfUvADp>8)^sXR@7~Vgo1prQP;~H1Ma$f0~}m)*b;MbQI?D^OP*g9bdG7uP_equmSs){>c;A}0VIO~8kEsE=zyXIfb!88#OmHR zhh@wIppZMQ!GVP)#G{MtIDkeCN@iJ(wJygT-3-7)2XcouVoY8 z-$&8am$r-zZ&an@<4xx(pud0XYbuuckMymZev@;*c(gye=ug%j+n26{+;qf;)dwp? z^7_CQUaSx72$;p+ghEjpF-jydm~t-V0Vwn3rbJM$x>do)L7O((EF|lY5f+kVK!fWH zsJ%b`SvaWvZoP=MHDGJb6FE5_JGv}|g-se&2G(4_#dr7)b) zw8BYC`t9e=@ zWCRjNa`ePc5u@Jm9Z@2F32VZytD}p3GQTs_%+B}nyL0Aym7hOMdqSu!q;u52JrCz2 zJkmAC6VIuWRqn-q=7*6|r;^sPgLEi3PS@u|=O6EipjRPEJamE9^w=Q;-Q7S}r4y@x z{!2G50zDYl3G?6tiOXj9&`2o5OpNSEKl!in@GFA_TwEN&rzJJ9Z^Km(RYsa$kM?Nz zqGuRtd$s%NgAo703#-%qx;R=PyMD7fX0wJun)&v2irQ~l3{ zp6_&zvwdS9r-udZ`fOtv@i@3OU?%2_hll_4o#E_3gjN zduM^YUhXcH=#$=3dJcDcEd!2$j^3V*q=v|>Z@Rq2+qQ}B+U&=1*^lF=@Ntxzk^ML% z`*FJ~_&C@lvmf`%e!O-XA9r=)-$g`j;Hc;e2_bRZ9a?1w#Lj1*^K|ZRvBg?2WkOG2hB@U%^l{FyST%1J9x_$9o%1|cpd8iMqDdV z^`P1J;Pp>)NBs8pG~z7&JrSU^Ts~Ug$p=ZwtuB?P<;=&;`se3YxGtV|oAoer>XqSj zpN#Vw{OBuhzW_y=(tI2g;WWHB27B;)9pH)`4HtcZL@EyZl7^^5ZPDJqk zhELH}@VVoA;nCzeXYk>!0?}m)oL*jNI9=!-c!x1=n(;oR+AV`yQSI=4?c|&|Kmj3S zL7aSqyJ@+o$oHM+)@PevW?yRkQs|?7{Iw6pWxL&K zV}NK&jQhAeJ@$3)Xf7|gxUe=JpT7`{Sp#>41#~&k8MkN|Z1&^M;*eKFiFA+lPkM4N zg_T|FEM(uSysO{0^(G!kJC@qmH8%TXp2>0&4}J)it^BCGl^o8 z7_@x5rgXv7D@zw&dFlQ6$=U&{lilK_Ye~tow)Ujhi%s#^i;H59F3=iz!qIa&AD(D` zHQnn#*YL=X?XgD}zy5u}YD!N#R!Fo>uVl|LQMzH0-LcpY^dQr%pxcJPsOvi&{1f#9 z+b&jTl)r?p!}RrNz0e|z7eCjFgY{xh|DsGUiuK}M-~VUYcoEZ!7XRW}Uc~2@^P@o_ zwCQ0pTpQeogUlUs!}s`Wzp2y;`ZS{2!x^i*bqdqU%nwP|8>kybs{L@2@dt|#HFGx~ z$e{*ufB)D>|5fU>b~k0FQld>Gag|NKF~xER4bs9-vsbfcA9%N+P?Z_wZk=>knWO5d zg@u$L-4U0ax_f?4)}_H#q{Xez_sN^C<)xq0plgw9*vrPZXGM6e5neid|1dJ!}=z#g@@rfl z0fg}*4?oa#$5t^f%=frI51O8JXfc%(3A`a$dlaO9*!jVpPBH6-AMA@=FFKJ3zD)$5 zw{lmiF@&;pQ{^{QY3+s|gxmTwdcXL=Mz26llXUOr`Q<)(Oui}a&6HV3rn(|O>#KsY zV(q;uP7p^K`72*Ct#(-@LW32%#ng>;T_424i#=V{w+{z!ZuL&#Z@;X>4OWy$k4Nx* zoQMtmc>03&#LD%F*rRN0J!!*NSwb{xvebHF^2DRO_M@zYQSVAtWx6&VR@Ej7*6ByV zk8%x5diLiHU0Fb_M8PZZ`48(i-rUjY-K3E6kTFlq#aTFC8~6Ia!J*y{QkoBU@F7jg zMBYw`&wtcIx{q&erd4@7tim2q@B6Ka_CC+yo2n23_f3*LR=YzI`w|1RPdC~?B}_59 zbX)zB6EWW&81aqFI`M~)t_;3qo4bGm9DeIx13njoV|7E-ES}B5_Lq44a@M*7)+SI= z2-O-Dyq|)$m&$Xao>>Ozv-g8#@1I=on0fucQ6egJ;FHF4yMZSwLaZZjVa zk8k=y~OpD<5e+rEh-#fbcrY-sC~NNpU#4@%^PZ{=*0uW1B{oGaWW!Aa z9iJ%K4lddbH7gasrr~0SP45A3RGS%t%dzpwBKpdW%BbMdKNQpnDXkrtYUg0uKKv59 z!C0ChdFwZm3H9z3vKF-}T1}Fq21m5%ZH#r5cmG1oF0Z5ygzl;%^_|~=ut{!^$``WP->fHg&dDOL6RzefY_(T^imt879*i-EVc^%}aZovpEz zu}58^^v6pM=2pCPS$m>japkugDoe}z7EQ8SzPqbny2k||)p|GtfS;^|Hb$I=s@Z5Q zt_(iq^1DRo>R4(ogDd__*FbEAY*H*yIbccUfCY*A8~e_)5%v64ncj`0Tvc?j^xv2C ztg0`lEZrEJc?Tsb2W-T|t}g}so!L9>y&KI3+r{Va19&$yEmfy#^__RNLA+X&!vN5N zio4R}UdSC%4P$l55q*=;CFJaO66dM+1+J=|b+~K;K0QX$)#<*A5~WkWbeGodS2xT|Du0c^CA7(Q7$ zVYz$IUV4on7v%sF{X(pNs8(oSIOzr%Oxb$N+$C1;LW!i%uX!eKbi5 z6Jzo}v&6W{t}ziYer^!OwBk(7saw_abnht?=VmDCrn~^$26cV53_JA`~{3wc}kGmgXTkjBs!jPo&olA~p!^+BE(|0<6 zir)&-nW7jE>ch+s3V^+P<)I<+{q!)e~P7Cs^I6n|^<=vh?fN%mZjx zdP@cl%@`5QkrHYHGKc@6(YJ96mWSracrzCUyoyvTi_MX~)qddU#5gvsbqI&nbjASB z8Vi5+wprC%+}|M~X^sb136rtFDub15EOs|AXCYz-oE0*#pbkuoTTwOObBVb*^ggy{ z-mrA%gNBv#Dvn+Cvd9tS#a`^5uQksT{0tTZYrcJ#OW&Yr`5F|HOwG~-$zOrYzA^?g z-MrCobR!yk-|+OchsBwJfV;5~22kz9IPmv9O1!=ip|G1SC6a~J>t)ySw68v$>YTD} z`vn_@*5PZs#mFc^l41y39duvd#y;hXkCZ7Fa*R>JcpmLo3LRrJcV3KMFdzT<_OGEp@=4~WSAzOfmhHUql?@k<24DA`y> z-tgG^EPX<#KCch_P2R7+@@K{BxKI_IXJ2@Q5ZvWaPr&_oTXK0JK6kYvNxGfNrF+Z( zhe&lj?RHhec?P}NO}!haC1{yBN(EP)^<77Z5o# zkGta6=z1qcLaW>EtI3I0LLkp1JPga-p{66*G3?9&8X7AU6d9H%rM-!G7&s43iO5zP z1rWXa37O*kS%m)c&W=VjxnDlvhva4f!S)R#^d3`;5)8PSf{ z)qTg(ShlLL$mg|*389SO2(g?adHn>Qa0nmXkKP(#Nz{ zm2SLbgh_lIgBITVgw5(Q&F5$%dw-=B3*(zzJE#ba%Oc3%7m5~u<+91D((hw44+`b? zJYY~&5j}(h;5~j@&8%%;Mh*HV3!o_y*vsq-!u@rSs%v7{+4l9;neR*wO( zGUIQcjyLah@nn}fIYh{nOU2AkO_$=T`pf&fIe!wG$;0Ep-^P=Hs<2sS zFKgU7T3Icw$8;{5Qv))P=20RO)OZ6wbb_IyC=up|dCY$S=B@D@`nC?`hxf1CJJW<( z(BrqvZ8skl0gc*XCdp~M7_`Lodzn}1-rIkvU$oJ`bw|D7A#!Ae5)=QCiOCZ@#6gY0 z8r09VI)zC65p}xa1pf))-_VFYCJzs4cm$~G;RW4oY*rLxPn@oFGYRLFfo>GR892WfW{Dh?CGMTF_iKKyiRt*_C{PkpR$+IyAn?h zO;)Bh#U>JytvOP-u)1K$(Ls4LtfXHaVFh{P8sc#A8_A>M&yIv5m8Gv&#g2YW9wXA= z^#1qEZE+Yy>+xWiOQer0j@K7fr^}cl!`4;SCy2{x&9D7%zG`>uj{JesdF$$?8;3-J z*|=HQp5$aal21EZL92A&_(6Eb*n=AMuHq_2a~{T)uS{79EQ}t_JbB~>N)(srMv-{} ze&3%oFU*av9qXc>LM2C%&xS`SK)O(FXOFu_7a?%_N|FZ^g?0}KA#;gw2?9yEo?zUR z!bHIr^*$co3ykI03h+9ZnE)n<#B}#xQ;)QwPx3{w-eiG3>p)w&^HG92u8GQK-38Yce`tj{-%9}rt}r}i=CuLlUQU$I*;Plv`w z_MT&hsfB3QdSZ1$0Lb zv>QO%9&kHkzwV^3yZNsL`Wl30Q?t7UvEj8)?S3ZGRCI5Of(%3PX*=RhL*ND(V(qPe zq3v|%X}NS7pB9xhCu4Po>2voNs9_hyj9cPKSwRtRkEoE$JAy(j_{KIr(Jjp`|4E76 z+5TCh34*XTW2W-$80x7^|_ZL8^|FfiV1h3S? z>j%8HM>0J+#J^n&gZl>3@h{z)1w^ur%#_*BmkBzQd5SVox7+$<%69c-Kl(8jUcHt5 zUTAH94{mWHwwS8fDELr&{02cNQ+#Yjg%sbVab)7^@G}}_se9xGQ8VOYmXhPe=cdYT zv@e<)(VLligC65^i>tNINCpK_0;I0>dhIgX4VKZ~>~?30aG zF1*5IkCH#(iTt7*ujS{+yV}FtMTYT)a1uy%T-e1QAFlvfgNBJr0OjeSad$~0<0v-} zbTO&q9;dR1bl#m=_C3-HpeUBRiMJbf2q6ph&%HX6rJGZfR}CDRIP`)1G>r$X3AK#$N^<<13U+bEH`KN6f7XxrckImec}ZD|5P zhlf8ehfP3Hsh{VBD4yRD#mn5!1g{JKsAD#|VIGCx@a?6>5bV|vih(I%IibFDdGJ!IahuyxA8b?b@`8;8iE$3h zbz7Nb@|iyd{M6|hwBje|XH2NwFO{>*#P@G({loqkftvJxxMFE`(~9yu1}R();45i% z^^=tPwk@6reyYMmMgJAsa9Wa{hlm8BQM``d)Y?pV?q1bycE|f#+v#~I&t`)N7kZD^ zu|v>84hg(Hfi~s7*MZ>gzMtY1F{@3n8L!Z4wkTKb4);8f7qq{Fw;9R=n223%R>~O- zq9jg$;>+DVq1&RE?z?@i)>KeY@#Sf#W~%}o+4;CdJj}%&6OH%;^5cjQVy6sRcE!0) z7r3DiC8YBC@%clAGKDn^)txMb_RW(;5J_z|xdaF8P|nUUg9UzeWT3!cv{0nBo9kL@ zL(r!>SQM;u?kZtVw9IPvX;OgbgTRZuJaf^t+?bfn=o`u#%er7RzGbrKFD#Y*oB`M85@tVo9%MTW$-j5{~ zxXxIYoeSr5(w}Z~bZp_}PKi`oel2RN<<(Ak?zu}uF}5^1QcTm40Gch&lcc+JOXbGX zun)W0?@EmPj1|cmYt3fAOJ;Ta{_JMIZ@a4F_nl|w{)Tde(fP;Pa4Kx#YVLpD(}m$^ za@*a~DeuTz5Jk0>iS+F05VWLE^4A&rmnC?*tTXp_)qb7&zB3ogJZOeiCUi6PeJ5W2 zwc|@anZjVt9Oen<2iqsiPqB2L=!nfIkD3o9@@b=NKThFcZg7a|*qb9%Pf9%}O!JZ> zQqRdm%u80Jo||J2M+B*Bcz{6;Nj)d)BCmEoiPVC4eOEd43xkvj>Ia%ONU3`LHs&@Z zC(iCexR%WgzH$ip4O(zZf*W>D6vO6Tw1iSh-i=k_5QP3cLI$dj~@25ZeCqrP38zs zoFm9Zcg0T8tk?Os9-~5d%Icg0Z<^Ch*T6d+c#^gi0JILPBUz}BqevcjXxYV$ya7$Y zopI^j`-Zh*R%>fwIj8?osAx!pcPAPV;+6zCq}6`hS=c4D#6Af}6AIu3XyI~FJ|^o6ok*r;f1*^%3ZqsN8i@+PiwW29pc z*n8Mu3ho-<`jy2>ne+nP_E!XU+e7xOBCq+TQ+!Vkn~vG^gnQ;`S-&*rsTVeAG*Dld zf143u)x{Af4EmI%`fMbW%5dOwHQBA)7=sG_)gvoT!ZJndP-fO62rTZ6}cNkz8N5M zeE`zmtmZv66i2yV^vw)~Y|jfq)VcxGqZTHg{u2;e<;=?v9$(YwM9KJ~WWR)NVPt@} zbwA9N`C%Kri6Zynjuhw0UH_)!g2LL}GFU4N$75YYldZ=BImlysE37PdvAR9=mXlhQ zg;l{ZecVOU(7arUEjn5t+};2I>Gj`R#8N@4-;>g9AL8&w?-Vk_3*AnC7OQg?7cOV2 zW|253gTzWew7$krL@!U|%bb`iH6=^K23(((CcQM^^N8ZC&MrAck2 z*8N1}d_DKV!vMvuI}%vyv{{tObiF*&Y8p6gC#i2z`l2GW`unP1m|L)R=S;O>nQ9lQ zT5)Q4ai_L}gw?(tt8c#(R#!$%c~1EF32{QRdt(pv?H`^g=o;aHz2BP-XYBl@WJPF) zZ8pj9$3zLz5`cA|USy1JOCv?!w3f|zvhQ@hlm~=Me`I4e5~emOkkCWPuh^cmhsz3C zuJaTnIrf5Bz$*4U?3ZL`mz(G>HjO_*+GH%4n;#2#0t1 z3R7P!gtW`cic2{C@k$7DYi2JengVNm=~F39)LcR92>lKNY;fIjUs;Gu`~|+492(em zR(w7O6NN)5_2Q5?bzyYE)6c9n5B5+GHr}di8WuIa-1PwwdK@93dT9m*h zR(L82)^Q2v{LJWM&CmD={*+101vWYDhHalXR7Xi;b>~JC@(ew2Sr7APyt?1TJ-m(P z{s?+f}S?$Hbbwj3*A%# z%4FG(_d5fF{b6NIbPHA-IHO&YH8$%`>bQ|9O>~!Gdt+SU^#I;_H=~6_6dM)G-6mH- zv)l9cHhcHUO!4D^=BIdfY8fi-JEGoNzvcsi0=|BbZL~!F5PFCdUd?Opmz)&-C-XB0 z{~qo|)wQj&bdP^eMmE0C6xPm}o)>r^uK}d>Tb_m4zpj_2X|CVKHGj$O^9Bf&#WG1D zkL4rO@mQXqmXrpE;hw)()Ez1mZ3A##h~A~Dmo6)eP;`5$lCGMb@sm~zwG$F)vLLAa zSH2QuVs+c{(cRx!vu3Ex8WSk9cuTj(3gZf%nRnD`a_xOJKVq{MFdTdz9kyFf5!&sM zY4<)N3|r-uo$-^FFR@wwqa~-E+Edqwm5p4x_iu6d*2e3x*bz z*H7rIzg*xJr78`hfyQAf$hkNHR+P(Npz$S>C}hgbmns9k$?h`Ga8EsihpEv$!j<6> z8h49hwBZP)&H#<<+~#VhlU+(RuC-|zwqSFV`RT7Pc;Z}dA~F}oVkFuW3^s|uiTU|J z+ZbhOy*?T0F?gOb@Ycnx^TKkcUZ*`)wso+3%9SGrtI2kGTgn6H zu7r6))tJTZ*i4I8sl`))6rZoOC#bV)coV1jC(o9f!Gwz$ipTrrXZhyitv^@uP_{q) zr-fyxA@i*Hrd=1>74fo-DnF?2=E-VwJ=GGa%lqWj?&CIcnMDVyR4D}+twhw=lPVkx z?^A(L=iJ-<-Aygo)EwiB9wwMN9%I5zz7p5zS|fDU{5v~?!Jd?EJC_kDmbO^3m*&bb z#lqLZHqZAkd#cpoS%4$25kRH?IUWVL++FYM^;f-LiODAVdS8&sz$-rEGUGS*=Le+t zJ|uP|-FrMURI`8G5|$M2+T;q8?}>>m0!%s}qs~@eE@qa;G1{tr`b_UOL#3hHGRlkx zTVI7s%jsu@t17(kT36P_VeiW&9`@l1rjWf)htMa5*%#7upy3Xv7%d+^yFa^pv_)gk ziO#~u!w|MhlH0h4i6m*;CABeM*Sh+bvWu@u(nvnt(?E0!B->jcT_5);&ph-Cnh;R@ z=YC-GqpioFH^Q0JLjglt@Q8N+v4hvi4O!DTN9g!4GYsi3oPmazm@cf)jekqqcOZ6*HaLePQduGA3U>EpKZ_9 zbpj>$K?r;yN9$sBzvV||i7JodDcAu{a-UwD(b+bwmUx!g<6F(@V+vZw7_=cp#&wB8 zzjSlYP%E6pR%^Mhm1nguS@*MASRp|-H-P;w^QXmT5#kTdLs+mWV3$MRdo zptrsM?JGP?h1P2X@d7U3i3d9c8%tMA-E~&uR0XfO6R(ihJ61Q162aT8vJW+ZzVnsm z7*h2@>R1XK>2>C-{H_e9(iBO-RoW*_?J-eJ{hV@YWoTjPirBR?C>k8gRp?VM3$`h3 znwq3th8um$Oj5hss9nQkY53-A*fBT>UD)iN4PSj=uOMo(yEl9#H(rsCly8vvX0qYP2k5bv?+6pgyf-O|UV6WE z48H|JvFG9Y`20%*qJlTJXp7DIlIj}aM3B&g^mIAI*JuDzYd4#rMI^dA%RmW2N6HGhZU^lx{F8z_EsXH>uJ4gH4f3#j1?`Si=0~OwSRde2!WLXt3 zf_h#B+$`LtSOY_fs%SWQF=w7?yiL94GzqsMMUo@d#EI0ShedGr?qm377hN|=L>P~r zlk$P-bJQZ+?Y<2ogR;|kq^-ysa_9Y>nR5mG;NbXCbY#j!dcpE9J6&FeAL z1RFX(%3!p(-SP270SRZ@yAgd7_%o1av8Q)PeejbTjzr_C?LM})YsqY;RF5O^Nm-$* zy2AFCvP8HjLxeBBf(Ttb&|_Q=)KpXT9We zY?h;NW|eSF2IZ##*LEW7Y1a!}Ly`2N*mSnX^~w;}w*B>TihnscgG8GxLdW{oYY0yA zEbaBAEo!d#lU6`2?yD=wQ9n*Vj_{>-wbJK;SKE<#UFlyRntg3?0gGTNrpr^L0`Mmr zpZ71W;l&n>#b}HW7*s1kYv^7n*$J6IuQQX9g{X~;+CA3Zpg}TA*duvk3Ous~{~T6= z_6oJyJZ;QEzq0)1G_Q*wy?lhTL0WxyfIg&a&haT8%H8xonzmJLf&dm}j{_DTD(9UW z#iE!6$B1_X+{Cj{@^MduV}S>UOm4eO?hfeJ1ehvstBfRfISqX$3HoMa>6oQS=?FfL} z5(4?8BalnoP5?o?{Lbn%yOZcmN9!Wp`}pu%Dc{WQurb~I`h)2Hzpy8auiVpP!c%wB zmJKh0JcF|xqwMawJ2S!>3Jpx_$2i@y6jGp7k@6K2!aRSVsM&CeQHcZA!J6`5eR;qQ zKsY5j)29Tdthu5@arq0 ziA=N05(x^}4#3Wql{D784(_x|%#jzLpQOCssfTcrsKthT)wm6D4BvDd;RdN5yB~Sq98;WMdqg5Q359^4>|Iv+(ULUlVwgj9&;H+YFv+lXU)%|V zS`UGUWv)qz&Dx!xnksp2;Y3^7N^#Wo6$Qnua{_fS7Bo?hnZo7>DEvd!EWHdC%<7J?WG zq&oOkja3Dt7t^9MY)k`M>@J`&;cP3Nd#tS<=K`edclZHVVTr)rAvm;83Wp$M@8iyy zU<6lC$?=p`SN}@YoYC#!UcLiMzFa=Z@u0uxJWa_Kw{%efJzqzId#l!CzQKI};)TBW z1H!vH)$ZzDtP-eGGD7#Y6X33N?@K~}4?Zu&W9BOGD+<_T(#`Ey13G3(5uuka3vV%M6~C~ZW~_){Z{Mi`-1GN87Cm7}crbnk6x z2LcW_Q5KI*E!Fm=kKM!8x2I5pRC=^jJI2~?JNpG#4FYXf9t`Q52u=ip5m^k1-Gyo# zSce*QG$g%&Jl2{7zij7*9gkzXeh@(n-SCDNB=SpT>(U!Z#e}x` zYNR(ePm~dgG+U2~v{5`v+bE-K<+u%r;5(CK^FY{dY{u$t)N|@`SvIo&c`VAS-Pb1W z?=ej}__9Cqqdt>S*Zgb455%2%oFNK%UY!F*o@<(DHdt2K{hOM;%coPh4dD<&SH_<1 zi9uI?eBVU=Fa1iBZiT@(g5`XB-*NPd(`*3t94ybgd*wEnEv!zZMl!X+^>}e8$v2$f zB{^p+wH+U;8*H)=J)j>0><74ORk;U0++%287RyqH2avi!I1FNR8y=@czu|eltD<4; z04Q_@=GJ{VTtDZ!U=Bu`K#kP#LV#m=ZulIjbhr*3d|L_($;nIic@$77`4_6hw(HOCo$ zYF-kpCV~zFw((it>`bt zl0<4Mj>GNUvDgokW$+u5J5ZLT*@!;wJ(KZB4VJcv3_HEVn}OT zd_3*g@;O%bPg;@5Hrjok@twu$0&9B=c)eTO!}YZCFmI!7YCV?qI(qFb_u6C|=im7F zJl+V)n{JUrNmiF!QkeWC5ln_xz9H?m81_4xqZ*X?qH7Y$=QpZT=Pk$6}d#B-&?7WwT$PTXgN z4NKJwoD6y>VZ)d>niu~g|NWS4XrL`QX~HCj~c&V zb$Zyp++$Xp)1nz>Wjd76tsIUG?TJkMP&Nqk_thazn+Pu^12j1Oj24JzP1k%8f3_PM zHJw=FhKG$zuyX|?zzr*TmFop!;mZ1FI)E(sZ+9h*-~{5^u3rw`Yal045`s6Z)qQ`I z`e-r1w%TSaS{}M>ZEv+CQ=7mPE8d5bp z%|DTuciQ!t7382Li}N5J+>i6mr|RkBv-J$*^jv>^T3pr_qlGD)Nf4PUPsVyIh>bnR zj+xn1=!4Dq(GrLedf`o+tYU-fe-bBA{vQw7*0`*R3F!uf{>r4(zx7v$iY!t5dA3!< zjUHk7WH&1~QZi-p6Kmo5H($PfBqpwzPhpi8nY$gUbnBq)GW#RNP{oanT3ur*&jae> z>Ms^6w78!9)yA5_uOvsYn8MtVoAYBhD~dLQ7s zp(A;E@@2x$_8;A{OG6wHCR>H6{SccYlDqCA50U+lYMUdrFNB`Q62kF$CgSv3O-EUv z+Vi$;j4Skp=`g`Pc41b)9;dfRJJ}CY+&6gZB6D+(%$L)YScyaQ?%T7sOFEsI&%uHeNYDSeX#RKdIhqi*aKmSZMa4wKx%!c8Fu zgDGryeyusJC6xFum^Gb$J*KI~qk^;+6}Qy~`jh&A-wN3%c)6bY!6=+o&_;cre}lC8 zvtVP_`almsTHUS>^lxeE&-^=$+^%+~dE55EiU`qGGa2B+z-U8@_~nk$37W2@spq3w zLNlyo7(d}_)po`bJwGunn8$aPVWolExpJ>Wx|ib4m{ZmsXHE;-7gW`kciQMnT(O=y z^C?gosEH001iwQCmAGQP=L1$R=<|*g&0$fEpZCAyoEKVL5itw5Xlf8E1IOO1o5p-J zs$UI@ktdNW*tBX&-!R=U7(U+Jx%*G;=|p>K!H?gPnzg+>d1S*vzKQ9>oQLDyLwnmH zv!ff`_5f1K8}LJKXO5p_ly_CyvmZua$n4kHRdvbNwnqE^IAXs%%kWO#7}7l?I;VX- z(R0olZ$|$svh)veQGi9rgn5QbtnOEIbZhwhM_#yZTu4XFv5whevH);=Yk7yDRZ0mP6hx8{xIt58`evJ?2X?Y_yW5qVUTCu?R=e+@eee7Ghrw=d9y&;FKS`tdhjy%AA>yn4 z5&mJY3FX!U`IR%ddGz%ECT^`SKDq`9AuERIYQ@J9xKWFlv;^7l2%Qqo`Krb`42GE` zGXbLG@>h}x-N?&5@`diqlfVfUs$uU+zyD}<7qf-zpcUb_L+x9!o5eRb_Y92%a+SLw z`i2E|v;u?OSrm9qimZN&k=J$y&EF|efq)pZu;Cs)OR~s~1}l`jlU4ci+!Gj35-FRV zf!Jbx3YkWr#)cLH)7N+&BZ@Gu;ZKy0oPWpC20mwz!!4BhQfIg- ze)4g)THVJA3&STohQ|UZayZO$J*{@zP%+o8{z~W;x7&%HhzCIj%$(Cr;=XI&i?t5@ zVU+(K)Awd~B;U<{<$Y6Sq3n8jCO6=9|`wf_=6DN zmHv@n0oN2gZg4N?5r{Qn%&GCzw3WD=G|%r>?AFZOepDo>R#k%G%H$8$#QO7c5@!LMiLWF#oo8tSt}_ zoabSqMRyuj1tCGA$g-t;lsE|qnnPsalfV*J<{F`*@wxUQ!{#s6nC}*gWrrw{ZS=5F znyYQhekbdmJMeq|g<*x(q?90)jSTIb!uKcJ`vMLosI?jkCiER|pQ|JUf_j)QgR|An zFW~#ixp$@yA5oNM+{rE0;-34?H~A9^Dyq=p{t~`*ycL0KLQk_sA$ZH}<9jfxm^R}j zLs=KebDapljO_2xWi>1cXgb2{PHO=2DD|l;4;z@xTk35c+w(i%)HAHYl_s0@;oD8V z55LkE%dVq{`S-)OeSH(QPVzbUEtn(csvWe7ulJ_vJrLIW1U+cvR}^q zIQbWt(A;7X%17HTDh37joG)re#udlt{$N6&c8KoHB;^)3HWU*q!>b60PyPG*Azw7KI=ej}|mA`oJAJL&_r@dS8S z2Y#lj`A4lxi#yje8<{bjJIx;DxgmubWw0qUa*B(dA`v6oYW}yLeRO7oJ7rn3+xZ`6 zxstWD``mU2l}TjzXIewfW>;r*lH>kc`5`oB;?`Fg>8s#TYY`y7hW2-LCU>=*RR;MN zzF4Qbh<^6rtFa60&DJSJq!ofnyhnT_Cs(KWV(o1rk{6xs_u|AhB+$i{GW zCB|V&SiY$|;9qAW_P(xv9DRXUoE833I=zFd4rzsh+hQHfj_cce zmaMu?-Ic{yj?-jj_QzmXoBdJd#`DAHfJvSsImsnnrX}!HLJ!8)eKX$VazY9M8B4;k zOv(sJfVcf;F3cgdkKCI>hFMp33`O``?l4{i??E1KU1vrovP1iwoRcWxR(|*!4w2aZ z#|?)XFN-fJW?qFR-s)fau|o4>?&`39@OjB)+;6y4Bl*|!)R)*S1p&!%-^=wkVqh=_Amj zZ@QhT#dnRUYA*HEj$)Va1&6^#41N)Y$m8V(GqYk9pD7+;wAdImA7;|%JX#P!t9>#* zf>*YFtKpcAcR+^nFY<5Oa1xYIOpETZ!#$l?MPV<&O@5#5jpTmWd{GIm8kJ7%rJQx` zb5~Q3e)P9gc55fTA4)otgPD~QOrmY>;`kXHlWKcENBU*+%OC37&bj~W{}K1*@l{pV z-+w{^gvlF}AWkJHYBXZ0IDm1;g#=C@(Kw*g5k(Pa)Lg}Z$pj_6UPY_cTD3U!tF`^s zYO5i&N6whQjhT7I}cvRYB&2*n(ES~Uq6ccL$Wuw2e-4qO9DL?R_P zSE3Xdyl$13!FOcrQ?<3JU>;_(_1Is{{5JdfSrpQ}@TQ;Wyk^|{XCBNWbinq$9++xx zVQUvT@5cLxF|~EXQ2xW<`IMHalue003|`0!f}2QrihJf{u7^a5t3xhVBEiJZmxvzj zbN!(Ulz0M%!^A>Ulj#{@(yCK43gTra^_~GOuX4>NKzt`mEgR3f6zbpm_juXKmSMH~ zb(C=8U`u(?-AIbA?xT2Ub#S+T<<}6oZ-q{VE8XYE`o!HyG~vicHqDw7i;V`e2+u zVlRDOJ!fg%CVmrLI|wkdg|FJXl`VVjR*Hu93`zzH!S7{q#-){SS@xHTK^;O)`qLKmp<3QYMA0FCjZj2sx($2JOzY>Q`gn+SYuzy z_!l2C4NQ7qQGA&ABAB6mn=%zI7TCpDVxW%|uGt`~8z+ZRb~p{%JN<%jSo<#Ge>VQ^ zOIRYTWv`{9YZ)rM%r$yLNYvAdZZDoRoAfPQ;UP_tavN-uu9S;wnn4_d`za7cmC`)& z4QCSCb^-)gOSu2@Gvg;VzkB{Zdwyru7n|SSkrD=44jArIUrfr+eBN~(*SognU@%5X z_>4FmEHBHTewNqhQ1#pNK$t=*d8@8xRsDClu^a12nYUw{SNwz=Jq)x z+WR>YH003Dr9WZX3evpebgW@-OIxF?2ipo1YY=}?LlX(~SzwzQ|FA7&|BAvt?|k3rqV!@t2^dteD&E&7q~)c*|)+r>&Wp)m_v#g4$J;Xq2g}dMMC-jb}2qY z4TI;CM7-nbWbXkGeYIk-Bd|yXU9iO#%k!Dk@w$QeBkrUoZclMczp4m}%gy?KMFYO1Z5`iu~1<;T@0lfmZ zO3l(JWUq-++z;~`ohy|L)+-bQs+!%eDhoo|}!6Ly34TxbKb=r{FvtO$mdD?2qyoQNVjZkHDd6@jwMRG=8f{ zGnMg$=vGVX4|*`7UFPc7|B138K;JZYmc41RZj;S_kOB(xv2PI%*5)x2_-v(n)^kg{ zP3c-|9azz=RAa=;aodpw3>PEP6R>!&B8cjCF~$exSGv(wk?rzvQPUSfz*olz0k|oI zJ_}Q%qiLhd-{+=lgoN<#;aj?w;rfXoA+Cv=#TGwDZjb;!7LM=oxOKHGN0GJX1;Yp3 zrWLmzQh3`@_Yz-Hh|4ZLK05J zh;s`PKh-rFno8JZcL~(mO~wIu?a6CARWVpMXqRhC(%+vgh8V_mtQc`#0nwYn8r&Ok z%9~=O$(CJ;PTC^3+U?z@Hu$`8?QRR}*Ll4;svGv~M<`mWu0tJq(&%TEyU=g}F*`Rg zdfep3>k+OsPa~^IG&Uorw7M~4yi9S3ms3Kb5Hpi8OO)Y<0ku1lWc+L~Ggs#vUodMF zDs-;Vkd4>`=c|8>Pc}m+99d1gc`B-2cYH*XT6wtHIr);!Sz5|KkqX=JY}w3MUw`D= zxZJk^XZ@izv>F>B%03p&^#T%wmSJJdvw)s&Vx@P7H4pIRB5l!-(;4~=6r$Cz+}UBd zb)@=UXDnl#QKl0RmIIjm5P7tlVJTxk^9PhVo7l1esJq%%B5A>62F)%r5E{-1g>}cI z*G1R-p)gm6ldr1YKGy1fqMBwIoQCc>R%ij#kOKpIS8~}wsKi=6hT4I6Q=YaVZ_U8+ z6HbbJ$aD7#=iKGRn2I=is$c`gJLRmEQb3~ncGj>Y4oL6u zuM2>^E()c z<`Pw}h}5zm4{a7!naghTE?sgWv~3%%I$GZ{_RY8UiIz3f=f@&n)ktcT7wUTVpQj3_ z^H`qOx-WQ^bD@IRVo6(ty`K?n1@4_vakLs!>eDt%dl#*cQolL32@`NftYQ&EljXf+ z_RXdV!p{j29ADT7DGnE7;{yu}x3Q6yFtj@5XPo=xS#~6(I~7jA*qJp{X0=S+K6n<@ zsyu-TU6G=Q*tmI7#XVG%89JPe$f{^J##D_aY+P19>BnUNW1vy_R@qYV8H~({3-SDh zt~GpX{|b`eZgWa)1eBDh77kl6xVcjh%0th-b5uz$GEqS(71*?E*0D-Ca_3%<>r<3V zqPagJa5fn&k6U+s76o*5Ew8HL)1XTRM9~;MCM4`^7^hDN_A6ZJ37V)JX6O003>Zzf zKId%-+Bs;$^@ps2`Tqa4@iiS%gKSEfMtZf|XF{fuQ+y@A2`kaYMBA{a5-7thctbU= zpwV625TE&mF!OH8+>OkxpFU)f?J75N=PnEp-SM=W)gv!i`2WjKfV~;P>^V3j+*8Ef zBziOEegF~U-QpdMwe8>h8t4^952J129Z>v~YI3(s3FqX5xKutmjOb|sY`J^z)~-2* z!TRO7jN+@m>KdNBezO&-cl7RPZSbJ4@+Hkbbq|^!wzr;T*wnV$k5;rVDaUGhCC>nB zFWzMC?eILRoNc5_%NPZzd9?Ij_DdM zA;r%W+;=o3;oDkCVcdY{l4s;I>zEDZtH|sRtnZzAo;9FepFU~Na4f5e!A?or=!&W4Wlujda)OAFZX4jz$BoY{7v*5N2%WEbnQlA(UTWKbF&_j~GrjnJdpy=Pk5S3nSE!#6J~h3yVLdKm@Pbk!LB zYDrA=5j^R}JY#*uxqldJ?~9slvdmyX&CA~mRK+27}$EPf6i0mt)qt-%t=>I|lkB4`k==<@-I?^bT`6aRv zHTmz|GT$q3y0#38juL(UaA4Tqu~XCZaZDEl=V=ZkJic3`OC+W}7bhE6V=?KDYw{~$8(AxoOPk;3i!EpFxrtfP z{q`KDEyD0(f+Bkf&2CeUg#SkxL;C>TI*7$2v_i_rAkXLUUTO6YC)gnk0MuSozcrWV zxjeJ)bE|%0l}^qovw$IPJ2}bQ(@`cL2g@3sN(nrB9jxJ5XXEupa)*??P*nZ;C@la! zm_`-0>+{H4k<`JA8rm=e(kgcwCMC3|Iii!je%X<}ZI~eG3 zGFE1CEG0)Q%(1V}!Tu{Ew#D9E<-XcQ)z=mI<3VkIMP7ey6z#PAf~N|)DAB5IIxiXG z<|*V)L;2|D?HY2`%`UM{%)r#ZsiKC;hYBPj6Y&nB??RAHmXAJu*GS{wf_rsN_Vo0;>&tk&+v$+91Jo;qBg#X9={ftNykeFpr>`h2} zfm>rcl^yEK&PkVj#LeEetY4$xC}Cadc=`Af%pW62e$q5mo&L=(;RM#U@wY+a>E&+P zJKe(Bmgo%>Q_UgcRDU#fiuSbF{Fvw-cr+BZxmBS$Rf)Wf-pgJ-Cg9aly^b#wI${kI z1ZlDc8L?&!Y!{1Iuq)vrmbv&s<|<|~gWvtxC+Ki{FD7x*lRU*L*2lG* zGG~K$PF8&pxD*Q^Q0p%fZC|izV=x$TdTU~s>)?JgBj~W7T>(VEdayxjs|x-)EO-kA z8R&HyUxwMe+s6+u!zcu{y7dRJOSbX3=shdos4)3sZkv|fRf6y$GL})#-@0NFs4{lGtLG}<(g1p4*3u(NP;F=#g^5b2vZpC-Wejo zv}NrOg2vJwe7x07AS!gS2D=W_xjVr-L+Zrz?M*c9yq)v>wRWme)pd0r?8wB3{3Vw5 zSBwWHsdNK239~10C+-J72zLi=FETbDiEA^i+67(`Jae&Fokk5NSL=StCLDmj&pH?g zo#n&cI#M*5$S0zC;gLp^7F)@4o-Blm#KkN_$^s#y2vVr!AbVK8Pq;$eE~>Tef&Eh%J#UW>`%iW#H`97qNK5&5lo^sh6}w!PHqrnH*=HCbZJ zMWrICm1KWH#lX2lth%wRwxe~!NMsx;b`SiW?|k~Ho6t+sP;;(sPr+6!1n;$j5-sp^ zaGsE8J1Vhb*`b5jJ<)Y6QWc?-&I1K1aM9o?9@P^iwQqAcR_l+JACJ~SJB7USWGMaz+$TF z(?&k*rk)&XG=f80;?y1_M;6o%FHC$C5M4}a{}hY;#snU!PlAAlfH=;%EKxhyfNFxq z8u}Q+S?x{%sE9*-VS})P=w+h&;xd41b^G%p1YX{*U%z?%yya_kmkjHYvv>ELSk94M z*wTp2`2*=DM?guY?qc{~?cBYdbKY#FxM+#AR}Zr3GDFYPcn&!bEG@o3+$=M>zz%%$ z1LB1;y^fIxf|(d=Z-toIYwkC{>ZUmizacHG1&ZZ>FSSrMQ<0nR>mXh;gJCYI8sCXp zYR@GypVi>`i?N`ycKBAt2tVwRS{%+N?6opvrtb^cyKgw9HkrfP7v}bJ2mP%AbDIu> ztU~9s*&*ighZ~KIrg1SY*r=Gt{b;4lB$ z(b1Sk82v%2qANMlCZvg!@INxm+PiIpb0z$&*vcYZLsS(D{gX2gX)R zy4)9a9h&H`A}jC@56_Q>3{v=Iawg{aPXx zLJ^s;U(tD(!Lbk*Z{P=ZR4PDnESmKgO4GGa5%Vq4jbfaDxK?txlo7DYQ6+7N;nU7Dtx^$(j7wRVIDhJ_my|e>M7Xgn^=v4m}@RC^or+nhFMUEZ{G3YP(iz-do`=7M?HhZef!fs#5va*=21-|V zOHbivg<-bsdc7EqGpnW7pTJM2`|E&c^OT?(|_UaIZl(UeY8bR0bkwSH5}2$HME>k+LxLt zW>+g_Q&OGeNHmKTmH}ABo>L@6&*)7aKIeH61)NUsObsIa{%RHKhb9k%L^YIl+~nRN zHsghyIpTs2dbr6P9;eV6VO|Wfb=(e;1=&RNUARc@HLoOFC4IVM&etL?1&t97G`KQ$ zWoCvro zzr1P$i%w5l$ih&(cB<2Y-@RldAOr?;3LQw~vknsP>>yD@tE-1jxRHW8swtihWLNZv z1+t4Sk9U7JigBV_NL&@sJ2Ys{X45h6cy2P~#6X?{tKAU*E8F@+_|IVgT&&;`$^Nn# zz!0&`^EPUzo&rOa`AwRt#m)TN)b_3x;MI;MWpRIw6*3p=#_|REx+)p zn*YfV)06JlV?|7DY!0Q30-5zHWZKvEOygR9Gm~(EYMH$ymxUpA%Q2uL*6Gfgzs@LQ7dZ%9R*Xt;~-l*3H^m=eJRu$_Y+Lk)_;_osYe8F7;gpsgoOOp{7 z7eM>tks;}6kHdf9`sJ#|-1O8a*T99}So8~T6e(yKNgR}JcaU#)FzxznDb{cHc(&7O z#Bt8&((9nHY`d+@UbOXd=xj?t?8aZwKX7^NX%Q|bW^gIqmB{qH)Wgv9aHj7|+~wPa z0tsjYl)T->>$h%A92I+N)PN&8>UN4fyKr0dR3&wTFmqz(=8ldQ*Smh5?HXreDK$E` zeiLquZvs*I+$#puZ^cDcTB9#pTO3CD=CBDl>aQM}o9IVa?2@2fzAS`O*U0sF%UFfF?_p) z;cD?8Akxgz^=clg6_=Y!J=uk-qBBaJdqLla($x0*uF9$!dx-sP(|LOjHyF|wnLICe zphwOr5BA6@f>8ArJx9OWrhiKQ+sXe4e;p6?$T{-i9yurRcR7E*H%A9AY;C{r>+=WhE!R`|G*ZH+nC z3(3fKBN|MVs?_sJw&=+)LeKY~WzR#J6**iy^ml%m{hG%7RA1`)umv1VbJyGLe1>ji|sSu#6OP5cc2fR7DAiSWWv?USV5Z*4B>#9>- z$5=*g6JMOZ-*CJ4i6{CFTZpvKExw=&&HGEaQboI{bm=Rxr+R^poj?cGFQ(?tgbb}} z2$8-7vVFI)8XZN@NAbb}JW%uFiEcTee*;5{8f2S6YvzOc(!L~Tl>Sn4~ ze1S}G!ZnQ}RLj&Tob|^YuM^I?Hc(-8>7seDr+VtD%PzhQr}n-z*%TY~tftqDT~qa$;V%G+xcx{AEyobWTFC7IOhjUC>rY zv*ZgO;`3Cu4(|dHOM1#^u`PG|JtdwdZOxxPEYHs2qs-p`pHfufx;^oe@JcJ|(VA~U z9V2NGDAJ4A3OD%)RY~QYzNjk(eI;^;Z{yV@@SrMsL1IjHs$VDkm|F{#4EP z{rRW*BiE>?KZRNS3Ee%U^Z8z#0QU`bQ1$_$&EwT>Hv^iuqHGZCpt1cu=3Ba6)XwF* zXkaVcufYci3N+FKwV>FQM7{Bd$!aPspJoPSMQ%7K5>1gwk@p!J88D)bj1icAZbT%X~3aoI~lnC%vciVm@@MYaD+{)?}G{!t3W{qO9s@UCrD;p$9 zLVw{?xG){XU8aIJD^2b$3+@U!-GrH`U|S*Wk$a_Hk9?AQs~X&6l^I1cQzT85Ca?J` z;>O!K)2Z~*Ey*z?uq!$BacJyd-44kw4sl=F=!i@59vux9O*uy%m(Pyk zKlb>bfTw@!DIg97U_@&cCcT>52k01&gVUkqF4{S3*X~Sv33u&|=S4e+0;mSalnC@+CELR@8?GCNnR$nO0%Il zHQqK9F<132*hlmgYj}!c;hvv~;w=|ypkfULVZPb>YU4~h5DniTb^!3P>@aC~+23S{ zM7)2;Tuz3YUzJ>vDq0>U|1M1aJIRW0edl!T%dQ8MSOdG}othmRHhU|1{YK#9VJ#D> zMVqYDe-$6?inO-dcv3IkKfv!H^eWaJVYn{0(w*6xf5i|b7kgV}MGMJIB)iF=GCDHg z$l=CY!a4)!btP0-f)tln!xAM76ZXNM28SctN-7SMhFg+kcbt9gR8dWmgX6F~bM0L< z;vQ?2>ss#H+op2=XW_wg1y@2l^6g$Dz5PRVqc=|~I*~f-P~cA-9AF64m+Nhq>Yi7c z{1ue8gVk5}xSk*2yS`1N_Z7PAuEjv%Q?xVbemcijE|QBiTxH|B+AZsEJK=29X3g!j z?g^iqmDU=Ry%EGla$aDiyZr~h$_!ZU>VEWl;7#woG z((ehWaqPO=W>Bi=#@}E-I-GeCE+;WV`Ll75-*yN$<789&D`pOeHB5${k~bOkxJyrs z=zBahiN4?dou}_|a@9X$!2>Jl60WIn!UBC+kOddkA+6Gu)S*;RQ0R3Nvgu(bq7Y z46q+|E@07OL#+Soy`!$+AdoCt{A*y?iHAiz)NjhK>(2ADJi7&91xHv5nh~j@=~Nzq zBPj1Ai{V+2+n|)Y{kTj$~*;6;{!}Z@9}d_8KUp zS+-V_(aO8KLynfH(tZH*u3B?^H8GekaDSR8{?A6jYwGmu&6b_GT4s+lujE$u`>!Pr)E%f;QZz?DEGL9St%Yt+3gRdgYL1-hMKVbnz%THQ4Fpfx*b=H%x|HElXxfPlLUtv)c$#+@EdrwLDg&BD_+M{JLNEi-mfY1 zm0Q0t9J;QDKF}{G7{;2@FnB&+I5Ag)YmT9cIhE)UPnGAkO=f`#xQKNPIXG!l%qz<9 zF!S<}k+isMQ*$xjV#h2ECJ~Thse8A359k|D8`}e1>3({Frr`{%aX2Rzb)~by@v{4s zI+LKJZQoK{(KTA__b-DN@{2`M*S~7rCEze(Wvt;oJ=@f+`g`MC|F5R>yV$^TKz||F z_0U`vhZ3Iqn9yX}1A5jWqXHc^3g zuS)giFCY1IWl+Yc#6GXy0l=xQXFuF8r#e=_9(K`tq_`di|BUnOO#i=P*I&&zu!K+z zIa*bQP9AKv$78=;f^(G)ye{OsPM2F(L8tns16;yxzydN~zr$X1r5dE!&uhT^Q7_oY za}l+@$T>@Mr8{wOAu*j!MZ;_ z3zBr(jf`mf!F)>e*NvF==}iCWyW9D+3(5hZ#yfKBEEN2?{?leYHN!6m-}@+HdWS18 zSlZaz%yEAx<@&Ducv7r5J1XsdzC&lvJFf1nN>%0xtb(zr{EMkICn(!gx35(y%~6N6 z0PhhRirRQ+g!=jU}1^jxr+96j#+(2co9gbxCtPr2T<3-ZWX& zq=Mh4jyu_XJ)Ge99VF0AuEj(bomQzMq+tt+9D^>ZJ%DR=LOS_1IU`7P#HphNc&hS< zZ`~z?LounXed$z73JnAc_kXJg;jv%pN-#*7K~4;*7%`(@1`#{EZOF+@jrul`M~uOW zvh{UV;!a=UR+SiSObF=gfa~|6I}I(6)rj4B#1R4Q-ZU9BQOp3HM-3XU`>7DBypUCb z8$H;+wYx}c!h?D@yq|_ZtT&31^*d64NMWyr3pZ0GJjjLJUpRbv#;1B){;Yd_GVz4| z^`*_5VV}bAw!#G~!v$mWqpZyx?36-?@%l}~pVAGb?ze+|XA}x?zW{koWR!cwZtBBF zJkq5j=u&F@l!{d4Ic-0uO!?dcjWx7Q5KX6!o#KAc>-*%Kd?Ajbr6*_V$-&Mh;S@yy z?x(vbf)W1U-W7W^PvN^7+~ga4|29*0ziY!?00#4nKag!vZ)O?Za5~v!l=vzc3E^&^e739q5 zTb0Zo46W1^#8L9+c5Bb8n9Cj^UJ-wz)f{(6&#X>!`jE?uwC7X$QdQYMt~^TJ=`Zk8 zeGZ^I*2UD=M_>;BbnS=a8q~vf6d`{a`B89Qn}jyJAehH56RJHmBUelH@*s6e?pMFJ zrU|7v%$4R+ZW0k5D|3UqH-fUYo=s^rqq%?F3Y)qGn7?}z>9iwpswmX;_z_@j29)^H zf1-5TF`5Bpj7c5AEiD2e?@b_}aaHzMjMQ;;MXFQBOcCqAwOCb3VS9Oh|M@mPSB!X8>v-K*dC74mFI~rx`}s^4hjl~{ai8$M z{)>FoRl6PJCHT=Qx0!a^6Y5IJVu$%IR43=DQ#DZ50rWiH@v>HvB9-=S9y3Li3q~uj z+Wiaw+jp|Bbl1K_=W$~VGCp>0cFz!?MSSs%KTemjnw2rm!xA=rm+D}kfu1dKf&Q<3 ze5YpEmlYlnd|B!GRg0PzCN6WQ{8T<9dsBDEk^GmJIBfR29WlA0T$(t*RTJH-89R-! zvT8!&axT3 ztCE#D6%Cv!SYm5fxb!0}TtURmDac5tA)IQSF6Nkh{idz{{DoC(?ZwNMB=(@Od>T{R zf1w5V((~>FwReMuq~j+4v02SGUBdtFU_Q5BVB!5%x~pFPPK)5Fl_RDXd=DgG8Jxzz zB46PWDzxTl>Nm~}rLLct`Her;LU}X z@tJw5*(_lsWD%#G$?4JU%9o1W;*T0W-5zoWq86|{^hG@RiNwqO!ArlJeb?dAh?hYs zXksDn?G6EC_>xZgSpxxQI%d&mBw%7W{ZRoEHBm#n3aoD{V2<>kR_K!iOm3q=z}!!R z!^Vh8wTdw2(^`bWCGKH}5b0%xtM>HT6Pz$ zx(-AITb^zGzR{|_$r!4R`b)-p-R-vdJ597$!xVjnrZxLM?526?FJNLvPDptllFEpf zm?I8%^A3cBp;MDF_loEOF;g0{7JUmExXMi_K*D@cXh7B#JEvVqqJj}9s`6I5J2r(- zyhmCjg?MOIy9pi|TR9URnu~#^?P69wNt-7bgT_jN3Bm$`_|}a}>x`~?_Y3N+7%{0} z22R;|2pT3-X-Yqz7E7=5RbTT9s%A_r;Q4ioD}rad{%Wqc8bTN($*^LJDlSi` zDC9-msk-TIMo&*sbzQc0%aT~%@AyvsO5U7}gpeh%zItW3Xyj{wmFn}vT)55sJV(6X zL3bDqCFy8kODC9E|+PdoHM`hNlHZYqcvnuLKme9J@w>W_o+i$`nD->EM zDl7)a`&PRHe++1wf8A&tpodU}*WG?da$W7d_{N|BfU2^$z1*sPP`bNHN83DiGrQAM zpbs6yB-3unt(HS_SKTNAk=l|$lk2y?7;+T)2|uk1%d3)C1PcEYoj$WwDP!*-o=)2J zd!K*%DYBuG*zlh*J6!&5o#oWs-1S1f_^ybE+b1Lub2}5^sxioL0%I%;a#G7B-Yj)RZ->xW!LR!II~E~Rr3YEKZ-C7NmxsY7n4`JngL=L zws^!UF%GYAZ(*phurg*$ko1hi6f*Rq^A(>gi*h)xJe)4L-@Rw_7bJ6$m*Ub|B&v|$^yqg8D=gwL1 zUK@>IYU~}FuZ)htJ2eA?hxghL-djDq!^sG|A5+X#Wbz8$pJl;|B4yr}S&&cuEQ0)# zO`Re4@Q%)gS41QH4iSEJ72dQ4FLNqbPqUbeppB=-7P@DlSQ9%vhD+?LdUutF_#{dK z@ncxo9&@*5GXEfoSFVo$y#jlOA-gk*J-m0W%ffF2Z<-#a3j(?Rr^fyg@Ehwx{1#>a z@c5lh9_2m3LpzO(K{=1C_9sfz}$ZDQKxxPQJA zLf&=HUxa%Cl{kK|XN%DBrTZg6ESXET-m_sYD*XjGj5lG~&uLpIikvjMknO(ME%zCD zp2U#^ZSmtbjhD1`=J*eat;Ur%MOszMx;*!!tPPV!msq*UzFcv-+*IYB7Btq(;%}}> zO|??feW`LQg?_)rZkTRQ5m&1!aqn{LhaBFp-vqkOYt)$9pswj^qn;CA_~{=UTRG=742*7a-h zFh7X@zFvcP8{KGL&ws|C-K;&0#*#IK+K71IU!ZOF^P&<0f<`)GbpGO@w?n#l!!_nZ zY!J!L+Eu%!m)5JgUdCb}L5^VH2RRYCkt-cOcq{l}pQM2wH}JcyVQ7))Vz=nnPnv;g z|4Q<481!aH)a=L9_&8PsJM~p`D76g(n_Vwf?e#4alkZd{KXS)@yVb1#h{jSaLu#9PWqJp!@U%|GYkfB7cVlNhhf~LoJ8G? zH|(bJ!c9_+VwC!D#R>fX&H2^d_6+fttodPSw)N0)gr_Y}#rHD|D-6+a(wRln&l+G7iF@$ZH?W5iVl*n2VW z8#d~_!rq7T{vq#NAlrCVN#j-JG|c@Z@Ksq}uItz;ObpOW83EMyT<3Ys6*OTW`HBh-I#Z@xavXf~PVikK@OEvcc*v5zjbJ4SvgHroo{k z#2VfJ3J#x_KrDnzz$npL!cKUvZ_Pj7@)hsy?QcomGt>V*R=jSOuG!*%dr1QHDho3`KxO^lJ4(}q&)W-T3uVdm3_YwrM{ptxisGL zZXW*UGcK-4_8T0e=D@SF_yIAPf)ponTiWvC^$Y1~KjQr?pIf_;l!CbdLd|lX3g-r! z@fjE}w{{CZ;E5dH`W)YdIqY-rpSiVLE6ZB0d!%X-*33=oK0of8OIh?^sedmw*!X63a#7XBHIswb zC2vlSUG&!E*rh8b$KJa4aq{tN`6pM!E?L9Jm-)De#5=@S`JFS%em|$+%zJ&>=Liln zQ%VoYHca0i6W=%U^^$D(#uE2hUbWZ4U|1{nruYN}jNY1m-D|PJt^+sYCYwxn{unFl zWAC05#`c?|YARBf?h)HBcvM_q*wT97kE+eQi;IKg>BHN*c^?;S^h~TuU0Tpe!I7!mzbW81-t;Mims|lS zxN#b8D7U>reO{$rbJlm1(S`xm99N1Kp=< zB!u?4lg}m*kvrZLr?s|UNrgy`FC0tryu&vZyKmoTWk`-^GkB zrpEdPtd?VnVMUYI{0*rW`_lk+Gl}W0|EmRACw^en zzy792PI`xjQwsUjNe-+GqhS5jCHb*A``J@DPXl=hxZWXXD%|_*t4go<_Ud54lJSQ< zeC3(*24vrMFtV^(GSN-MCmBl{EJ@*Fpa#ho5AMDcnLDSeIV4#Jp;cQz$6~4<& zb55VT_kfPe<^;WzHo($)o^;2mlTY~aZA;4~$sQJI7Wd+RHFEi}G%(!Gq*OK0oWImI zc^r^Ob^96%$?xk4>euIPry?ICfD2mEs5CiBmZbrxC{n2xG-<-S#x-7kN_Jg+O{7vE z#;%#fC6v-)=PqW_MQ(Dbnw{Oo3n1at_?`XdWqkH7be6kWxl@&VlviDH$L(zt1ZF#YI`=$?ePk%56U1djBh5eg(PyHgJ38|C}kGMxNkW zK>5GTqJ;bbv)Y@T$)BpE_H;+)sz9+7$j*P<59Obr{Dt4kKPWqY)E@y=zei_5by(51Xb40cr4-DPQKbx%2B|onPHz zLlakq6Xgx9J#!KBP~G93eLlL}*08VZmv^|gxb6aP(UF{J9bk7ij`QY>SJq)yC=Bij z&Rd`m}j3GHfeINef-*FhrIh;5^7DxOT!Q1ZH0U(AN({0uC+ z0ZXd(C6?5$-Lb$T2jr}Z)SqL+I_7n%+kz(MI*2XZR z&kZ2_1pQlengPYDL7-zDtBG%`52fm=3)y5;0BWS+$)g z+ne77iS;#`uZ6^U2~o7`XUFs=d+S%Rnb_R?RS7cFQL?-^))zyc>OlMDkU*?&!{Ax8 ztzu78%*qUp_4PZ@E+6mbAenKS{aO&teqPXaV$hxS+bQ(UwJrCZ$prETkUh8f2_AmCy^=D`#nf>NPNR=M}V+m5^%^Re$C8r~+y^Y8= zpsMsgHKqS1A0u!sByjo!iWaB!+cMmiSx<(3H4>_}uCo zPSBe|r{^xx+2V6g%*m5dr-%HkoOphd(`V=|9Z*Gx60;EW_d@7tc`vV`YWFR&1_4))w>2nj9k%eR-=k0NUVlv?=I(9`pbk~7#1NCiAAt{0ZPEOzCyk`j z$9qfDvb6<>IQ{S|uPLs-25IY-RZx>GBHLJ;MxuNl?=4PuWXhD+UxQqB%iTXvrkpav z%}RBamBB)Ubi7~P7Q0szX}QYlMefk6wsdeQt==`kT{p5+rS4cr-$+`gq_3{9Bz-1n zzQ}W(Pts=Nk?Os} zQtwbXimX%8*}io(K+;5NamS`xR}NBTR&YP}H7-oIV|hpU)cNG_?O5I+q_V}R=}gGR zj)m39L@ibz)UOFu^-Bgpn|Ki~h9VLLQdt^ng6c+cFh{D&UW}z45iumkqo_c`%&4}N zoC<6Hl2q~AtAHN%+jdcA6Lh{S?WK+B1cor3PBw1f-LWoTERG#sC4Me1QjVAqtK0;A zNt&vuC3Tmj#@fWYI!XFz)9^{Y-Q#H2V9~B>`wjG|JoeN{1DlQpyq1r<#h;ZnUH{(E z6<7*O7bTasv~}%Rw(+ICTKL0AGQOl2cvwNuOSECk5EXd~{2_`M!ya~YKZCf6+yw@Yh8(-oA6G-ovPjzVf>-cehJ!4D9SFuay=tUlk zb7t`%tshS()P>{<>GbQo&i?^R&a0^NYg9l2jM)RcG2pFreEhz-CHDFI==>~kGar6j z1!6O;b@wa;t9XytObEzWRsX^uZz0BrhZ!UxIuyyp>z8~hNWea0-)JkKhsC@vgD@v#C?2$eVA*#_K8WVhDAEq~eUd98*gF5YYo=r24N>T{UTGXH-|^ z{lopsB*#ve9(TH^<37y$I%C&Bi#f8e~nm zbdJaDTfEOqsdmz_!pyuw>F&hK!9&N=n$(q`_!F!vJHf`=Ze)7mywRS=3Y(rTWBhdK za(-sI{LD3U$I^Hj*-h%o{3rb`ikI>DqEHIjj5K(f42?ziQi&^Ar14tIB4{UW?k7#` z;AY@T)t;LQN@b66d(wim=5*wWU?~~IPr7!$j5SS0SobzkSkTyY!&DL)N3l*`TOcpO z9`4{j>%6L>f{i0(S>0H-2;;Ejq2Lj)osnU)I?t4Db|3dxH}Riw1@7f})Bs6sd3KAg zh{=K@Ich+4YE&_UlMD(Q#}zJMyCKIN^r3piR!16OVWmluwfkL5h>5P%g496Y(}P~7 zg!<>BO9G<(!a84qF#S0GSP7P1+Z`m38nmwGw$&eO*%tqPfBn#?z0ilC#AL@Bu9!(K zO1|Xb-SOYRD{qL*;PDhR_IdQuei@lC9M59)V%6QAdz7a6=S4y1P0k z#?~d5@+htCTAImfA-leLzCQGPSEnxP{SROP73%;OjQ`H_kr2I{ETJ3wsthMx-O!u6!!nEz{g9sd9;)0>17L-_tyBtL7)CN3tait(Q&v0_*Spa?A|A`9cU+*j@WN+e zaPv8|DAq8SUw@S2yK|+#mAZTyZ@UA|L@_x_D~J2(zqNn;BID^kxRmoq&Fgw!u|K-F zxqYp0<$PwCYINbZB}#ZG`@nq7Ilo~(;s3gX-OW zs`~eu^^ns=?Fy~g>TdrRY>Dd77Pux8gE4zTD~^MjN!xNL%jbPxiZx!o?WWqESq#>x4?nzGNY+$Y{tK@IA!occk^ zP=TJREf&yqgal}l;XB^+H2*Wh4${{o{@Re9-^@?!MWHg1RfjZB@%dEkIU3J{RsOG} zRVClyeu&by+3%ML{aNYpseYvzs(CL$Fq2xV%i8MpiZ?-AR*_U|(Ky`X9M2kQjP4=~5pY#Py=g5JVvJH=* ze3keS`yHsr98RyCDci7ZfAHVXs@amS%VRgr)Qp);t9sFi)~eZ?{mZ%fg44hnUX2y~ z#ZDEwb?-2zAc=C0W4oP(Yu!I_aEYZbc`H+iTvv0DPaSHhI46j7sV3LebCOIddK+(( zv*g95e6QLuc!pHwfK0M{i7;zTzRL!4Uu=j?J_}@XI$Ci798sxU#N=jUA zI3BhB?0?PY(!uUnK=JTY_L+*26L~~s%ZKxtLaLQ~IL73|hoN=np4O~L%ZH+Wq5W!_ zv&p%?_=f9(-3P20?Ha{qGFnn6W#zh?(V0kNsA7BTEYjR5?=~XdA{-A zV1M^Ce$AlLteA3v!cd*3y}!b7h1%bX6^_E%SYBKo6nF8NhAnFh{Hr&J;tGUOw6VZ{ zjpn+3gT~`J!CSw)OXG3HX>pD3eKRjU|A6cS&wnQCT0!x*uKmu9hIUb*4Q-whGJGbI zmk#zNke_viLjB*4{CvwBon%wN8~Xq1hCa2oefinO^JNOt@b~5C%iv+@E@aEQ^L?#e ze!hYs5Lo{=`MK=PPB3QIR~tdO#qF)yeoTJOZ}{)zXCEJ7!(V*=)ADIx@eU@qm2YX0 zv#E)7Q^9;WLvEs9xw{PGPACcQDt@Mm-&VNNw^d>_J?-xXE>Vu_EJ$^_uzQqph#}DB zV1_E^*94=e?Wli`_&jV5lKe+3}bgzee%V z6^G<+FNAIQspbLH$ohZZ(+_%uUHt+5;1B1f6#~-_j#C`XY>Oj*`r^}(hn{ln57>SJswh-pKlwU@a?CHdgBYF z>DBf=cVN(-|NdI^z0W6yhTrS^W_^Fke~06|7=0hc?K|o6cShg4{vrB)0@u&*UE>2M zxrpJGeqz3?;|bd_Q7rV#u-W7vECw5rhTNAW4X`OvqZo6zG}k1Vw<{}>AG<U|D}Ew3nD z>>6;%jVkzwub?Wbz|MOj=MHB-S5CACC|cjXc!OKGwtu=QVgnQ&p`}PiaA>`n!flFa zAQ&H~DQ#+%qp6|0x!0jy4bLjlZNaa`b3BP#ESIFnH%~q=?(9zlQLI5u+SXxm*uBm8 z54V|)cMd6*S8|T9vC<8(LUqIHrxy^ZyP2Zqov6@l03B;Mk_SOK%0syiP`y$$_7#y#!ue5(;bXiy() ztXZ2!i#`UqRvATX_i{e2lN@fkhvpfGEnyb#H!x1Ey=|EP!Biz5}nV(<@ zh0Xfa&%HQv0WhUbI4?C0$#7KMIW`zf*)o|Xz%!jgY}ML>tV0KsLBbm%7FwS-xh8&P zdU)L4*SkmT9hMCN?9Hfxu~>uoc`LlgPNW!YKA^%%_vpK6lYuGrl2ZZhaDemo2XT64 z*VJ)Gx?13B+sp*_b6fP+=QW$&y9mwGeYrg;*S;j$KY#~lm|x&*p@{nmO4rZioaRT; zKV@iJ?H--yzx~!&$13-8>xS0CV|glDJd=1*QQqlc-pk0#%{m~YB)Sj9>?BwfR=O$c z1XQfyOXyGU?oDrlC}b~=+%|>GfTG;q2C;{Gl69UrJxD$It?xAubKg3#qIba8a^XyCJR0Z-#_sYFA^= z@CiXSFBR;sU^wmTLGtZX7fp5`1&Jy=)!2X)zBeqa%CidpuL^UE4M&EL?Z;;5N>?o~ zBy&(5HCf+7y#MTegXJ{F`jW7^C7r7~Q`Hru`y7^g!y>czPK*x=uIOBF9~E3pTE?Id zULWyK41@ve-z@uB10~8OVhO3$jinYlhRx}mwm?>M){&Ses zRN?PY|FM*hZ3Lk(b{AT`UO$O6uDr!BatgVW`v#x;UcOM(B2{&@s@mIgC}m0bEW7$F zZOU?zvUFjpvk+izSnY}cIL(L()FQLoC(|1`)UP=(RSYrE$TJ1SIY^XUv&9z zZWV{t%WAjuZ<@fESn#tXmqPS~vpyZ->KqSL<#^18V;5t>`=@L9EYy0!yl^YYAJu~k z!ZS4EeKd!*M~zX{uk6s>4{sn}AY2g7A=c0x?j#xa={4e5lJQ~vF*;+r$;JGm z=(F5)$-Lljy54;$xdQudW5eJ_=)8L`OV02X$S?rFpG6k7dSQ&4lp6cI`ybZ+wlA1- zER<$0TkXzy$)>j~c=wZE<2)OvQ?-+scg&zdcex5ZL!qi<@4+K3V=AY38F3kB2O2E( zbvF~)92_<3`o1c;r&~4!nXqi!dq?u?ZbF!?#@biq8rICgd>?zNVp<9m!1)aJW8@9qWq`9R#fq?eZ>P*@q6&E?Aj2A zZa0K_iHN9g5{W8Hm$=I~g&x(Q!+oG?gC@{?YA~`Su!0e|v439)(u*YCV)xMdnZghH z!f&YXBnsmYF_^L{ro1wRCbF{2rIogpEBnD@xA|pyngmZ{cdPiOA^Rg)P3gB`bI-Li zWIa@z!9e2V4iGN5@=K0!I(ItLj5=&x`?GK70qTm@wc3+JF4I)aB4|u4|Ls-3SiHYf zMk1n&MeB>NmQF-g>)Eec-Db6Z+Sfgqy4xRcANf_$tk%!@FBj>{+=vh?WX^GBx%Z^- zLZ*D%P#Bg_25w!S#ou)d`*hC2^4RS!wC~wG86bs+xjy^G6U7alhZ}5lPkszH_*64@ zv#p;i++|BWSE!DK`?*q>#2)X>qWlSLDU*=I*+ETJz?l1D&MAn zaT~Mmo?rWY`)($__=OJ}_rd0g-JmMj%4XT{FBoJ-<$D?^=TQcLZrgc)P<&`7UB}gV zBP(p$el+4(Z=!ghw#C5V!J*<9>vc6=={gmksB?pgC$*W|Z&0oNs-v?=m7HNL$FdAv zd)nmC6|thyO{PuCFlTAvc12fq^DlZ?@P??R3LRucJwkHhXQ-{b5@o0Asn~HARoZBf zHm{hz2>js7B+W1$?V(Y9TP!5)>UeUEJ7}>8)C~En+&7E0QF|O4H)V8tCEano_QdIyiMa#q5y$R4M`7hgDv%|J6yB+q0ywNSVNKz z;WbjBeY@B-g*}}jWMlRr2&B4E>z>nxNo&gpV3;VC_BX{exs~oF3eq7cANU~`8N4+ELao;ANUykSc97kJ7gzjSS!Ai$+HtwmE?M!SkW`7Qapq!g@A&Y3 z>s7MPkmI%g@g|f+bAVQ~I|rM z!ppJjV@InlZ3*&@EpQj8_QrwUKo-&L>~GN|&%AO-de8MT4OyzslXNLH_Cee9yyf2} zF@dtE6jP-K}S{IvKrXg7`gH6mu75l}cP{7GsyeFbU2fvj#Z_#) zSLMA_^^&XG4S%oPnp9OT_q@zi&W`xpFyFsz>KVO+>*JbxLwfmAQy4Pu185PEow3*} zOuE!|QSBM%HmLFDbn?I-g=vwq z7?v7fZRPgM$Ub|hhm7-K0xRuevT%5AUEd?Y=&UPx;>FpqaMp;N#OFFi-x_QFa-i5% z8?s#1ai|x$*eAJ0SnTi5r%*%hs*XiE2`uETuSO`T-;{gh-l0D1(^c=OqAqiDhj*zP5av%qvj}Jo2O7ChR^=_O%3Eakw)U-sz3hC<_Ud2s z|6aeZ9DGIhG3VbCj^$=yEPWlbhPymSz9X3cP44Bo!k}aMtg;-m*p9`#C)Tq$%jl+# zmCQFm#5yk5?Mw9h@Tj2%c^)4{%cmGEPl*OOzD|Qo{i2$*@PI=P(glW{RZfSmEQ8zw zGC4BLi>E+C9D+66z*-oB)nfSb>(@TNvEC*7Tns2~_^UJ=u3x8-!20#Dmb6sSvsL|~ z{rg`kWjpJa)*Evo3MaveyM5K$p94XXXlM)Tt_|v^1vzzGJ}p{JUR@wVKnXZ0L1c#g zVTi9tt`d%T&1vq&e;uzA37sR8ve75=B!?jAFa%ucjPSs*jcv-vFrhqP&e{lh{TYj! z>-nOpulC~k1&G_JvG>AhH@Ij2r9x!&w=hMMC=0_IUmldbT?xLA8=f3lT)!^XBVL>w zIk+)C*zg<`G5#Q-h)oQ{$Vila_}7LdLMC%HP6cbDXBfJ3=#mge*MXyCA{q=PD?X2a+%@>g%Y7Y2?x7<{%f%*#r^$)lHEn0|7W~2BHbTu3`L~ zY&}U{6%fOMb@Uy9qi$%7K*9wjFND5HH#o-tX0>QvkZx;`XMJ0$qPF_F`__sc((6N}ne?pM zhF^tL_tY;9NwO!sG3VvvH?gWO<7MmPv18Y32T3A!#IHICEWm#A-whs7Nvy&Alt)Y{ zjy1?LEJ&J5d#A~R2XX^YW~eUTR?8ztTsWZaOfUckJcsX^EVaeVs=VA$wZg>ie&y^s zhK~@i$~QMem_R^FoCF+m-0y{&=G$YZt8f z68=k#eZrmex-p~wjn;WxzUL|+Q-k2=sl72rx& zR5u2J=IL7_{%!{frjaHv#UfL+7vYp{n&V5aMQW9a%ebpc%v#|VH_~AqoDn}P^Ze07%1_3tql50@du{X{`DZ+&`}$-{GeyDkPqcYka@e>) zCc8y+-{Wz{%=N$V5JNs!Q}Ys?!*m4`Zj`QT@9LJxA( z{$SredwxQHJUO`Z&qbm}cO5S{t& zb3%xT+FYHd=lW>_z|$jo{BQU#8!esr@1-ONQS!K8F}$Qgi25^#>fwIz%J&hKVT@oa zi~kPr%%@t+XU%rl@bv;vLVNoY%~6vYbDDgARMccow=+#~!XdKB~vm_FI{F@Lh@qs(W`rjNvq9!#Vh3sELhK>)R6D1%i;S`uW#Vdd*I zTH41q+5Uv z**YRyWNPf6+zv1O80`rwKK|iJO>!u3KfNhrT3r)|;w3r^zw(B`<$S?o`4N6tN9$;0 z!=hR7Ad# z=#sxz&z$5<*T1?aVZQQ~cf4Dj>_zSSP`e#5Rb|K2U`lkQ)YEpEiff%FwIVsL#PV#! ztz60F1$6_pGGaRD`c0f=To{uw={`S%vT`o6BtCE8vwiu8zR2D8zpC~1PPP78W#6G& zQLSsET4(CZ3mOgUjncR2&FRYVpvt0(rn)X62L$6Y>FgHWD7Id@VdQMT&S(464`=JG zY~w4~iXo00+1d~H&kyPOK>z%>p7-?6&*-_oe{R)t&k7vEQe9u=IRmTv>%jt%_!lhK z2W!z~Q=z?E&ca(81FZ{KBsvB;uxWn#y%RkYDj z^bv1()(6R(jH=}Le$Ow+F#CD)XYtXqC(mmw?wRv3f8~RE=G@6&6MygU*9~IXk-z=< z`w4%C@;8#doZK#X`CWVc|M#z3_ktchJ&*DH=fk-+k&=D>Sg!q#7LXa*kM1D>UU+UR zN$h{HuAv8uO`V_=9Y}Oo1z4AFO)Pp_t$ZiFQ;l=@s|dM;$m)X$dM%^k;`tXK3<{K{)$|+Zm$-j&ga_ ztL^TP$3~`=?e6!%uj^zV;xrfbp<>!~b8ZYd)z5L-`!ZGgxe&p9mD4}Pz|b+Rdr($( zWtU``j=Y~br(?#+7Me3j(9VmH9VdNWoqWOF{41*1uXN*RkBC7*?u7uzcbSN}Nl9x| zxdanglZ$n4HXBUUVnY4)>nLi#{@K1Js4vS&tWKU$!Xbb@&6r0ZcFxyxxffSEE)Yd{ zdU)*y16LC%xu^njF5x1jNMLWtOs0jJOv7^$;bam~Y-MZS(^d4p$$#I+N5VINSRCTR z_Hn;(7k>gMvDB!JvX)qN>zrjXd&QS@!_Hwx#{!}YBfL*qhHy#1!+tUhbu6BBL}5>v zYZnH@C0rjQXAHHWR>uZX+nl$i^$aEvV7xmB9%u*^mdn^PJWLfb+QFoDA$W*P3H$vt zLU6Yr_tJv)A=>Q19o1v;DD155y9T%b zx6j_4pCIq0j`ym8-dvexku~aBfBICYdmz{^Y>ZXq@&A~D_Oq%nig7eAxy~lJ>IXK%wto+0&{TbKBXbUFF8GFg0GXdv)WLL)&-N=c1~{ z5$%P^Gj?z9MS6R;SYpDCu+r)_|koQ<~+e)3xA*R_XU3&`1_8(E&RR2 z-+TN$6TZVo#Y5qx-MV%E|ALzq^yu6QJT%gu9;y$=>J7K~0|){3868Mz95vKrj-{ha z0$n<4!2cocP2i)dt_S|f9undUl98w&Q;isnOEjp#fM&=9W?&*%wBiaHMby@f83EZl zq%wVurLC>CtxH>f+Fxy5s)Z1@gdhp~;s&CEt<@K&Rzx9y%lm)Nz3)vX0sCwJpWpBQ z=flgqch_^zJ@?#m&pr2C(Bk$fmDb-o>f%Aa!TIf~8w*_F(Sth|R|J(@E%g z&N;jYwY17u(CsfH!lUK&yC{p*{ZQ5qEd^R-6b#`w-mqiq6m5MQm z-uOjXDw;1{npum44xgM1F-mBB77VRzQAo9>!(T4Y>!hjSBIhMnAatc>9h_dK-X#^F zvWh+qmUWcU|E1td-+xNWVXuuHESx!5jUw-q*Y|RF_4k`kafCdDI$7yYTly!$FpDgBW9(oe-=3%_i3nc z8*{OF(Du$`yqXu5D`SZ_ZEy7@#U7UjVkLYulUrg^M(kk5%;RkDvy!&c`W!)@bx%M~@P5Fk$1K-}sAp=Y8^*2XEGJ#T&jzF6)S8}=!ooqR}y+)A~p}<#2q%SZ^K!;)q(G@T>te}sOF6sY<+#V zEI4hc9ItB>bo>n!p&xws_4pH%{9=-W5-e9RM_=@JW~Yzm8w+a+B9&}6hHBouqcu59 zu5#5_$`_1wS|Q{f)m4HeF?#vEvQwfuv5EDGR5G!4NsSsqwbkcGj#4LP)u3E$cPu>L z6aA;r(mfP0fhl^5+C}bZb5H+@yi)4QE3eO2t+&@Q@u+Es-afGCpvV9-7w9SHtgU*= zS#r9Xa;Ea5rktvMw3?nU->|*QZ~|{`OI}0>zI>~;+TKTX$OU3b=z|aX&D=P9Ei(tl zr<5j7jxB((DX*xx?7;Zr8RnGo5|!0@NO?kRSF#_1(|2*Ur%Gs z;28lp=kwI@jOEGaIgaOj;v~$|FQXs-L=ex(mbd?#f4O;wFE?L;Gw24kN&IRe5ak6b z3q>s*exGNdcHHL92LTSS97eyW=7S+>KImtL%587>qGG0&Qu>J>Rf?uR(4+W&tnJH1 z2bK^!vn<$%pJ4CJn^iYvzHo+G;6BHXTHvZ|n)m%TVNdaRGSolkM}Pb;|4o&hdg)cA z4oxvv@aK&Gxe7bDR$}Pf>Dois-qmOvnRrAr<;nvY>OJ)C=#!FjR95ay!W(JP_eL>a zP45y`xJ~Bp;=a6y)h}*;TBd_RrB7B#MGxe%EzLGl0}OtCG-bN%JtZ$hbhXlRh}f|5 zh|&kwgk@4UUzO#~LNW0dQGvNLGQjp8xUd*LVAMOBRonYC`tq~@HB0wV?@E2jZZEr6 zeWQ?mO=2j3~eN1GKk_Q%j zK^=-Wwz70!^#X7FY^WMQ=Lrrp#vLSt%(dpLg8KOleNcZk>h{B;UeT9BT1#g;Fd(EX zIfj`!Z2BwB%_$6Tij>;kffOy2R@#ezY;TPy^kMtQR1bxtr=actYE~Z#>Rve<45a8g zwf!I zcELD-Jg62&_--}EC8 zXnSuq>4Zel3ltzD`)&YcWSg%lMVeKQ;RdYlm&B@L4S_N&dWs(BQ%-pYSL9Fz?R!W9 zP=ETYReu1-(nnHQoWe-HgxJKmKf(v@wLWiQ8N$XLvW_PETHy+=&AIOP_*huyCg{W( z_BJ}bt*P>yOEz~`yXAeFd{UOFPlw|Dl23?a@t8;!zi}xBF1IQKGh1qVUqIcSTrzFx z3suMtJbA+lJU?YX{DS8}p7VK5AuP^sC%+^4WnEgpzpU(noLqVNKl>+YyhHzaBq-D2 z2O?jn0gHSQ_p=0XL=1OAa``34uD(&e7^&DJ)<}B2In3qzplMzZH09dfKZz#ZS#UaX zha-jb7C*ROMcrP+iSLPYw)H)yT71Q@7QAX|Fdm(b7l_A>6LmhvRqBhyBj6qk^yGX( zTlLYABYSuu9K5!=TJu8Ys&Xv$l+F!LS3-=~x3A`A))ie}3B5jn9@1ooXTfOO`xNh^ z{sC`^o+$ZrQkA!At4ba)ZQDEB%~4D{CC6piD8pF}E1gSLYcLTsf;F8p3xX?H;L1NE z7<&&vxy}0d48i7mx?oizZh#p9*WufjyJER*(Pw*)rcB1uVz#Z}Kdb$S?gN+h$nLGk z?lM0G6ZJAE%B4{v$E)$epmIS?Ovtdk8_+LGSw9r$5|>ckdfV$`h&po2DYo~cIG6me zE@n30sb2dueoZ4eOy-XVjG~h{pgSGVzX)`2eLUM`geae?8M~U5$p$AZEK6UpWpTAwYb{F)h z1jb)ifvR(NezU;nAZwkq=WlXMOi7P|GLasidQ9#p7~ zK47e9n;S2bqrWV>*v+)P0qF=)fupZuIi5q!O*Iw_25?`p#7^6&3Il@nKqtd2j(vrobW#o+dpV#K}$yFLXYvgm3JH; zJCGe25<5_s9Jr|K2aL-|ajYvhQn={A7%AtP^v|j(tJm22L($9J(SM*l% zgTf5{BI;&3L@@&vaOj5qOpwD2)^XN(##Wet4M*B!i9RGvH@VJQjx?`#xhTE2(S-w# zyMN-WypBo%B{JhhOu81U9s#S+ItH-JZ2;CFwzOjexvEBp zB3{P;LfO;LuC&);i_ZB!l~F&)sBul_!X1D z2J2B|o%mJ0E^+G~yCBzC{1q|Epl*Y;jW`x*NeK~q$G`GYkC=efnBEjRB~a6@zHk7a zksR!g?a!12&)C88S;S{nG|yN*)`x;GHV;FlrbncxM9!OM48V1KM%Rzsl9%ujzp7LU zA1WJhvfYtm1#b|;osHJ+^$a$)uDY%vnN%rhlnFqNRpz8wuhSHF2`5&7T)~nkl*wvo zHns77Q3ikfS@p)Ue#jq{a;j05ShYxOzLsLa^5ha}x?B6&Y1A$WtlOOWMTI%I>ur)s z(~PFAyw#iisAB8sSSb_v6!7vzArC{@r&4v@z3+-dQ#zOEmWBM={3+O>oi!4St% zpw(Qiq!XR!RprS$L?`+^^Qytg>4A9t;N-Pz^r1Ih!@~7C$t?7^(VDPHL=LqB7%>#_ zvEx1QI_q4*0~o$D8cBu~-88FAB^_JcqK@E__p=Qwq1dh&TP>Z2ZwDzdj1s(Ry>=m0W!xy~J>@iPa4z$~KQJ`)>sx|{ z33Wk~*=(B+>kzXZF^h;#W~YYDtoY>W_~g=Q@yUbZlaJ#BTN%%(B!^bHRK4Bh6^cW+ z^V@a0?!(P*vM_<~&901G8*KD*Nw6I$V@Qfr-s#MDSBrL7&37YtbGH_eCa{Ea>GsI$ zWYoChBU^oKvc7CoMsDm;GC?v;YOc@H+A%kc9Xvu!H?sIsabfJ~(k5ude;xciGEL!6 z^h=4Nx>J}rk9*CXIU}b+e;gzSW<`R}LGo}>+Td_bg$)szZh{g;P7$%jVWO(1^dGoH z*U4$~r;EQbx9;sC2E-27krT1)tBh6WMhhJzjSwZVLee1KTqIFNx>0RvJ}K4L?6Oc* z3ba+%J8c_XU0<~iFUqL%q)W}NFc+trnKqMco^khjSYtSG;!!L1+JVIUEcSzb;WzJD z{PuWJp{=($Iy(g>hC%py@KrfyHqcm>HS)Yj|B+{?BWDCfKQ>+xe|Xbl`_GHy#P**N z4X)1e;67#gdC~J1&JlG_T}H~@e_{0*5zhK4LyXUoS*sPNau|&7TH#cjSL^6djIuZ= zmz5ZcPowTY{DQ6n(5<46#HE9+fi#m9qEMHdEJml3SLvFh0k-$==tl+TU?Bci74iikEFUA~ zTE8WMtX*3qxp+Okj>W8;A|lC+B*AtfA6{`SuPY>pR%(56Ka1rVe9G$g@BET_JV_Gc z{zTgjT0<$M>j6M@vIbae|;)n!@F zQApS6=`g*n6U|5^+H3u&r>5GTnr`e}(=pPz_sMK~-<+ucUrGW2e4hp!4Ub@9bWdTE zdJ3D{yRZ$YNm5`R&=6fi5=|kWTVMSbCOCJc$m2o=vUpRNPA7buWK<;;XVWgJaucZ? zq73&`S>LETi|(`XFJbPp#skz;C#38J29wjBCtR4QLYu4nwl#xAQ*{+C+1lC;L_>B zge$F#SJ5tMm4%4l-(D?q$tLS^etS(CY7a;W+e{H|`6cP)yY@43Bt%#7iLPS)=3Z5N z@`|pao8Mkl^h`i{y|rwL1HCFObpRWDly?;{fAyqK*?)-f2cB{J+J7*g^*b?rJ`<1q ze({K@(A1zSlIyBX&SD>AzNt6=u6FH2Ne~S*{O}`w7kQKBUMy>YMh>A8yv+W9QAR zwov2O;+CBiSQhum<)RP?XW9OWef3!%1Ttp$dhIs^8z+?ovnG||=)xy=yjV4?oY*dG zU4Yfu2J699@GaX|0^?&M5*1y>oU)VW_@W(w_|0WCGqUIURdK2Nb)*b!hl+MDF zH$@>eY_Ptqikfvzg?5v;to_DzcCie02c$3$zlmKRa_i$A_kJ+67x$8tGXRA zADwbJGPpUT7{-px=%f<-*qa-T3Egx@ez@_226L4)4n0A}jFPN>o;;(t=4)fIbVJ40 z4OyQD%q)M+{sq@)yVD8P)^&*gG9@fHLM%=`SV_0-n^hROi*723&nQmbkI%#jd)b>a zsaICKiX(tRby8BJ&}mgK`Usg5=uf$^!OEZtyuG+}d|&F=G0TV?m6fddB2paA`mExM zI#}&7|VFySM~dNj4`>Dh_1r$(U49@licw zlil=j^!~t-VOXapN78wze*5D(XSfZJemfnQNQH&*5s}y8bBY7;#*(fp84iqZX!>h+ zFCCf>_OiHkwBafHuatg8F(*NZl8T?aJcW|PtS#L4+t9chKfUO0K+A@NgTCBH>>j1t&pZ{S1^0_z!!8N901o2#v{t%4M- zK~i)&T`0C^`VuE!?dF`~^QPP>u!4Sh@v%WAEP zc=0>L#AoD-t##Etc4gu-O5jxi8fCr1DmnQ>abj5F7mMNCfH@~SSr{-+s5ie(=JKcB z{2*xFoF6uCF7+?^(u1;L{_%mD6Cy+W&FTb6!kgnj@R!K~fdvHIb;%x)B%K_nnUfv) zw!c~JM<=|W4%N`cNsGHv(nik?*4&&ghYUAZ1A(+f&OeL5&_?^1_TMB&V%(F+qMNLr zJ}5GL7w(9uNE#EY*$^qV-o8W{h^09#3dBz!sx(xy!C3qh>8zKD499QA)PQ*;J}0~D z0m&Vkhog$;QZmagUy>3V@Y^hXflofGS%qvs>31)0UDrt_x7TJvoUu7Rk8y7;!Kp$n zA)y4%pP;9Qp828ge6wz?lqQ9rNgn2!d$TEsSw@w`R3pg9b&6ZiTD4ES1OmT6(6t_k zm(he?gwcauBx;??bP3W2GpMsUg`!R$$jB;D;YQQr#m1*f&UucF7O=7^GlvV zkoj+UF6aHPlL|aOem~`TnCBWEPeF#>y%j68L-%q2S3>%1K9a=krxk-xc-w8R`w%nBhyt5gjFeQ^F{$16_4drT^R zzoH?1^TKgLT-FaJNrCIE`TT00Ua8mmY*%MVnL#`=@c26Fvi0W_G$06tXvdTmqGN0+ zB+T@fwl$?1<>~`U+_v;SkDJn^^yoznep_IfP%0t-;*%&CKU6{EE3J2V0Y0T2Is6U+ z^4otOnyNd9MXD-ai#kZu2*LL^l8s zQz46+2g~Md(OiD4TSZMql8GAakQ&>&Sg#1&h%yT5i)jmCQ>~S%NB~DADQldd?1q(~ za<=ws$)7dAg%{x?qrcds+-Ch%)&bir^LlQuM6SQ5Okfr5iXnPl}^6JgTSxV#WfA)F2C5giIgY1Bw%NvvFu!wO+mXu?&plPBQ|~%Hn#-gt_SrY zPd>KSu3fw@62aGQv@m35mjy?F+8NiyzRI0>d9V@3G55sYzFL$|>+JVx7k+(WH19JBG{Or&(CYwfPxyszvLG6E9t#J=t4ccAZE{72X%+T>}M>g_pjRVu0BDUU>cz8`?z<)qu{*sNY6~Q?d*H3r@MhO4 za_jm71*swhSfl9{_y+S{zCbL1<2t$zHRxSHkr=%rwttdwx9Gr7!D7ysRX#<`8SjbhcZY*N_Row+nfhBIP2}3pOgzvu zW+j;mvXTRlJyp|_{es5J`ZXZ({R(DoG;D#gYITZNZ5YW2l6#)hi2Khd;#|Bln6iGi z*X|M*yO5@jr&d*by!tyZReiQum}H?`m>eJ?CO{?gjph0ceBK((Q~FD+1Q&iCZDyYI zsPh{}V5NdA4Jer>fXvr5jZWOd4L_w1QW$QurNGol5?a@snL4Xsn8 zx1;&Obo3VG*V$3rQV0*?yT5GybsYzwP!{wk8)ZwyFzbr@D zN*@%g!67c7%{VP&9$_pKVS?FZkeIaEd3viI!7V6~pgQw<#FA|GLk^8m(vIstKs0Q! zh+P7eSY6{?!RL&9j^Kk-1Fx5TJ-V6Eb6=SdJ}Q@{R{!(DXpBo++2#rup>6&IyB)?E zD@mVEdaSBLVr;PI&H=`y-mfob;R!>|JMUXJ@Yv?yiv)J zW>Pnc0Tdr6KFdd-X4{^Caq8NDF=1PP{;Bqx?MC^!dd?UXJL};+#%1ee0o+ZV({3ft z9^+K*UA|@IXT}GudyFf&Dfo;HcVu$%-9(YKBhrryZ>tQ`{KhS9PO8m>zDmxu7bF+H3dRhu3@q#>0Mdr@y+4vdtQrwKPQAPS94d&M*I& zPIVX4>sHm)SXTyS{YGeuxwdOyr z`Aknj0aCoZj)TGzNJD^6LVA*2N-~LF@LuwC5}lG}pY5dg^-6zIDm@IWl40j1negYH zBC|=ta%_xZM+mHyC7t*KP1OiuEHY6f_GRf@$KNap-VdrpfeiRGk@AXmt2>nMS#NzRf90R{FXHlt=_I$-jCJ{g zu_whJCPNICARuwtY`8`M!Bw*ePMaK1Bf4r0yg+FZtT2f;lUVkP_ZT5|z(@O-d58P= zwbw>ZhELA!SD(1(G}MC0qX^54M)m530xP2k_xo*x+;JIL}p=jSIzz(EzY?`y4tTeQxCo-FiSG6te#J>Q#{Pk~gOiO%^^`W>0Q zQKvBT_pC-`gjxR#IHbL}Y@uK@apK#B90*}iD#i^;8erGyQwV2Q)mDFXNm+#LfK|Bt zP1I)8R+mTjLfA{mDEG1bQQeVNu@d?wR0diAgW2w#Wf}O_IZ!W}IC1siuld+W{DBu) z-p^FCeeNB%Dwhhi$~{Fd!Qx}UaRiG$*NJ?tv4|B&a@seaSm7NuCqT`5kl5=9j(39TOx0(D@hqtoZ= z^a6w=wx;!o|6uetmRBg{ozo}%GM!$Q4?ciMRsJLbp`}c?Rpr7@xewSOx?tjuWltlK zH%}BfafU7e)5R74aJXtyB|HYvI@HLGe;1ccL?t3?m|)oK3P8MAaegho!|R!0%R@K- zS34uYtc{_H&HFNTa#+(|V|Ue-#Onk(u`Zh?wQ^=@AL>RFj17%>zb2*Z1g%DWH_Ar+W2MIRu{as9mF`=zu zTcR$D>$S78R<`ZW3{gVxY>bx&X-kU=h&a?Z*xB3EB1xDgmbb||EfCtMnI9Y zbsg2H3f#H`s7=3vWZPK@g=*}%|3y!^k>3BNG!4oVqzRet3LM||n_ty@J#Rd`wEtin zd#_3Oca6OI&RqWrB|0Q>W|AwdX}dof~NmW>zs_;A#ES#(G2aIfp z9mWN^b~7!AH8+bVbQ`UzEGinZJ`7~B&dAypj3IGm$QsCKnhue&rWh`pnZaZhhz+Bz zla8lRmnX8%Z;?I=YYI|gRwC!QJQo3{&;*;xSc z+plMB6E$W+#(*&Rs#>TKM^n`5zgk~IbH!EdR?y#@!|U-q>;g4@4;haaQkXRx(N8l2 z#$%c*p0usa56)NlkshbYF4lp1xdV&k@Bxlf8~6Mf_(dUirKp`j3CHgnEwMb9BUH(d z8iFt6quEco?c;$MzOIJWUd#m@2)rL#wmk+3qlU0QIbqugON_~Qz~B9)xre<>gSZEr zxEF~N&+9es%zdos<5a<=se&U;!uv=FDQBNS=IflWg_2qNO!~G~)`k<+W`TQBFtw?f z#!*-5+-BKXm#Avy+{Y?UFQTpLp4TVvop=mo`5w zZ15*K4GeDEhbevfBgC+w(1_jbL16$v?9=%{K@P;C{isz3E@9NQg9W+7P3Dzp|rO6>hNJ#TJG6Eg#2rU9+Ji z&QDQHOFl)*TyO>1^nt8V~H~&nv)q5QW(|C@xavwnS^YP|TZ zEV2lahA-*e@D&S?jpiyqke^gj!VcunITdu051#|pZGXq)dy=Fv4YQqV=34~6Fz!yX zoxeK*#_~5rrbh1xpH#X-uAe8SwJljHlb%lwJSK9UrabEe3JY?HymYFpfA1+1+854t zSq*)0S}k{ywF!{Zn_-Y-^B z+x?j2T00Rv;8>A-6mwm_lIp&IAlUnos9HF7cpFD{Rk74uPD8e!oY zVA5Qczwp3$;@N#$GH2ldZCo4Rl<5b_tiTd13wA{E12|i;+mobut7>0(#Hc0KK#yN; z#^bo+AIoH8(rDVv7enFo3{cUTp@zaWBohb*6TU&hpVr|Q>2RY-&Q=CHa?a*kh6v|4 zAC?AmA%Q`3i|?gdjpYpw%Z6nAhgjHN{~<3}vekFT>p8D_@&qxqt?%-`D6)w>e)8?NZX6|0vT%Zgd?_4ib4L4$`LW=-^CaRDK#H(lRGs~?Dy`i_(OmeoIEENgh! zvDdBtjr;Oj$8h(B3o)FnPj-pMBp4et7gh&j@B_XAb9qO-T>ZuXs(+cMg9oqs^>6a* zlp_u2CMKT8exL2VuYpbmIbL>v>z^M)mg+GXL8BgP!`;aN3(r3#+CNY|KLaC*`1Q|& z^+W@>c{QAGF; z1LREW>mLmCB(tHSB$)kB$&=dZcs=lN%c5cxVhs|rGoz=38aGn${mPQKqh5T3a^7@o zri?jo2Jd=^T=Dw*xvRJF1JL;)$8gbA+1^_Sm!g`qmxG7-44C_4c81Y(8KsP>JxORr zW^2@V4c%q~O2+{WgW?TCjpF(bjREy}f~-?ytlHv;L%LG0M-SVd(X))@PzYzrqQ$Bk z2Cc3?4u7!qMzWMp*zWmMwSs4X?LCP8H(p;z`}5McG-aOm8fB-IStZ6rzo}+^T=Dhm@=7+ZT ze!}5fo4>|q4LID!5b81fU2l1iFT!U1<0N^7B+T?H`4M;C9_zlFn5b^#O){!2i$u}W z#3sfqrvrPkrl`9#B!xjHig}C_^=3z6+?UqxNZ=IydtLZ{r3ybcy>RY5m#jZc z72e;vfxOZPY(}24TFw%48$IsBre-I?_=Lx>1dI-3r@@XCK|9a~s%GI-%Bg6>Nx}`s zp93-%trAWrYxyY%c_f9zZ2IOn($fpkYw)+gYpOY3VA2zJi300O>$Tab=KTFDg{vb| z&6y6KQn-@4&}q(>B+|G#qU%&D^UFPqo~~1P?ZuG$>JPNt*RtUNEr+1@B&H)QZMR;5 zM~Ri^Y`H+Rm6`?VA|56#xiQf&lv_`4w$22^uJ;JD&SkXJykazo0u7Nm&wQop177_r z?&U8;em@0ZeX}Gn?lY_6Bqlf+ss~ZgX&$a7JJYE|2rn`5COykfv)0d|->;d5qvOoT z@#<{4K=Obpx9C>#B*ra+Kr*b~NkTRlYD-1k!Tx5(lH8y8r$mv| zYw`OD)`T$%nqCyPDhq(1`8rsBhLZd%mPET# zU$>y3S z?k}c{#5mh}JF14WpHDH+PIxErrdj0e$nmlqs$~l3L2ZiC^oz6psnnFF7cxuHExO5c z{AwK^8};1Ift)|~cI5nCUijy%ed@J3vbb$LkRwQAYeGJjh3Le`b=Np!lZ^b>9G zIfpO(R;TobDZQ$d<7oG_x>YEC@7M!wKHcFzIY(`G1n)qZIAlqblwrdyMqT;A_(<5v zTVZoM){(4#P>l|3NL-PT7`-{Rzu(Mr{AMOgC?Lk{BvET6vPb*lnWH#~<+)QC(uYw@ zGYi&Bb0AX33@~=^^yty3`67m#sExdVr{Pd+Wp?sc;5xY$oxv&zkG>>HRv^xn!O@o# z8q30E*-OS}$Z!6V@tN}5f64f)ur-*up=Air1@|T&#W~#AR?tS1Ta;zv!ng-L4;Sn>dji!-=cVx*V zkbGT2BKaLzGMJMc?#UMGE=mu?amSaKREqVpxC# zl#jvoH`C+uFG#oarpLQ4O3~x5XK8v|)smve?JUT9)8k2B9F88hNHY(m$8ir3d?-Cu zxxxRE9v}RK%-=|l+!y@s)8pu03V1?~oj>}2L61-D?V-m(x1`bIO;Gn?>G2sx++pc4 zi1rtP^HZV_{5Q~J0nvTv@!{_sLXUdBf1_Mc-G6+ZhU;j1FCSd`#(%MpcFMnOR97IU z+FjS?%CC8h;bPpKBYaKy*4Z#e`_@_5q*U$U)5UW;Pd4Ev@SMye={!a1pZHtI&eHGy>wj}{i}Lc* zOYNsV3Up9m|DM@c>@Avopv}5&n4&n=lK9Iez~lH}K)-%Rhubz&(!RgI$m)mmBsz`!8_0@Vs`S z3lEc{dwx{=Ul&5AFYw0@v}CNwM)p}fRP~4BWx>jM0w&cQ>(~0rp`Uy2RXoG`0imLp z`6jOmJs3)t$7)@e#J@uO?qZMi61>7Wn9<9>!kyN|c(7yXb{PK(1;C(J1dg!PQyFg< zj@(GesRe0z{jFsVPB>=Dg0!)&7~Mo<7)oTv!@`@QscjsOzr4Tj)={Urpkr*g^hBC; zmtLWi@2+>Jy5)1L6YEIon6@;4{HP=>k-Fp!-8eE<^mu(TvgrW99U|L%lCPNMkw&UwQp-v$bIHQk%4W3_o zZ2EYXRvVfdtf&7X&D2xjZ>3<0m^&^t75*4;PJ&iEo0Eq>0ES+Z+A&e>~4|v{LXWdGT@p;*jgN!nQdS~O? zC301ej9#Sc=xJoQ}QpsJOkb>X!w>aMCFr5RKBgyf7 z@xcdeI(MF_HaPbL#18h4ToyZcePobz36*eQ&4tNHkXm!)Di|hIW0=F?a<$=U9k0Sf zp2N9y>i9npI++F7YV8IowNCAsFCHE0fVrJPifxL;Y&G#843sa96U|u9Z6Fbh!1p&Hl>$0nx66lsq%ZxN8*-8Pc&77d#04bA5~K*hQEiBY5d)t@7_Ny4gMJk zCennrR^YGc4L=iZN3G8jkg*|?Zn;ciOsp>CT7LYwQyTr`x|5TR^(hYp+(E>A$wt~~ zL35y3nV*PmwNi|WnV`YY2XVt1-iq$Lt z1lVB?Hky1`fzZ;eHk4Z)~N2S1WfqOq88PliIGR z49Dky+>f<`bR|bVDSgE8Zt2jI10&|-8%@6=NDYKdRx#2cu|8Z;hm0|}GsXW9`il9X z8s3?S!p7*`A#B$MSkw|H z&naf}Fk=oGKu3)@Sm+EHfla|IHUY<%Cb@-^xQg!R9~5(uMMS2a>1*Yt2+^(T2D^jJ z;TH%^oZ5GptVefe#344EvHF%+Q!ZpqWqH@X#V1dT$1b5twrz+upBnVx(MyT=cT2=tV_u~h1{>+0V-bww`T=w+6A}o3T{!S%RMFS z+;b4*IP%%20&~Wc;$T)XSn*l(Ma7jsUe{DdY~d(XI&f*&bNH>JuYcrN2XmLbeP)@o+{9vzlH0=7ZP`9L1M;fEFK5;V%$1lG}ZD(;T7YHdlkS% z0lmHzY?X%=r$RdFWIxT*D}w`ID39>YG~{rbLNiq^2-a-VNsO`EtP@D3to^ViW=JvO z&3v);6OWZAk1j@1&XCO?o|@6VXs!S=4)?fv=_RW!ueVd7?L?e+_l90hoK5}d)Owjg}A&xT_9>S-O6VSr%lG<>s58IPPf|>p3nmi zfV`jKIg4jB&t#tXkMW((?<}4pdH)s96Fh5q-sdU&Nr9(|C(Lsl&x<^-^Bl`lO}r~Q*WALG&bqb@0I zzQ?qgDEiai*c05z!G{J8jhi1?Lzr*fB~cUUN%BLISUD;jTc_5@cbHBhgXGAw`AW+Y zNyFmgXLHr^^*m9MNE}v$PTV?cwvIav;SJDRe&}SmRtM*)jqK#HQp(T;QhT?^8cLov z)HgGl7%?J!;`1jIAI>}bu%Y-+chIHV3A+0&tGo(h`o5O!(UW1cC%>=PXA@X%CMJ&8 zJF!7)+~w{awv2@<+Qa7BmZgHJm2;#?a#wp;xQS!U&;}RYU#1o6z$??1 zbz}-&5gdBMyR0OI4F&HHoTBBvj>N>#F1#0{6`g|j$1c3j+y%VIqqE7}qi+y?j7)f1 z*vu3={}V$nGYB9Y&#yi!DZ9d^zbbH;u$p8yM0{k`vbnm`yTYtRe=&CJs9h#BS4Ynk!L{DR87N-}?Xq-4ggHSbbN-qX;`4ioJ$e1M|?rbCu-F?omGVBEweTc!t** zl^yk^GF^6zQ9sFNRrylqUv!=C>=N-ps>`$QWk zZJMRUz-W;cD^n|@I`EmV)*`Xl?3#D@l>it$&adDTlU5R}v!uH!Z+LfFL;Jw%OykJh zm9g2h&4Dv=dJ6_UYQV{k8vS|aPC?IO3O#py#}QOz^{w%5h6HZp{I$_zQ_|^?va}G5 zNLsp;4Ha$SEaLj>Zf76<>$LQo0Zz}{ z4qgvbtx>n9euUrildu<>&lQp0l;?dUoY%RBfrw8JJCMmy@?u_-d3+2q z0}Ms)q+x%(;9X9w)x=>-)q3k}L5%rpb)*W!DG$qvAhdjN zj-l`d2;6P;AKcITB;wkkmqZa6_caKozhGD{q$!+Sw150pberhXU0n^>i z47jntG@9<>1+&fx#e0YwSB&3nKU$7HrBt;xFpq`enW6Y-c7#S3_lc*8N5&3jM))&G zHFbrIUZcJZt1@{*hRUw7=4YB#xbc;c+e}A_K38_`531DvGU>wWvc8(-RYqbm;-PuG{vmKqD&#Mn?P*$_2z(3dDlL zf|x1>^DKv|m{pI!uFWZB_SKXyOqI|{%Ma5?2Dgmjq0R_T8{ED6@_Csb`nKQP-Y4W1 z_|usWaR(^R?Y!^ccPr2R4;Og8=DGI~{BZCz{HDP3N5Ws^xrO&d#8vZL!uLIVpGDrT z2U)X9JntT_$IHKrOb_-w^49C0ELi2Pt}G8L$85E9>=plSe+(=+d{R}V811?G+>(BZ zlOwqG?5Bbsy35=3Cc;gy)ZhFb-_{lRz4X&Cd!^SE-7a!;&xR`R%%Mux8%MH@If`nx zzDM)j`g-Z7zu|tCCq*@@T(RH7n|nWt$YolYJuT;;twl$-9(UG?9k^}5fXGR5g$b9W z6v`zjH~f#6q_~;+)$`}RJO!0L1;Rz6vU^Q3(NXx#p~(oCoR8E zm98z;RR_(S?>v((UFq#xhGR9UJfav{P!OAQDn1u46<&t_d?h3aXI5g9PcdpqFN|5U zY1{il^u*%NhvB;%2yAaZaF{$9c3i0@5%JKGnl&^ho>ZA)#dX7FZz*Vd*BwJwut2DF zzMqwEF#-)XdlsJm`n%6Om=Ub#3^u^1&Ht+k^KPt%&&X!rv3zd5NAbHbbvlZHq7 z*KApkAH6g%qHg%yi+at2{%%Vl~IRZ*;ANZyZ??JZz z#@b4m?liOtvRY@V{u<;uke#3)yF?(1$w6`FpF_VF%ObE+h-h850!8hYiZ4Z3nTJZz z3P#Tgm>J?UrFH%>tkv?hJ!EjifJnq{4aVB?{WYy~clTZq$?A|>S{esvKm3x7d+-oa zf_P`){y;g3g*3P|f;yKi4xte7OuRzob#V&IHUr9Q<`JvxN=eunc{o^sZ>hHZS%T7D zD<|C`X-}zk_T!W0e3_-16GBds`&d6^O1l!C_|B{7tvam>vt(yUsihi1<`~%o+d&L` zuXKf?eRE8)zxn$V#HN&7U7h70aRiQZkBE;iN%Y@9xW_7xGU5QmGXH3i_aE@6ojKr} zD5F>G6WMc;9g`~Cd~?L4lKIDp>Fi?3O)JTn04*y?k+HvKQpwzZ$V#ksM9utD&}9J? z3+?{6E#R&fzm2sM?ych4M+h#4aZWn6I=`l7E*qr?I!b?#+FnUjofymH&hGTAQuMT{ zKC}ORDKFE0JsA5WV|G#%s?1m3u@8Wdb=K?rq9b@>eb`(hN$Z-n&bq+tSF>f_2=v1F z_L^|x%5i3PYt0sH=Nq>))U2F0Se>Usxtu>PQPPIbpP-3VLA-#txm|v{pWH3Ietmt_ zR*E$H`OTG_>c?xxW%&(eduT*)q)2RjTk~t$=6*^_z&*dFZQgmo#?3a4RZ3p1Y2!Rp zV_T?Z^StBJ{No5T!9@SfK@cdf@eER^`aQnUXY>n^EP_)1b8bU0!n7cuT>iqM} zOG_~7e`<>y0SM;%S71u-Y5QxImB6E@bp$ALLzt&iKieIf6ariU}{d^WcS>eXK zpm}M2sBKr4wVJg%7e_!q=Gc;W9Ud;nqREl{O(mQ5;qZFC8lxeFSl@z#%DcYvrMr&P z@xxN_>M(NGIjMN*tWzBuE05b=$Rh-Oiha_TUun=kmtRPv?|IBa=CkKLdH}J%B$_l~ z35VN@H#5wOO6=B}%?qH~P(H|fYjZIu%=WK%9$Z?13?+6%xZ|@f->fUi;*PcweDBrl zpLZ^+>na)Tg6Nu#xkF^bv}b%|i&wa{`S^MW)@+)GX$Au(K74-?4X*bb3t z6PBV!Roa%l%j(pxmNGy^mgz6 zLpQ_ee+?<63UySoa&Q|d-IEOyZZ|U&kC(&kwDtru1HL^3g2EMe>#UMMP3t^^-LL#m zBS_5d48$|__>{!AD1E9kXrBLCBL%*S?&%{rMSEbx(eqCfCRJ^I1~t)!6z?uQl z07iV{)^I#~Ge`MV0|;VtUBs^5%1B;^Ur~cXgoB_kTVbFm3l?Mcg9E`}YxBb<*X?CQ zPJuTyt|9PSJ^p+ox-Wm(BK#%a;V-~b?TojjUnx{6l_)y+!OVLgoQWqy7t72yl+6=& z(sRb1?$7V&oTA^64xO1A&g-SUCA7Dg_HysKYA+qOS@#zFjrg;j`ipfb!A6d-kGo1R9*c3th3n+I>Xxr}0i@j`oisoiPUjpT9$ zoIXn(i4v;nPu4Zua}_@?Ei0BvaG-=gKQchgUwC(P0&w6MpY70>OGwflSD)?C?Fpc| z6~<)_u>I(sM{c$K!|}+K!S<)=FY{-uq;V^yariI{n3oL>C;G3Ht%!4l5Bbg7Vq770 zf99{j$rQ>InID32LmVZ>Yx5g$9!byz!B_`WBrXu68))K)I^P}Fff|rhwO-^2@n*AP zB4{#a49?n@D3KMq$2tQx;T&=fC`~S1=AYon(XML(clfuvf2VJwkfhe0gKqD3_^0c01lP_PBE>n0;boU7n_F+MlS3+P<&@e+pheot=*rF zs5|uz%2;Q~cvl;CN|&5=a#9IXy%>hj{|$oQl&N`vZl~}8a}NfjB6(FK03rO%I!(}n z*GsHD`yY_31F%q{%6>L>l=Cm|@2pW(BdojfW~%L8w|?uxy+Vh&{dPyq{L(wNIkg{Qty6Iu zt#`RLH5Ulm|B1dorIlgunaul~;(c%7PIU&H*{ew=W60t6X8YM=JzHf!&=qYFA z$ETwR$+hdkc3ow%U)ZcB+^(A#(l(EDM2a9~Ls`(_96=I<2tLTpex%bWbGn^jw}-i4 zvTQ>pyl-|$^%Jd4`vmVwtQh8RmOUvVw-V`31aqxtBsMN)9&*dYI?MmLD^x&~&g6M@ zyUZDh;4D99zm&;S&AJ&!OD|Nm$lS+;-sW1xL}d3Hla#f%`zxL|gegs}UY5!zkF!a| z`VH6S3(3OzqiG*zifRp($T?G#3YgKW(u~0FjykNiDY)rlbq_`&=NPzJM_su`q-i6- zE>7L4awd~YB#>edae)+bzTrG0c>+9Po{M>|cr{*{C3BNrIKRbTk z|Cjts5fEfDH3=Jo>aG;H(`msWgI>%DdQi(9X%x=g@hun$`C9}#sqq*PhlGhxMt$K* z|Du%=#qMXDmFZ`tjVH0#E(3QgIMm8`b)~;*GtLP&iekRFYNdl9XZ-c(p9=RnXkiog zQ|nJ`(IF>WP1m|AsK|-3k>y^@c$0PP6%zBRm{0hmUm>(@S4oiKKB9?or`GiG-c#SN zK3DaLT*&g^z=+FA@2pK*pD|;q4W(>FK4sGV0AOAye)Lg%2@V*XHZy?iI?m+p`YHDmN7SC?m=dT0y{Ns|5iY ztY;qNoE%Ih;l05Ld6*DvS-A4S?CAas_ubt1F0Xf%;IPCF}jIt^yD*#3&QP!a}i;GX6JdzpgYv$2(QI9DHf zS~po@dePGoMPmPgo}8t|L|qj|0jxA2-|c{3)-K4|WZm~`L5}E%yk|N=i*yj~b-d?0 zLAU52bdBEePS6!PsG6Y3PEb$>jU?!LC+KV)R7=nuPSEi>C_vBxC& z>j?T#2kGG=!?f#rM5g*uUR-_s=et!mwhUy6iJtN=zu}yG?Nxh)coRi0|JOiIe8`Up zix0V(zlljD)(J$4*X#I@YY4$TO^*D=hfLsa+WJASUw*Dj$D8z4JWOvTzPyY1fDH;c zZE=7_2RGb_i>GIr#p=eIrqdfIKUemMVmdjG{?gG{*XPAXef`KlHo3|X?|-eFatFkD z+H=aKZV;D@vJw$zP!YD08g^Ro9S3Zz3B-^i=Rq*yU$K*q#JD}y&c8B)CN9}Y6F+~H z2A@I7svRV|mt;+?<`@1I?~%0DxUVBIX&|np6615NKadF-_Jm{}#{XZ$ue!hGNL}{r zs_YL`+1*x5%5E$g38*OCN2#ArjpCdcROHVRr$-N)Id}4bucmmBmw4Rze8Sx6dT3S@r4v5YTa7>#dm zxu8mj>)mpUvHcaR!i`8aIfVevbzs)tShF-VlG}UWAwnoK$(keQAAB@4u9g&SqzIeW zKQ3_%jr%x5&i!206NEb2XYsEkP5lKyN^EifnT)p2uK!&_)(7D@+0AuWA7qp%{yWBpG-48>HN%CQ1lt&Gj09_{2_K_U|?|&Ck;Wg9MO-lO~`rYcJUlv zT$Ff_)W#W@n(L8vXa7CMq8Y?A!O8V-iyq^Sf@fQ0gav>xF>b##ZztqqHspy7 z%k3ZMF=(9;y=avTbU&vpda)yCKW^GT^!%9!ZkLV_b}@qzNviqD7#*)YNz|jVkrWq6 z3N=5u_Fp=cY#aEj*qaCJ*r-*%h7m+2x$NL{aOhug2CPWf!RB{`)^X4dKX{*!XALEf zoAg+ca>c`nGfCXkiYFrB3f6;Up;x|#v5xIxpr0!A993wyHHQ>#8F?zEM#b#2u1Tvd zD%EX%qbKR-3XP+jLe3#+M@}}t(?(BhRM)R)M%1u2a@B7~&NjXzTsrP;-m7qjen!qQ zw-tJfpSA+dr)3{!xcFw>5WC ziM944XTr}Z{#lAA2jUG+)Qh9@`e)T;f1fsOT~MHOsa;<&9$ZEZMZYW@x|M>2hbU@y z7>3L2t=Tdn6AgBsZ9E%Zl^D4&3k9VeNs-%?0PA1zeVU&b*KHj^b6jL!u40;0%s%V$ zx2123ir^O3tk-)|g;lD%o%|a~6&q##672fbeYb)5*+1bc+TUs{gd4@rzKt(4=llGv zS|bDGyS!oga4FX(1~%f%9LyIza!Vn8Pky=z*K|+e13Y?yT&?g*+64@s$^bfxoOkB) zc6Paxu_kiL^TR=lQT_&SZg>$}Ghv<9j{U5CE8dNMNJ)`AAjlFD`mgzYsBNfMCNks4?5hUI3FK~%iKj^{i{q)an4?eqIR(EUZ+`yc^!&cpomzktyK z#3b+XPhr`=Vk?+|WG(?7KSLwmZ?3m~&omh}zredNzVuW!?olZ4V-00Ayd9`WT6wR! zjQwR{?E9w*i_!R7*FnpLEUe=R;?f6sms!Ak!zz|Ucrk8#!(Xve!ei|P z;`_Z>AgyS3_&@L}{(r4xhkl{3#E`we5bV5~gslzf;@z+E1hZbXo+n)obAQ>IqYl%g z)?135S8c7#9;)3M`(fp<@HfQ`b&VZ>r-y3R&nu8*2XGK(uZH!DFd92hFqcy}9~(dV z2&Qi3a70#5Z3+YXsH9JGtAL{qQhWrNS3S`)9q0ifJhqh3ZYxBaa!uN8TTsa-m9e;mznnz_n0b992N-E?%b~C{Fkk#C?PiQDeQ^P zWD<_ed)5=JOdZiRNR4T1jI69S660E}sTI=0-Z&xZ_=ja5BbLM|{{JD2W6>&MA}B59X<1BgwW8>%-WDk9vC~rAbz#?i4-a1Ev zZFAkUrHc-bf8h)quCBD(s*j0&VzhiZRL&#TyfT9m0?N#j#pKUI2o<=T`~Gtz=hU-I zzm`YW0nHS((FWUlgIfoz!}}0HL8Jc7>SIvwnQOUuMf`(~a;tOvyH*dmSJEYl?&c>l zaOt8iR06J`as9iBS66ZHnh0iQt>aS78D}c6Hd-0LB(M1Fk|Kce)}R|w?}S`MNHS}6 zF3}tUR!b(_Ri|{2Q`(ik;i(Am*71K=I7IlI{v*1-YE>}4xNIUZRUdO{AA4A$fTigx z0Z`3)w)gHY@<8&ekBm#z1$VxdNso3~YZzH&_!%s)>7qxjt@#ibS-nH!l1fzh;yJp7XP|HSJrlO8XDlV0#S! z66L&L-nx9kUdT?@EdDArFdDCH6mm1LGMr6E@Z*0|2o@yDf!Xvu;&l1zk-sYZ8Ygq` z!hB2CYdFu^Aqa3ZAEokAz>FvQfKB#hrGGHWNv?$vmp{1ce_fuUUhAh$Ime0yManr+ z71FcT4cfaLW0UlaQY}B`>XNJrokG|vt}T{AG6jgD?w>;r%*e-BFFu_s9E|mp1jTdy zEa-%<1|eT)^K8J{#69%EqawMKI&pgk*0xk^%-TlZndvhbdpm{vGwtj6oX$t z0_2}ADn8^0r<5z&b^m>^Q?=YWT?}6VxR_nNasebyIzPxg)vbyO-1W#Zo!%_^(_gUX z>nv3y&f$TC_tyket+CD?N>IXk#4`DktX(Hai0;E4>RG>Dw&v5n<@!-Jtg*jBdzY`R z!GgLrHLj36neyNfk*WN`siU`7y#5S&&-_8Dtwf>4Nk-;>hw8mRS zY^1oR=nVNq3@twU03vQ6UUVb@fwnoRH}NVG2jkv%2(TpJ#} zw7u3+3bMlQs-BU>!a}}{lV8yHydsk?ffDpAHHwZ@gSM*aAa<)pbEnt3vL*jsm29DE$SW?k=t#p6tEqnnJ1Dt?E06tt!A?6mIOli;*FJBJ$@pK^=$$ zX9egat&g{|-fuOU-Udd9<{{v*y&ln4DyD8MZdVcB2Z>O`@?GLIvHVsA(Ic0sVnXex8|00C)F& z_x=6(Xy$pIzN)LMtE;N3s|V7F4@5HoeUOR5ReFMY3~C@@IjOl0_mZTgfyDrTx$-QS z7({wFeFD0ME2ZJs!GfDartCsNBcQ7mNq(ak{bvpBl;*NHGV0OOUa%BV%sh zoD9Z*cIY&KD-zkg$RYD6H^=!@$4?M2H%ooV@7G9W9ZY&eCv|g*jFzO$OnOo$ZGYKr z;ACmweYE+b^XX8@y_LBebnZ4JkxEJ+FEKw-YIMrS$&|0Y(J6Cu%Dc&w4R*?Wozj|2 zskc+^(Km{YNO?|?w+YH`QJJyyDCFWTth~qar25~&5@q`rknkSCJE)Y+%8bOXTK-c! zK3{{WP?q3rwSPP8-!$gOcLsjoFP($=o5x>tgXK!_KX2D#7tw_D7_)>)aed`6n8v6j zm3W6dHWBfbA$%^7bb`WssuZ9&FWOsRFz1gup8FaMiiOQX=uCZMuXrnKfR^%l`-y&T zp5u}*=`wfyDM&ww%BZMtD5$8^;}`cl5hG8G!|IuWxdlSg0PR4I0a~g^X{jg8?(>?k zQZj1GRP^)_^sWSJJx(cBWAR2@cx2~_gf0>p7>fn@HE51)jX+zdc?`Aw7JQ?uKL@|s zKU?=-N}>P!Ri!+Yo2*J!D_p#e6=g#__m%bp3MS#i`7WCs@vIG?2@5pykw-)0OF%Op z834ruKs4lqi_m*Ov)+bA=-Q?acfosI8Q4>Z5=MCJ$~wb?$cWC6IPh%7@bF{;Z5Gk_aU5SDk1#>XZO&hx?L0za7tg0Txi33?{))Wivf< zEhUA_`1OH4t-xrJrX~O(pd)6e)&$)z7e23r6|ZCNM^g}47kaBSNz%AUYW>D*(bPA?VYdhpyl8oA@)1l7{nwgNY9%0Hyt+F7_YvM>_ zJC0)t2{-nvAeNf$W_+Q|SK-&$H=+%J(}5ZvxD}RPJZA zn3?bL4D`Xk949#u>+l`&qXxXwmdJr1U)n6c_CVRwky`#E{0^#Wd>d8PioGtWl4yEa zxk2b9I%MqA=wA2)N)T9v`=eWsY_no61K-NDCmb6?!apPbd;UFxzA&}__gI?Afxr&7-ex}GrnTi+MU z6K`Vm<`(lfc|9`Thld=C2d{2>tp|gV67Cwj}gB zTIz5ut4q>vg;9??zevAFBR`0B2!2!nT?=r&;Gg`-`EmeA;c;LJ^m`l1su*^IIS+I_ z;hu5V6h0=Y*dx%dl`i&FA3*QwO2sm?dVE2nLHmw@^=tL`MoUrKCipU0Ie&jj$B@~C z%HY5FR&+H%>OnAuF5${BQ?73X1%QMZGsdyc)Y)|*nB1Z~p_Ro^8Jo%i^1u?3FRmWu z0ThQQV`$4*^n-w%sSXve!CbJ-qqe0G%1x5(C!$T$?v4g_F!w^#uldy3MeMKCoq*@Z zH8$;TQb%fdjzWG-yZZ*|aB0hhmBSj5rRGaRHb@!oCdsA0WaIXVfYei6u0d+Pb#EXg zk&h<_U*{&_i{aW9jPLCz3|dYC=dQaOcy_S0F#EA~v zj7Gk46-wF2PU%nGn}Tm+(NU-Z9P%{OhiQN*p@OK)%=z{SY&Gcb<|b)1-e@d38o6UR zZzGKi_#ozVMpB~g7%jPV1Ptwr-u z3if{Z2on=I+cI!*ocgK-d!4aU{IO!X@CTwznStmx=@D$8tWoQkCT`b|%YEF00WsPP z*AcR4wG;E581fkAz^j*tXsaeT>s&-sMc6#s7)U_9V{ik7ZPOiRXEQ(WTT_et<`zu+ z65=XwyispJE>usi=FoBr#$C6a^+03u;SM9n8#qwN&Q-3YZui-YDIx2|j-YvQR)sYg zCi4%&)J8FI zZAtgAr|X6=Lb6)J;@pL1@X}Gi=YbHR0?TzTltFKSM{lF*UHd6g z<3cPP*(M?cHGX}w9$9-8$I36;bXo>TZ9>B{S=X+hjuD>cQ5s65hNvJldtyEG+a-<$ zD5Bm-Sf+;|qY&t|kl(Ft7PH`v9%mZrneZ(kvp#BrAp z1m$aF-gk!o0J3GwI=!}_R%3kAf7lgTDo&u)3Ne-IeyAixU?>iNch}5^VPlQ;Fq*mM zq_yYZ*{pkcJ&A=Uu=b9D&naxBU_c;a-_h+9Y$TRIA8`Sw_5NfYw%k)LmyRtL1SEn& zB37ijj1YDi#(p>sj|F91{sdhcuDu=ye?ejb{GNu%v3m?^F?MVc;~Ja(awT>t!jMJ2 z4i}~(!UIH1eu#+3%#YoY*1jJfY&68mX}XO7aYE=J)EOHpzIcVU8o`Ux==!U zF)P=k(}0lrmg|eD2N25~f&ND9^!EMjmtN*vDPhEL%nH3Q%oV&$-YA_AWg%20$8Jr#|9WGHbYtaO#0?ZdwN9f^Syy zy>>ZKlRWjH@w>56<9|Q+TcUM08g%%Rw=;qre)*U#0e<-bc1Ka>!^s+DUd=Hn=5gu! zR}3<-{@W1DMQza`mw|SHkOMEqZ}!a^%bCkm#ej#B}_I zy-EBczp=OchyGdTAB5lV;hpmL(fMluNm{p*Rz6endJ?!iq!T#i3l|c&l=Thmy%iDo z_AI|Q2AZnRS2oBf;CeYQ&QDyF|s{n&{k4_$v`Y+nDts?2b>O23vvho=#oW%P{pYEe&VD(XDA2s5Nd61I#F!&o5}*dw_C$2Be2_IqU{ahi`O zwiAPe@TQ4TwBwv6Y>U4#ekWewvrQUD8YS2h ziPf3JlY_*448ru+5`%!vq0~X3unDCRLX$scj|ZlWEos6HQ7bq$KQ7{Y^)42SU=1Ea zsl;@he?4fFVvV^=ufn=(*&nB@#)l%`aZWz&+1RVJ*wWb=4@uDF&~CiT2}x(Yer%D= zD>kW3qN2DyxK5TmS>zy?6>&5nzm3HpsL4)l*XvctrS)+iQUqGn{Me4Tx>Hwk7pq|( z;+4S0+t$Dxd|XebN7`uHbgrzDx+-7=osK2%SFQu%v`dtzn9Zcn72u_&lBevOP2dD>nRZzJPVo8j%4o3nhv_ z4Q?&uZjK5fZjM~k@v5On(Tdyv7-q^kw zQiWl*6fS#9Wgt>O=G6@c6t-O5n1g@<_B$uk~*nmFNS)a zpVck67k_^cu85)=){KLtD_uKs{WsE)S;IvRu{(k_M6iN2WF2oJtX)p@jlWn+9=87b zlBRDi6gg1x^pMP_cQht&*7;%?S1;&XK^O#}|D0`5*a37jBa|b0u_*j_!95+&@vl;i zd6Z8X&)}{<09BH2%{Uf%F#i#@QM-ITev-O4>08#+589{0my)mdiKVQDoS^_x66v*V5p z&5R9H1&auzm^5&8Vb1Z)i*@vHvqb&zrFguoc?O*Ba|Yrw4rg5S3VVs*evtCd$`Wfg z;=jR+(he(y>uchY z1~<*U7w$Xew4R|( zx6Xv8-EW16AW>Uwkz`A>55{8|(&IBdY)IV9c`-PLR6L6B`dww*3# zlvD@Ask?Qd$a47>|D>*E z<%)c1<(z_V>JuP+5msSzz_k&3N~#fg&|Imj1#j-V8>BeTBiok~7`hQy(S;Opp5jIn zBCP-^Cs~0eRg3cKtLKun&S9-rvt=`9Ix{1uzW2{(aEAnT&3h<%aI}ELiMHz(q!JqN zvH6OPgP7~fyCM9%ifYSTALG&Na9cA0b;vrV2uOm@neJf*+A->Jl?rFq8_0;5O^xao zkb~|d?#|d;4^Ze6Y)LNH=TPE9u|g>yK)A?ItjeR7Fq4_{Cbr7B(f6~{AN6M>AQ;z> z3sLuU6Iq@@7Q@`A+MbuauP_2P!SsN800Oaz*zVoNhiXKrT}g{GuDXO@8^;nvi4N1E z&$+BIv6!3o^y|M+dX_U7ZCE27LZtTh)J@-UVQOEjd6J&*3!l~Fjg$Ch&H#c6)M`Uo zpb6`en@Ft$3-D^v;$&1eyhv^%Z1fxy`;wbb;9{7nu;PH1j{a+cm##$`c&Qsb>%vQE z@PV+Y`Zo&W5^G5r(4uO+&Or2h&7;vm5GjhpL8R=W}S*h*sl=<11Pv5Gx|)>qCr60LV<>l@W@ zY5jbl6v2vx@X)+o?zjahaZeE*7ucR}qkBLC-CgnnToA4d0b$)^%_O|I`gQ`4raT&6 zEMQ~K1&ovkA$S#k$S^jg2i|%UxXk&hAi5w-238FG#nv+XrE=ZkUEueqbOrDNCLFf^?c&C@pH! z<6u14e{Rl-?#h_4HhQ`DdxXJmuUvd3KqAvP4h>=DT!n_L5f6iDysyf?Mgoe2<72L}xT6om~NW={k(7kY5qA+&K~$6usy@rT9na+Ah0*_zz~!$hPnq2O`= z`p5R;Z?OT1#TSceW%1X%92S25aKT5;8GieGu9bOg(0ucLs8=24`-c1Z6^JYu%-9Vd zOYvKumTCUb?wZlVx;nk=o9P>X_iX43Q_~|uisS92eC!rJ0q39d4f7}K=J@u1po(7t zRqvtBV8%wNB9awv&Df1|2MTF_4^-_!^#lXUF?LG<+MW<6*@eUZbeE$;>adfQ7Irtg zrs6>sUossGewce|7$Zm$x%a{3XUme1XUI5m&SNsp#3M!BuRjgdpB~_++w`a7@JZdo z$=>Wb2+uMsY#<4c@Dq`LIB%TLkVVL;E_p)61vdwV%uf)P7kd)L+i-d=x+;!{X8%x) zXQro_iY|sY#r_yd81*?6*0lVSyZRk0&TEuO5))7D$RQxgpYfG6x*u}NCF)slTQt<; zP~5Pnjbr7A3WVFPuva(%4M3a5Ae~^k#=}BVVZLd$aNNDvgf`!cxklil+F|e>cUi}J zaelO~k6HTH3vx?K;A zviVkBz85J_KJizUR3hi=;%(|QkEnQeklRT7OBkP85V?^V-O)qvb)~NK1W8}%dz8>zW&_;Ih*<(CA@L)a>j3W~`E^#&DzJ3Zj^2JT+2O!)gQJ=kbyz{6%20Q5g zQ-UdQc39641cJh9L7GBUdN4%UP?wPK0agwr2TIk#wMYdL?zNh655Y>N8jD{Ovc-v3 zso0wfe?DT_MxIF)LKqY@g>@ zm_GE>Ob8MPIDu%8TS3$=SsiiBgR2}7QM%9QS#F(`US76(`lDnQQ^DpA;SSY-dbO`c z=+7F{zt+Pe0yS*T276q7HMwExN8rfJ9d-xi*|LncV!5Z`DP?L42J5Gy3U$w)1$(tS z{)V1TIStm4bFaavB>0;Ksv6Oc8Y4O#;o$Whij(#7u@lDD_Ddu^vnFWz8z`Ag1#fb_ zKZ%&D>OYL^(37JlGR6rmZMUx(n47yuF9SOG_>PB(EqR&=BOGUSCpBHbGC zXZ6R=#p=R*ngBHX8~>CFe;MFkaP>an_vy;Nhc3}RPT=od1NW^K2mApx_-FqM@DH}Z zhcyzCrvv&(UHhBZpG$z=%^LA1^~pcGfS!W?etW?G&Q<$_|03POov@9xk5Aw~v%!J? z0`Bwy{pbA)_%C@{qaV^W;5SJ~8v9r32EIcBi7sSVBOXx)?b!w2dG(bX%X1&G=bxy= zS)fE{(NNh84}DL5MixxTrPY9p>KinA5Z6%zkZQe`^Q=Ive@X+izXk~T^sGcZTzn?J z!JFB*e8_p9K*&1mxhu1wkXyFbZ*a@gi+zVZI}NirRP|j& z#!m*KNMnW?h5mQ?M*0NJbKl9U;0j%lr`ABn$9&8*w~H(=J{`w-7IFyr1ln|&IYPSKQuBp;6BIIO6J|*hi$C6E)4=Tw#18l zyinCAJgex1xeO}@k=0|?h8Y?DIi=W&ch~g?A}UI8AxNEGQ6H4kT7o1*F^x>*qV_xT zR77zJUx+m?R~#w021eZQyuA$!*|Crb{1x#2gljO8e$x%kvn6HWftp_#wQ-DH&5ht! zO-8&KOGo4@!@YR>LBM1C6x@ixp{ov>-*OnBrCy(h`O9OST(|DH94yx`;}RaF4&U(R zUijOzV0;B)Y(xIbk7U+;IJF-zc(!}t+wj?relk-9zuiR-cZl6zQ=na=@?PDgZ|X!# z9DoUwGwV^Aj6p&Ieeoe66Ev*X>+x6wo1&X%W_Q$mIBoo_ZINRT`Y#?&pFAA(Msn0S z3wHqpiWB8g9*HD1W?fs(7FSPg3@fg1_KfslMS2w+% z(ZPYpHKISK&v4f?6&Z5|2jeS^_?zW(PLG2n^4Rk20@51w#fOA_D`0omZNxAe=Eq>J zh_ciro{_(#H1Z8&8L{e9rRp4GW%pwf6$h(+Mj$U3c{%b2V~^Y@`)Ed1C}VrM`9*tA zT!0?R*y=C*6!h-p&P{X1E)u1hazD(YVL#S3%eCaM*c};2z+fOQQXdV|;Bd_?fj$x5 zKN(@EA>QOKDM>0lJZK6*XxFC<`xK0037#bNQbeSoi! zHNV7SW(Hi(b%>e;s>B?|($cCf*e23n4%pDh4xki9tc#i`$di?0*qe$s zAOg!>tR1%;%@i*kB5Jz55J9=lkOn5AnW7<757vTF zs#*82ZZT$nql*%k0MQ{e`PKHIVfSllgD%x}6dF!u(dmb$r0?8IdUu_U`%|zRSlG=y zYZ)@hB|zrcSx{%)b#$LGz(m7-`P;{ccBDs+$8uXZR4iox6?ct*onaT?Y&>iLofodh zd3tRg8=17%XoWJJOG6d|GU@mIQ6!RL7N%v5_Gr8Oex1u}`wmOuj_AIGc_`LYw44W^ z;pPZ5Orr^aIg+^Gle1sa_da`m!b~2_G7kX2C2%IirGEHxKy)Y0`iM*cha1F~_OxFk zX1I(0%plAS?HA+z1vT1!8EqPUaU(8bY-5LYb6+U`XJD#AKBqijn5!zRv(xLJdHU(2 zjO}ekv@xS`XSYP`-LtV(QOJ1hL*s96#ujZb+MXV1#g%5*rj5tXXxu#5$fjtM@cS`c zpIkxfV5D#DjyJF>%SN%gVp+_!8sD4VVQ@_%ZI|O-A~kgOAL6 zZG2!9%}vpXp7aRhOjsUoE+$d73Jh)E+|^~f+qNI9yhlp!b1=T5>MnzUcx%vN0iC*2 zmtjo5?|3+5Riu|-yy#*C5Zh*Wsk1<*gF?&?l(fdG>i~=nFBjoy!`XR#M0uw~XjNWj z1*p8|DD?r&!pNVj&m0La?A$5HFXjNF{u~sc;5I?sbT?0Jb;#oOg`jOr9_hDtsA?E4 z-$Lwi0ACTCk!KF;Ys7~2c;kTp!mzQWvv^>F|Bw)ld0gAGt_^B8Y% z`$1@W5SqsEr~2_|0m70CjoQ+{94Z-*x}GH?2L8Y* z+xnx*CZm2Lfv(zxTAyFQTE+6<4VeA7nF{zLQt4oGm^a#z1JEJlt!y8?m}(9g)s6TC zE|;J-Ys90l&V8i*vMFV?+xdG`3VjejwW_c2!m|WfK{U4+FI>pq$1hNgRlAZxtLz<& zbq3BMH2YWcqk9$zy_h-IqE+?e8d>-xKGryV04vPJ{y(~SIoh*gx@skA12PRloi?Iu!wd=bsVOLjsHVq1=v20RcGRY5G?*K z6jhaXCl{&5<`ZY_6b!b|*&bGl<0U!VhEE&uNxg-4JTK$(3Ow5z!E6*OLMp^5I3`fu z^Rt0p-3J)bX>_@s z0774x3dGx6px{TM--YjVU|)P%0`>q{6Eu5nvOh~{3PK-DCy@O7_~Tht;1 z4`z%aBl_`~3?Z_Lb%ylZ11hMQ70XV56d*_+v0Xp|iD6L|2O0OL%1`dlAG-ARKsB!o zy#;1o;NmXD|ClJ=iQb?1z1^FfpXt~HK;h7wTl5(A*q7XiI+|UZ@tyww@mqElj~b6| zAnkQ0ZBO#YeiU|F;Qs8(EHpABaQXIS6&hIy_OAD<`j|sAjY1#Nu?K~RlyuG?uQA5G z5H2bweT*(bg@G;GTs5@jw4%+C0kmcJ#qtCr+%hB?@fJx4f5D63qB}BX9K%&Ec^&|P zaC^m(aj1J?W>N10PWvI!8)bMIA2QF}f~EQ}tXlTLtDoZyAe3wg%Ls)WUfLvIJ)O;; z$f>;)KJNHE5R;Hsy9KPXGj$866#=qe^z$G-@5b{m_rkt>CKPxcRAe?~H`g^xorqPo z75^{GZmC-}^+Gl(LokFLnbZjG+Y#A7yB;wE{(nMdU@=A`pC%a~)N8*_r)f>^zc zvaRm9lc|r%Q7;G_gjj1Vx)111`)AISOqF*ZnI}{L9ouM@!RCE+bj{y{UNWZKXt0VF zb*0F%)AkdzaJCCq(jM=z9w}TvzB>)szr_vBM&@ADj&m|GV=UH97UOr{@S(;G{zR>*Pu|yYzyHKPPy4!&ifkV zAiI_Gr|)1w!nFbJg(RYy(-3H_?kmd7W?lY$C{?@)u;g18q_fZ+*v0?J@cENHGoeHh6+vnkqgz>pvCDSS56-suP<=X!hpK52`2PXU97UpF>@AvgO{R=^rpMwg9&N;Ccd;ockDglTuZ|_~Zi>3#69qo~D^*Ab;`J?)nbt5x6~n#vrJ(_*T1XE5CX4w{RBDi??mU7yKf~uu--w za)fVNb4EB5y5oVxUoZI{X+vwK_lgfexcC)(LPNddE84SacQGx}U9uk(jr-hl=i`G6 zw@wT1hp&Ej#nyJ0e4Q1a;e)afNw)z&s z8P~QUwESqwkej;d@(Fnit_95oPScggE*o1Oi;M#um!up(y{O49BQCXmb65Kc`$PNd zNutL6ufhT-nT4zo=^@1L{s!UHqa7L3FUD+5$N!__fyPg=0@>^FjL6RVnG>r~?N2_G zH%F!!oFJo{&(I%`P13t3zjVW$RvFPxB*VZt>FpOt&5fUU&{nrdPqu~o$g*}1t(>Q z_6!fnFa*(QnK+|)Y5v$5{V;3a-4D`c<#m{|yYQqgzYTM?YCpeud8U&_F{;DyVFhe4H zDC2vSDE!i&(V>fB=L(sZ2=dK+z+vDp9 zv9ji2pRbaLt&Ry|DO&SZKoPZMvWUG1VXr9q=uIy?l>`yP8^1n!KjAl^);~v9Z3mK~ zJ7vJ0V2UgbM012-7zyYxVxUoKgC;BSxsi9Hx}Lahh+vaVT2ar_9uC=aqBhG+AO%%( z?Gph`4q2tHcQ4G*gaPNz!%!29#IS5!jXL(Q>NwcY`<)1ok)-#lol4+z(;;_;ZHi9K z^3BKt6+N5--mm>4a+cs(4Xz{a2c^UR4hJ5+v{}kQ&unvaRtzyrpi+*8zr=<>HZf;xeRtz*dt~UtDl08uHXyk0GFiim z{|hk33fd63AjKBLUZ&1xPAg^Vs^Bt%akDA`z$Vp0pn)$82pz7YywVRhgV7NG5C+an zEA0V;43|898YK_(p74(8j!)adr;`tyc|JocM^0N@gI1{LEyOSMydSbL^8($W=XF<0 zTV;y~z4Wn<0leZ)Zreg%yP#ocUG}WCV19N;JdUIY{_$VEB5Yy#0 zoqd30KPxX#RXIT&^4*UZbqwIDT24ZZ1(zyY%R$q$>{7R!qvNM%V5l%<&cu|#knv7m z45scn)~1w0ZrWaOd7VAqer>X09_agiuvE&_D$=F2HyS3ryKWNa3eL~C>lh|ZE}X|u zov8YqE0d)VBm8JjO*eE}!V0CS=5V#3#i1H|mhfs{uqj`lGy`!I%p3C($hqJt#8K$R zz(K9*77VT1)5F~-!|fU6arZgPbd=l8S`lt_~RY7 zCMU^#=|5h1)Soe6@U0x5euq@R;LIX4dU?Pfv znt0K202GBA(qjQo6hgG`p)qr69_rkGt!pL6eOLA?TUE|XRGCVF`{eJoeCEur<+XYS zCgvBewMQr}+7aV$>vCe3VNk0H0yZi#Fl&m`S6|Dlk&p0yn;}z27{5zZR${VjFzO!x z`Z&Tb!HUpzj@aw1(7Vrp0dg0v^8mdc%&`}G7oR|Lgw%YnI()RyJNHh#w_y#$pp=2L z0l$a0bz>P=_YML3b9*w}eR{Y(Alp75U(cB!U68NmtRlP@;oXOKAKokRUWxY!c%OjZ zYW!BaJ!TC+clVhmKc47(d7I52aFpt_a0Sp{28w`?GmZLr)CjHI)tG?lpB#tSa0nMI zB=B4U`g;xNGNjW-3%(SbDCbmTxh_)k=L7#{#&(##;ZYd=4Hjm(w3J6nAOn(dlDxn( z11TIciT{mVHUP{ZCxRQnsQoS7JXK--@+{!Z6e2U<7k zqo}MM)+k?qy^-`Qboz8j=U#RDp!j+yoRNH%zD}o3meg5#V$y}UcAYG{@NZ_IXnq%ji-34f zlXYav09C6+76KOgX;@za!M=b(r{0|Ok}V8CPc(%?G!Kv`SE6P69CFe=u2l;icSqPo zAKfS_o?5{(6KME*Fb>jScbI)V?Qo^BZ#{GSxB6o@(8@vhD?_E1WKl5XCLRS-NQouD z2?Wz_?z&^iKlq78nNaD$VYhj~HR>H~>-u9;JhAcDa3B4o0Gt#a2?-Y}<}loWPJj!| z>c;7E8(w7YS)(IrU?WGPjkgY&`>Bs`I#4!Fz78L0!cM(L&I{^oSnV$MM_to7sHy#x zKt$m?Oz)ijDf$h%qZSfGq0fn{7^mi8+XnEYjuAL?YQt+l}CZsGu4f zJ<%(!NskSmh^2p<&*KXZ2hCwDs5GooKfucqRY+%+>nie4Mcc6~UV3n3AnRVG6Z#`T zGljNXB%?kvkcoS?r}V1tmY$yGezav0)f*48E#4@w=3I(rb;gt(@omGeNsk=M7GHcI zE$uMG%uU0sfaz(vfe&;8Bc%ZdX=!b*h*+>rMUk6SQvIaIJ?lYMiYl&is)%;D+_Udt zRx5Yf+8^WQ+*>D}03%$+>i8Ca?256>d}Vx5RRE4Hd8()rIVZHMP7}@zcSrB| z|Gmd&r`=`$|2cj&f7v!IF`qf_FzLMEUTUigfP%R+smUNld2;qYb$)y*XzK;6Bqu!Q z3q%s^PdTc+%)PsHfnqopZ#8f%ho%xp=HHPwrh$nZtVs(hEG%*KXD-KNLO?F*Z5t=s zc0>3O=eN(Cm>E8_bXs3`T_2>7&}d7=bh-vQ$9b}f?Tp2VcG z)sa(i0BPs+_J9cn;>+|GF2gPXtWz@%3>5z0_@mYhX689Kp=Vz(`c-+Xd;7(Nx}WC7 zUbNfp=7&D|!}c@)#r;b7HG)aURrkMm-OhP~J!k<5%BJ{8?{yYFS3V>38#$j+-L;j2r_i7dE@ z$eB^UMG2c8!-M@XT}m>hW@&qYWCePi2zqtsZSHQkb2WonL2virSzR;<8>5i@#=%>r zbjH;1z@T*xfqS{el_qsS8nCd!`YaF%`_HTl%p!nV@YkbM4WECdd90 z5qd!H_MGoHx+$YiZ+$eTp0@Lv7^1EE=J&+-q|S1Q@+Y1?@LUkQUEJi%ctQhymP{ai zeCF89=q^2NfB6|`yi238=Py8G-y0CdVOM(i#O=d`Pr!L0d@>M|zj!8q;=Ez#Y_NzQ zP|_MPTPzySwof21Iiq=Os4A3Sjng7} zs?o0u^dV6SQzx18MI@;}6;@=N-5FTiFzZ7jmL?0AdqHYRIbRa0n${QBenbwRb;0z= z!N9cBOgK9>*szADw|$B(6gR}Ww^0P(EE^lBl4&OE_2WB1ALBHAEW)$;@j8a4g>NhG zbsdYf7v|%Q!Hji=m3dIvid*_%wNd?E1b!gtiwhIzvdPIyFt>!vTV{sLFU=czo7nGyn*{ewOL)G+hlhOf zW9+~QKF`|)d{V0e+qx3Z>alAv-*#)^sG5mX>5y2*#Mwwh;7M%1H@8WUco^dY>Q4wG z!KH#PLGxX;1>OV{Y+@KDzj@j9;{Rqg#hcKj0!-cC$o3qr%zaIYsPwON{xakbRh3^M zU%B&Hq&{!gNnVaP7L^hT>c4SroJD)^O;L?@rd@zkPTwc1o~(5F%}CPQb7h}SzJTj} zD!@fHz>ATq3v8F!b<osFe zKR6G^8+ab@GkiUm=}xA2B2)h$jtDg{5cg-8B$>!~U@D-qrO9wH$fls}X%UFAPXbp7 z4y#7yJ8)cC>;p)+7xy(a<|Bx}NTX{#JoLBIGh|sc$^Joo%~0)fl2poWrn5fR47tEZ z-=Pc~1cvWO1zwyap;FC%?zvt_(GSw{R+ueNT;T-Uhpnfu9?4ICIUf9Cpd2+`7sHX4 z#|PLHTqgma5a$i&6#Wt+paPzBx&D%z4QJ3p#?{Inx4(&Ar4PSL<*B1~H}&uOIO)b* zgAHX!-;h_dUWq%4AiBWb**z`#dj2EG2x*l31Q8lI5uAK)OFoMA16Hxtb*j%s`9(WN z;8x4UY=gMlaN8@u-E64b$Rs$hz!O-lx=(T{*-tz{dBs}NUrG5R?bZw zIP1@xu{$KEW-8<-9(yI^dHQQETX3y4}(G{zyC zneYnc&_AD>tkvGM5PIQs$&+d81q|xRt8M78g$c3YeViwzffmbisBF!op)$!DGTg?@9CCusG>Rn;_xwyI~*Bu@L`{21bgubjM@>!HS@jaCYZfLsnP zqKAaXD_0zgFnXW{MZ}l)#n99i#9`31G~c8tlv*nRVW9Dw!Lm~yvMwnIT)7gd4dN;r zvZjs2+Aa=X4tycAq8i66Q310QXqAVhz3RJD0BUU$(*m{4@$O;AymGn9!Fhv2XV<7=MOr_80PGsMz!>B$W?-B>0d|43<77s z^`;8*_cZ{Z0$M8^?~DS7A($ybq(*#08%;(*a7CiwS`Hr2@J*oc>%oC5SKy=cek^)l z;PgJ}?}kV|cK2!7H#Z9GIH&?-c-6dfi2>d9TH?_sQQBLH0azx`4m*Dc>Ihh86@*X& zdaP^MC0c3`lEK!)eAK|bb`nuVaB7Vj)I|1l0()AhdkP^AxU$YEKv#=6#u#f*4#oq= z^XPZ*-hh-Y(?0EU$oWn2XFF$%tpiuG&%ue(XA)r+=5MI11w;&83%YQ?eI{mG8Vo(wdqrJ+^HadPv_h0`V0aRIl|z=kz@zSoW3s z)`*x5aVa-}FZ>~tf&X^NJ>vXO_5-*s`i`lCyYoOOj#Ae1rdw9i3>+C*aTdr#0@=w#()J+I7cH)o zu#0Q~)jSh3>0O(jNPIM}$~=rzrsq&CNfuKHG9g5FiCBY{NMOgZR$G{1g(a)+9#f97s&DRoO|I4evWvcYa^hCB3w@bNZEC^6%)BAN(qD{^>G7 zo*4gjsQqsPnC7Tzb3JvhbMHcbAuHJ7zrfLx@hemKU4^bf^SjRT{ZgBe$$Z}nBTM36 zv+up|uTgjJb!z`-{Hqr#`E~vU+q`3MbBv@ujG3ywRPeKeqYXL=l|gY-vUq+MbPwHx zSsgA9lTWn z6457Z7`xhx!Fp2V1=2t4xt-ScmMVK3{|oE;&vydG|M~hpM1%7GWPMM6jMVYpS>Ip9 z&?JbY)B0|?N?SV5uUMD&(oXZsa;@r=PWj;cdJmYt^8U^qC)ee@6Y3K;^Yo4zPcm1i zi*B`dRiYi4^rUK4!Q__=9B%{j$0D^(4ZQ>1$M!QBy;prUcV}E*+%2!U*h7K)CzFx2 zKeF1ro0~5ULZ6&OXrNCP5rEp|gb-7FZ}c_sk|cd$pAIV;WSX`>RW;CgYQJe)q~zc^oJr*yK@eBt`C4}R($FN61AD>~2bBUg5Q-_+&(%1-Yo>#6Tzd!9_gtiy(yxF|KxuEEUWKUL`hyw<%nc!s>4 zrF?jYb5?Sh)jnFYIYYIZ);!Kie1*HqY_I+bkC%CzviJ(8m)So36@D-CD)m>mzRaG$ z$3F9_@dMGqUb;ny;(SW1|G%~2y#Vm;VuA+`P@T|Z=EZtFv>?Q*09&K6_~Pu(P%ZRgtxn6SS4&Ukd@M9=h|g04pW znkTOw^%7na^Q_3}W*7b?OykLMc0c#JK8_{-s@#|UOTCx;%N$P8xgcoGk?xD(%$g&p z0i+9i0~5(rb2T|zB~ddr!P)lU1X`x$RPiSDr(Z4-P@yGhZ)0qx+48LWR+Hm^;e$-O zDbU!SszY%R6ya8Ms6d8-a7Ftj)CkBVN&UD4+6}d)qM#M4L2A&d)!lJ4Ual6U2ct7x zv__l?el=C00u*$kIE~fgKC!VBYD| z6N874KU)07CLaBNw7t=XQtI0a69k%yk&t;;4eN$BeHgWA+4zC>hU&4k28CK9-B#OR z+zZtHg6e$kTkpjW`wui-Qo!wpsUhnb!pV!DYnW*M5`?-C)an8dNsWz~TEKdS>GKW9 zdT5W`bOy0{)Yb7mWY))xg{gX*59mBqYPX_H>5Ne8 zE#j{SxDQY9)?f4sn^FFN|jI_~I8?pyCh2FkxMSc%R= zL;*jv!Pv@^4KvIzfsCzMey1v}5dqZ)F#9;0KnXF8RUtL8eQ0S|YuMPd*{J@^Iippn zpktf>ik?fN2F-JS559@p!e?ro{j9N~VTtPQW0jz25wMFuX}U>}a)l*L`mx!=2HDz) zXw9CB_NgN3mlyAG9s==PVeZD!k_klDbz=ox#W-f%W^43N?WxVbDagVV=lG=-PeoXW z${bb=&AEB+>iNfSZw^}XYmnDrB#rGEP|}NSCA}{HNu+_qG$t?AyFWz%Ypx{7G!i?j zPyjT2^-+#i-Yd;@U6l8Aj`CiH_+_^8UKS|(#eM5oXya78MR|t=$UZnzW&*YFQd>2Il!a# zMlZJgcZ^1hHf7#8*x1(CBa)Zmju*+08VcH8M^)OmtIfdF@0WI#H-ZhF-xoD@evfrY z-_a%g$S&`Ty5v7{S?BsLc%$?CQ(fM7q`s3s%lsft)X4Ls-`EgZ5Z~X4=QNRLI7LF= zDq>JuFuEhped{Rh$6&XhXV5aXw)y#Hx=upfVkQOMObw7oVm*XG2hG|V${E-<9ORf# zxbq6_2P(tb`1qxx566M0XYMf zKm^jxpyf9DO%^-}vLFgoSR(=b8g&g~i_$n;VfDp@Pzjjwy1*0&S|d6DR0&LM{~8`< z7OMaO3aAnQ1SdWk?64n_rRrbZ9S3Y%>Dbq*p2nNq8grB3-zynL!or9xDM)Q=)CvTe zA($y3B4n$!JSEV^1^{Dus(t_8f>%IG0PIt*ZEOMi?n?#me^xvu7`0E*Xu8kcxQKS$w3j&~W+cs$aZO%Wp{ z_$+HC4tVn9`$TS!K6(zuuXZ`fk}S;G)6@K1M}>amY=>Gu|2aXe@H@a-*kS9mHhp^9 z{(yQI(h>3&=Qun-(=u}04YPp`< zP~`<7RDyBM!aY{#3aD(2%7L#4D9%&7fzCrqU*3(5xx7m-DXfv6P^_FhNj3}Cs88q_ z0+G^(?Cf<3d;M2-DY`t6;MpR7)41y#LV0Gi-DwK>%S7bf(fA2YQh;=DyW4l_53M^f zOw&$W%)N5%9cED;vT}BQnA`!|t@_^M>>dIgiKANZs4xSb+AZ_~wTw7Uo=!m+NY@pt zavLHXSgyHv)CH{E%_nrgu_~H}`imQ)JGx<87{{NZUcB2&Gm#y2T!&Njl_J2VHdjhl zDtIXzj1WQiy1*rK5zF(K-C>B66S79r{Dv71Aqg`+{$AIb$&@im2m~d@0&Ffv8%1oz zsJ5z)wkPC-1TdX4wExHsAx&4@8CorGb+ykGXt?2F$=xk;8fK~3Q0xu3A+`Y}xdE4Q zKcU`x1DUtR?-iJnTE@R+Kf(T@kGOkml;95d84LUoc>sbP6C5Vc0hbeqm|Q3Y8*lX9 zWlK$vEag;`(3c(XzEao8Jr7jNIz!e4pjb>Mj7y@<5{wIG3y`gA4`EJu)!RK8(+z$! z4jz4CU{0-n>qvq5e^&paS$nOY_p!+OC0Mybw?N-PFJv;vz2*&|Dlk^4!<%?n?QKLl zyC)hB`-k3Cn2nu#)Ak;49H1SW|2%=R4)?9|@I>tn(+O#MH7c(w$b@o_9 zkR~LUC1rMv-2ak3LARz*9kMd1BvJ2x?8QY>i_Y(b%(diAH=^FeP-!8N1c51Dy10w{ z0QQ9x{g3Hg-rKsoU(mIDm-hj$cdjq?x6bbay1cLI@?P4te3$nfUGiVqMIP%U|DZol zbx9wPDjy;J%1-Yo_7-o*X2q}#?NEQd2K15GZ+YcX%~rbZw`lqD^Rw)doVGZZzMB41 zqhHyU7?Ffe0o(5a-=a?MDe%m9YUR?fWAPlaM9ZXTtloW%E3Y|+Qkpfq09S?Md~bDN zhoeJbV+f2Ih9%Bd&F{qN)IO4ba^j1nxhNw7s^XKcGrFK&ge*dZyN!i z;e{fhw@=4&H13%(q-+UG&A?d?yCbMlI`Ws{6jw|*ioj>&gm)2759cR>Jcl6-Qs{gw zCWVFK+r9!=)^IFu?kNvPXCN-{{c=iuB$Us0)jcp$NVeD#g4ag3cAeQh8*Vjm7I4>H z$|uQ?=AO%wy;8#%)UZaK>(tOj6^f$HVWFxhVMqNo@ai~ZvW9nSj6Z4O$DF5%eW zJg$Mr)O3RSx;gqYAR&tM=q?l{;nwLmjta0;pY(((R0>)m^s)CsCc=nk~-Q zy$HQu*Rz>8Yl*kLk6-wMO}ivJ?J&&Yef|HyrP*mqekISa-({x_!2h@6|H7(dJ>@9J zI^V-LXD#8c@Ee=UtRH4`#S6d{!D5!-XfVz~Lx%4Uo}r0YGbwhg1$cz`3)uwXFJ#~C zuC#;UwnxNqf`pG%m9KyYTQ8GzM6Ftj^C+Qp+u~|UAFQdC%X`>%vWQ1er2R>JNSd7QvxpG+hyw`9|x>jd5+aGRoZJpmP}AgQ!!3S&yljRImy&S z%lcvO>&fT-l#y1lSphR#18%*+VDHzqhMi$73c4Hu^&X56|7~|2c#s}q;ep{n*kZ*v zb{vOsv~ortfgg8yBZia(%rWo`IceOQZSlrWa1RgEqjkt0-cOa{X5~=qWl~D}0V*4B zsN=H@+ei!iXbwX`8703Ra~l!34fCzHa7qDDUSOYnQ7XtnUd>)(4+t7y@$DDTB~cYo z;`Wqd-v-MR8L(ilD;KuqV=sEA)}NWgN>xX6XJ7a1vp6PI%Rsor_x^}D$qQ-*A+UNd zV?7qwhUO?$J8cvYc-aAGn3|)#@z@*nvT=KLmzz)vo6Qbu`0i*&_bH{ZC9J}RERhW{ zqtYV>TEl;icJ!W-3jrDIsVDt_dt!|C=R@MsJDHF4oEQK;+bqqaLg=uKP{iL-L1^)@ zC4{7F8)8gb6kQ@yA^d_YpQZ;HS?qEzrW_i*A0DJJVgIpc=3XknwD3t014O-wEVR`< zOCoN>YM8J`qj1AaV&j8}*=hR$o%{O#A6Fuc|L-Hu{YX10CA~kMWjs^$^<74CP=%>M zbV`tVueN)LEcA3@XI6F+P85(9L9UB;gEB2wG;KThfSUfikn60~+YpsW#vhD=Xfy93 zmbrBTiQlVE98C6;U^UIr08;snIzztD0bE=P3Uw9aI}PeVm===Eg^2Rm2uv6VgkNL7 zQS^7O(>0vJhH2}9YICZm_6xBcP`FB;aspi-j!E<^Xs%Y{u9ms_cqv)0DZItX9saxR zIG!DicWd``%KWg-T$0R;JQ4WjoY0j&<4v8^mf<%mf%gj$8aV zx=bU;VMLCVQ{I|1f_$mmvyw&-QT!A1k}z99- z>ecj1wkL%6A}CZ&`5(`)$pA-v#N1I;nORY`dQv}8Kbu$+ip$WgI-_$Hoj7Vj|JU{H zOaIqQ+tJXI`v1?4HDs^)zpis%`ngl*KJ@<`AWV?Vuj&7%3l9Eg^*`FN*ZRBY|GI@= z)Bo9v|9|y=f#BcQ|9?Wi|Aqc9BlDl?|EO1!J4hi#|JVAT#J}|cRjO==P56$T35FDq zX{AVL-;1?L_6Es+3-ykSb!Lg!g85byvf;uS2rpll@KoCuJLB!eFequT&%%i)?7oWq zLTu1@vn>`WF1(-pb0<&GR8o+d5IfV^hsTaQ^j2+Zl6fNXhAmIloMz9te@mXc6TMAv zAI1q0HEYln+hNdky?P?}4NUWv7RpZUAp)e^Pc9^qVX9Pkbc$5yb)-UFlD_9p!IG8A zX8)&>;U%aiDH(nY6+Kz2jI7r1(5+NavlBPb@^_ZKUU`vIorU|61BIKlS#v9c6T;mc z%YF}vWso2xi*74D%veG;SUQm^9&`@2xzVy|(0c?&JB7C8&b3j&DF zlOg8{oLE>&wB5l0OP^<2d8z<`DCpJFHpGA^&QNk2E^G&RFVT0ignMB(Dr-_ZAncAO z&!jDcvmXT(s7zT>3=bXp!CZ}m6S10>H&NUp3#VxmN2YMhBWT`9@Kos_46fP2T|Mj! zL!M;QDAU-o?=qJS+)EkuiS&s0hW3j2O=${6!u1aL{nD2GBOW#g)J#BoMclECicXm} z9T-f0ZEMegNkO!awD1~us13R6HUJSoq`U4VJP`YF@1&WKu@5vr@nvsCZp8DJlVJWYH7BA#q{?r; zTuph{5`oUx{*MqmH=>`rv9p3$3p{E4{VxK=EO-Y21hWRYAuLl$lYxL?{8+%tK6on% zR|c)#C#y5C2Ny_>mLN|sV+=7sN7wEI=stq(jHvYJ9_(tg z9Z3s7bK5ca;n+n^4pfOj4MRQW1)348(Ip|X!QojirOWj&MP12^*$lBtI61SrlR?q= zMOy{V+=>L=iCCQJs`Yo8#q-ES5GmY?BC7i-DRjQ4e)l}`h<-;GD2L~ElLZ3I5L(+X zXmnK8a@B*7r!e;pgLLQUYy(w){c!^IKCQDM%d%1OM%B+&-=N6tLxUTJ3Q*mDMT1MA zLLT;%|4*_}VPGSIk{`8Q>jf%|A#*?RJrPH+r2ajVBKl1Xei8{rcX=jVA2R2&SM-lM zPMimIlN4Bm&oS~b_9C`w5?g2pd4eUFn>Aw&AT31p6&w(C@aSGr z>QDC3?w{jdZ}YW&PA4y@Hf&cntQ)C%&RiMthVaGCaMNU?-Wb0(oQ%c}51dpun?{3EgH43u*hP&;AaF3BCyrL+%$5MN_IB7LGu33{5` zP||iiKFN&j8C@#f3FAc3XOZ*Cx{tF}v(W{Gv#FYMGYG2L;~p8X#^%{ngYh4NShpR) zdY1A-TExXg_s`tnHs9s;&bip$K^7*mT84Zf1Wxv&_ukCu(u}?=KG~EJoyilKIQ}x5 zIIb{p*A^Rr^E#H(-lRpZ`T<*uSpSdiML^xN`hp8Li{~rB!vztyL|egs6WM=+1cmH5 zU^T^G&uYN2;RU$oHjD@(v#H0@k)nwG7zc=0404nt1g-N$xGYj?C@(p~8TfxhcgK0R z$Ht)fruquo5P{~|f_*mJ6nkE9fDLxJA|OJU23$Gd+g%WhL7^V zkO0Zbww&r#`>S)lv0Gh?=FsW^ThTg`l=04uR_Utf`^3w!=?XV0G`IcwFlV;0W> zoYc3!!Nw5u?XQ=37zVAEHKJDi35U$cR>-0Dp>5mpsEz-IBEi3{FhfJu{sC-@^ZY;Z z48kB^qlYc<#J6i9wnS}tJ!Xij7UHt>HG~EAd{{VscKlBgS?%LTC zrXv`Sz#P}T27{F4DyYW~cqCcdcGm~V^ii)!`jh-gq%TgUKmVwtXFZmh{)d$GMLHcD zyvg!6CDV^%LCZC#Q~3*%>FacQ!Q-jrPfbbR8~g)P(w~?53tmVqzcVY*|55C?<$5xu z|9HLs)s+3_?XK0y{7YYy{CO{>*7tNW{bLPpNhf%3Po^(@S(opG&#RK@5C28dJNT2p z_lRWr(kFEJPU%M_(+_%5(x>t#QNC9)eW^~*dnz^k%N_}Q>=pji$@DWcKJVjCqW-6o z>EqdP%T=G!f4n}0?j}~v?XH`W`M=fh1UkWUVKRM`#@CblNwjxrGX42yq`j^P|D8I9NqQA$nAn31C`45um>vVd-UsKC3PNwe_{y!ws*FC4(?}V?LlIhp8 zrT=){gzl!`YeX`CT;qRi3O$p*q$NFLl2XQ?(+2&SYzirqoYNnBRiH^?qmk6 z*M!Yt(YMYkQQO+I?)EWRuQ`u8VldjA6^yQghTWc5TJCYnejF9%It$ff_aC98CjAcG z{qh7zXk{%C+@_oJ+!0h6=ZVTVOb4stUfFx!>gtyhFms+(4dp0|uxxQZ!U1;Z7gQvV zJdHZkY-)uPGGjKu8EIvn;E0Q%LikgxWjwBt-@_<@*h36&B*FgHs;lj``l2|Uv5*sC z89nL%*f0Io)p>2Zh$r^rNv9v4Nw=UMhuHnN0sZ*=@MJ$ON%kWyXbK-BDi$zppH@dm zCN6k1vKhZcl!1TU#g(W0+g&{Ct3A3nRltax#D1ZBGJ+?H`Lw(wSeAJZEa+yrFIeV3 zC@bRfo9*oop5*S-=kNXzLYpHy8Rm*+AqI$Y@wP(zu~o;;y-8UN@u=-L-H+5HO1~rR zU`flL6<7@k;zEp;I%z8OQ`%K@{*49u&VLm1mv_$p#6I$KBVZ>6R=qo=Q~i^FCI4#X z|EH55_H{4DUHR=2Jn+6Ml8Dlwp1lxPt!FFOY}8MyQIn2$z5=ohgtzyR^fWG6!cP_U z7E*Gcv)+r^9zwRx__F0qX>hvd^^i7i9ziaw!Ivsa}fJH0|nY|FVB`dsN z23bJTz>M5ju75@WTkyr|7<%E5uqH3i&3YFN_SKF+Z2!;U^2tCrC1EDr0$f%EF zRdkq)%KzxRr*=WqXM4cK5s|G~ZEit#{qXYp~~YzB-;8GJMC zran%DfQ`dnkB{@qp#sYPlk@Xi2M#}wex&84L_CpObQ6wg1~QU!K5o+VUyCQQ&+~9R3diCeA@3nKVOD< z?!KIJ&pr2?bI*nNTAX(ZA+ZM8yzy7zULx{L;RT2?UV*!USKtC>0WURSk)Eh#`_dF{ zz=;ig;y}Z#7#<~J*WLh+YZKtX`Ht7`Og+n*bQ+0bJ`RZ%jZ;iVAwIlk6KYC<6iF-@ zfFW?cEi8z=SQDLU`C-wE*n62>RsDR1m9<0U9=w5`-ts_d&5|#~>G0u24}wEDa}}v( zX+vx8P@9)ud97VTZP_c9A;IMXLTnMgMAzUK5>Mf-|)FCiY>Un#zYv+p5@E;o|9fj|nvaPB=|VU&G1O? z6dyhwiQuLof^dgDh%+iL&d4Vtf5S227GM<`!7P6ie)|_XY5fBv zGZE1RrmSG>THloLjPgJIteL`l*ukRE*U7;P`G|36vVde|R?!V}Pghxo2Yc+RTrZZb1`LCt3dDJZq>02n&PNT`cYFC(w(6&nZ&`O=00!&& zOA+VQ`*Zj2r60ObV+wQ_qVzoUF}BBk`g41%J(v7t|Kj}7nSEpUA~h{I6I=f1DoF)_ zFaKA6bev%hEt^)FI6Y&A@qRI<_t-smJ%=EVe{y0a3ITUI@<}HFXKa+N={^#VqCSh_ zj+daY{nFWE27O-vsYm?&>Tefb0jW!TdS{3q;=?Q2h5ZTPxc%9Cx|~eQpVZ2Hdz-+C zMEE9P;IaJy>$^jLQb$gU!K3ZJ?oY~9!P)=c@WUPW!`l#yn{sR2O4kK)%B}sa!}aP` zgFDfB{a^W$Dhpva9jw*=)SuL>Q!P0DH~8V((Z|?Y{onG#-)6?}q22oYultLz?5VtwPe_Q&B7nE3V&^iCY_0=%0RpZ;OH^gejAFg|^`ou1JCi+qg9 zO!ddZ8{uc$h1=8rTN3C!&TsKyHJ&27J!?E^52abRHdOk#?b7?SOHZ@Y6Z%{BU>e2Y z3GE?#e!KlE93NKgE$`KC{@TsY{q554Z`aQP2B0Ik|{->8E!sA>! zJ+Z#WWPQ&bTi=0`t^OzEFNZS%wBHh+-?kTCZI{?CIzJ?j0H^Y7Kpq|lN4M$9n?N_b zY(-wvW};*Knv|FGac)bSdb_GI_me{7P_eO7Ub<*8zUKk0zqky~*~_yBxGBoS=<8~e z_@9TRVxWfi<>bA6s9h`4`8vSIhzVVp7Cfh6GQQZWarni_V$5SaSuDfJB1OD-4dlj8 z%d(@~ys=RtiWeWoZKQn=(-t73R)0NGHFIRL@b$!8z&HjPeK)EZf>hQz0qJJRWc#hn z38=C4YM8O$sc=6Z3fL${z(xs2kxS`3dy}{jiH2*;01{cJ;u%Vz`DcIsNvc*dLaicb#9F7g2tezG`w~K250<_sN zd_H|N5kB$uBvlxk_@swbQR-Q*M~|fF`jc5Zk(~Pp-RB5=Nf8EEDEV?PV0NykzONn3 zq~XU@G)S`u7<}*;i#x;n@Pk*A7tsX*9zt@}+>4K>fyHyE1@pI+#ui&H;amoL@_QA& z4aB}J4qXf(G*0li?LA3ihjMO^EE@_wQ2XuND*_(e9jijMv{w-iqG++v?Mmxd?85WW z!gms`BB$}p7{RM<&FOk*ZA$)Uv$q;+TD$P{sh%LGAB1xHL3oO@67&9mxwkAe;^(gs z?TLpo?D^Z(V9j4m){98t)O|-gWUm&^G+K@Caa5FwvMqPn{QeY)rdRp#l#w|Crm#5ht7lyCd@Ii|JVNdrD>DtC;D9p@=@6w0L|}>S zo5iiamN~jmf?`fh(!!ls?!0ROD;NgeEeFo|`xR%UdUYfEC)G}B{`}@p-AIQXpvNFr z@De;#t@8vH`YC00OT$!T<%+AsFBahY4{;qojCJf3Vl)jmS|2YquFET~{iNbt%^W?I zd8?2YnUMVrWG^%erij;N-WGV9$8sL#mUGGH7;=h@w>8M&Ic|CI)*|n<3`Z`t%|-t` z2EMPIWWzUUMFM;Q-9lrhdP+La_=)gs!99QR5a4M6H%|-!xCp@C%TdJxH&5(>h6doN zBw+JIfB0jM0hX8jCCz~A8=;p*VL6hp%v7)(dMqq)f!_jU)))z>Gozp^gw>P+q`V&J z10Z=FXtVguHTZ(~CI-A`IOGn2H+iuHU(Z3sj^L&7@DmNw&||{H@~-du1L5}&;Fm12 zuT~PChXFvZ4Zvy4{96gYhXB9<$PWPCB7VAxz;2l)0a%y-z%4caMJ1<~S9SsSFm)z=Nug!@di* zCSaa*UZ~?ol#^E|89$yJs}IR?@7z8psl5Y4yXxG4QB{Yjh3$HL3?Zp_|h%Rc-4tIZuIth1k1as(I=x#%l@6OSEzxU9N!v;5UuUl;VAu%#SxU* zwWb|f6XerTX4t{|a7d}8VdK_qURO}kn&VEZbhRT_QSKE?VoXN|uh4OXU;DBg7 z^Hn`Z?uQ+iu@Y5@hmNfVvNaTX0^_JccFxcPyleq#3MBDjNI5rROcEdfp{r&Qa#{DX z9_b=y2692-^E@aXA;C^Z&qtu=P=J5T*RfAI*oKupZ!BTJmVg6`m!S^!xx4H$p6hla z0wf!+PXkN3i~ieFarLx-RuhcPVJy5D^fpdQa)@!brB8O@qE6si&^?>`itz_2s$YDB zZ+ob%Z}8$F55giYnB8y(>SI^OqO0iU-Iy42_&u25&Z26hoM2fWl#_1pc-vt#Q{awk z!sb7o>@3F}8WcnW!E;elPt?SUJ*e0$(M|nB4F4+OX;A2UFvQM~N z<;R51##!6!U9Mu#C zzk%blTA2Lrw_v<}Byj|srPzP*^R+W2aXh=N*4lux|K@m#`?ed8THgy)%{JSCwcqjt zDn&P}^{>(k<-ITPdCb6_%1$q`de)v_DE(P}0rbv|ibRU4!GL=ca+kk)^%#By7)yTT zwRaQv70yqbz9ols)jQ=p73Lnm~vkXK|sGfxX6(js&~IyDzvE@gxS&+6fA! zhnHg{m-R^;TIIL;2vyrqj2~EC-J~AlEv0j zdB??tWq<(}WE!2q&hU&BMSo%kaO{Th_9==UKbl+9pcS7*jo~)uByK%v3_o^l?nCVh`QN?cpEIR z(usE1z>(SQ8nECS)0cmeB!@yBw1Oz~&(-J~^{X&Zm`26&E#N-BCBy2MNYhD-3xc4v zg(@>0!93`Y2U6)rX~rfocs36;6=$0zE;1(P$eMrq{O+<1>HzVkQRoxhf9+dL7R zel)`V8*RahFoFwWBe<)QBbb-TS%nrYk8&8yfno$vZM4IGo2)v#0>9`mBs|E-4o9;_ z*ZWL|MQQw~Dan`bO`ih+3A&lRibrg(v=`(R5pat*E{@y~eI;Jft7G-GZeovH)oPaR z;zn%vbD&O#n5NL!XM8<`C(b(tVTZkIG;X9k=vrQr{0QufeMZgv+4v1OS89=+p?QFy zrW<5h#3itCG`0ckVCZ4#Fe(qqD)^)N@mCn$Hhbs57%?LR3Fb!UMB_b?+)r9}7}sQi z`vG^Au35 zWyBV|ymte>T0@d9e<&8i%#Iy&E&46aD$T<(xrSP9mgkmt;8-R{Y?iLyEADOqj~`k5 z7|g3DW2~p+uMmGN2uJYO3E%bjb##jUmlXZ_FMlLQ>vN`9pQ+KPV?WYt`t9R`e7pv| zU91N}g2+{*akgRM01J(RobZUu@Cdi5C8kmsds- zpC=p9x4D3~&_MY;zVOs^G3)k7q`ETY^Hhgpb|zRs9i*+{F67Y7?vwB>&O6i=sm^D* ze4KO&(<@ba4bwXz-6%*I`d)QweknW|e`zSw!ws*<2j$j+#aIHX!&uqSXzkB)?g zwek2^|J$PxSHsS9SLhPdW)!5euZ z{gS!fQMs;Tt|LF#V`oP>-iCKo@(d<_j%4)9#y6nZ+zVSC#NBLq$Wyq1Sr+{vEO71( zSEfT6ellUS`^KZV@9OgHMTC4Z7VC)n8jJ_&_LDr3yiA~U5;pDOFXhi*rvfmtl=R}7 zdI&EaqT-OG7I<{s5O^Aa^8~7ai>hE~D^8MIVJWJ-ffeduaQ#qMKDtehkM*0@GBhn=lw1r%ukB1;7KOYOFnH!kH=h+)@?zR_E%ilSPKZHFk%ke?J+aepG)lpJn zpQjJ(m*hwCkt=<9$-%z%dp4T%0#r4ls~&08B8^pfj*4$ISHr%3AadC)aDCQJLDY^P zSH7R!=$yDuwLz+7&e{c597dzyh78z@eiv$+bjJmtHhYFyym-DS#w8QKEz_AL;LntB3$|ceHMa?Y~QEK-=~K zVbIz$_!gh+#STGcsN%9gl^MajL6v=jx!mgeWWZnWDf{s<=@Qeoh1z}Z|b-)@y;f)?_5|1Doyia__@5T5o%s(1T zEA$-IjDv`7f)r|H6juDe`x5G$rR>j#?2};2J%H(y3{wjpat6!fk}MM>Q)HQ7#q@_jp07T2m#TOMB^ZNnZQ_ z)JJ2Ef*XRp4t}LgIy{&-!75P{$$6GCL2Kr@@wAVNgXl5)MZzI^!X63UfH6JCEPY4r z8HZq0;NzyzGNcM)x?=;@|*Xw8m+lVvSS=H zz9lKZ^=dH`2URUxlp!TV_l!Y-meaTwt!?RzAI+GM(b5GU(a!$sY67e~w3bh?iQp}|OvtmsH)OVKVvs8gh$?DtW!gCMs+mHcie@O6s(BW9G+QwB z2m*_5g7f|cI`GHeR{U*-^Za}9SBJm1@Mj{`|jvIC_xW_WnB@oQvMA*rSxWT)ZU(w7!|*7T9h8|Exu+hn<%ACp-*3 zx^9%B)SU3JnA9oZ2A#cM`Rul-V@Q-=LBXCW#^89TLoMFGUWu94V1Xbc&Jf4n%H${^ z-}=Lx`2CFf{FOi}E>xxXkcNx)1)$fzw&p+sk!m3!_2NAb-mb94&W*u-+6rPJr25(T z0js`}8xJl@B}>zbV)hK|9Q%y~tkFhm%cjhnOtLr^=mbT3I=21bnX%eP)W8w5Hb}-* zg``Jbk{s}YI5lwL(gh{90;vyF`lU40Yoq%SG8CEpl>pHV=zW8T-1VaNd_8H~Y4I|VQ$DKTlF%}+nwB4@>KG{W<4Ab(}>Bs^gPX9)DL`yr0{vXrb1^L?l) z&OY7Jf2s1~=;v(_0fQWe?83fIkOXlGMUj<00go5Z;%Rpyu5k0wCI+@MFvbeJ&A{5jnw~s$~84CX$hLIfZ*KZ+knHBg90d!+> zT#4VXrZp(hQT+3)DbMQ0GS>9Ty{g*ZGjOI=?E(fau>yB8kV3m&v_6f2PFCPX20jj9 z^hmjyfeXVbTOk7(Rv?c7+Osj6hk@O7DsUzO=;lZF#%7V7*v79ms={+vlWqmd8MxjG zOl06pD=?0M?>4A1eg^hifx!r%m0!iRa%3@D$x^M4Z6Du_t#_(XHAUV);A;yp|HZ%& zEAUSS;O|OK={5w=#s{d^#>IEoMq{pw|12(kJL8{G@w?*UnMW)}y!d33sx-tF-n0TU z8F-GDF$|0fd?6QZ>a*3!N3A5FqeTp zSb^yb%(eoP7`Vp@T*JVhtiW&tFyRj`icR>R@hvV@J$^1O{#C}G#vZ?774FWOrdR<7 z1C>_b`xOXGumZaom~I8OGf-m%-bMhe-x}A-oowahi)H+rxcD&RA3?l$z$$zXYZ`6^ z<}+}E6{ujqYXzn-Fxm=S&%k6WFcJZ@eq~%MBiPF2s`XKE@z>*9?((N0Eyi%F{eIjo z$xnzk*DIh*W+P`=B=uU=$OWt{No~F7vXOT#l8yI?i$9a`D-bWnScUttrc>Tl)w&oM zZqe{$Rqa7DRxQ89U8>rj;^HHWznRs3W))sjFWWv4m+41l8lnmxjf>~EIOjO=-C5}@ zt9#|BRJ7Xr4FeZhDdSXgAH`M6Z?XA8*^Oi3mm^+Gx2E7!))ce?-59vT3PiBz#9db4 zUkrSv0uoTW5b-wj`Gz+o#uOfW_pGa?#eyn5BNhQOpt4v9`XH9?7K<^oDX{?1fa&r4 zr5?U2p?v3r)?g2(P3ylht_FoaeRfz}Iy_~1VPX!mXAS{IyM{Ldvd3;S`oVXM%P}O` zk>sf8633pB^(D)xY-qCKur_Y6=pU?_;#yPoCmr0MccTii_;c9{nuAm5OIxi`9N(;N zcs^`qA1sujyJ3VhdMcR5G58W!eoVa+lp{Du;_$n*GrTu!%Wn>*qBpJZAwCxt+epPL z=*S`FKv+Pr7H#vu`X6hC!BwT^BTe-Ljl&cbQ-W&~$4<#baZ`fJLydl8J*-w!#i>t% z4JX^rDWoNPc1xeQ8DcB3|9Du!)1YenpIK0VArTdO!6I~k=c*i|v>QALOGg$nU|rBK zo3)$W=iysiu^mTA^BVZrz}R9QHk4oXmTAyOQ^ayS{~z{wv6pJwIJNpGDyQca1gDw> zKMnaK8geZR%jSBQ=h&7o`qr)v!+_|cskBD?C(VGb!et%uct^=XD6xr_|?8WDH+ zaaziWmUp}(%YPFsFBRgd{Ih7@s)~v=>+{TLtuS#~cm?Q@g2=2)M}@pVuuklnMa7oN zzxZ!kV5frWpT=)b{5qV+`7cSuC!aX^IH@YyalFDOEY&VCdGg}#(AUHG+imq-_B$md zB?*83zx@vs1^;t0Q8S>>sKlGPQr#>VF0_mBZ-{g-c zx77(LF~q}=-l37MQbhcbIDM@7=Doce3G=U^CB<_6m6RF}j>HKOpZ}#4 z8H!i%tI;ntM@#7t^#X3v>JmC(q*_LrOkhe;-$LY8Z&V}j@o-ASD^f5FH&gGF>(O5&#Bta4lMkMkIVD8@bTOm3d}B4z@+hKLDk{0RjlqNUg!nuQ+*t zrE@o75^zQ^kA%ua2tu%r%SY4}dm3r0F&fC=l*;50Ws%<7ze#hn!cv3AVWpVjAnwUf zl|TeIS*u?SF!(%9v2qyaX>OkWpq}IerX^KK*i?dE12*H($?+=Y4^S2(#)la9+|Cka zptmu>@1em8W=TWZ!AycHan7Q^SdBse#Jk*!0Mx`>QRp1QAH?a0Z~st23ZB{_>pw<6 zeA^vYU_;z|zAfl4|48YF1Nc??VYJL!YPfM39tI9%7=)F>GQ-14!#9q%^~IymNn5V( z?NDDl&+VYTI5e-+5nNAEeR}OD^ES7>$%qQvW7sSzxQd5wj>Md`DD} zo)^9YREAYxsayBM-OQR|_oYMmdA4|YB#%UppR8-9P*)TB~BpCtd3v%BUBQef^34gqPG!8QFg0%a{tp(ig^<>il=D zsfOms_|7<)BM5z+VyvtiJ+Vn-))kb|Vltzy;3ocJzrY&6@vmsT658O)aVH0HwJs*7+8iaRPLN3v2#BD zPdORs`uS-VViu({GtjZf&5uNM+#-%%mVl0LZB0PO89>K4RFu2gG5Gl0mUw)GKe}u_ zMeJ;(`vG8B^^a8jyB5;mTTa6W;P*S?133w}Y*?uc==KK#GBzt!YoaYgW_^0dbA1N_qk0y>zJmG3jvsPytZ_=oh_k$md63 zQcK;rczzAZ{x+Hy^~b?s0Y=2jNTZNumfU7v8@;0^l;=_@%6sji6w)N#_uMGXgnSM~ zhok63t0?>o#EQ-ogHbdj33TdBf_P!Ej#mXdDUw~N#XK2Z6 zKyBfhV57XSUU3ThMbt-Ir*Puy??s^XG~HO$I)G_qD(z&M#+hii4gZ+K9}x9DILM8n zWTkBvsLT)U&XN-bI=prhX0v+rG8BlBUWxB&e_Q*uoNeo79@mu3;>E9r9K?%iJ?|D=(F2x~_o@o}Lcx1cpCdl(rC)q@*am0Zv+tDu1pl&)I10 z&1ecpQ0;j#dL{x5)A5fve5sh0q2}`aG>!~CR@C3>GvrNq$SCgLDCY}sFN2mlhxWaq z=RQbo)?+-brA_iWle}B3@=xv{|Im)}OMUR=DnDIu<$b-;l?pZxb^$hd>OS2NG210!!=o}pnVHQ=AXtuO(liWTJ;m3|sA$MW z4C~kSA2POn8#0MGs$tzoT@{Qj+ZT}%fMc8-R8(y2(tt2hU?}#UulA6akf0mga~|#q zOKqH;y_irR?^>SCjl(NGS_ixLwg~+=bnl8x##ZtE+kiQiW{$QZlf5%jhk`}HF7*i> zOP7v6ReaqUXcK^$`&Jb48Rgvqu+Cp6`!@@?_-#dsv7_~z&`*&H zx3NPv*5uvb2==W02^r*u*ce&m&C9FU<7)W6A6#Bl+)0CNJcs0}S%xecjuYd-yHf$P z`cM3AW3#nHLbD`D#N!biS2AJc)%~=)ARE=w#E;zxfqk^rNzyr~)vGzd z^2PvN^N8=yQw`(JNo7uF=Hd5Ye5oP} zqap<0@#8>6PoG&-0@y@mfewD{!4@ z^r*dm$Q<-QIMzw5$HP}JUBQ)IpOQ)AbhSa$>_~DL`&yIffGZO0!n@zo8MO^Qg{4gj zEXFnCLzs$OfT}E76*WMHgd^VQB(6*C`eS+enAt3QqKAfD{~#RiYsPksH;9dv3h<=e zc@;>^Xa)j@QwJkmt8ZbOX768M=n|d9Q)_v8+DZ)10vIkw0wmr-Wyvhf6VN5~uLc4Dko7p6FKWO*kfl49AUypNhULU#t3Wbbkc3 zqGyHh&LOt4%gw2^h~j_h2!!(>?#q`TEUHu~JdlFPheXDDGXW$LUXfSv+6THhg54aG zHIU2u94_x1(Y9JGZ=A=w4?r@O_YdeZmJ!E)add^3u~D=4p&Q~>c#d4*YtN920oj8F z;hPE;4T1w)cg9yY$X<*kSye0zir7is+zuy4r^M=?ng}DwlU$Jot%zr+REz}ZQKXAz zI6O%eoiwP1Jc$Yu@7U4Ni-Nj2Eo*B%shp@-V@+V{Yqwc+un_zH^NZ05_{9nsuRMq^ zQbJ6NPB|9VN=aevKg0+~1uz6x&1x_Yp(}A?{55>wx+qwGm~Oow0}yUv=JH7A@_a@T zwjGePY&QG|jM|kStO^~7bKy*dI1|yDSyBPCDa2a4UDS3~Te2zz`BMguYmc+n)vGyz z=zXW_DZ@r48vB*=9GLk~Sfu;i!@%pQb|44lHOBGLjLtvuCW|im$cZDV^EsQiu za*_@tDHeR}Vp(34=c~dr59Tee7h5p3Qm$I(0Qq_i(T@C|=8mUbw9QY)cPhi`6ekw+ z3h%mD6%Vsob|FC)uoI3#@Wx>rK+Ta=`8#I6NV8h~f7-BpdF8#gmxE9TEkrWtz)pO_ zUZ_pl-u6c(ygaBHDc&mP;poi5r=$09iY^N`v#?U`bpMit_q?eJANX|=GwTz#iB^2V zeLL%^&yejDS81Lm8i+rLgOoTA^%}LykPjwM+CFjrJ zE^#k*i6i1@8qu(2HnLfC2)U|w;+&QCdYU@TT2HlGC0Jf5l`G;q z-FSn~9P#cC5HipBIDj#E(e6NYOT7FQ`1FZ8@kTw*2p_VHSzI0n!(AWiUvoLV%RgVn zcx+fHxZ&*~7N1My=Gwe7gQr^dzX`kmZ_h|xfYy#2B3i=a1AXCn8d!aC-XR_zG8h&; zFFVAsjz$w?Is|@sH>zd;K77U-CHMg_2DZCjWi-_VvT_UazX3q;*5_vsLw`y!2$q7; zL^+5r>k@u|AYjQLbg4Krkgd9E&SOhhGY~B!Nv)X+uTW|GF)3O-I3`R3NU(xhhL!jc z5+zzMU5qc4HV_lUO1WrM%uqBFnE1VJ%3QEW=AOD9C+s(o#o^08>ROa9GmkA-1#YtX zbq`{Tjn!5`m9}({s-AMc_D!$A#Ib3wtPMjE&AEr@-VApo7yS`!;pHpWe9}|1fY-cq zQ{Mm6olSVRc#xjob_e`Osi^#|GiDeYt9SJSKR2gSWPND;&PbC1p9CgHidAARUB*@> zVqw4;RA@F-PWx$uH3mNyY{a8-Zjs^lTm>#JCQ@% zXGiXXvFPlL#rbRJoM$xxY8UWq@tY}me$Up)iy@`ymXrhNdDY#$y^*zA{z2E>Yk>Mh z2fy=ZqzMQ;(C2A&)$YMUk;t^>Qnmm~NZ%QH#~-XrHhSZ%Z5srdAK z9z;Dpkm^~+hdu;zbh4QsG~i6i@#_|@!`!y1UV!!pM`PZ)4aL7Me;oaS>_bo02VSvN zilFa|9rAhKJd7WnO0aWYgs)<}La{A;}>KglO_MDYOh5}aMV*Bk0ZIrz_Q#!b1ea zMQ8vv16QYu?>}SwolkMsN$>jZh-))&$q2k`fAJlrDSwSZ z5Na0D%_7-Ny7+AIAO^WJnHR^8&f;IE@itEV6G#Ned2!oKAEaJmt7hs+;)(r)uR>FImGlpV|b9mmtwdP18P7&YY zWH=dwI`|71V2MZW1f}v*(wqWph!_`KKQ`QtSfTl@tb&xx05D0#;2S7ghYW%bxH4xFzlWy!x) zy3c6BQ91;H>t%KZ*k^iuVNJK|L^z>-+a9k*)d0cg?F+E0NgSzgWAmx}E&P`*ctr|( zu3-{TB>KFi^t!rE99&LQk6;Vr9|Ms^Jn*V5u{mal@Bs@nz+OdPuwl5MGloJrt^r;{ z-S`ENh5}?-Hhy#Pi!FaB!~|L%e!ckh;#bG7j^7gemf*J(zoqys!*3aWr{H%Ae#`M& zj$bfK+AQ6eUj-QBH8}ZW%&$`+`D4uI{*5&GV@O^cA+qEsw@jtUA7j4USi;rv$C&@3 zN|Qgv{CX9VKgRq<6_P*3{BM-iLvePn=wCxCXO(uD%^=t z!W2%98=%F1$MoZ;t6H^s&V=zJU9R`;_iJpMrk*Z-`*$vT$;)PtLBm8uHP^ZCYV}(= zIxL^;RcVgUmZWg5Oy@!;aUr=V05%o4@dqp_00tERdkVbx1J)D(V+w#R1!edHmf+FA zZ~?F*RK;q;p*r;=ksutB&<}@}smN#4kAind0Xo#EA~_Q1Z{QI@^%+PXl}qa3dzmW` zu4b-P@V9gCG8JZxGR!)W&N^k7?IX@^H#7!&V;kc2 z(|M45ZxOYJq+A?=UwK0D60vk5dkMFvD0UrtzEs@L^8b-QQ)&eJ;wz-DWCnFZF+k7q zJ0z#W;i`EUq3S!`4ji`Obb1Ox?Dr4&Wxqj2%;Aq=XTDf;-7i_amV1zNz?+gB910F1 zL+t+xXbNN(5I$igx?uIxTCNXr&B%(@)u!tD@>h0Ux#F$w3Ha7wQq~_ZHU$j0GQ@y! z%NC6T4qD_sf~)nMXf5BVT5gTja*?&7qKSkb|So@_7So7vM6g;dkg5r;KMCOxeqE$kI)G_%FMQ zGPCN6{5PIH%Jufs^A_l^-e8wcb1+xUPE=~c?R|cS>WNZ-8|^&_H|+Pp%NpnsiJh>V zg^$84*%*6NT!l`Mfl#v))niK_mPsI9{A?76eH0MeXC_DoMw=z> zX22raiVoji3bf#66MLXXmT@rATCY;I-W4~4N5m4;D$7}rj#eBum;AKh`|@9p2VXgH z3ci>$z?bwFo7d04_aSR)sbI#K2TqJl?O}0X-wEMsY1Q0zpMJFA`Y|fA;kudM7F;Vb z@%12DbX1&Vqok|muWUN*X!i)h@KI}4QycJX1jNu)OOW6JLnm<~fNvhnDGJ1G^pa#8 z#BlUkWFS7&mh7rI9Um6oT9MO05H^45ZjOyGB6?wjQRI;e%jkp$0Ai&sL|vGd z*>R;dh|l-7FGb?^3{<`#+1MYzGQ(G}{r%1z+n=ZB z>>ud4UCS0#%aCX-7m8<5OWef#d-QzuGsj!+azfO4C!CGNErMJL#e zuhv`7i&pX*Rmr7sm2?r`w4NAvHhu2(=XiMKTl;UWoPgi}Y`*EJ9mi|%eLqK;P2}Vh zm8$;yE)G(i#rSA{6r?Qsr>9lx;9|j5$*tcTFiJ`x2@3uKGoOK(Uu0Fw$;DiC9Uq(d z&LS1ns>3+!jv%d~Y{o7?kfFfJ>thAd#rt2|^FrBHY}2ymBgN{G-0*|(^8w3$&PN7n z#e9_f{Ctoz<9tw%j((gS*N;vj5Z4c4ZpZjK^Qn&MO$YcoC5EqV%o=BljZ5*G+5L=! z#<#%G4YSrBU+YP~6M07qU+vmnRzvyfy4aL<71gNi=kRq3@YSy5c~!~nah0Tr!Kma! z#Kwltq$iJuuTvC!+^8M!Df@Z&+>4x?BJL)D&xUJbgGv>D6?T6VzUoF3q_;5Z!jTRy zN@V0;rO(4b%L`-b4Ms{G-p`IhCP{y;ibpR6UyJ`(_JlPCoa1oc6MW?Y*=dRYbFuXD z9Kkz){VCYic}Qa?Eo6Q^4vwj!6FQl=)$!o;tsc6+g3da!AuFbO0jUtw92G7hbM#a?ZWOtQLSzUjAs5*wZfa#f zPGZS%6_9d$+wlM6&%i%h!9N-BUt&$djcO8ph(l7R=(PKU@F$29;GZ1_e<~9@g1_D1 zb*jN>aSbMm`~Uf~@LzU3_+wCnKMuBpzx(ImztkGKU-e`|X>5HaiEijg0{qR?Q<)!^ zN>M)rnu!7%B}zM2^{yBOM}9-|hVk!u`B8%B^my<6raWs)Q1+Kjp=*!#FOsMO1b zLmHTi7va=fg}O1_4YyX(3>B9&&OA_%k`f$7^(b~r+>hK689l3I4XZc|yAh=bbk$J) z0g)e)rM1Hc$REKwMh5SE^@44Yv8si%NjI*a1yfR2&C?7(ZIvfxLL*GuW*Ip3bYf-j z*Ie^pv;$eC)R4h18`N2-GYNIJ_M%B7WSQ2>hxZX6cy~~PmPox_ z2oo`kN!B5?aeqI+X6B8jSUzS;`Z}k?dh2e2eB=>#Fh6Hkx?x<>wQ1zNRxFCnq8i?Y zAS!)Je-N5!*34>^^V4y%?zvCagClgbK5orDe-wW(^D%4Up~3NGg_e0alGkv;ltRR_F(|KB7`l*wTOXi6;Ff}+DNrwV= z(Xnnp7gq3iM^a=lYdLnV^LpEJy-m!{Zw4?5@G&C!m&>LP=UfyCslEN!ynNo3H(_6VgvS%jVuMEL4$h%<-8XV%m0*> z-^=`+#U807pL-7*!G%JaGshnJ#75vVM<$8RUvNOKMZA$&j3v{Fx&2{ivDmX72Zmzp zcT$+#M*@|15X8y7Sjy{Kx|VAy`aUgot@!70Z2m7MpRat_0_C0M(1RLRO@Y{^=?m=U z>k7dwcM|z)4?yiNR4;2ecfc5}M`x)+WPYQYjG>pmR?Ij`H(gK)FxlMMLfNn)^zgv zj=q8rBrt{QG+c)&)H)|L>FJH@kUIOiX0nT;vUyFK0b~`uw5YJBcN(ns33&!tU=l} z46;-=?iye7JCn4!*9Z1vDsqChG$S!xtE(A!CgaQn#09{F z6or=az(6m+lET;?Oz0)Qbiy!8etHSQfhv{|^r=`-0lh@5?u=?e-}ch0kI?S&_I$Nq z%{LmsLaW89hrYtq%tII?CDZ02c0k;Xa&U&Ad-m$*qX*I=z-KJr;trU-j-Yc6pYwiV zcfk14A3oC`o{&zjy_#zSO$Kp12jlc3$I#qZ4-)A2U>C&f(7JBf(7$Gu%vVCjXznlP zUhAA@EMV#W&06Q86l1~b_IJ9mpwa&BW-M53e`m=;Vw( z!_C3j4PN%tvz1)jhJf>n@Be}U_q>LN8?Y9Y#9FL+xK*veQ5b%5jBH|By<40D1(>GW84}J=}a;<-%L+hI6TBn7r zIoJBH*18s@FvgyG6_qZdEC{HmZZgUO1gI72>c1LGA&3T12~e>|afWLhx=_OyxL9T; zE|w(>BQ=iR6_VZ+mxv{49FBYuzVkPDfq+~+mjRy0-iXBj^Ltb4A__psK6u6f6O2%a&%@gsumTwO2?UlQsDbmkqKDf0%P`O$2Gf9XuTaWFyZ9>n;t>;9&5M}q(AUYqn-B^P4*i(ys-@MN zS(t^bJ=6$&uT=;Zhb+YHRla4voy}ISW*5M!;jSDmY{U7$W>~x83Jxu(PH7U!pdxOu z2!m~1uDykNVNQ53bj0ntI|l(jjD}syuj}esKD1lYm+4)%h3?FNoUS*LT+4@dMs%0B zeZn=LcEUIyoQK;184ics6>h*vM$iq~nSCJj)2Tfj?qI(+K?WVInd}g{VC;*m)AE~L z3n?SljB9~sihlbQM6~+uOaLOLu;Cs_Oz$N>{mg68am~&6fhs_;o?b_#T@~mvZ!-7&MISs$GV^wd-kYeZXpFIBK zGoK)%-&X$2V9 z@bH(zEaM;>nC!Z(`xobT#WsjmC@e%8#m3|Yf^u09C_tHFHhW5$lYCiFs zFQ{#ElNf+57=_~lCWJ)V>t6IqGY<2(glqqwDmjv88@LyL{-=J|uutife|rmh&HMr9 zPrBzP-PjTO@=AR0$b)_4BY%@fLkY2~6SopPpA`Y^J;Pa;sW*M)Oq$aR6m!s=UNcg` z-ysfYbP{SM^N2EYP&WqGySF{K*m!Q+U|llMcOu6IdtAJWpkrKnk}BTwSFardR3KkC z=G``IEJfpW6V6lo){y+MAt6uPkkZhs%&9xSPZ$zS`f=*zkXY+UYDl{CAcv$mi{zNJ zq`AF7HZ!$Bb9>E5!#gwhw#UW7DEJh>h?lq|5XCb;eh;uKypg1*1y4|eT{;?=xXvuZ zC6ldSp!yENKPgwlt;RnSnOFJ4@`PX(9)<|qEIb1GIjHFixM>1gl`^R7RxK=9s_Gvl zN0$*=wa-|k)%CqXGEXU}G-1gBvABS^-pC05->er1aMUxPy9%3> z9N}QPnsvE_{hj&ZL3}rxHO~8VSBo=(25PP#oPnC$RJNFU`k`xjE2MB&=Bp&t@nTcmvBafF9x`H_ff;>cz zmeKoP+BLfQ*Q_eo@zhu0z$f~vE@Lyf<#KB?sV&E*YrL@&|MF!uu#aW9LCG^$9-al& zO_N)QFFYx0fX^IA8jF>%4VQdt&c&ub+fSE2!?(G5X!~3l!}hs)3>A8)HL0SJ4~1aSW5C76 zJzLppAR z@&~rzyKW4g4#4+z^?eqAh3sc*=C}x|n1U<=0c^=Z+5A&J z9_{1!w6J$4-nangInCw!5FvMD6#_Z<^7@UYx@%JWktPjK!<%naVGf5IfnH^W;nGIT zNs8{m@oC{K3SgFlOQ;)G#ox2)hE?)ecjvKh{wIPjOJwKAadxTy-5`x+Y1S{f|{}4o=@pq zYV1Dpif6G=kbkqdoCn*UIR_(b>t;C5cE}%0Ym$(YgsU~Y9|M|@D|LC52Pa- zt8M_vM~TvdNnttcR^VS~=Dz(ANU9YDP%j6Hfe)r(K2{U2B-*aQ=rwaBE)rt*ex3+M zP8`)`=Qj;Ce1m6U%q|~lZ`zq=eD2w1Z1s%K8Zg{BW^g%X9LGQL=>xc;Yo_#FTa(J- zRp!7Scm>t9IrLNBjFX3kUq0s>L<6ux+VJaW?ZGHs_molibpY^L?8C_Lv?2QdJrMU6*abaM`9 z#sg#yfGIEIr_gx36h8rwKK!5)I$RV15f+xI;6Qv%!l#d-EB0VuAz#_sXJ}yghPC-a zqRJP(su75lvUX@jRrAn1Y+1{6^S&yy+S~~x(b7B|tHSeVV?c)XsV{u(rw9(MGPJ|K z@STVGU1Ml{ec@aB^1IH^2K&O(2lM-Ge+bVC{@#b-m&#=kHwSUUp9gtxJc!8?^UPj` z@s{hMRbWHu$N@AqkF!pA<1mnqmpn$L<8H0X_qpG^6p;0Kd|3m;k)`k!g>{=}j=*7K zSbAs`o>D|*TD^;-33m!O-vKAz$m1lAY}!tK3{BCDB>90FK@Awy4PRbA9Ja|&hCj5j z7w(*Ln+olObpA)M;GlYqurN#F8UJ0%!_d#6W;b|=M1y$qEY#G4eQFXZywDM9&PIWS zl6x!Jju)2{ckw%F+p{CS;a~Dxe&IBhx;u!sGw8tp5 z$_ETM7-?|ujHVWo_-Wtwk%ncQ0N~pm1bFk5yC#JThRH3Nmruvkg2Sj@&8=JB#!}Z$ zqxL;9dHIMM$%?>DWVtfTqL{otjn((bMz)AboUM(~Q^0dbIr?VN_5wucJ>o>`n?(hp z62$3az+~9sbRA0#I2R{QCng&S;`AV5EOB~`{FLJKB`UTAg77C*Y#D^%TrU*OBX+g? zgpl2qp@aV0GV~lpsU`bEgCr0d1TZY5pMp>#cvzt2@$iNxwRd3T-cwQ>mHD%c=vKbX2> zykuQb3C&rCn)5++IB?a_{0CyZBtIW*d-Ht^wU`>VE#giv z&ph1geuP61vOAT)-4e9o8lrM!!y^+$<%VRHN2l9&D3QBYZ~7AFuT=psv0zViqt&^9 z^cd03q{sH-D=fo<!M=qpv?SCkoqbEiZ-bXa5NT^e4ghl1GJbo?}bM4<~gO+rn-X6yN<31!k~- zIW(J`v2H$+^%lnpg5w5skeLlYOdI;LQLIFEC6B+5%r)ij#lRzo1`l(VD4!1?EO9DM z*rL0J;x6dWvw(h5&e92mp|lA&f0V*?JkSeBKrA-qml4e@+TmFT3JS4srX^-S3wNGjRh76WkfGVSb&rfnT)W&34y#V(yu|^x)wlz zXG`>#AR;Uyq(J{k1es`4R~EI&E8|NTQ6>(8si86j9M9W$!UB6yiCl5t1+brb4i=l& zK&Jm8WcsG&h6D*>eh3WtuC>1S7yLt=+gj#Lel-TcN7<|~Es#%otGXnc;)yG7EJ+|-;1omfO ztZ@Q+NJ1d7zYNVBM`C{(k~);w^BPJ!iT!x2_n5@~f-xtO*ssL&QeyAQs8zCQQ_?gk z=W}J4DQvb!5>k7~FNg;+%q;n-VNuSfSSZoJcnH1a4!(9IdV*8v9 z#P&J1*nX-dwx9fe65C_qA-BhwK+5gE!lK~Lu7VWGuK_oRlVwb9zvLsz?PVrQZvR-F zlG|ULl0|kwmc;^x_?7{uUD^`1e_o@ zTZ30)jKV3$6W=3C-0;4VPs~8j-(GxAjf5q>XQiWtSb|$AzIPVN(Iw4shYPa?&2cM@ zM08{{c0(Bhbw?%ld%kEdxjzMxdn|d1?(uV6+5PhX9@+Li-1ZR}bzk2`@YCI5N zrmnmQchN(ub(pNnA9X%d^{3hO-}=9-zxe0s?^u6ue^8Fc(5C#X{@{8n{GZVuth*vn zf1uECuA9pX`hz$Ol=_3ttPz5*oD=B}@azlq2N~2K@SRohc? z=>gbHQr5z&$k^VM{-6<90AbO9B6HwV1PBIesSnDjKFGN@sy?_7@=0p1z4(Rtpb>`> zs1G#gD4{^WyDLj~B1U^}FDyBr#Ai#oQXtS`5!y3|GE3q2>sSRsv)tLG0s&c-0-+S@ z0Cr6?M_~@YA5&o*I17K0W+Zne}R%#d1y7m?3r zh(hBlXb~2}Q5g%uQlY94dW3il!rLd(Ai%j-q6WclX%MDSW+`Wx)^B>TVe*9MGv0$D zfgQ3H3HRb#Gv4?IexP!ZBQ$EcuLjJaUd=Ff;>nFqGkUuokYW!Yty`i_c~Fj8i-4ZcFa~ zxklge!tj*F!f@Hn|A)GVDLBpcEmyh+sISi02iQQ=+;!fE>}_ha%A)m zO7S4Ex1NGi@!C8*b`UX|iDOa_znVRV=+(#d_B?a?3<#q+$e8|NNS&pBC~dEQ7*b{F zAI76%OaH)1I?z9Gol)74j$cdvK)Ha7!f%59!Er+U0}z4|pA@v7?k(M(#YCj11eQ{Wa{-Oo? zi)$N|{-UqaUpUcIslU*g9jFP~O+2m`ufVwFI0}rLj#Xel)gHcfJW3B;Y-qE?(`WN@ ziBV1GQ2cxl3o$1wgMOMn)lQUX21|aq7(1T(=vvt*YOeYr9>s1(f2Fbl#Jmbk=w_vt z8V9HWXG2vD&9>N$cK|GKeQD)+Uq}NEB!|~^dGXW&?+}o9#Z{*+c&WHOEQKj z^@lOc(ta47l=8zEX6ZhRVP2*7Fou=Mk6y+?_DFtb8Vi@%-+iGMantbSM`%SlR*95Q zB?1{zid2ipp(N-=G~6G8o`uShS`z*`Do1Kb_3NZ^q?R=Q|D)|);G?Xr{qNifmpDNQ zL`97n5e01&)L>9EkibNP#2ccbVq+~N!WPr7>O_ zh(Zv#D2iBYMX|c$h@#dIyfE+gxA*f*2F0HK-}nFW`H*>@XW!Odd+oK?UTf{Ozs)!@ zwbwX;O~fM08i{UvogI?ojfjHXO&3R)?oWU{nN#+Dy`~b)N3-EIOeLZmDGoY#smE2# zN(hp|6Oul(ML+6lB$I{DNlGD3r**2kD1A!A%3uC{OJ!I2B8*HWe>K1HFxqU8_8Z3Y z1mWm0fasncwYKO#*)EKqiUow@1ZBt`P?NQPU}m_SJpLhqsC~4D2%6p3YU~$x@c4;u zs(8SD&izDY50|;P<>sgLH1Otj`@x<@*x=G+^4RLWs-hh{+KPNb$IV$lqN4s;i<-Zzs~Eb@rKll z_#f3Bj=z0Kz4sS&Ka5*{Je7*#!#%OMzN*t6B={AZR5|tu$I}&;aB8UeMTSc`>k_rq z^`V-t>Z(4g3r(;t=#}+VJ)xWaOhc2ro%JJjq|XUFz^9%0AC8x3kDK74JNVVCMNYU? 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