Showing preview only (3,947K chars total). Download the full file or copy to clipboard to get everything.
Repository: drlgistics/Wt4ElegantRL
Branch: main
Commit: cc9f327e3461
Files: 188
Total size: 3.7 MB
Directory structure:
gitextract_wz5tjxvh/
├── .gitignore
├── LICENSE
├── README.md
├── analysts.py
├── assessments.py
├── compare_elegantrl.py
├── compare_rllib.py
├── compare_sb3.py
├── config/
│ ├── 01commom/
│ │ ├── actpolicy.json
│ │ ├── commodities.json
│ │ ├── contracts.json
│ │ ├── fees.json
│ │ ├── holidays.json
│ │ ├── hots.json
│ │ └── sessions.json
│ ├── 03research/
│ │ ├── cta.json
│ │ ├── hft.json
│ │ ├── log_debugger.json
│ │ ├── log_evaluator.json
│ │ └── log_trainer.json
│ └── 04realtime/
│ └── log.json
├── dataset/
│ └── his/
│ ├── day/
│ │ ├── CFFEX/
│ │ │ ├── CFFEX.IC_HOT.dsb
│ │ │ ├── CFFEX.IF_HOT.dsb
│ │ │ ├── CFFEX.IH_HOT.dsb
│ │ │ ├── CFFEX.TF_HOT.dsb
│ │ │ └── CFFEX.T_HOT.dsb
│ │ ├── CZCE/
│ │ │ ├── CZCE.AP_HOT.dsb
│ │ │ ├── CZCE.CF_HOT.dsb
│ │ │ ├── CZCE.JR_HOT.dsb
│ │ │ ├── CZCE.MA_HOT.dsb
│ │ │ ├── CZCE.RM_HOT.dsb
│ │ │ ├── CZCE.SF_HOT.dsb
│ │ │ ├── CZCE.SR_HOT.dsb
│ │ │ ├── CZCE.TA_HOT.dsb
│ │ │ └── CZCE.ZC_HOT.dsb
│ │ ├── DCE/
│ │ │ ├── DCE.a_HOT.dsb
│ │ │ ├── DCE.c_HOT.dsb
│ │ │ ├── DCE.cs_HOT.dsb
│ │ │ ├── DCE.i_HOT.dsb
│ │ │ ├── DCE.jd_HOT.dsb
│ │ │ ├── DCE.l_HOT.dsb
│ │ │ ├── DCE.m_HOT.dsb
│ │ │ ├── DCE.p_HOT.dsb
│ │ │ ├── DCE.pp_HOT.dsb
│ │ │ ├── DCE.rr_HOT.dsb
│ │ │ └── DCE.y_HOT.dsb
│ │ ├── INE/
│ │ │ ├── INE.lu_HOT.dsb
│ │ │ └── INE.sc_HOT.dsb
│ │ └── SHFE/
│ │ ├── SHFE.ag_HOT.dsb
│ │ ├── SHFE.al_HOT.dsb
│ │ ├── SHFE.bu_HOT.dsb
│ │ ├── SHFE.cu_HOT.dsb
│ │ ├── SHFE.fu_HOT.dsb
│ │ ├── SHFE.hc_HOT.dsb
│ │ ├── SHFE.ni_HOT.dsb
│ │ ├── SHFE.pb_HOT.dsb
│ │ ├── SHFE.rb_HOT.dsb
│ │ └── SHFE.zn_HOT.dsb
│ └── min5/
│ ├── CFFEX/
│ │ ├── CFFEX.IC_HOT.dsb
│ │ ├── CFFEX.IF_HOT.dsb
│ │ ├── CFFEX.IH_HOT.dsb
│ │ ├── CFFEX.TF_HOT.dsb
│ │ └── CFFEX.T_HOT.dsb
│ ├── CZCE/
│ │ ├── CZCE.AP_HOT.dsb
│ │ ├── CZCE.CF_HOT.dsb
│ │ ├── CZCE.JR_HOT.dsb
│ │ ├── CZCE.MA_HOT.dsb
│ │ ├── CZCE.RM_HOT.dsb
│ │ ├── CZCE.SF_HOT.dsb
│ │ ├── CZCE.SR_HOT.dsb
│ │ ├── CZCE.TA_HOT.dsb
│ │ └── CZCE.ZC_HOT.dsb
│ ├── DCE/
│ │ ├── DCE.a_HOT.dsb
│ │ ├── DCE.c_HOT.dsb
│ │ ├── DCE.cs_HOT.dsb
│ │ ├── DCE.i_HOT.dsb
│ │ ├── DCE.jd_HOT.dsb
│ │ ├── DCE.l_HOT.dsb
│ │ ├── DCE.m_HOT.dsb
│ │ ├── DCE.p_HOT.dsb
│ │ ├── DCE.pp_HOT.dsb
│ │ ├── DCE.rr_HOT.dsb
│ │ └── DCE.y_HOT.dsb
│ ├── INE/
│ │ ├── INE.lu_HOT.dsb
│ │ └── INE.sc_HOT.dsb
│ └── SHFE/
│ ├── SHFE.ag_HOT.dsb
│ ├── SHFE.al_HOT.dsb
│ ├── SHFE.bu_HOT.dsb
│ ├── SHFE.cu_HOT.dsb
│ ├── SHFE.fu_HOT.dsb
│ ├── SHFE.hc_HOT.dsb
│ ├── SHFE.ni_HOT.dsb
│ ├── SHFE.pb_HOT.dsb
│ ├── SHFE.rb_HOT.dsb
│ └── SHFE.zn_HOT.dsb
├── dataset_from_storage.py
├── elegantrl/
│ ├── __init__.py
│ ├── agent.py
│ ├── demo.py
│ ├── env.py
│ ├── evaluator.py
│ ├── net.py
│ ├── replay.py
│ └── run.py
├── envs.py
├── envs_simple_cta.py
├── features.py
├── reprocess.py
├── requirements/
│ ├── full_with_cuda.yaml
│ └── full_without_cuda.yaml
├── run_toy.py
├── runner.py
├── stoppers.py
├── strategies.py
└── wtpy/
├── CodeHelper.py
├── ContractMgr.py
├── CtaContext.py
├── ExtModuleDefs.py
├── ExtToolDefs.py
├── HftContext.py
├── ProductMgr.py
├── SelContext.py
├── SessionMgr.py
├── StrategyDefs.py
├── WtBtEngine.py
├── WtCoreDefs.py
├── WtDataDefs.py
├── WtDtEngine.py
├── WtDtServo.py
├── WtEngine.py
├── WtMsgQue.py
├── WtUtilDefs.py
├── __init__.py
├── apps/
│ ├── WtBtAnalyst.py
│ ├── WtCtaOptimizer.py
│ ├── WtHotPicker.py
│ ├── __init__.py
│ └── datahelper/
│ ├── DHBaostock.py
│ ├── DHDefs.py
│ ├── DHFactory.py
│ ├── DHRqData.py
│ ├── DHTushare.py
│ ├── __init__.py
│ └── db/
│ ├── MysqlHelper.py
│ ├── __init__.py
│ └── initdb_mysql.sql
├── monitor/
│ ├── DataMgr.py
│ ├── EventReceiver.py
│ ├── PushSvr.py
│ ├── WatchDog.py
│ ├── WtBtMon.py
│ ├── WtLogger.py
│ ├── WtMonSvr.py
│ ├── __init__.py
│ └── static/
│ ├── __init__.py
│ └── console/
│ ├── __init__.py
│ ├── index.html
│ └── static/
│ ├── __init__.py
│ ├── css/
│ │ ├── __init__.py
│ │ ├── app.7b6729291f05cec91b99cfd44c17df6b.css
│ │ └── static/
│ │ ├── __init__.py
│ │ └── fonts/
│ │ └── __init__.py
│ └── js/
│ ├── __init__.py
│ ├── app.d3652914f874ea570f72.js
│ ├── manifest.3ad1d5771e9b13dbdad2.js
│ └── vendor.cd39a6c53a9d7599c08c.js
└── wrapper/
├── ContractLoader.py
├── PlatformHelper.py
├── WtBtWrapper.py
├── WtDtHelper.py
├── WtDtServoApi.py
├── WtDtWrapper.py
├── WtExecApi.py
├── WtMQWrapper.py
├── WtWrapper.py
├── __init__.py
├── linux/
│ ├── __init__.py
│ ├── executer/
│ │ └── __init__.py
│ ├── parsers/
│ │ └── __init__.py
│ └── traders/
│ └── __init__.py
├── x64/
│ ├── __init__.py
│ ├── executer/
│ │ └── __init__.py
│ ├── parsers/
│ │ └── __init__.py
│ └── traders/
│ └── __init__.py
└── x86/
├── __init__.py
├── executer/
│ └── __init__.py
├── parsers/
│ └── __init__.py
└── traders/
└── __init__.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.
================================================
FILE: README.md
================================================
# Wt4ElegantRL
Wt4ElegantRL = [WonderTrader](https://github.com/wondertrader/wtpy) + [ElegantRL](https://github.com/AI4Finance-Foundation/ElegantRL)
# Document by panyunan
https://gitee.com/panyunan/wt4elegantrl-doc
## INSTALL
clone
```
git clone https://github.com/drlgistics/Wt4ElegantRL.git
cd Wt4ElegantRL
```
with cuda
```
conda env create -n wt4elegantrl --file ./requirements/full_with_cuda.yaml
```
or without cuda
```
conda env create -n wt4elegantrl --file ./requirements/full_without_cuda.yaml
```
activate
```
conda activate wt4elegantrl
```
## RLLIB
demo
```
python ./compare_rllib.py test -p ./trained/rllib/TD3_2021-10-29_11-21-37/TD3_SimpleCTAEnv_536e7_00000_0_2021-10-29_11-21-37/checkpoint_000023/checkpoint-23
```
train
```
python ./compare_rllib.py train
```
## SB3
demo
```
python ./compare_sb3.py test -p ./trained/sb3/td3/best_model
```
train
```
python ./compare_sb3.py train
```
## ELEGANTRL
train
```
python ./compare_elegantrl.py train
```
================================================
FILE: analysts.py
================================================
from ntpath import realpath
from wtpy.apps import WtBtAnalyst
from glob import glob
from tqdm.auto import tqdm
from os.path import dirname, basename
from click import command, option
# for i in tqdm(glob('./outputs_bt/*/funds.csv')):
# folder = dirname(i)
# name = folder[13:]
# analyst = WtBtAnalyst()
# folder = "./outputs_bt/%s/" % name
# analyst.add_strategy(
# name, folder=folder, init_capital=500000, rf=0.04, annual_trading_days=240)
# try:
# analyst.run_new('%s/%s_PnLAnalyzing.xlsx' % (folder, name))
# # analyst.run('%s/%s_PnLAnalyzing.xlsx' % (folder, name))
# except:
# analyst.run('%s/%s_PnLAnalyzing.xlsx' % (folder, name))
@command()
@option('--path', '-p', 'path', default='./outputs_bt/*/')
def run(path):
for i in tqdm(glob('%s/funds.csv'%path)):
folder = dirname(i)
name = basename(folder)
analyst = WtBtAnalyst()
analyst.add_strategy(
name, folder='%s/'%folder, init_capital=500000, rf=0.04, annual_trading_days=240)
try:
analyst.run_new('%s/%s_PnLAnalyzing.xlsx' % (folder, name))
# analyst.run('%s/%s_PnLAnalyzing.xlsx' % (folder, name))
except:
analyst.run('%s/%s_PnLAnalyzing.xlsx' % (folder, name))
if __name__ == '__main__':
run()
================================================
FILE: assessments.py
================================================
from abc import abstractmethod
import numpy as np
from wtpy.StrategyDefs import CtaContext, HftContext
class Assessment():
def __init__(self, init_assets=1000000):
self._init_assets_ = init_assets
self.reset()
@abstractmethod
def reset(self):
raise NotImplementedError
@abstractmethod
def calculate(self, context: CtaContext):
raise NotImplementedError
@abstractmethod
def finish(self):
raise NotImplementedError
@property
@abstractmethod
def reward(self) -> float:
raise NotImplementedError
@property
@abstractmethod
def done(self) -> float:
raise NotImplementedError
@property
@abstractmethod
def curr_assets(self) -> float:
raise NotImplementedError
@property
def init_assets(self) -> float:
return self._init_assets_
class SimpleAssessment(Assessment): # 借鉴了neofinrl
gamma = 0.99
def reset(self):
self.__assets__: list = [self._init_assets_]
self.__reward__: list = [0]
self.__done__: bool = False
self.__successive__: int = 1
# self.__gamma__ = 1-self.gamma
def calculate(self, context: CtaContext):
if self.__done__:
return
# 动态权益
dynbalance = context.stra_get_fund_data(0)
# 总平仓盈亏
# closeprofit = context.stra_get_fund_data(1)
# 总浮动盈亏
# positionprofit = context.stra_get_fund_data(2)
# 总手续费
# fee = context.stra_get_fund_data(3)
self.__assets__.append(self._init_assets_+dynbalance) # 账户实时的动态权益
if len(self.__reward__) > 1:
reward = (self.__assets__[-1]-self.__assets__[-2]) \
/ self._init_assets_ * 12 #* 0.382
# if (reward < 0 and self.__reward__[-1] < 0) or \
# (reward > 0 and self.__reward__[-1] > 0):
# self.__successive__ += 1
# else:
# self.__successive__ = 1
# reward *= self.__successive__
# if self.__assets__[-1] > self.__assets__[-2]: #
# reward += 0.0001*self.__successive__
# else:
# reward -= 0.0001*self.__successive__
# reward += (self.__assets__[-1]-max(self.__assets__[:-1])) \
# / self._init_assets_ * 0.1
# reward += (self.__assets__[-1]-min(self.__assets__[:-1])) \
# / self._init_assets_ * 0.1
# reward = 0
# returns = np.diff(np.array(self.__assets__))
# reward = (np.where(returns < 0, 0, returns).sum()-1e-5) \
# / abs(np.where(returns > 0, 0, returns).sum()+1e-5) \
# - 1
# reward *= 0.1
# print(np.where(returns < 0, 0, returns).sum(), np.where(returns > 0, 0, returns).sum(), dynbalance, reward)
# 情绪奖励
# if (reward < 0 and self.__reward__[-1] < 0) or \
# (reward > 0 and self.__reward__[-1] > 0):
# self.__successive__ += 1
# else:
# self.__successive__ = 1
# #资金成本
# if self.__assets__[-1] > self.__assets__[-2]: #
# reward += 0.0001*self.__successive__
# else:
# reward -= 0.0001*self.__successive__
# reward *= 0.01
# #近期奖励
# if self.__assets__[-1] > max(self.__assets__[:-1]):
# reward += 0.02
# if self.__assets__[-1] < min(self.__assets__[:-1]):
# reward -= 0.01
# 长期奖励
# reward += (self.__assets__[-1]-max(self.__assets__[:-1])) \
# / self._init_assets_ * self.__successive__ * 0.382
# reward += (self.__assets__[-1]-min(self.__assets__[:-1])) \
# / self._init_assets_ * self.__successive__ * 0.382
# if (reward < 0 and self.__reward__[-1] < 0) or \
# (reward > 0 and self.__reward__[-1] > 0):
# reward *= self.__successive__
# self.__successive__ += 1
# else:
# self.__successive__ = 1
# reward += (self.__assets__[-1]-max(self.__assets__[:-1])) \
# / self._init_assets_ * 0.382
# reward += (self.__assets__[-1]-min(self.__assets__[:-1])) \
# / self._init_assets_ * 0.382
'''
2021/11/01
if self.__assets__[-1] > self.__assets__[-2]:
self.__successive__ += 1
else:
self.__successive__ = 1
reward = -0.00001
reward += (self.__assets__[-1] /
self.__assets__[-2] - 1) * 0.382 * self.__successive__
max_assets = (self.__assets__[-1]/max(self.__assets__[:-1])-1) * 0.382
reward += max_assets * (5 if max_assets > 0 else 1)
min_assets = (self.__assets__[-1]/min(self.__assets__[:-1])-1) * 0.382
reward += min_assets * (5 if min_assets < 0 else 1)
'''
else:
reward = -0.01
self.__reward__.append(reward) # 以动态权益差分设计reward
self.__done__ = False # 此处可以根据控制任务结束状态
def finish(self):
if self.__done__:
return
# returns = np.add(1, self.__reward__).cumprod()
# np.subtract(returns, 1, out=returns)
# gamma = 0
# for reward in np.diff(np.log(self.__assets__)):
# gamma *= self.gamma
# gamma += reward
gamma = 0
for reward in self.__reward__:
gamma *= self.gamma
gamma += reward
# gamma = np.diff(np.array(self.__assets__))
# gamma = (np.where(gamma < 0, 0, gamma).sum()-1e-5) \
# / abs(np.where(gamma > 0, 0, gamma).sum()+1e-5) \
# - 1
# gamma = np.round(np.nanprod(np.array(self.__reward__)+1, axis=0)-1, 5)
# gamma = self.__assets__[-1]/max(self.__assets__)-1
# gamma = self.__assets__[-1]/self.init_assets-1
self.__reward__.append(gamma) # 在结束的时候把过程奖励做处理,作为整个训练的奖励
self.__done__ = True
@property
def reward(self) -> float:
# return self.__reward__[-1]
return float(self.__reward__[-1])
@property
def rewards(self) -> float:
return self.__reward__
@property
def done(self) -> float:
return self.__done__
@property
def curr_assets(self) -> float:
return self.__assets__[-1]
================================================
FILE: compare_elegantrl.py
================================================
from click import command, group, option
from elegantrl.agent import AgentPPO as Agent
# from elegantrl.agent import AgentSAC as Agent
# from elegantrl.agent import AgentModSAC as Agent
# from elegantrl.agent import AgentTD3 as Agent
# from elegantrl.agent import AgentDoubleDQN as Agent
# from elegantrl.agent import AgentDQN as Agent
from elegantrl.run import Arguments, train_and_evaluate
from envs_simple_cta import SimpleCTASubProcessEnv
from gym import make, register
from numpy import inf
from os import getpid
class Wt4RLSimpleTrainer(SimpleCTASubProcessEnv):
env_num = 1
max_step = 1500
if_discrete = False
@property
def state_dim(self):
return self.observation_space.shape[0]
@property
def action_dim(self):
# if len(self.action_space.shape) > 0 else 10
return self.action_space.shape[0]
def __init__(self):
super().__init__(**{
# 'time_start': 202108301600,
# 'time_end': 202108311600,
'time_range': (
# (201901011600, 202101011600),
# (201901011600, 201906301600),
# (201906301600, 202001011600),
# (202001011600, 202006301600),
# (202006301600, 202101011600),
(201812311600, 201901311600),
(201901311600, 201902311600),
(201902311600, 201903311600),
(201903311600, 201904311600),
(201904311600, 201905311600),
(201905311600, 201906311600),
(201906311600, 201907311600),
(201907311600, 201908311600),
(201908311600, 201909311600),
(201909311600, 201910311600),
(201910311600, 201911311600),
(201911311600, 201912311600),
(201912311600, 202001311600),
(202001311600, 202002311600),
(202002311600, 202003311600),
(202003311600, 202004311600),
(202004311600, 202005311600),
(202005311600, 202006311600),
(202006311600, 202007311600),
(202007311600, 202008311600),
(202008311600, 202009311600),
(202009311600, 202010311600),
(202010311600, 202011311600),
(202011311600, 202012311600),
),
'slippage': 0,
'mode': 1
})
class Wt4RLSimpleEvaluator(SimpleCTASubProcessEnv):
env_num = 1
max_step = 1500
if_discrete = False
@property
def state_dim(self):
return self.observation_space.shape[0]
@property
def action_dim(self):
# if len(self.action_space.shape) > 0 else 10
return self.action_space.shape[0]
def __init__(self): # mode=3可以打开详细调试模式
super().__init__(**{
'time_range': (
# (202101011600, 202106301600),
# (201701011600, 201706301600),
# (201706301600, 201801011600),
# (201801011600, 201806301600),
# (201806301600, 201901011600),
(202012311600, 202101311600),
(202101311600, 202102311600),
(202102311600, 202103311600),
(202103311600, 202104311600),
(202104311600, 202105311600),
(202105311600, 202106311600),
(201612311600, 201701311600),
(201701311600, 201702311600),
(201702311600, 201703311600),
(201703311600, 201704311600),
(201704311600, 201705311600),
(201705311600, 201706311600),
(201706311600, 201707311600),
(201707311600, 201708311600),
(201708311600, 201709311600),
(201709311600, 201710311600),
(201710311600, 201711311600),
(201711311600, 201712311600),
(201712311600, 201801311600),
(201801311600, 201802311600),
(201802311600, 201803311600),
(201803311600, 201804311600),
(201804311600, 201805311600),
(201805311600, 201806311600),
(201806311600, 201807311600),
(201807311600, 201808311600),
(201808311600, 201809311600),
(201809311600, 201810311600),
(201810311600, 201811311600),
(201811311600, 201812311600),
),
'slippage': 0,
'mode': 1
})
register('wt4rl-simplecta-trainer-v0', entry_point=Wt4RLSimpleTrainer)
register('wt4rl-simplecta-evaluator-v0', entry_point=Wt4RLSimpleEvaluator)
if __name__ == '__main__':
@group()
def run():
pass
@command()
@option('--count', default=24)
def debug(count):
env: SimpleCTASubProcessEnv = make('wt4rl-simplecta-trainer-v0')
print('状态空间', env.observation_space.shape)
print('动作空间', env.action_space.shape)
a = 0
for i in range(1, int(count)+1): # 模拟训练10次
obs = env.reset()
done = False
n = 0
while not done:
action = env.action_space.sample() # 模拟智能体产生动作
obs, reward, done, info = env.step(action)
n += 1
a += 1
# print('action:', action, 'obs:', obs, 'reward:', reward, 'done:', done)
print('第%s次训练完成,执行%s步, 奖励%s, 盈亏%s。' % (i, n, reward, env.assets))
env.close()
print(a)
@command()
def train():
args = Arguments(
env='wt4rl-simplecta-trainer-v0',
# env='wt4rl-simplecta-evaluator-v0',
agent=Agent()
)
# args必须设置的参数
args.eval_env = 'wt4rl-simplecta-evaluator-v0'
args.max_step = 3000
args.state_dim = 126
args.action_dim = 3
args.if_discrete = False
args.target_return = 5 # inf
args.if_overwrite = False
args.eval_times1 = 15 # 待查明:为啥td3的评估器结果完全一致
args.eval_times2 = 30 # 待查明:为啥td3的评估器结果完全一致
args.worker_num = 1 # 内存小的注意别爆内存
args.break_step = inf
args.if_allow_break = True
#
args.gamma = 0.96 # 8小时会跨过一次隔夜风险,既96个bar
args.learning_rate = 1e-5
# args.gamma = 0.1 ** (1/12/8) # 8小时会跨过一次隔夜风险,既96个bar
# args.learning_rate = 1e-3 # N15:294 Y14:292
args.eval_gap = 2 ** 8
args.net_dim = 2 ** 6
args.batch_size = args.net_dim * 2
args.max_memo = 2 ** 20
args.target_step = args.max_step * 2
args.if_per_or_gae = True
# args.agent.if_use_cri_target = True
# args.agent.if_use_dueling = True
args.env_num = 1
args.learner_gpus = (0,)
args.workers_gpus = args.learner_gpus
args.eval_gpu_id = 0
args.cwd = './outputs_bt/elegantrl/%s_%s_%s' % (
args.agent.__class__.__name__, args.gamma, args.learning_rate)
# args.repeat_times = 0.01
#args.net_dim = 2**9
# args.net_dim = 2 ** 8
#args.max_memo = 2 ** 22
# args.break_step = args.max_step*1000
# args.batch_size = 2 ** 11 # args.net_dim * 2
# args.repeat_times = 1.5
# args.eval_gap = 2 ** 9
# args.eval_times1 = 2 ** 2
# args.eval_times2 = 2 ** 5
# args.worker_num = 4
# args.target_step = args.env.max_step * 1
# train_and_evaluate(args)
train_and_evaluate(args)
@command()
def test():
env = Wt4RLSimpleEvaluator(mode=3)
agent = Agent()
agent.init(net_dim=2 ** 8, state_dim=380, action_dim=10,
learning_rate=0.1 ** (1/12/8), if_per_or_gae=True, env_num=1, gpu_id=0)
agent.save_or_load_agent(
cwd='./outputs_bt/elegantrl/AgentTD3_6.103515625e-05_8', if_save=False)
# for i in range(10): # 模拟训练10次
# obs = env.reset()
# done = False
# n = 0
# while not done:
# action = agent.select_action(obs) # 模拟智能体产生动作
# obs, reward, done, info = env.step(action)
# n += 1
# # print('action:', action, 'obs:', obs,
# # 'reward:', reward, 'done:', done)
# print('第%s次训练完成,执行%s步, 盈亏%s。' % (i+1, n, env.assets))
# env.close()
run.add_command(debug)
run.add_command(train)
run.add_command(test)
# run.add_command(eval)
run()
================================================
FILE: compare_rllib.py
================================================
from ray import tune, init
# from ray.rllib.agents.sac import SACTrainer as Trainer
# from ray.rllib.agents.ddpg import TD3Trainer as Trainer
# from ray.rllib.agents.ddpg import ApexDDPGTrainer as Trainer
# from ray.rllib.agents.a3c import A3CTrainer as Trainer
from ray.rllib.agents.ppo import PPOTrainer as Trainer
# from ray.rllib.agents.ppo import APPOTrainer as Trainer
# from ray.rllib.agents.marwil import MARWILTrainer as Trainer
# from ray.rllib.agents.impala import ImpalaTrainer as Trainer
# from ray.rllib.agents.mbmpo import MBMPOTrainer as Trainer
# from ray.rllib.agents.dreamer import DREAMERTrainer as Trainer
# from ray.rllib.agents.pg import PGTrainer as Trainer
# from ray.rllib.agents.pg import PGTrainer as Trainer
# from ray.rllib.agents.dqn import R2D2Trainer as Trainer
# from ray.rllib.agents.dqn import ApexTrainer as Trainer
# from ray.tune.schedulers.pb2 import PB2
from envs_simple_cta import SimpleCTAEnv
import click
tune.register_env('SimpleCTAEnv',
lambda env_config: SimpleCTAEnv(**env_config))
if __name__ == '__main__':
@click.group()
def run():
pass
@run.command()
def train():
# pb2 = PB2(
# time_attr="training_iteration",
# metric="episode_reward_mean",
# mode="max",
# perturbation_interval=50000,
# quantile_fraction=0.25, # copy bottom % with top %
# # Specifies the hyperparam search space
# hyperparam_bounds={
# "lr": [1e-3, 1e-5],
# "gamma": [0.96, 0.99],
# })
nums_subproc = 5
nums_gpu = 0.92/(nums_subproc+2)
config = {
'env': 'SimpleCTAEnv',
'env_config': {
# 'time_start': 202108301600,
# 'time_end': 202108311600,
'time_range': (
# (201901011600, 202101011600),
# (201901011600, 201906301600),
# (201906301600, 202001011600),
# (202001011600, 202006301600),
# (202006301600, 202101011600),
(201812311600, 201901311600),
(201901311600, 201902311600),
(201902311600, 201903311600),
(201903311600, 201904311600),
(201904311600, 201905311600),
(201905311600, 201906311600),
(201906311600, 201907311600),
(201907311600, 201908311600),
(201908311600, 201909311600),
(201909311600, 201910311600),
(201910311600, 201911311600),
(201911311600, 201912311600),
(201912311600, 202001311600),
(202001311600, 202002311600),
(202002311600, 202003311600),
(202003311600, 202004311600),
(202004311600, 202005311600),
(202005311600, 202006311600),
(202006311600, 202007311600),
(202007311600, 202008311600),
(202008311600, 202009311600),
(202009311600, 202010311600),
(202010311600, 202011311600),
(202011311600, 202012311600),
),
'slippage': 0,
'mode': 1
},
# 'rollout_fragment_length': 10156,
'framework': 'torch',
'num_workers': nums_subproc,
'num_gpus': nums_gpu,
'num_gpus_per_worker': nums_gpu,
'gamma': 0.99,
'lr': 1e-5,
'train_batch_size': 30465,
# "actor_lr": 1e-5,
# "critic_lr": 1e-5,
# "l2_reg": 1e-6,
# 'model': {
# 'use_lstm': True,
# # 'fcnet_hiddens': [64],
# # 'fcnet_activation': 'linear',
# # 'lstm_cell_size': 64,
# # 'max_seq_len': 2,
# },
'evaluation_interval': 24,
"evaluation_num_episodes": 30,
'evaluation_parallel_to_training': False,
'evaluation_num_workers': 1,
"evaluation_config": {
"env_config": {
'time_range': (
# (202101011600, 202106301600),
# (201701011600, 201706301600),
# (201706301600, 201801011600),
# (201801011600, 201806301600),
# (201806301600, 201901011600),
(202012311600, 202101311600),
(202101311600, 202102311600),
(202102311600, 202103311600),
(202103311600, 202104311600),
(202104311600, 202105311600),
(202105311600, 202106311600),
(201612311600, 201701311600),
(201701311600, 201702311600),
(201702311600, 201703311600),
(201703311600, 201704311600),
(201704311600, 201705311600),
(201705311600, 201706311600),
(201706311600, 201707311600),
(201707311600, 201708311600),
(201708311600, 201709311600),
(201709311600, 201710311600),
(201710311600, 201711311600),
(201711311600, 201712311600),
(201712311600, 201801311600),
(201801311600, 201802311600),
(201802311600, 201803311600),
(201803311600, 201804311600),
(201804311600, 201805311600),
(201805311600, 201806311600),
(201806311600, 201807311600),
(201807311600, 201808311600),
(201808311600, 201809311600),
(201809311600, 201810311600),
(201810311600, 201811311600),
(201811311600, 201812311600),
),
'slippage': 0,
'mode': 1
},
},
# 'train_batch_size': 10156,
"batch_mode": "complete_episodes",
}
# training and saving
analysis = tune.run(
Trainer,
stop={
"timesteps_total": 1e10,
'episode_reward_mean': 0.48,
# 'episode_reward_min': 50,
},
# scheduler=pb2,
# num_samples=nums_subproc,
config=config,
keep_checkpoints_num=10,
checkpoint_freq=24,
checkpoint_score_attr='episode_reward_mean',
checkpoint_at_end=True,
local_dir="./outputs_bt/rllib",
)
# retrieve the checkpoint path
analysis.default_metric = "episode_reward_mean"
analysis.default_mode = "max"
checkpoint_path = analysis.get_best_checkpoint(
trial=analysis.get_best_trial())
print(f"Trained model saved at {checkpoint_path}")
@run.command()
@click.option('--path', '-p', 'path')
def test(path):
config = {
'env': 'SimpleCTAEnv',
'env_config': {
'time_range': (
(202106311600, 202107311600),
(202107311600, 202108311600),
(202108311600, 202109311600),
(202109311600, 202110311600),
(202110311600, 202111311600),
(202106311600, 202111311600),
),
'slippage': 0,
'mode': 2
},
'framework': 'torch',
'num_workers': 1,
'num_gpus': 1,
'num_gpus_per_worker': 1,
}
agent = Trainer(config=config)
agent.restore(path)
print(f"Agent loaded from saved model at {path}")
env = SimpleCTAEnv(**config['env_config'])
for i in range(len(config['env_config']['time_range'])*10): # 模拟训练10次
obs = env.reset()
done = False
n = 0
while not done:
# action = env.action_space.sample() # 模拟智能体产生动作
action = agent.compute_single_action(obs)
obs, reward, done, info = env.step(action)
n += 1
# print(
# # 'action:', action,
# # 'obs:', obs,
# 'reward:', reward,
# # 'done:', done
# )
# break
# break
print('第%s次测试完成,执行%s步, 市值%s。' % (i+1, n, env.assets))
env.close()
del env
run()
================================================
FILE: compare_sb3.py
================================================
# from stable_baselines3 import SAC as Trainer
from stable_baselines3 import TD3 as Trainer
# from stable_baselines3 import PPO as Trainer
# from stable_baselines3 import A2C as Trainer
from envs_simple_cta import SimpleCTASubProcessEnv, SimpleCTAEnv
from stable_baselines3.common.callbacks import EvalCallback, StopTrainingOnRewardThreshold
from stable_baselines3.common.monitor import Monitor
import click
@click.group()
def run():
pass
@run.command()
def debug():
learner = SimpleCTASubProcessEnv(**{
'time_range': (
# (201901011600, 202101011600),
# (201901011600, 201906301600),
# (201906301600, 202001011600),
# (202001011600, 202006301600),
# (202006301600, 202101011600),
(201812311600, 201901311600),
(201901311600, 201902311600),
(201902311600, 201903311600),
(201903311600, 201904311600),
(201904311600, 201905311600),
(201905311600, 201906311600),
(201906311600, 201907311600),
(201907311600, 201908311600),
(201908311600, 201909311600),
(201909311600, 201910311600),
(201910311600, 201911311600),
(201911311600, 201912311600),
(201912311600, 202001311600),
(202001311600, 202002311600),
(202002311600, 202003311600),
(202003311600, 202004311600),
(202004311600, 202005311600),
(202005311600, 202006311600),
(202006311600, 202007311600),
(202007311600, 202008311600),
(202008311600, 202009311600),
(202009311600, 202010311600),
(202010311600, 202011311600),
(202011311600, 202012311600),
),
'slippage': 0,
'mode': 1
})
evaluator = SimpleCTASubProcessEnv(**{
'time_range': (
# (202101011600, 202106301600),
# (201701011600, 201706301600),
# (201706301600, 201801011600),
# (201801011600, 201806301600),
# (201806301600, 201901011600),
(202012311600, 202101311600),
(202101311600, 202102311600),
(202102311600, 202103311600),
(202103311600, 202104311600),
(202104311600, 202105311600),
(202105311600, 202106311600),
(201612311600, 201701311600),
(201701311600, 201702311600),
(201702311600, 201703311600),
(201703311600, 201704311600),
(201704311600, 201705311600),
(201705311600, 201706311600),
(201706311600, 201707311600),
(201707311600, 201708311600),
(201708311600, 201709311600),
(201709311600, 201710311600),
(201710311600, 201711311600),
(201711311600, 201712311600),
(201712311600, 201801311600),
(201801311600, 201802311600),
(201802311600, 201803311600),
(201803311600, 201804311600),
(201804311600, 201805311600),
(201805311600, 201806311600),
(201806311600, 201807311600),
(201807311600, 201808311600),
(201808311600, 201809311600),
(201809311600, 201810311600),
(201810311600, 201811311600),
(201811311600, 201812311600),
),
'slippage': 0,
'mode': 1
})
env = learner
for i in range(1): # 模拟训练10次
obs = env.reset()
done = False
n = 0
while not done:
action = env.action_space.sample() # 模拟智能体产生动作
obs, reward, done, info = env.step(action)
n += 1
# print('action:', action, 'obs:', obs,
# 'reward:', reward, 'done:', done)
print('第%s次训练完成,执行%s步, 市值%s。' % (i+1, n, env.assets))
learner.close()
@run.command()
def train():
learner = SimpleCTASubProcessEnv(**{
'time_range': (
# (201901011600, 202101011600),
# (201901011600, 201906301600),
# (201906301600, 202001011600),
# (202001011600, 202006301600),
# (202006301600, 202101011600),
(201812311600, 201901311600),
(201901311600, 201902311600),
(201902311600, 201903311600),
(201903311600, 201904311600),
(201904311600, 201905311600),
(201905311600, 201906311600),
(201906311600, 201907311600),
(201907311600, 201908311600),
(201908311600, 201909311600),
(201909311600, 201910311600),
(201910311600, 201911311600),
(201911311600, 201912311600),
(201912311600, 202001311600),
(202001311600, 202002311600),
(202002311600, 202003311600),
(202003311600, 202004311600),
(202004311600, 202005311600),
(202005311600, 202006311600),
(202006311600, 202007311600),
(202007311600, 202008311600),
(202008311600, 202009311600),
(202009311600, 202010311600),
(202010311600, 202011311600),
(202011311600, 202012311600),
),
'slippage': 0,
'mode': 1
})
evaluator = SimpleCTASubProcessEnv(**{
'time_range': (
# (202101011600, 202106301600),
# (201701011600, 201706301600),
# (201706301600, 201801011600),
# (201801011600, 201806301600),
# (201806301600, 201901011600),
(202012311600, 202101311600),
(202101311600, 202102311600),
(202102311600, 202103311600),
(202103311600, 202104311600),
(202104311600, 202105311600),
(202105311600, 202106311600),
(201612311600, 201701311600),
(201701311600, 201702311600),
(201702311600, 201703311600),
(201703311600, 201704311600),
(201704311600, 201705311600),
(201705311600, 201706311600),
(201706311600, 201707311600),
(201707311600, 201708311600),
(201708311600, 201709311600),
(201709311600, 201710311600),
(201710311600, 201711311600),
(201711311600, 201712311600),
(201712311600, 201801311600),
(201801311600, 201802311600),
(201802311600, 201803311600),
(201803311600, 201804311600),
(201804311600, 201805311600),
(201805311600, 201806311600),
(201806311600, 201807311600),
(201807311600, 201808311600),
(201808311600, 201809311600),
(201809311600, 201810311600),
(201810311600, 201811311600),
(201811311600, 201812311600),
),
'slippage': 0,
'mode': 2
})
n = 1500
eval_callback = EvalCallback(
eval_env=Monitor(evaluator),
callback_on_new_best=StopTrainingOnRewardThreshold(
reward_threshold=5, verbose=1),
n_eval_episodes=30,
eval_freq=24,
log_path='./outputs_bt/sb3/%s'%Trainer.__name__,
best_model_save_path='./outputs_bt/sb3/%s'%Trainer.__name__,
verbose=1)
model: Trainer = Trainer('MlpPolicy', learner,
# gamma=0.1 ** (1/12/8),
gamma=0.96,
# learning_rate=2 ** -14, # 15: 167, 14:
learning_rate=1e-5,
# learning_starts=100,
# batch_size=128,
# ent_coef='auto_0.1',
# policy_kwargs=dict(net_arch=[128, 128, 128]),
tensorboard_log='./outputs_bt/sb3/%s'%Trainer.__name__,
verbose=1,
# device='cpu',
)
model.learn(
total_timesteps=10000,
callback=eval_callback,
log_interval=1
)
model.save('SimpleTrainer')
@run.command()
@click.option('--path', '-p', 'path')
def test(path):
env = SimpleCTAEnv(**{
# 'time_start': 201701011600,
# 'time_end': 201901011600,
# 'time_start': 202001011600,
# 'time_end': 202108311600,
'time_start': 202108311600,
'time_end': 202110131600,
# 'time_end': 202110281600,
'slippage': 0,
'mode': 2,
'id': 2,
})
model = Trainer.load(path)
for i in range(1): # 模拟训练10次
obs = env.reset()
done = False
n = 0
while not done:
action = model.predict(obs)[0]
obs, reward, done, info = env.step(action)
n += 1
# print(
# # 'action:', action,
# # 'obs:', obs,
# 'reward:', reward,
# # 'done:', done
# )
# break
# break
print('第%s次测试完成,执行%s步, 市值%s。' % (i+1, n, env.assets))
env.close()
if __name__ == '__main__':
run()
================================================
FILE: config/01commom/actpolicy.json
================================================
{
"default":{
"order":[
{
"action":"close",
"limit":0
},
{
"action":"open",
"limit":0
}
]
},
"stockindex":{
"order":[
{
"action":"closeyestoday",
"limit":0
},
{
"action":"open",
"limit":500
},
{
"action":"closetoday",
"limit":0
}
],
"filters":["CFFEX.IF","CFFEX.IC","CFFEX.IH"]
},
"lowinnerdayfee":{
"order":[
{
"action":"closetoday",
"limit":0
},
{
"action":"closeyestoday",
"limit":0
},
{
"action":"open",
"limit":0
}
],
"filters":["DCE.a","DCE.cs","DCE.i","DCE.j","DCE.l","DCE.m","DCE.p","DCE.pp","SHFE.au","SHFE.hc","CZCE.ZC","CZCE.CF","CZCE.MA","CZCE.SR","CZCE.AP"]
}
}
================================================
FILE: config/01commom/commodities.json
================================================
{
"CFFEX": {
"IC": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.2,
"volscale": 200,
"name": "֤",
"exchg": "CFFEX",
"session": "SD0930",
"holiday": "CHINA"
},
"IF": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.2,
"volscale": 300,
"name": "",
"exchg": "CFFEX",
"session": "SD0930",
"holiday": "CHINA"
},
"IH": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.2,
"volscale": 300,
"name": "֤",
"exchg": "CFFEX",
"session": "SD0930",
"holiday": "CHINA"
},
"T": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 3,
"pricetick": 0.005,
"volscale": 10000,
"name": "10ծ",
"exchg": "CFFEX",
"session": "FD0915",
"holiday": "CHINA"
},
"TF": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 3,
"pricetick": 0.005,
"volscale": 10000,
"name": "5ծ",
"exchg": "CFFEX",
"session": "FD0915",
"holiday": "CHINA"
},
"TS": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 3,
"pricetick": 0.005,
"volscale": 20000,
"name": "2ծ",
"exchg": "CFFEX",
"session": "FD0915",
"holiday": "CHINA"
}
},
"CZCE": {
"AP": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "ƻ",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"CF": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "֣",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"CJ": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"CY": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "ɴ",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"FG": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"JR": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"LR": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "̵",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"MA": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "֣",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"OI": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"PF": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 5,
"name": "",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"PK": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 5,
"name": "",
"exchg": "CZCE",
"session": "",
"holiday": "CHINA"
},
"PM": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 50,
"name": "",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"RI": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "̵",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"RM": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"RS": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"SA": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"SF": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 5,
"name": "",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"SM": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 5,
"name": "̹",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"SR": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"TA": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 5,
"name": "PTA",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
},
"UR": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"WH": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "֣",
"exchg": "CZCE",
"session": "FD0900",
"holiday": "CHINA"
},
"ZC": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.2,
"volscale": 100,
"name": "֣ú",
"exchg": "CZCE",
"session": "FN2300",
"holiday": "CHINA"
}
},
"DCE": {
"a": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "һ",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"b": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"bb": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 2,
"pricetick": 0.05,
"volscale": 500,
"name": "",
"exchg": "DCE",
"session": "FD0900",
"holiday": "CHINA"
},
"c": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"cs": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"eb": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 5,
"name": "ϩ",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"eg": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "Ҷ",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"fb": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.5,
"volscale": 10,
"name": "˰",
"exchg": "DCE",
"session": "FD0900",
"holiday": "CHINA"
},
"i": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.5,
"volscale": 100,
"name": "ʯ",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"j": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.5,
"volscale": 100,
"name": "̿",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"jd": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FD0900",
"holiday": "CHINA"
},
"jm": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 1,
"pricetick": 0.5,
"volscale": 60,
"name": "ú",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"l": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"lh": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 16,
"name": "",
"exchg": "DCE",
"session": "FD0900",
"holiday": "CHINA"
},
"m": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"p": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"pg": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 20,
"name": "Һ",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"pp": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 5,
"name": "۱ϩ",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"rr": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"v": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "PVC",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
},
"y": {
"covermode": 0,
"pricemode": 0,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 10,
"name": "",
"exchg": "DCE",
"session": "FN2300",
"holiday": "CHINA"
}
},
"INE": {
"bc": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 10.0,
"volscale": 5,
"name": "ͭ",
"exchg": "INE",
"session": "FN0100",
"holiday": "CHINA"
},
"lu": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "INE",
"session": "FN2300",
"holiday": "CHINA"
},
"nr": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 10,
"name": "20",
"exchg": "INE",
"session": "FN0230",
"holiday": "CHINA"
},
"sc": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 1,
"pricetick": 0.1,
"volscale": 1000,
"name": "ԭ",
"exchg": "INE",
"session": "FN0230",
"holiday": "CHINA"
}
},
"SHFE": {
"ag": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 15,
"name": "",
"exchg": "SHFE",
"session": "FN0230",
"holiday": "CHINA"
},
"al": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
},
"au": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 2,
"pricetick": 0.02,
"volscale": 1000,
"name": "",
"exchg": "SHFE",
"session": "FN0230",
"holiday": "CHINA"
},
"bu": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 10,
"name": "",
"exchg": "SHFE",
"session": "FN2300",
"holiday": "CHINA"
},
"cu": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 10.0,
"volscale": 5,
"name": "ͭ",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
},
"fu": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "ȼ",
"exchg": "SHFE",
"session": "FN2300",
"holiday": "CHINA"
},
"hc": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "Ⱦ",
"exchg": "SHFE",
"session": "FN2300",
"holiday": "CHINA"
},
"ni": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 10.0,
"volscale": 1,
"name": "",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
},
"pb": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "Ǧ",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
},
"rb": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "",
"exchg": "SHFE",
"session": "FN2300",
"holiday": "CHINA"
},
"ru": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 10,
"name": "",
"exchg": "SHFE",
"session": "FN2300",
"holiday": "CHINA"
},
"sn": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 10.0,
"volscale": 1,
"name": "",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
},
"sp": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 2.0,
"volscale": 10,
"name": "ֽ",
"exchg": "SHFE",
"session": "FN2300",
"holiday": "CHINA"
},
"ss": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
},
"wr": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 1.0,
"volscale": 10,
"name": "߲",
"exchg": "SHFE",
"session": "FD0900",
"holiday": "CHINA"
},
"zn": {
"covermode": 1,
"pricemode": 1,
"category": 1,
"precision": 0,
"pricetick": 5.0,
"volscale": 5,
"name": "п",
"exchg": "SHFE",
"session": "FN0100",
"holiday": "CHINA"
}
}
}
================================================
FILE: config/01commom/contracts.json
================================================
{
"CFFEX": {
"IC2110": {
"name": "֤2110",
"code": "IC2110",
"exchg": "CFFEX",
"product": "IC",
"maxlimitqty": 20,
"maxmarketqty": 10
},
"IC2111": {
"name": "֤2111",
"code": "IC2111",
"exchg": "CFFEX",
"product": "IC",
"maxlimitqty": 20,
"maxmarketqty": 10
},
"IC2112": {
"name": "֤2112",
"code": "IC2112",
"exchg": "CFFEX",
"product": "IC",
"maxlimitqty": 20,
"maxmarketqty": 0
},
"IC2203": {
"name": "֤2203",
"code": "IC2203",
"exchg": "CFFEX",
"product": "IC",
"maxlimitqty": 20,
"maxmarketqty": 0
},
"IF2110": {
"name": "2110",
"code": "IF2110",
"exchg": "CFFEX",
"product": "IF",
"maxlimitqty": 20,
"maxmarketqty": 10
},
"IF2111": {
"name": "2111",
"code": "IF2111",
"exchg": "CFFEX",
"product": "IF",
"maxlimitqty": 20,
"maxmarketqty": 10
},
"IF2112": {
"name": "2112",
"code": "IF2112",
"exchg": "CFFEX",
"product": "IF",
"maxlimitqty": 20,
"maxmarketqty": 0
},
"IF2203": {
"name": "2203",
"code": "IF2203",
"exchg": "CFFEX",
"product": "IF",
"maxlimitqty": 20,
"maxmarketqty": 0
},
"IH2110": {
"name": "֤2110",
"code": "IH2110",
"exchg": "CFFEX",
"product": "IH",
"maxlimitqty": 20,
"maxmarketqty": 10
},
"IH2111": {
"name": "֤2111",
"code": "IH2111",
"exchg": "CFFEX",
"product": "IH",
"maxlimitqty": 20,
"maxmarketqty": 10
},
"IH2112": {
"name": "֤2112",
"code": "IH2112",
"exchg": "CFFEX",
"product": "IH",
"maxlimitqty": 20,
"maxmarketqty": 0
},
"IH2203": {
"name": "֤2203",
"code": "IH2203",
"exchg": "CFFEX",
"product": "IH",
"maxlimitqty": 20,
"maxmarketqty": 0
},
"T2112": {
"name": "10ծ2112",
"code": "T2112",
"exchg": "CFFEX",
"product": "T",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"T2203": {
"name": "10ծ2203",
"code": "T2203",
"exchg": "CFFEX",
"product": "T",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"T2206": {
"name": "10ծ2206",
"code": "T2206",
"exchg": "CFFEX",
"product": "T",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"TF2112": {
"name": "5ծ2112",
"code": "TF2112",
"exchg": "CFFEX",
"product": "TF",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"TF2203": {
"name": "5ծ2203",
"code": "TF2203",
"exchg": "CFFEX",
"product": "TF",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"TF2206": {
"name": "5ծ2206",
"code": "TF2206",
"exchg": "CFFEX",
"product": "TF",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"TS2112": {
"name": "2ծ2112",
"code": "TS2112",
"exchg": "CFFEX",
"product": "TS",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"TS2203": {
"name": "2ծ2203",
"code": "TS2203",
"exchg": "CFFEX",
"product": "TS",
"maxlimitqty": 50,
"maxmarketqty": 0
},
"TS2206": {
"name": "2ծ2206",
"code": "TS2206",
"exchg": "CFFEX",
"product": "TS",
"maxlimitqty": 50,
"maxmarketqty": 0
}
},
"CZCE": {
"AP110": {
"name": "ƻ110",
"code": "AP110",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"AP111": {
"name": "ƻ111",
"code": "AP111",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"AP112": {
"name": "ƻ112",
"code": "AP112",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"AP201": {
"name": "ƻ201",
"code": "AP201",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"AP203": {
"name": "ƻ203",
"code": "AP203",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"AP204": {
"name": "ƻ204",
"code": "AP204",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"AP205": {
"name": "ƻ205",
"code": "AP205",
"exchg": "CZCE",
"product": "AP",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CF111": {
"name": "֣111",
"code": "CF111",
"exchg": "CZCE",
"product": "CF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"CF201": {
"name": "֣201",
"code": "CF201",
"exchg": "CZCE",
"product": "CF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CF203": {
"name": "֣203",
"code": "CF203",
"exchg": "CZCE",
"product": "CF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CF205": {
"name": "֣205",
"code": "CF205",
"exchg": "CZCE",
"product": "CF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CF207": {
"name": "֣207",
"code": "CF207",
"exchg": "CZCE",
"product": "CF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CF209": {
"name": "֣209",
"code": "CF209",
"exchg": "CZCE",
"product": "CF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CJ112": {
"name": "112",
"code": "CJ112",
"exchg": "CZCE",
"product": "CJ",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"CJ201": {
"name": "201",
"code": "CJ201",
"exchg": "CZCE",
"product": "CJ",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CJ203": {
"name": "203",
"code": "CJ203",
"exchg": "CZCE",
"product": "CJ",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CJ205": {
"name": "205",
"code": "CJ205",
"exchg": "CZCE",
"product": "CJ",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CJ207": {
"name": "207",
"code": "CJ207",
"exchg": "CZCE",
"product": "CJ",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CJ209": {
"name": "209",
"code": "CJ209",
"exchg": "CZCE",
"product": "CJ",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY110": {
"name": "ɴ110",
"code": "CY110",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"CY111": {
"name": "ɴ111",
"code": "CY111",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"CY112": {
"name": "ɴ112",
"code": "CY112",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"CY201": {
"name": "ɴ201",
"code": "CY201",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY202": {
"name": "ɴ202",
"code": "CY202",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY203": {
"name": "ɴ203",
"code": "CY203",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY204": {
"name": "ɴ204",
"code": "CY204",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY205": {
"name": "ɴ205",
"code": "CY205",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY206": {
"name": "ɴ206",
"code": "CY206",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY207": {
"name": "ɴ207",
"code": "CY207",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY208": {
"name": "ɴ208",
"code": "CY208",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"CY209": {
"name": "ɴ209",
"code": "CY209",
"exchg": "CZCE",
"product": "CY",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"FG110": {
"name": "110",
"code": "FG110",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"FG111": {
"name": "111",
"code": "FG111",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"FG112": {
"name": "112",
"code": "FG112",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"FG201": {
"name": "201",
"code": "FG201",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG202": {
"name": "202",
"code": "FG202",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG203": {
"name": "203",
"code": "FG203",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG204": {
"name": "204",
"code": "FG204",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG205": {
"name": "205",
"code": "FG205",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG206": {
"name": "206",
"code": "FG206",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG207": {
"name": "207",
"code": "FG207",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG208": {
"name": "208",
"code": "FG208",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"FG209": {
"name": "209",
"code": "FG209",
"exchg": "CZCE",
"product": "FG",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"JR111": {
"name": "111",
"code": "JR111",
"exchg": "CZCE",
"product": "JR",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"JR201": {
"name": "201",
"code": "JR201",
"exchg": "CZCE",
"product": "JR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"JR203": {
"name": "203",
"code": "JR203",
"exchg": "CZCE",
"product": "JR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"JR205": {
"name": "205",
"code": "JR205",
"exchg": "CZCE",
"product": "JR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"JR207": {
"name": "207",
"code": "JR207",
"exchg": "CZCE",
"product": "JR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"JR209": {
"name": "209",
"code": "JR209",
"exchg": "CZCE",
"product": "JR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"LR111": {
"name": "̵111",
"code": "LR111",
"exchg": "CZCE",
"product": "LR",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"LR201": {
"name": "̵201",
"code": "LR201",
"exchg": "CZCE",
"product": "LR",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"LR203": {
"name": "̵203",
"code": "LR203",
"exchg": "CZCE",
"product": "LR",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"LR205": {
"name": "̵205",
"code": "LR205",
"exchg": "CZCE",
"product": "LR",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"LR207": {
"name": "̵207",
"code": "LR207",
"exchg": "CZCE",
"product": "LR",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"LR209": {
"name": "̵209",
"code": "LR209",
"exchg": "CZCE",
"product": "LR",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"MA110": {
"name": "֣110",
"code": "MA110",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"MA111": {
"name": "֣111",
"code": "MA111",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"MA112": {
"name": "֣112",
"code": "MA112",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"MA201": {
"name": "֣201",
"code": "MA201",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA202": {
"name": "֣202",
"code": "MA202",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA203": {
"name": "֣203",
"code": "MA203",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA204": {
"name": "֣204",
"code": "MA204",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA205": {
"name": "֣205",
"code": "MA205",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA206": {
"name": "֣206",
"code": "MA206",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA207": {
"name": "֣207",
"code": "MA207",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA208": {
"name": "֣208",
"code": "MA208",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"MA209": {
"name": "֣209",
"code": "MA209",
"exchg": "CZCE",
"product": "MA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"OI111": {
"name": "111",
"code": "OI111",
"exchg": "CZCE",
"product": "OI",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"OI201": {
"name": "201",
"code": "OI201",
"exchg": "CZCE",
"product": "OI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"OI203": {
"name": "203",
"code": "OI203",
"exchg": "CZCE",
"product": "OI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"OI205": {
"name": "205",
"code": "OI205",
"exchg": "CZCE",
"product": "OI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"OI207": {
"name": "207",
"code": "OI207",
"exchg": "CZCE",
"product": "OI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"OI209": {
"name": "209",
"code": "OI209",
"exchg": "CZCE",
"product": "OI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"PF110": {
"name": "110",
"code": "PF110",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"PF111": {
"name": "111",
"code": "PF111",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"PF112": {
"name": "112",
"code": "PF112",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"PF201": {
"name": "201",
"code": "PF201",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF202": {
"name": "202",
"code": "PF202",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF203": {
"name": "203",
"code": "PF203",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF204": {
"name": "204",
"code": "PF204",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF205": {
"name": "205",
"code": "PF205",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF206": {
"name": "206",
"code": "PF206",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF207": {
"name": "207",
"code": "PF207",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF208": {
"name": "208",
"code": "PF208",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PF209": {
"name": "209",
"code": "PF209",
"exchg": "CZCE",
"product": "PF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PK110": {
"name": "110",
"code": "PK110",
"exchg": "CZCE",
"product": "PK",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PK111": {
"name": "111",
"code": "PK111",
"exchg": "CZCE",
"product": "PK",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PK112": {
"name": "112",
"code": "PK112",
"exchg": "CZCE",
"product": "PK",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PK201": {
"name": "201",
"code": "PK201",
"exchg": "CZCE",
"product": "PK",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PK203": {
"name": "203",
"code": "PK203",
"exchg": "CZCE",
"product": "PK",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PK204": {
"name": "204",
"code": "PK204",
"exchg": "CZCE",
"product": "PK",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PM111": {
"name": "111",
"code": "PM111",
"exchg": "CZCE",
"product": "PM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"PM201": {
"name": "201",
"code": "PM201",
"exchg": "CZCE",
"product": "PM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PM203": {
"name": "203",
"code": "PM203",
"exchg": "CZCE",
"product": "PM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PM205": {
"name": "205",
"code": "PM205",
"exchg": "CZCE",
"product": "PM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PM207": {
"name": "207",
"code": "PM207",
"exchg": "CZCE",
"product": "PM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"PM209": {
"name": "209",
"code": "PM209",
"exchg": "CZCE",
"product": "PM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"RI111": {
"name": "̵111",
"code": "RI111",
"exchg": "CZCE",
"product": "RI",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RI201": {
"name": "̵201",
"code": "RI201",
"exchg": "CZCE",
"product": "RI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"RI203": {
"name": "̵203",
"code": "RI203",
"exchg": "CZCE",
"product": "RI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"RI205": {
"name": "̵205",
"code": "RI205",
"exchg": "CZCE",
"product": "RI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"RI207": {
"name": "̵207",
"code": "RI207",
"exchg": "CZCE",
"product": "RI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"RI209": {
"name": "̵209",
"code": "RI209",
"exchg": "CZCE",
"product": "RI",
"maxlimitqty": 1000,
"maxmarketqty": 500
},
"RM111": {
"name": "111",
"code": "RM111",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RM201": {
"name": "201",
"code": "RM201",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RM203": {
"name": "203",
"code": "RM203",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RM205": {
"name": "205",
"code": "RM205",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RM207": {
"name": "207",
"code": "RM207",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RM208": {
"name": "208",
"code": "RM208",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RM209": {
"name": "209",
"code": "RM209",
"exchg": "CZCE",
"product": "RM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RS111": {
"name": "111",
"code": "RS111",
"exchg": "CZCE",
"product": "RS",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RS207": {
"name": "207",
"code": "RS207",
"exchg": "CZCE",
"product": "RS",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RS208": {
"name": "208",
"code": "RS208",
"exchg": "CZCE",
"product": "RS",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"RS209": {
"name": "209",
"code": "RS209",
"exchg": "CZCE",
"product": "RS",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SA110": {
"name": "110",
"code": "SA110",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SA111": {
"name": "111",
"code": "SA111",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SA112": {
"name": "112",
"code": "SA112",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SA201": {
"name": "201",
"code": "SA201",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA202": {
"name": "202",
"code": "SA202",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA203": {
"name": "203",
"code": "SA203",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA204": {
"name": "204",
"code": "SA204",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA205": {
"name": "205",
"code": "SA205",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA206": {
"name": "206",
"code": "SA206",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA207": {
"name": "207",
"code": "SA207",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA208": {
"name": "208",
"code": "SA208",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SA209": {
"name": "209",
"code": "SA209",
"exchg": "CZCE",
"product": "SA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF110": {
"name": "110",
"code": "SF110",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SF111": {
"name": "111",
"code": "SF111",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SF112": {
"name": "112",
"code": "SF112",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SF201": {
"name": "201",
"code": "SF201",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF202": {
"name": "202",
"code": "SF202",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF203": {
"name": "203",
"code": "SF203",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF204": {
"name": "204",
"code": "SF204",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF205": {
"name": "205",
"code": "SF205",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF206": {
"name": "206",
"code": "SF206",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF207": {
"name": "207",
"code": "SF207",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF208": {
"name": "208",
"code": "SF208",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SF209": {
"name": "209",
"code": "SF209",
"exchg": "CZCE",
"product": "SF",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM110": {
"name": "̹110",
"code": "SM110",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SM111": {
"name": "̹111",
"code": "SM111",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SM112": {
"name": "̹112",
"code": "SM112",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SM201": {
"name": "̹201",
"code": "SM201",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM202": {
"name": "̹202",
"code": "SM202",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM203": {
"name": "̹203",
"code": "SM203",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM204": {
"name": "̹204",
"code": "SM204",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM205": {
"name": "̹205",
"code": "SM205",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM206": {
"name": "̹206",
"code": "SM206",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM207": {
"name": "̹207",
"code": "SM207",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM208": {
"name": "̹208",
"code": "SM208",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SM209": {
"name": "̹209",
"code": "SM209",
"exchg": "CZCE",
"product": "SM",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SR111": {
"name": "111",
"code": "SR111",
"exchg": "CZCE",
"product": "SR",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"SR201": {
"name": "201",
"code": "SR201",
"exchg": "CZCE",
"product": "SR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SR203": {
"name": "203",
"code": "SR203",
"exchg": "CZCE",
"product": "SR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SR205": {
"name": "205",
"code": "SR205",
"exchg": "CZCE",
"product": "SR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SR207": {
"name": "207",
"code": "SR207",
"exchg": "CZCE",
"product": "SR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"SR209": {
"name": "209",
"code": "SR209",
"exchg": "CZCE",
"product": "SR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA110": {
"name": "PTA110",
"code": "TA110",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"TA111": {
"name": "PTA111",
"code": "TA111",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"TA112": {
"name": "PTA112",
"code": "TA112",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"TA201": {
"name": "PTA201",
"code": "TA201",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA202": {
"name": "PTA202",
"code": "TA202",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA203": {
"name": "PTA203",
"code": "TA203",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA204": {
"name": "PTA204",
"code": "TA204",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA205": {
"name": "PTA205",
"code": "TA205",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA206": {
"name": "PTA206",
"code": "TA206",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA207": {
"name": "PTA207",
"code": "TA207",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA208": {
"name": "PTA208",
"code": "TA208",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"TA209": {
"name": "PTA209",
"code": "TA209",
"exchg": "CZCE",
"product": "TA",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR110": {
"name": "110",
"code": "UR110",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"UR111": {
"name": "111",
"code": "UR111",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"UR112": {
"name": "112",
"code": "UR112",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"UR201": {
"name": "201",
"code": "UR201",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR202": {
"name": "202",
"code": "UR202",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR203": {
"name": "203",
"code": "UR203",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR204": {
"name": "204",
"code": "UR204",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR205": {
"name": "205",
"code": "UR205",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR206": {
"name": "206",
"code": "UR206",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR207": {
"name": "207",
"code": "UR207",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR208": {
"name": "208",
"code": "UR208",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"UR209": {
"name": "209",
"code": "UR209",
"exchg": "CZCE",
"product": "UR",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"WH111": {
"name": "֣111",
"code": "WH111",
"exchg": "CZCE",
"product": "WH",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"WH201": {
"name": "֣201",
"code": "WH201",
"exchg": "CZCE",
"product": "WH",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"WH203": {
"name": "֣203",
"code": "WH203",
"exchg": "CZCE",
"product": "WH",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"WH205": {
"name": "֣205",
"code": "WH205",
"exchg": "CZCE",
"product": "WH",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"WH207": {
"name": "֣207",
"code": "WH207",
"exchg": "CZCE",
"product": "WH",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"WH209": {
"name": "֣209",
"code": "WH209",
"exchg": "CZCE",
"product": "WH",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC110": {
"name": "֣ú110",
"code": "ZC110",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"ZC111": {
"name": "֣ú111",
"code": "ZC111",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"ZC112": {
"name": "֣ú112",
"code": "ZC112",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"ZC201": {
"name": "֣ú201",
"code": "ZC201",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC202": {
"name": "֣ú202",
"code": "ZC202",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC203": {
"name": "֣ú203",
"code": "ZC203",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC204": {
"name": "֣ú204",
"code": "ZC204",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC205": {
"name": "֣ú205",
"code": "ZC205",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC206": {
"name": "֣ú206",
"code": "ZC206",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC207": {
"name": "֣ú207",
"code": "ZC207",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC208": {
"name": "֣ú208",
"code": "ZC208",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
},
"ZC209": {
"name": "֣ú209",
"code": "ZC209",
"exchg": "CZCE",
"product": "ZC",
"maxlimitqty": 1000,
"maxmarketqty": 200
}
},
"DCE": {
"a2111": {
"name": "һ2111",
"code": "a2111",
"exchg": "DCE",
"product": "a",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"a2201": {
"name": "һ2201",
"code": "a2201",
"exchg": "DCE",
"product": "a",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"a2203": {
"name": "һ2203",
"code": "a2203",
"exchg": "DCE",
"product": "a",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"a2205": {
"name": "һ2205",
"code": "a2205",
"exchg": "DCE",
"product": "a",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"a2207": {
"name": "һ2207",
"code": "a2207",
"exchg": "DCE",
"product": "a",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"a2209": {
"name": "һ2209",
"code": "a2209",
"exchg": "DCE",
"product": "a",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2110": {
"name": "2110",
"code": "b2110",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2111": {
"name": "2111",
"code": "b2111",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2112": {
"name": "2112",
"code": "b2112",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2201": {
"name": "2201",
"code": "b2201",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2202": {
"name": "2202",
"code": "b2202",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2203": {
"name": "2203",
"code": "b2203",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2204": {
"name": "2204",
"code": "b2204",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2205": {
"name": "2205",
"code": "b2205",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2206": {
"name": "2206",
"code": "b2206",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2207": {
"name": "2207",
"code": "b2207",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2208": {
"name": "2208",
"code": "b2208",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"b2209": {
"name": "2209",
"code": "b2209",
"exchg": "DCE",
"product": "b",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2110": {
"name": "2110",
"code": "bb2110",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2111": {
"name": "2111",
"code": "bb2111",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2112": {
"name": "2112",
"code": "bb2112",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2201": {
"name": "2201",
"code": "bb2201",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2202": {
"name": "2202",
"code": "bb2202",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2203": {
"name": "2203",
"code": "bb2203",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2204": {
"name": "2204",
"code": "bb2204",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2205": {
"name": "2205",
"code": "bb2205",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2206": {
"name": "2206",
"code": "bb2206",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2207": {
"name": "2207",
"code": "bb2207",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2208": {
"name": "2208",
"code": "bb2208",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"bb2209": {
"name": "2209",
"code": "bb2209",
"exchg": "DCE",
"product": "bb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"c2111": {
"name": "2111",
"code": "c2111",
"exchg": "DCE",
"product": "c",
"maxlimitqty": 2000,
"maxmarketqty": 2000
},
"c2201": {
"name": "2201",
"code": "c2201",
"exchg": "DCE",
"product": "c",
"maxlimitqty": 2000,
"maxmarketqty": 2000
},
"c2203": {
"name": "2203",
"code": "c2203",
"exchg": "DCE",
"product": "c",
"maxlimitqty": 2000,
"maxmarketqty": 2000
},
"c2205": {
"name": "2205",
"code": "c2205",
"exchg": "DCE",
"product": "c",
"maxlimitqty": 2000,
"maxmarketqty": 2000
},
"c2207": {
"name": "2207",
"code": "c2207",
"exchg": "DCE",
"product": "c",
"maxlimitqty": 2000,
"maxmarketqty": 2000
},
"c2209": {
"name": "2209",
"code": "c2209",
"exchg": "DCE",
"product": "c",
"maxlimitqty": 2000,
"maxmarketqty": 2000
},
"cs2111": {
"name": "2111",
"code": "cs2111",
"exchg": "DCE",
"product": "cs",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"cs2201": {
"name": "2201",
"code": "cs2201",
"exchg": "DCE",
"product": "cs",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"cs2203": {
"name": "2203",
"code": "cs2203",
"exchg": "DCE",
"product": "cs",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"cs2205": {
"name": "2205",
"code": "cs2205",
"exchg": "DCE",
"product": "cs",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"cs2207": {
"name": "2207",
"code": "cs2207",
"exchg": "DCE",
"product": "cs",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"cs2209": {
"name": "2209",
"code": "cs2209",
"exchg": "DCE",
"product": "cs",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2110": {
"name": "ϩ2110",
"code": "eb2110",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2111": {
"name": "ϩ2111",
"code": "eb2111",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2112": {
"name": "ϩ2112",
"code": "eb2112",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2201": {
"name": "ϩ2201",
"code": "eb2201",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2202": {
"name": "ϩ2202",
"code": "eb2202",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2203": {
"name": "ϩ2203",
"code": "eb2203",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2204": {
"name": "ϩ2204",
"code": "eb2204",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2205": {
"name": "ϩ2205",
"code": "eb2205",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2206": {
"name": "ϩ2206",
"code": "eb2206",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2207": {
"name": "ϩ2207",
"code": "eb2207",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2208": {
"name": "ϩ2208",
"code": "eb2208",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eb2209": {
"name": "ϩ2209",
"code": "eb2209",
"exchg": "DCE",
"product": "eb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2110": {
"name": "Ҷ2110",
"code": "eg2110",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2111": {
"name": "Ҷ2111",
"code": "eg2111",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2112": {
"name": "Ҷ2112",
"code": "eg2112",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2201": {
"name": "Ҷ2201",
"code": "eg2201",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2202": {
"name": "Ҷ2202",
"code": "eg2202",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2203": {
"name": "Ҷ2203",
"code": "eg2203",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2204": {
"name": "Ҷ2204",
"code": "eg2204",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2205": {
"name": "Ҷ2205",
"code": "eg2205",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2206": {
"name": "Ҷ2206",
"code": "eg2206",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2207": {
"name": "Ҷ2207",
"code": "eg2207",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2208": {
"name": "Ҷ2208",
"code": "eg2208",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"eg2209": {
"name": "Ҷ2209",
"code": "eg2209",
"exchg": "DCE",
"product": "eg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2110": {
"name": "˰2110",
"code": "fb2110",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2111": {
"name": "˰2111",
"code": "fb2111",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2112": {
"name": "˰2112",
"code": "fb2112",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2201": {
"name": "˰2201",
"code": "fb2201",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2202": {
"name": "˰2202",
"code": "fb2202",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2203": {
"name": "˰2203",
"code": "fb2203",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2204": {
"name": "˰2204",
"code": "fb2204",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2205": {
"name": "˰2205",
"code": "fb2205",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2206": {
"name": "˰2206",
"code": "fb2206",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2207": {
"name": "˰2207",
"code": "fb2207",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2208": {
"name": "˰2208",
"code": "fb2208",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"fb2209": {
"name": "˰2209",
"code": "fb2209",
"exchg": "DCE",
"product": "fb",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2110": {
"name": "ʯ2110",
"code": "i2110",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2111": {
"name": "ʯ2111",
"code": "i2111",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2112": {
"name": "ʯ2112",
"code": "i2112",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2201": {
"name": "ʯ2201",
"code": "i2201",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2202": {
"name": "ʯ2202",
"code": "i2202",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2203": {
"name": "ʯ2203",
"code": "i2203",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2204": {
"name": "ʯ2204",
"code": "i2204",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2205": {
"name": "ʯ2205",
"code": "i2205",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2206": {
"name": "ʯ2206",
"code": "i2206",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2207": {
"name": "ʯ2207",
"code": "i2207",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2208": {
"name": "ʯ2208",
"code": "i2208",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"i2209": {
"name": "ʯ2209",
"code": "i2209",
"exchg": "DCE",
"product": "i",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"j2110": {
"name": "̿2110",
"code": "j2110",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2111": {
"name": "̿2111",
"code": "j2111",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2112": {
"name": "̿2112",
"code": "j2112",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2201": {
"name": "̿2201",
"code": "j2201",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2202": {
"name": "̿2202",
"code": "j2202",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2203": {
"name": "̿2203",
"code": "j2203",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2204": {
"name": "̿2204",
"code": "j2204",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2205": {
"name": "̿2205",
"code": "j2205",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2206": {
"name": "̿2206",
"code": "j2206",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2207": {
"name": "̿2207",
"code": "j2207",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2208": {
"name": "̿2208",
"code": "j2208",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"j2209": {
"name": "̿2209",
"code": "j2209",
"exchg": "DCE",
"product": "j",
"maxlimitqty": 500,
"maxmarketqty": 500
},
"jd2110": {
"name": "2110",
"code": "jd2110",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2111": {
"name": "2111",
"code": "jd2111",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2112": {
"name": "2112",
"code": "jd2112",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2201": {
"name": "2201",
"code": "jd2201",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2202": {
"name": "2202",
"code": "jd2202",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2203": {
"name": "2203",
"code": "jd2203",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2204": {
"name": "2204",
"code": "jd2204",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2205": {
"name": "2205",
"code": "jd2205",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2206": {
"name": "2206",
"code": "jd2206",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2207": {
"name": "2207",
"code": "jd2207",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2208": {
"name": "2208",
"code": "jd2208",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jd2209": {
"name": "2209",
"code": "jd2209",
"exchg": "DCE",
"product": "jd",
"maxlimitqty": 300,
"maxmarketqty": 300
},
"jm2110": {
"name": "ú2110",
"code": "jm2110",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2111": {
"name": "ú2111",
"code": "jm2111",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2112": {
"name": "ú2112",
"code": "jm2112",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2201": {
"name": "ú2201",
"code": "jm2201",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2202": {
"name": "ú2202",
"code": "jm2202",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2203": {
"name": "ú2203",
"code": "jm2203",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2204": {
"name": "ú2204",
"code": "jm2204",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2205": {
"name": "ú2205",
"code": "jm2205",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2206": {
"name": "ú2206",
"code": "jm2206",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2207": {
"name": "ú2207",
"code": "jm2207",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2208": {
"name": "ú2208",
"code": "jm2208",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"jm2209": {
"name": "ú2209",
"code": "jm2209",
"exchg": "DCE",
"product": "jm",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2110": {
"name": "2110",
"code": "l2110",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2111": {
"name": "2111",
"code": "l2111",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2112": {
"name": "2112",
"code": "l2112",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2201": {
"name": "2201",
"code": "l2201",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2202": {
"name": "2202",
"code": "l2202",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2203": {
"name": "2203",
"code": "l2203",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2204": {
"name": "2204",
"code": "l2204",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2205": {
"name": "2205",
"code": "l2205",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2206": {
"name": "2206",
"code": "l2206",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2207": {
"name": "2207",
"code": "l2207",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2208": {
"name": "2208",
"code": "l2208",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"l2209": {
"name": "2209",
"code": "l2209",
"exchg": "DCE",
"product": "l",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"lh2111": {
"name": "2111",
"code": "lh2111",
"exchg": "DCE",
"product": "lh",
"maxlimitqty": 50,
"maxmarketqty": 50
},
"lh2201": {
"name": "2201",
"code": "lh2201",
"exchg": "DCE",
"product": "lh",
"maxlimitqty": 50,
"maxmarketqty": 50
},
"lh2203": {
"name": "2203",
"code": "lh2203",
"exchg": "DCE",
"product": "lh",
"maxlimitqty": 50,
"maxmarketqty": 50
},
"lh2205": {
"name": "2205",
"code": "lh2205",
"exchg": "DCE",
"product": "lh",
"maxlimitqty": 50,
"maxmarketqty": 50
},
"lh2207": {
"name": "2207",
"code": "lh2207",
"exchg": "DCE",
"product": "lh",
"maxlimitqty": 50,
"maxmarketqty": 50
},
"lh2209": {
"name": "2209",
"code": "lh2209",
"exchg": "DCE",
"product": "lh",
"maxlimitqty": 50,
"maxmarketqty": 50
},
"m2111": {
"name": "2111",
"code": "m2111",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2112": {
"name": "2112",
"code": "m2112",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2201": {
"name": "2201",
"code": "m2201",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2203": {
"name": "2203",
"code": "m2203",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2205": {
"name": "2205",
"code": "m2205",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2207": {
"name": "2207",
"code": "m2207",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2208": {
"name": "2208",
"code": "m2208",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"m2209": {
"name": "2209",
"code": "m2209",
"exchg": "DCE",
"product": "m",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2110": {
"name": "2110",
"code": "p2110",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2111": {
"name": "2111",
"code": "p2111",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2112": {
"name": "2112",
"code": "p2112",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2201": {
"name": "2201",
"code": "p2201",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2202": {
"name": "2202",
"code": "p2202",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2203": {
"name": "2203",
"code": "p2203",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2204": {
"name": "2204",
"code": "p2204",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2205": {
"name": "2205",
"code": "p2205",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2206": {
"name": "2206",
"code": "p2206",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2207": {
"name": "2207",
"code": "p2207",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2208": {
"name": "2208",
"code": "p2208",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"p2209": {
"name": "2209",
"code": "p2209",
"exchg": "DCE",
"product": "p",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2110": {
"name": "Һ2110",
"code": "pg2110",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2111": {
"name": "Һ2111",
"code": "pg2111",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2112": {
"name": "Һ2112",
"code": "pg2112",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2201": {
"name": "Һ2201",
"code": "pg2201",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2202": {
"name": "Һ2202",
"code": "pg2202",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2203": {
"name": "Һ2203",
"code": "pg2203",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2204": {
"name": "Һ2204",
"code": "pg2204",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2205": {
"name": "Һ2205",
"code": "pg2205",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2206": {
"name": "Һ2206",
"code": "pg2206",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2207": {
"name": "Һ2207",
"code": "pg2207",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2208": {
"name": "Һ2208",
"code": "pg2208",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pg2209": {
"name": "Һ2209",
"code": "pg2209",
"exchg": "DCE",
"product": "pg",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2110": {
"name": "۱ϩ2110",
"code": "pp2110",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2111": {
"name": "۱ϩ2111",
"code": "pp2111",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2112": {
"name": "۱ϩ2112",
"code": "pp2112",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2201": {
"name": "۱ϩ2201",
"code": "pp2201",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2202": {
"name": "۱ϩ2202",
"code": "pp2202",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2203": {
"name": "۱ϩ2203",
"code": "pp2203",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2204": {
"name": "۱ϩ2204",
"code": "pp2204",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2205": {
"name": "۱ϩ2205",
"code": "pp2205",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2206": {
"name": "۱ϩ2206",
"code": "pp2206",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2207": {
"name": "۱ϩ2207",
"code": "pp2207",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2208": {
"name": "۱ϩ2208",
"code": "pp2208",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"pp2209": {
"name": "۱ϩ2209",
"code": "pp2209",
"exchg": "DCE",
"product": "pp",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2110": {
"name": "2110",
"code": "rr2110",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2111": {
"name": "2111",
"code": "rr2111",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2112": {
"name": "2112",
"code": "rr2112",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2201": {
"name": "2201",
"code": "rr2201",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2202": {
"name": "2202",
"code": "rr2202",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2203": {
"name": "2203",
"code": "rr2203",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2204": {
"name": "2204",
"code": "rr2204",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2205": {
"name": "2205",
"code": "rr2205",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2206": {
"name": "2206",
"code": "rr2206",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2207": {
"name": "2207",
"code": "rr2207",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2208": {
"name": "2208",
"code": "rr2208",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"rr2209": {
"name": "2209",
"code": "rr2209",
"exchg": "DCE",
"product": "rr",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2110": {
"name": "PVC2110",
"code": "v2110",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2111": {
"name": "PVC2111",
"code": "v2111",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2112": {
"name": "PVC2112",
"code": "v2112",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2201": {
"name": "PVC2201",
"code": "v2201",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2202": {
"name": "PVC2202",
"code": "v2202",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2203": {
"name": "PVC2203",
"code": "v2203",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2204": {
"name": "PVC2204",
"code": "v2204",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2205": {
"name": "PVC2205",
"code": "v2205",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2206": {
"name": "PVC2206",
"code": "v2206",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2207": {
"name": "PVC2207",
"code": "v2207",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2208": {
"name": "PVC2208",
"code": "v2208",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"v2209": {
"name": "PVC2209",
"code": "v2209",
"exchg": "DCE",
"product": "v",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2111": {
"name": "2111",
"code": "y2111",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2112": {
"name": "2112",
"code": "y2112",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2201": {
"name": "2201",
"code": "y2201",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2203": {
"name": "2203",
"code": "y2203",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2205": {
"name": "2205",
"code": "y2205",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2207": {
"name": "2207",
"code": "y2207",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2208": {
"name": "2208",
"code": "y2208",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
},
"y2209": {
"name": "2209",
"code": "y2209",
"exchg": "DCE",
"product": "y",
"maxlimitqty": 1000,
"maxmarketqty": 1000
}
},
"INE": {
"bc2110": {
"name": "ͭ2110",
"code": "bc2110",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2111": {
"name": "ͭ2111",
"code": "bc2111",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2112": {
"name": "ͭ2112",
"code": "bc2112",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2201": {
"name": "ͭ2201",
"code": "bc2201",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2202": {
"name": "ͭ2202",
"code": "bc2202",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2203": {
"name": "ͭ2203",
"code": "bc2203",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2204": {
"name": "ͭ2204",
"code": "bc2204",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2205": {
"name": "ͭ2205",
"code": "bc2205",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2206": {
"name": "ͭ2206",
"code": "bc2206",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2207": {
"name": "ͭ2207",
"code": "bc2207",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2208": {
"name": "ͭ2208",
"code": "bc2208",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bc2209": {
"name": "ͭ2209",
"code": "bc2209",
"exchg": "INE",
"product": "bc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2111": {
"name": "2111",
"code": "lu2111",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2112": {
"name": "2112",
"code": "lu2112",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2201": {
"name": "2201",
"code": "lu2201",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2202": {
"name": "2202",
"code": "lu2202",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2203": {
"name": "2203",
"code": "lu2203",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2204": {
"name": "2204",
"code": "lu2204",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2205": {
"name": "2205",
"code": "lu2205",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2206": {
"name": "2206",
"code": "lu2206",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2207": {
"name": "2207",
"code": "lu2207",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2208": {
"name": "2208",
"code": "lu2208",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2209": {
"name": "2209",
"code": "lu2209",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"lu2210": {
"name": "2210",
"code": "lu2210",
"exchg": "INE",
"product": "lu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2110": {
"name": "202110",
"code": "nr2110",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2111": {
"name": "202111",
"code": "nr2111",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2112": {
"name": "202112",
"code": "nr2112",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2201": {
"name": "202201",
"code": "nr2201",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2202": {
"name": "202202",
"code": "nr2202",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2203": {
"name": "202203",
"code": "nr2203",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2204": {
"name": "202204",
"code": "nr2204",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2205": {
"name": "202205",
"code": "nr2205",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2206": {
"name": "202206",
"code": "nr2206",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2207": {
"name": "202207",
"code": "nr2207",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2208": {
"name": "202208",
"code": "nr2208",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"nr2209": {
"name": "202209",
"code": "nr2209",
"exchg": "INE",
"product": "nr",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2111": {
"name": "ԭ2111",
"code": "sc2111",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2112": {
"name": "ԭ2112",
"code": "sc2112",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2201": {
"name": "ԭ2201",
"code": "sc2201",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2202": {
"name": "ԭ2202",
"code": "sc2202",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2203": {
"name": "ԭ2203",
"code": "sc2203",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2204": {
"name": "ԭ2204",
"code": "sc2204",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2205": {
"name": "ԭ2205",
"code": "sc2205",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2206": {
"name": "ԭ2206",
"code": "sc2206",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2207": {
"name": "ԭ2207",
"code": "sc2207",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2208": {
"name": "ԭ2208",
"code": "sc2208",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2209": {
"name": "ԭ2209",
"code": "sc2209",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2210": {
"name": "ԭ2210",
"code": "sc2210",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2212": {
"name": "ԭ2212",
"code": "sc2212",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2303": {
"name": "ԭ2303",
"code": "sc2303",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2306": {
"name": "ԭ2306",
"code": "sc2306",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2309": {
"name": "ԭ2309",
"code": "sc2309",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2312": {
"name": "ԭ2312",
"code": "sc2312",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2403": {
"name": "ԭ2403",
"code": "sc2403",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2406": {
"name": "ԭ2406",
"code": "sc2406",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"sc2409": {
"name": "ԭ2409",
"code": "sc2409",
"exchg": "INE",
"product": "sc",
"maxlimitqty": 500,
"maxmarketqty": 30
}
},
"SHFE": {
"ag2110": {
"name": "2110",
"code": "ag2110",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2111": {
"name": "2111",
"code": "ag2111",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2112": {
"name": "2112",
"code": "ag2112",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2201": {
"name": "2201",
"code": "ag2201",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2202": {
"name": "2202",
"code": "ag2202",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2203": {
"name": "2203",
"code": "ag2203",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2204": {
"name": "2204",
"code": "ag2204",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2205": {
"name": "2205",
"code": "ag2205",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2206": {
"name": "2206",
"code": "ag2206",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2207": {
"name": "2207",
"code": "ag2207",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2208": {
"name": "2208",
"code": "ag2208",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ag2209": {
"name": "2209",
"code": "ag2209",
"exchg": "SHFE",
"product": "ag",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2110": {
"name": "2110",
"code": "al2110",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2111": {
"name": "2111",
"code": "al2111",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2112": {
"name": "2112",
"code": "al2112",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2201": {
"name": "2201",
"code": "al2201",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2202": {
"name": "2202",
"code": "al2202",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2203": {
"name": "2203",
"code": "al2203",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2204": {
"name": "2204",
"code": "al2204",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2205": {
"name": "2205",
"code": "al2205",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2206": {
"name": "2206",
"code": "al2206",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2207": {
"name": "2207",
"code": "al2207",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2208": {
"name": "2208",
"code": "al2208",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"al2209": {
"name": "2209",
"code": "al2209",
"exchg": "SHFE",
"product": "al",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2110": {
"name": "2110",
"code": "au2110",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2111": {
"name": "2111",
"code": "au2111",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2112": {
"name": "2112",
"code": "au2112",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2202": {
"name": "2202",
"code": "au2202",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2204": {
"name": "2204",
"code": "au2204",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2206": {
"name": "2206",
"code": "au2206",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2208": {
"name": "2208",
"code": "au2208",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"au2210": {
"name": "2210",
"code": "au2210",
"exchg": "SHFE",
"product": "au",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2110": {
"name": "2110",
"code": "bu2110",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2111": {
"name": "2111",
"code": "bu2111",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2112": {
"name": "2112",
"code": "bu2112",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2201": {
"name": "2201",
"code": "bu2201",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2202": {
"name": "2202",
"code": "bu2202",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2203": {
"name": "2203",
"code": "bu2203",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2206": {
"name": "2206",
"code": "bu2206",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2209": {
"name": "2209",
"code": "bu2209",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2212": {
"name": "2212",
"code": "bu2212",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2303": {
"name": "2303",
"code": "bu2303",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2306": {
"name": "2306",
"code": "bu2306",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"bu2309": {
"name": "2309",
"code": "bu2309",
"exchg": "SHFE",
"product": "bu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2110": {
"name": "ͭ2110",
"code": "cu2110",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2111": {
"name": "ͭ2111",
"code": "cu2111",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2112": {
"name": "ͭ2112",
"code": "cu2112",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2201": {
"name": "ͭ2201",
"code": "cu2201",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2202": {
"name": "ͭ2202",
"code": "cu2202",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2203": {
"name": "ͭ2203",
"code": "cu2203",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2204": {
"name": "ͭ2204",
"code": "cu2204",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2205": {
"name": "ͭ2205",
"code": "cu2205",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2206": {
"name": "ͭ2206",
"code": "cu2206",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2207": {
"name": "ͭ2207",
"code": "cu2207",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2208": {
"name": "ͭ2208",
"code": "cu2208",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"cu2209": {
"name": "ͭ2209",
"code": "cu2209",
"exchg": "SHFE",
"product": "cu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2111": {
"name": "ȼ2111",
"code": "fu2111",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2112": {
"name": "ȼ2112",
"code": "fu2112",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2201": {
"name": "ȼ2201",
"code": "fu2201",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2202": {
"name": "ȼ2202",
"code": "fu2202",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2203": {
"name": "ȼ2203",
"code": "fu2203",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2204": {
"name": "ȼ2204",
"code": "fu2204",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2205": {
"name": "ȼ2205",
"code": "fu2205",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2206": {
"name": "ȼ2206",
"code": "fu2206",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2207": {
"name": "ȼ2207",
"code": "fu2207",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2208": {
"name": "ȼ2208",
"code": "fu2208",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2209": {
"name": "ȼ2209",
"code": "fu2209",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"fu2210": {
"name": "ȼ2210",
"code": "fu2210",
"exchg": "SHFE",
"product": "fu",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2110": {
"name": "Ⱦ2110",
"code": "hc2110",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2111": {
"name": "Ⱦ2111",
"code": "hc2111",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2112": {
"name": "Ⱦ2112",
"code": "hc2112",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2201": {
"name": "Ⱦ2201",
"code": "hc2201",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2202": {
"name": "Ⱦ2202",
"code": "hc2202",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2203": {
"name": "Ⱦ2203",
"code": "hc2203",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2204": {
"name": "Ⱦ2204",
"code": "hc2204",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2205": {
"name": "Ⱦ2205",
"code": "hc2205",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2206": {
"name": "Ⱦ2206",
"code": "hc2206",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2207": {
"name": "Ⱦ2207",
"code": "hc2207",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2208": {
"name": "Ⱦ2208",
"code": "hc2208",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"hc2209": {
"name": "Ⱦ2209",
"code": "hc2209",
"exchg": "SHFE",
"product": "hc",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2110": {
"name": "2110",
"code": "ni2110",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2111": {
"name": "2111",
"code": "ni2111",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2112": {
"name": "2112",
"code": "ni2112",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2201": {
"name": "2201",
"code": "ni2201",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2202": {
"name": "2202",
"code": "ni2202",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2203": {
"name": "2203",
"code": "ni2203",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2204": {
"name": "2204",
"code": "ni2204",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2205": {
"name": "2205",
"code": "ni2205",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2206": {
"name": "2206",
"code": "ni2206",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2207": {
"name": "2207",
"code": "ni2207",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2208": {
"name": "2208",
"code": "ni2208",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"ni2209": {
"name": "2209",
"code": "ni2209",
"exchg": "SHFE",
"product": "ni",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2110": {
"name": "Ǧ2110",
"code": "pb2110",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2111": {
"name": "Ǧ2111",
"code": "pb2111",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2112": {
"name": "Ǧ2112",
"code": "pb2112",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2201": {
"name": "Ǧ2201",
"code": "pb2201",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2202": {
"name": "Ǧ2202",
"code": "pb2202",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2203": {
"name": "Ǧ2203",
"code": "pb2203",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2204": {
"name": "Ǧ2204",
"code": "pb2204",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2205": {
"name": "Ǧ2205",
"code": "pb2205",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2206": {
"name": "Ǧ2206",
"code": "pb2206",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2207": {
"name": "Ǧ2207",
"code": "pb2207",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2208": {
"name": "Ǧ2208",
"code": "pb2208",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"pb2209": {
"name": "Ǧ2209",
"code": "pb2209",
"exchg": "SHFE",
"product": "pb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"rb2110": {
"name": "2110",
"code": "rb2110",
"exchg": "SHFE",
"product": "rb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"rb2111": {
"name": "2111",
"code": "rb2111",
"exchg": "SHFE",
"product": "rb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"rb2112": {
"name": "2112",
"code": "rb2112",
"exchg": "SHFE",
"product": "rb",
"maxlimitqty": 500,
"maxmarketqty": 30
},
"rb
gitextract_wz5tjxvh/
├── .gitignore
├── LICENSE
├── README.md
├── analysts.py
├── assessments.py
├── compare_elegantrl.py
├── compare_rllib.py
├── compare_sb3.py
├── config/
│ ├── 01commom/
│ │ ├── actpolicy.json
│ │ ├── commodities.json
│ │ ├── contracts.json
│ │ ├── fees.json
│ │ ├── holidays.json
│ │ ├── hots.json
│ │ └── sessions.json
│ ├── 03research/
│ │ ├── cta.json
│ │ ├── hft.json
│ │ ├── log_debugger.json
│ │ ├── log_evaluator.json
│ │ └── log_trainer.json
│ └── 04realtime/
│ └── log.json
├── dataset/
│ └── his/
│ ├── day/
│ │ ├── CFFEX/
│ │ │ ├── CFFEX.IC_HOT.dsb
│ │ │ ├── CFFEX.IF_HOT.dsb
│ │ │ ├── CFFEX.IH_HOT.dsb
│ │ │ ├── CFFEX.TF_HOT.dsb
│ │ │ └── CFFEX.T_HOT.dsb
│ │ ├── CZCE/
│ │ │ ├── CZCE.AP_HOT.dsb
│ │ │ ├── CZCE.CF_HOT.dsb
│ │ │ ├── CZCE.JR_HOT.dsb
│ │ │ ├── CZCE.MA_HOT.dsb
│ │ │ ├── CZCE.RM_HOT.dsb
│ │ │ ├── CZCE.SF_HOT.dsb
│ │ │ ├── CZCE.SR_HOT.dsb
│ │ │ ├── CZCE.TA_HOT.dsb
│ │ │ └── CZCE.ZC_HOT.dsb
│ │ ├── DCE/
│ │ │ ├── DCE.a_HOT.dsb
│ │ │ ├── DCE.c_HOT.dsb
│ │ │ ├── DCE.cs_HOT.dsb
│ │ │ ├── DCE.i_HOT.dsb
│ │ │ ├── DCE.jd_HOT.dsb
│ │ │ ├── DCE.l_HOT.dsb
│ │ │ ├── DCE.m_HOT.dsb
│ │ │ ├── DCE.p_HOT.dsb
│ │ │ ├── DCE.pp_HOT.dsb
│ │ │ ├── DCE.rr_HOT.dsb
│ │ │ └── DCE.y_HOT.dsb
│ │ ├── INE/
│ │ │ ├── INE.lu_HOT.dsb
│ │ │ └── INE.sc_HOT.dsb
│ │ └── SHFE/
│ │ ├── SHFE.ag_HOT.dsb
│ │ ├── SHFE.al_HOT.dsb
│ │ ├── SHFE.bu_HOT.dsb
│ │ ├── SHFE.cu_HOT.dsb
│ │ ├── SHFE.fu_HOT.dsb
│ │ ├── SHFE.hc_HOT.dsb
│ │ ├── SHFE.ni_HOT.dsb
│ │ ├── SHFE.pb_HOT.dsb
│ │ ├── SHFE.rb_HOT.dsb
│ │ └── SHFE.zn_HOT.dsb
│ └── min5/
│ ├── CFFEX/
│ │ ├── CFFEX.IC_HOT.dsb
│ │ ├── CFFEX.IF_HOT.dsb
│ │ ├── CFFEX.IH_HOT.dsb
│ │ ├── CFFEX.TF_HOT.dsb
│ │ └── CFFEX.T_HOT.dsb
│ ├── CZCE/
│ │ ├── CZCE.AP_HOT.dsb
│ │ ├── CZCE.CF_HOT.dsb
│ │ ├── CZCE.JR_HOT.dsb
│ │ ├── CZCE.MA_HOT.dsb
│ │ ├── CZCE.RM_HOT.dsb
│ │ ├── CZCE.SF_HOT.dsb
│ │ ├── CZCE.SR_HOT.dsb
│ │ ├── CZCE.TA_HOT.dsb
│ │ └── CZCE.ZC_HOT.dsb
│ ├── DCE/
│ │ ├── DCE.a_HOT.dsb
│ │ ├── DCE.c_HOT.dsb
│ │ ├── DCE.cs_HOT.dsb
│ │ ├── DCE.i_HOT.dsb
│ │ ├── DCE.jd_HOT.dsb
│ │ ├── DCE.l_HOT.dsb
│ │ ├── DCE.m_HOT.dsb
│ │ ├── DCE.p_HOT.dsb
│ │ ├── DCE.pp_HOT.dsb
│ │ ├── DCE.rr_HOT.dsb
│ │ └── DCE.y_HOT.dsb
│ ├── INE/
│ │ ├── INE.lu_HOT.dsb
│ │ └── INE.sc_HOT.dsb
│ └── SHFE/
│ ├── SHFE.ag_HOT.dsb
│ ├── SHFE.al_HOT.dsb
│ ├── SHFE.bu_HOT.dsb
│ ├── SHFE.cu_HOT.dsb
│ ├── SHFE.fu_HOT.dsb
│ ├── SHFE.hc_HOT.dsb
│ ├── SHFE.ni_HOT.dsb
│ ├── SHFE.pb_HOT.dsb
│ ├── SHFE.rb_HOT.dsb
│ └── SHFE.zn_HOT.dsb
├── dataset_from_storage.py
├── elegantrl/
│ ├── __init__.py
│ ├── agent.py
│ ├── demo.py
│ ├── env.py
│ ├── evaluator.py
│ ├── net.py
│ ├── replay.py
│ └── run.py
├── envs.py
├── envs_simple_cta.py
├── features.py
├── reprocess.py
├── requirements/
│ ├── full_with_cuda.yaml
│ └── full_without_cuda.yaml
├── run_toy.py
├── runner.py
├── stoppers.py
├── strategies.py
└── wtpy/
├── CodeHelper.py
├── ContractMgr.py
├── CtaContext.py
├── ExtModuleDefs.py
├── ExtToolDefs.py
├── HftContext.py
├── ProductMgr.py
├── SelContext.py
├── SessionMgr.py
├── StrategyDefs.py
├── WtBtEngine.py
├── WtCoreDefs.py
├── WtDataDefs.py
├── WtDtEngine.py
├── WtDtServo.py
├── WtEngine.py
├── WtMsgQue.py
├── WtUtilDefs.py
├── __init__.py
├── apps/
│ ├── WtBtAnalyst.py
│ ├── WtCtaOptimizer.py
│ ├── WtHotPicker.py
│ ├── __init__.py
│ └── datahelper/
│ ├── DHBaostock.py
│ ├── DHDefs.py
│ ├── DHFactory.py
│ ├── DHRqData.py
│ ├── DHTushare.py
│ ├── __init__.py
│ └── db/
│ ├── MysqlHelper.py
│ ├── __init__.py
│ └── initdb_mysql.sql
├── monitor/
│ ├── DataMgr.py
│ ├── EventReceiver.py
│ ├── PushSvr.py
│ ├── WatchDog.py
│ ├── WtBtMon.py
│ ├── WtLogger.py
│ ├── WtMonSvr.py
│ ├── __init__.py
│ └── static/
│ ├── __init__.py
│ └── console/
│ ├── __init__.py
│ ├── index.html
│ └── static/
│ ├── __init__.py
│ ├── css/
│ │ ├── __init__.py
│ │ ├── app.7b6729291f05cec91b99cfd44c17df6b.css
│ │ └── static/
│ │ ├── __init__.py
│ │ └── fonts/
│ │ └── __init__.py
│ └── js/
│ ├── __init__.py
│ ├── app.d3652914f874ea570f72.js
│ ├── manifest.3ad1d5771e9b13dbdad2.js
│ └── vendor.cd39a6c53a9d7599c08c.js
└── wrapper/
├── ContractLoader.py
├── PlatformHelper.py
├── WtBtWrapper.py
├── WtDtHelper.py
├── WtDtServoApi.py
├── WtDtWrapper.py
├── WtExecApi.py
├── WtMQWrapper.py
├── WtWrapper.py
├── __init__.py
├── linux/
│ ├── __init__.py
│ ├── executer/
│ │ └── __init__.py
│ ├── parsers/
│ │ └── __init__.py
│ └── traders/
│ └── __init__.py
├── x64/
│ ├── __init__.py
│ ├── executer/
│ │ └── __init__.py
│ ├── parsers/
│ │ └── __init__.py
│ └── traders/
│ └── __init__.py
└── x86/
├── __init__.py
├── executer/
│ └── __init__.py
├── parsers/
│ └── __init__.py
└── traders/
└── __init__.py
Showing preview only (293K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3297 symbols across 67 files)
FILE: analysts.py
function run (line 23) | def run(path):
FILE: assessments.py
class Assessment (line 6) | class Assessment():
method __init__ (line 7) | def __init__(self, init_assets=1000000):
method reset (line 12) | def reset(self):
method calculate (line 16) | def calculate(self, context: CtaContext):
method finish (line 20) | def finish(self):
method reward (line 25) | def reward(self) -> float:
method done (line 30) | def done(self) -> float:
method curr_assets (line 35) | def curr_assets(self) -> float:
method init_assets (line 39) | def init_assets(self) -> float:
class SimpleAssessment (line 43) | class SimpleAssessment(Assessment): # 借鉴了neofinrl
method reset (line 46) | def reset(self):
method calculate (line 53) | def calculate(self, context: CtaContext):
method finish (line 161) | def finish(self):
method reward (line 190) | def reward(self) -> float:
method rewards (line 195) | def rewards(self) -> float:
method done (line 199) | def done(self) -> float:
method curr_assets (line 203) | def curr_assets(self) -> float:
FILE: compare_elegantrl.py
class Wt4RLSimpleTrainer (line 19) | class Wt4RLSimpleTrainer(SimpleCTASubProcessEnv):
method state_dim (line 25) | def state_dim(self):
method action_dim (line 29) | def action_dim(self):
method __init__ (line 33) | def __init__(self):
class Wt4RLSimpleEvaluator (line 76) | class Wt4RLSimpleEvaluator(SimpleCTASubProcessEnv):
method state_dim (line 82) | def state_dim(self):
method action_dim (line 86) | def action_dim(self):
method __init__ (line 90) | def __init__(self): # mode=3可以打开详细调试模式
function run (line 144) | def run():
function debug (line 149) | def debug(count):
function train (line 169) | def train():
function test (line 231) | def test():
FILE: compare_rllib.py
function run (line 33) | def run():
function train (line 37) | def train():
function test (line 194) | def test(path):
FILE: compare_sb3.py
function run (line 14) | def run():
function debug (line 19) | def debug():
function train (line 122) | def train():
function test (line 243) | def test(path):
FILE: dataset_from_storage.py
class DataReader (line 10) | class DataReader:
method __len__ (line 13) | def __len__(self) -> int:
method set_bars (line 16) | def set_bars(self, data: pd.DataFrame) -> tuple:
method get_bars (line 31) | def get_bars(self, curBar: POINTER(WTSBarStruct), idx: int) -> bool:
FILE: elegantrl/agent.py
class AgentBase (line 17) | class AgentBase:
method __init__ (line 18) | def __init__(self, net_dim=256, state_dim=8, action_dim=2, reward_scal...
method init (line 68) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_action (line 108) | def select_action(self, state: np.ndarray) -> np.ndarray:
method select_actions (line 114) | def select_actions(self, state: torch.Tensor) -> torch.Tensor:
method explore_one_env (line 126) | def explore_one_env(self, env, target_step: int) -> list:
method explore_vec_env (line 158) | def explore_vec_env(self, env, target_step: int) -> list:
method update_net (line 188) | def update_net(self, buffer, batch_size: int, repeat_times: float, sof...
method optim_update (line 197) | def optim_update(self, optimizer, objective, params): # plan todo par...
method soft_update (line 230) | def soft_update(target_net, current_net, tau):
method save_or_load_agent (line 240) | def save_or_load_agent(self, cwd: str, if_save: bool):
method convert_trajectory (line 264) | def convert_trajectory(self, traj_list: list) -> list: # off-policy
class AgentDQN (line 282) | class AgentDQN(AgentBase): # [ElegantRL.2021.10.25]
method __init__ (line 283) | def __init__(self):
method init (line 289) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_actions (line 304) | def select_actions(self, states: torch.Tensor) -> torch.Tensor: # for...
method explore_one_env (line 317) | def explore_one_env(self, env, target_step) -> list:
method explore_vec_env (line 340) | def explore_vec_env(self, env, target_step) -> list:
method update_net (line 362) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
method get_obj_critic_raw (line 372) | def get_obj_critic_raw(self, buffer, batch_size):
method get_obj_critic_per (line 382) | def get_obj_critic_per(self, buffer, batch_size):
class AgentDoubleDQN (line 396) | class AgentDoubleDQN(AgentDQN): # [ElegantRL.2021.10.25]
method __init__ (line 397) | def __init__(self):
method init (line 401) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_actions (line 414) | def select_actions(self, states: torch.Tensor) -> torch.Tensor: # for...
method get_obj_critic_raw (line 424) | def get_obj_critic_raw(self, buffer, batch_size) -> (torch.Tensor, tor...
method get_obj_critic_per (line 434) | def get_obj_critic_per(self, buffer, batch_size):
class AgentDDPG (line 451) | class AgentDDPG(AgentBase):
method __init__ (line 452) | def __init__(self):
method init (line 462) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_actions (line 477) | def select_actions(self, state: torch.Tensor) -> torch.Tensor:
method update_net (line 484) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
method get_obj_critic_raw (line 502) | def get_obj_critic_raw(self, buffer, batch_size):
method get_obj_critic_per (line 511) | def get_obj_critic_per(self, buffer, batch_size):
class AgentTD3 (line 525) | class AgentTD3(AgentBase):
method __init__ (line 526) | def __init__(self):
method init (line 537) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method update_net (line 550) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
method get_obj_critic_raw (line 569) | def get_obj_critic_raw(self, buffer, batch_size):
method get_obj_critic_per (line 579) | def get_obj_critic_per(self, buffer, batch_size):
class AgentSAC (line 598) | class AgentSAC(AgentBase): # [ElegantRL.2021.10.25]
method __init__ (line 599) | def __init__(self):
method init (line 611) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_actions (line 630) | def select_actions(self, state: torch.Tensor) -> torch.Tensor:
method update_net (line 638) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau):
method get_obj_critic_raw (line 669) | def get_obj_critic_raw(self, buffer, batch_size, alpha):
method get_obj_critic_per (line 681) | def get_obj_critic_per(self, buffer, batch_size, alpha):
class AgentModSAC (line 698) | class AgentModSAC(AgentSAC): # Modified SAC using reliable_lambda and T...
method __init__ (line 699) | def __init__(self):
method update_net (line 705) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau):
class AgentPPO (line 743) | class AgentPPO(AgentBase):
method __init__ (line 744) | def __init__(self):
method init (line 756) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_action (line 774) | def select_action(self, state: np.ndarray) -> np.ndarray:
method select_actions (line 780) | def select_actions(self, state: torch.Tensor) -> tuple:
method explore_one_env (line 790) | def explore_one_env(self, env, target_step):
method explore_vec_env (line 813) | def explore_vec_env(self, env, target_step):
method update_net (line 837) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau):
method get_reward_sum_raw (line 883) | def get_reward_sum_raw(self, buf_len, buf_reward, buf_mask, buf_value)...
method get_reward_sum_gae (line 893) | def get_reward_sum_gae(self, buf_len, ten_reward, ten_mask, ten_value)...
method splice_trajectory (line 907) | def splice_trajectory(self, traj_list, last_done_list):
method convert_trajectory (line 916) | def convert_trajectory(self, traj_list):
class AgentDiscretePPO (line 930) | class AgentDiscretePPO(AgentPPO):
method __init__ (line 931) | def __init__(self):
method explore_one_env (line 935) | def explore_one_env(self, env, target_step):
method explore_vec_env (line 958) | def explore_vec_env(self, env, target_step):
class AgentA2C (line 983) | class AgentA2C(AgentPPO): # A2C.2015, PPO.2016
method __init__ (line 984) | def __init__(self):
method update_net (line 989) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau):
class AgentDiscreteA2C (line 1032) | class AgentDiscreteA2C(AgentA2C):
method __init__ (line 1033) | def __init__(self):
method explore_one_env (line 1037) | def explore_one_env(self, env, target_step):
method explore_vec_env (line 1060) | def explore_vec_env(self, env, target_step):
class AgentStep1AC (line 1085) | class AgentStep1AC(AgentBase):
method __init__ (line 1086) | def __init__(self):
method init (line 1095) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_actions (line 1109) | def select_actions(self, state: torch.Tensor) -> torch.Tensor:
method update_net (line 1113) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
method get_obj_critic_raw (line 1139) | def get_obj_critic_raw(self, buffer, batch_size):
method get_obj_critic_per (line 1148) | def get_obj_critic_per(self, buffer, batch_size):
class AgentShareAC (line 1164) | class AgentShareAC(AgentBase): # IAC (InterAC) waiting for check
method __init__ (line 1165) | def __init__(self):
method update_net (line 1174) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
class AgentShareSAC (line 1219) | class AgentShareSAC(AgentSAC): # Integrated Soft Actor-Critic
method __init__ (line 1220) | def __init__(self):
method init (line 1228) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method update_net (line 1254) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
class AgentSharePPO (line 1293) | class AgentSharePPO(AgentPPO):
method __init__ (line 1294) | def __init__(self):
method init (line 1298) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method update_net (line 1317) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau):
class AgentShareA2C (line 1364) | class AgentShareA2C(AgentSharePPO):
method update_net (line 1365) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau):
class AgentShareStep1AC (line 1409) | class AgentShareStep1AC(AgentBase):
method __init__ (line 1410) | def __init__(self):
method init (line 1418) | def init(self, net_dim=256, state_dim=8, action_dim=2, reward_scale=1....
method select_actions (line 1446) | def select_actions(self, state: torch.Tensor) -> torch.Tensor:
method update_net (line 1450) | def update_net(self, buffer, batch_size, repeat_times, soft_update_tau...
method get_obj_critic_raw (line 1480) | def get_obj_critic_raw(self, buffer, batch_size):
method get_obj_critic_per (line 1489) | def get_obj_critic_per(self, buffer, batch_size):
class OrnsteinUhlenbeckNoise (line 1505) | class OrnsteinUhlenbeckNoise: # NOT suggest to use it
method __init__ (line 1506) | def __init__(self, size, theta=0.15, sigma=0.3, ou_noise=0.0, dt=1e-2):
method __call__ (line 1526) | def __call__(self) -> float:
FILE: elegantrl/demo.py
function demo_continuous_action_off_policy (line 10) | def demo_continuous_action_off_policy(): # [ElegantRL.2021.10.10]
function demo_continuous_action_on_policy (line 96) | def demo_continuous_action_on_policy(): # [ElegantRL.2021.10.13]
function demo_discrete_action_off_policy (line 177) | def demo_discrete_action_off_policy(): # [ElegantRL.2021.10.10]
function demo_discrete_action_on_policy (line 205) | def demo_discrete_action_on_policy(): # [ElegantRL.2021.10.12]
function demo_pixel_level_on_policy (line 233) | def demo_pixel_level_on_policy(): # 2021-09-07
function demo_isaac_gym_on_policy (line 277) | def demo_isaac_gym_on_policy():
function demo_pybullet_off_policy (line 367) | def demo_pybullet_off_policy():
function demo_pybullet_on_policy (line 465) | def demo_pybullet_on_policy():
function demo_step1_off_policy (line 605) | def demo_step1_off_policy():
FILE: elegantrl/env.py
function build_env (line 13) | def build_env(env, if_print=False, env_num=1, device_id=None, args=None, ):
function build_eval_env (line 99) | def build_eval_env(eval_env, env, env_num, eval_gpu_id, args, ):
class PendulumEnv (line 113) | class PendulumEnv: # [ElegantRL.2021.10.10]
method __init__ (line 114) | def __init__(self, env_name):
method reset (line 133) | def reset(self):
method step (line 136) | def step(self, action):
method render (line 141) | def render(self):
class PreprocessEnv (line 148) | class PreprocessEnv(gym.Wrapper): # environment wrapper
method __init__ (line 149) | def __init__(self, env, if_print=True, if_norm=False):
method reset_type (line 175) | def reset_type(self):
method step_type (line 178) | def step_type(self, action) -> (np.ndarray, float, bool, dict):
method reset_norm (line 181) | def reset_norm(self):
method step_norm (line 190) | def step_norm(self, action) -> (np.ndarray, float, bool, dict):
function get_gym_env_info (line 204) | def get_gym_env_info(env, if_print) -> (str, int, int, int, bool, float)...
function get_avg_std__for_state_norm (line 266) | def get_avg_std__for_state_norm(env_name) -> (np.ndarray, np.ndarray):
function demo_get_video_to_watch_gym_render (line 356) | def demo_get_video_to_watch_gym_render():
function train_save_eval_watch (line 432) | def train_save_eval_watch():
FILE: elegantrl/evaluator.py
class Evaluator (line 9) | class Evaluator: # [ElegantRL.2021.10.13]
method __init__ (line 10) | def __init__(self, cwd, agent_id, eval_env, eval_gap, eval_times1, eva...
method evaluate_and_save (line 33) | def evaluate_and_save(self, act, steps, r_exp, log_tuple) -> (bool, bo...
method get_r_avg_std_s_avg_std (line 87) | def get_r_avg_std_s_avg_std(rewards_steps_list):
method save_or_load_recoder (line 93) | def save_or_load_recoder(self, if_save):
method draw_plot (line 101) | def draw_plot(self):
function get_episode_return_and_step (line 116) | def get_episode_return_and_step(env, act) -> (float, int): # [ElegantRL...
function save_learning_curve (line 149) | def save_learning_curve(recorder=None, cwd='.', save_title='learning cur...
FILE: elegantrl/net.py
class QNet (line 10) | class QNet(nn.Module): # nn.Module is a standard PyTorch Network
method __init__ (line 11) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 18) | def forward(self, state):
class QNetDuel (line 22) | class QNetDuel(nn.Module): # Dueling DQN
method __init__ (line 23) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 32) | def forward(self, state):
class QNetTwin (line 39) | class QNetTwin(nn.Module): # Double DQN
method __init__ (line 40) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 49) | def forward(self, state):
method get_q1_q2 (line 53) | def get_q1_q2(self, state):
class QNetTwinDuel (line 58) | class QNetTwinDuel(nn.Module): # D3QN: Dueling Double DQN
method __init__ (line 59) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 72) | def forward(self, state):
method get_q1_q2 (line 78) | def get_q1_q2(self, state):
class Actor (line 94) | class Actor(nn.Module):
method __init__ (line 95) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 102) | def forward(self, state):
method get_action (line 105) | def get_action(self, state, action_std):
class ActorSAC (line 111) | class ActorSAC(nn.Module):
method __init__ (line 112) | def __init__(self, mid_dim, state_dim, action_dim, if_use_dn=False):
method forward (line 132) | def forward(self, state):
method get_action (line 136) | def get_action(self, state):
method get_action_logprob (line 142) | def get_action_logprob(self, state):
class ActorPPO (line 181) | class ActorPPO(nn.Module):
method __init__ (line 182) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 199) | def forward(self, state):
method get_action (line 202) | def get_action(self, state):
method get_logprob_entropy (line 210) | def get_logprob_entropy(self, state, action):
method get_old_logprob (line 220) | def get_old_logprob(self, _action, noise): # noise = action - a_noise
class ActorDiscretePPO (line 225) | class ActorDiscretePPO(nn.Module):
method __init__ (line 226) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 243) | def forward(self, state):
method get_action (line 246) | def get_action(self, state):
method get_logprob_entropy (line 255) | def get_logprob_entropy(self, state, a_int):
method get_old_logprob (line 260) | def get_old_logprob(self, a_int, a_prob):
class ActorBiConv (line 265) | class ActorBiConv(nn.Module):
method __init__ (line 266) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 277) | def forward(self, state):
method get_action (line 281) | def get_action(self, state, action_std):
class Critic (line 290) | class Critic(nn.Module):
method __init__ (line 291) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 298) | def forward(self, state, action):
class CriticTwin (line 302) | class CriticTwin(nn.Module): # shared parameter
method __init__ (line 303) | def __init__(self, mid_dim, state_dim, action_dim, if_use_dn=False):
method forward (line 322) | def forward(self, state, action):
method get_q1_q2 (line 326) | def get_q1_q2(self, state, action):
class CriticPPO (line 331) | class CriticPPO(nn.Module):
method __init__ (line 332) | def __init__(self, mid_dim, state_dim, _action_dim):
method forward (line 345) | def forward(self, state):
class CriticTwinPPO (line 349) | class CriticTwinPPO(nn.Module):
method __init__ (line 350) | def __init__(self, mid_dim, state_dim, _action_dim):
method forward (line 366) | def forward(self, state):
method get_q1_q2 (line 370) | def get_q1_q2(self, state):
class CriticBiConv (line 375) | class CriticBiConv(nn.Module):
method __init__ (line 376) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 400) | def forward(self, state, action):
class ShareDPG (line 409) | class ShareDPG(nn.Module): # DPG means deterministic policy gradient
method __init__ (line 410) | def __init__(self, state_dim, action_dim, mid_dim):
method add_noise (line 429) | def add_noise(a, noise_std):
method forward (line 439) | def forward(self, s, noise_std=0.0): # actor
method critic (line 445) | def critic(self, s, a):
method next_q_action (line 452) | def next_q_action(self, s, s_next, noise_std):
class ShareSPG (line 473) | class ShareSPG(nn.Module): # SPG means stochastic policy gradient
method __init__ (line 474) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 505) | def forward(self, s):
method get_action (line 511) | def get_action(self, s):
method get_action_logprob (line 522) | def get_action_logprob(self, state): # actor
method get_q_logprob (line 539) | def get_q_logprob(self, state):
method get_q1_q2 (line 561) | def get_q1_q2(self, s, a): # critic
class SharePPO (line 570) | class SharePPO(nn.Module): # Pixel-level state version
method __init__ (line 571) | def __init__(self, state_dim, action_dim, mid_dim):
method forward (line 595) | def forward(self, s):
method get_action_noise (line 600) | def get_action_noise(self, state):
method get_q_logprob (line 610) | def get_q_logprob(self, state, noise):
method get_q1_q2_logprob (line 617) | def get_q1_q2_logprob(self, state, action):
class ShareBiConv (line 629) | class ShareBiConv(nn.Module):
method __init__ (line 630) | def __init__(self, mid_dim, state_dim, action_dim):
method forward (line 663) | def forward(self, state): # actor
method critic (line 669) | def critic(self, state, action):
method get_action (line 675) | def get_action(self, state, action_std): # actor, get noisy action
class NnReshape (line 686) | class NnReshape(nn.Module):
method __init__ (line 687) | def __init__(self, *args):
method forward (line 691) | def forward(self, x):
class DenseNet (line 695) | class DenseNet(nn.Module): # plan to hyper-param: layer_number
method __init__ (line 696) | def __init__(self, lay_dim):
method forward (line 703) | def forward(self, x1): # x1.shape==(-1, lay_dim*1)
class ConcatNet (line 709) | class ConcatNet(nn.Module): # concatenate
method __init__ (line 710) | def __init__(self, lay_dim):
method forward (line 723) | def forward(self, x0):
class ConvNet (line 731) | class ConvNet(nn.Module): # pixel-level state encoder
method __init__ (line 732) | def __init__(self, inp_dim, out_dim, image_size=224):
method forward (line 758) | def forward(self, x):
class BiConvNet (line 779) | class BiConvNet(nn.Module):
method __init__ (line 780) | def __init__(self, mid_dim, inp_dim, out_dim):
method forward (line 797) | def forward(self, state):
function layer_norm (line 803) | def layer_norm(layer, std=1.0, bias_const=1e-6):
class ActorSimplify (line 808) | class ActorSimplify:
method __init__ (line 809) | def __init__(self, gpu_id, actor_net):
method get_action (line 813) | def get_action(self, state: np.ndarray) -> np.ndarray:
function check_actor_network (line 822) | def check_actor_network():
function check_network (line 852) | def check_network():
FILE: elegantrl/replay.py
class ReplayBuffer (line 9) | class ReplayBuffer:
method __init__ (line 10) | def __init__(self, max_len, state_dim, action_dim, if_use_per, gpu_id=...
method append_buffer (line 39) | def append_buffer(self, state, other): # CPU array to CPU array
method extend_buffer (line 51) | def extend_buffer(self, state, other): # CPU array to CPU array
method sample_batch (line 71) | def sample_batch(self, batch_size) -> tuple:
method sample_batch_one_step (line 102) | def sample_batch_one_step(self, batch_size) -> tuple:
method update_now_len (line 120) | def update_now_len(self):
method print_state_norm (line 125) | def print_state_norm(self, neg_avg=None, div_std=None): # non-essential
method td_error_update (line 176) | def td_error_update(self, td_error):
method save_or_load_history (line 179) | def save_or_load_history(self, cwd, if_save, buffer_id=0):
class ReplayBufferMP (line 221) | class ReplayBufferMP:
method __init__ (line 222) | def __init__(self, state_dim, action_dim, max_len, if_use_per, buffer_...
method sample_batch (line 237) | def sample_batch(self, batch_size) -> list:
method sample_batch_one_step (line 247) | def sample_batch_one_step(self, batch_size) -> list:
method update_now_len (line 257) | def update_now_len(self):
method print_state_norm (line 263) | def print_state_norm(self, neg_avg=None, div_std=None): # non-essential
method td_error_update (line 267) | def td_error_update(self, td_error):
method save_or_load_history (line 272) | def save_or_load_history(self, cwd, if_save):
class BinarySearchTree (line 277) | class BinarySearchTree:
method __init__ (line 285) | def __init__(self, memo_len):
method update_id (line 299) | def update_id(self, data_id, prob=10): # 10 is max_prob
method update_ids (line 311) | def update_ids(self, data_ids, prob=10): # 10 is max_prob
method get_leaf_id (line 328) | def get_leaf_id(self, v):
method get_indices_is_weights (line 354) | def get_indices_is_weights(self, batch_size, beg, end):
method td_error_update (line 368) | def td_error_update(self, td_error): # td_error = (q-q).detach_().abs()
FILE: elegantrl/run.py
class Arguments (line 17) | class Arguments: # [ElegantRL.2021.10.21]
method __init__ (line 18) | def __init__(self, env, agent):
method init_before_training (line 70) | def init_before_training(self):
function train_and_evaluate (line 115) | def train_and_evaluate(args, learner_id=0):
function get_step_r_exp (line 221) | def get_step_r_exp(ten_reward):
function train_and_evaluate_mp (line 228) | def train_and_evaluate_mp(args, agent_id=0):
class PipeWorker (line 263) | class PipeWorker:
method __init__ (line 264) | def __init__(self, env_num, worker_num):
method explore0 (line 270) | def explore0(self, agent):
method explore (line 278) | def explore(self, agent):
method run (line 292) | def run(self, args, _comm_env, worker_id, learner_id): # not elegant:...
class PipeLearner (line 333) | class PipeLearner:
method __init__ (line 334) | def __init__(self, learner_num):
method comm_data (line 360) | def comm_data(self, data, learner_id, round_id):
method comm_network_optim (line 370) | def comm_network_optim(self, agent, learner_id):
method run0 (line 387) | def run0(self, args, comm_eva, comm_exp, learner_id=0):
method run (line 467) | def run(self, args, comm_eva, comm_exp, learner_id=0):
class PipeEvaluator (line 554) | class PipeEvaluator: # [ElegantRL.10.21]
method __init__ (line 555) | def __init__(self):
method evaluate_and_save_mp (line 559) | def evaluate_and_save_mp(self, agent_act, steps, r_exp, logging_tuple):
method run (line 570) | def run(self, args, _learner_id):
function get_comm_data (line 689) | def get_comm_data(agent):
function get_num_learner (line 708) | def get_num_learner(visible_gpu):
function process_safely_terminate (line 715) | def process_safely_terminate(process):
function get_optim_parameters (line 724) | def get_optim_parameters(optim): # for avg_update_optim()
function avg_update_optim (line 731) | def avg_update_optim(dst_optim, src_optim_param, device):
function avg_update_net (line 737) | def avg_update_net(dst_net, src_net_param, device):
FILE: envs.py
class WtEnv (line 15) | class WtEnv(Env):
method __init__ (line 20) | def __init__(self,
method _debug_ (line 64) | def _debug_(self):
method __step__ (line 67) | def __step__(self):
method close (line 76) | def close(self):
method reset (line 81) | def reset(self):
method step (line 137) | def step(self, action):
method assets (line 146) | def assets(self):
method analyst (line 149) | def analyst(self, iter: int):
method analysts (line 160) | def analysts(self):
method _name_ (line 164) | def _name_(self, iter):
method __del__ (line 168) | def __del__(self):
function __sub_process_worker__ (line 173) | def __sub_process_worker__(pipe: Pipe, _cmd_, _attr_, cli, kwargs):
class WtSubProcessEnv (line 194) | class WtSubProcessEnv(Env):
method __init__ (line 199) | def __init__(self, cli, **kwargs):
method __do__ (line 208) | def __do__(self, cmd, **kwargs):
method metadata (line 213) | def metadata(self):
method reward_range (line 217) | def reward_range(self):
method observation_space (line 221) | def observation_space(self):
method action_space (line 225) | def action_space(self):
method assets (line 229) | def assets(self):
method reset (line 232) | def reset(self):
method step (line 235) | def step(self, action):
method close (line 239) | def close(self):
method __del__ (line 242) | def __del__(self):
FILE: envs_simple_cta.py
class SimpleCTAEnv (line 8) | class SimpleCTAEnv(WtEnv):
method __init__ (line 9) | def __init__(self,
method _debug_ (line 73) | def _debug_(self):
class SimpleCTASubProcessEnv (line 78) | class SimpleCTASubProcessEnv(WtSubProcessEnv):
method __init__ (line 79) | def __init__(self,
FILE: features.py
class Feature (line 7) | class Feature():
method __init__ (line 17) | def __init__(self, code: str, period: str, roll: int, assets: float = ...
method securities (line 37) | def securities(self):
method addSecurity (line 40) | def addSecurity(self, code: str):
method _subscribe_ (line 45) | def _subscribe_(self, period: str, count: int = 1):
method subscribe (line 51) | def subscribe(self, context: CtaContext):
method _callback_ (line 67) | def _callback_(self, space: int, period: str, callback, reprocess: REP...
method sigmoid (line 75) | def sigmoid(self, value, thresh=30):
method observation (line 79) | def observation(self) -> dict:
method calculate (line 91) | def calculate(self, context: CtaContext):
method obs (line 145) | def obs(self):
method price (line 149) | def price(self, period: str, reprocess: REPROCESS = MAXMIN):
method volume (line 157) | def volume(self, period: str, reprocess: REPROCESS = MAXMIN):
class Indicator (line 166) | class Indicator(Feature):
method roc (line 167) | def roc(self, period: str, reprocess: REPROCESS = REPROCESS):
method bollinger (line 179) | def bollinger(self, period: str, timeperiod=5, nbdevup=2, nbdevdn=2, r...
method sar (line 191) | def sar(self, period: str, acceleration=0, maximum=0, reprocess: REPRO...
method trange (line 201) | def trange(self, period: str, reprocess: REPROCESS = MAXMIN):
method macd (line 212) | def macd(self, period: str, fastperiod: int = 12, slowperiod: int = 26...
method rsi (line 221) | def rsi(self, period: str, fastperiod: int = 6, midperiod: int = 12, s...
method dx (line 232) | def dx(self, period: str, timeperiod=14, reprocess: REPROCESS = MAXMIN):
method obv (line 243) | def obv(self, period: str, reprocess: REPROCESS = MAXMIN):
method kdj (line 253) | def kdj(self, period: str, fastk_period: int = 5, slowk_period: int = ...
FILE: reprocess.py
class REPROCESS (line 5) | class REPROCESS():
method n (line 7) | def n() -> int: # 定义至少需要多少条数据才能计算
method calculate (line 11) | def calculate(data: np.ndarray) -> np.ndarray: # 计算方法
class ZSCORE (line 15) | class ZSCORE(REPROCESS):
method n (line 17) | def n() -> int:
method calculate (line 21) | def calculate(data: np.ndarray) -> np.ndarray:
class ZFILTER (line 25) | class ZFILTER(REPROCESS):
method n (line 30) | def n() -> int:
method calculate (line 34) | def calculate(data: np.ndarray) -> np.ndarray:
class MAXMIN (line 39) | class MAXMIN(REPROCESS):
method n (line 41) | def n() -> int:
method calculate (line 45) | def calculate(data: np.ndarray) -> np.ndarray:
FILE: run_toy.py
class SimpleRunner (line 3) | class SimpleRunner(Runner):
method test (line 4) | def test(self):
FILE: runner.py
class Runner (line 3) | class Runner():
method debug (line 4) | def debug(self):
method train (line 6) | def train(self):
method test (line 8) | def test(self):
function entry (line 14) | def entry(ctx, obj:Runner=Runner()):
function debug (line 20) | def debug(ctx):
function train (line 25) | def train(ctx):
function test (line 30) | def test(ctx):
FILE: stoppers.py
class Stopper (line 1) | class Stopper():
class SimpleStopper (line 5) | class SimpleStopper(Stopper):
FILE: strategies.py
class StateTransfer (line 11) | class StateTransfer():
method Name (line 14) | def Name() -> str:
method EngineType (line 19) | def EngineType() -> int:
method Action (line 24) | def Action(size: int) -> dict:
method setAction (line 28) | def setAction(self, action):
method __init__ (line 31) | def __init__(self, feature: Feature, assessment: Assessment, stopper: ...
class SimpleCTA (line 39) | class SimpleCTA(BaseCtaStrategy, StateTransfer):
method Name (line 41) | def Name() -> str:
method EngineType (line 45) | def EngineType() -> int:
method Action (line 49) | def Action(size: int) -> Space:
method setAction (line 55) | def setAction(self, action):
method __init__ (line 68) | def __init__(self, name: str, feature: Feature, assessment: Assessment...
method on_init (line 75) | def on_init(self, context: CtaContext):
method on_session_begin (line 80) | def on_session_begin(self, context: CtaContext, curTDate: int):
method on_backtest_end (line 84) | def on_backtest_end(self, context: CtaContext):
method on_calculate (line 88) | def on_calculate(self, context: CtaContext):
method on_calculate_done (line 94) | def on_calculate_done(self, context: CtaContext):
FILE: wtpy/CodeHelper.py
class CodeHelper (line 3) | class CodeHelper:
method isStdStkCode (line 6) | def isStdStkCode(stdCode:str) -> bool:
method stdCodeToStdCommID (line 14) | def stdCodeToStdCommID(stdCode:str) -> str:
method stdStkCodeToStdCommID (line 21) | def stdStkCodeToStdCommID(stdCode:str) -> str:
method stdFutCodeToStdCommID (line 26) | def stdFutCodeToStdCommID(stdCode:str) -> str:
FILE: wtpy/ContractMgr.py
class ContractInfo (line 3) | class ContractInfo:
method __init__ (line 5) | def __init__(self):
class ContractMgr (line 12) | class ContractMgr:
method __init__ (line 14) | def __init__(self):
method load (line 17) | def load(self, fname:str):
method getContractInfo (line 46) | def getContractInfo(self, stdCode:str) -> ContractInfo:
method getTotalCodes (line 58) | def getTotalCodes(self) -> list:
FILE: wtpy/CtaContext.py
class CtaContext (line 9) | class CtaContext:
method __init__ (line 19) | def __init__(self, id:int, stra, wrapper: WtWrapper, engine):
method id (line 32) | def id(self):
method write_indicator (line 35) | def write_indicator(self, tag:str, time:int, data:dict):
method on_init (line 44) | def on_init(self):
method on_session_begin (line 50) | def on_session_begin(self, curTDate:int):
method on_session_end (line 58) | def on_session_end(self, curTDate:int):
method on_backtest_end (line 66) | def on_backtest_end(self):
method on_getticks (line 72) | def on_getticks(self, stdCode:str, newTicks:list, isLast:bool):
method on_getpositions (line 79) | def on_getpositions(self, stdCode:str, qty:float, isLast:bool):
method on_getbars (line 84) | def on_getbars(self, stdCode:str, period:str, newBars:list, isLast:bool):
method on_tick (line 91) | def on_tick(self, stdCode:str, newTick):
method on_bar (line 95) | def on_bar(self, stdCode:str, period:str, newBar:dict):
method on_calculate (line 118) | def on_calculate(self):
method on_calculate_done (line 121) | def on_calculate_done(self):
method stra_log_text (line 124) | def stra_log_text(self, message:str):
method stra_get_tdate (line 131) | def stra_get_tdate(self):
method stra_get_date (line 138) | def stra_get_date(self):
method stra_get_position_avgpx (line 145) | def stra_get_position_avgpx(self, stdCode:str = "") -> float:
method stra_get_position_profit (line 153) | def stra_get_position_profit(self, stdCode:str = "") -> float:
method stra_get_fund_data (line 161) | def stra_get_fund_data(self, flag:int = 0) -> float:
method stra_get_time (line 169) | def stra_get_time(self):
method stra_get_price (line 176) | def stra_get_price(self, stdCode:str):
method stra_get_all_position (line 183) | def stra_get_all_position(self):
method stra_get_bars (line 191) | def stra_get_bars(self, stdCode:str, period:str, count:int, isMain:boo...
method stra_get_ticks (line 215) | def stra_get_ticks(self, stdCode:str, count:int) -> WtHftData:
method stra_sub_ticks (line 229) | def stra_sub_ticks(self, stdCode:str):
method stra_get_position (line 237) | def stra_get_position(self, stdCode:str = "", usertag:str = ""):
method stra_set_position (line 246) | def stra_set_position(self, stdCode:str, qty:float, usertag:str = "", ...
method stra_enter_long (line 256) | def stra_enter_long(self, stdCode:str, qty:float, usertag:str = "", li...
method stra_exit_long (line 266) | def stra_exit_long(self, stdCode:str, qty:float, usertag:str = "", lim...
method stra_enter_short (line 276) | def stra_enter_short(self, stdCode:str, qty:float, usertag:str = "", l...
method stra_exit_short (line 286) | def stra_exit_short(self, stdCode:str, qty:float, usertag:str = "", li...
method stra_get_last_entrytime (line 296) | def stra_get_last_entrytime(self, stdCode:str):
method stra_get_last_exittime (line 304) | def stra_get_last_exittime(self, stdCode:str):
method stra_get_first_entrytime (line 312) | def stra_get_first_entrytime(self, stdCode:str):
method user_save_data (line 321) | def user_save_data(self, key:str, val):
method user_load_data (line 329) | def user_load_data(self, key:str, defVal = None, vType = float):
method stra_get_detail_profit (line 342) | def stra_get_detail_profit(self, stdCode:str, usertag:str, flag:int = 0):
method stra_get_detail_cost (line 352) | def stra_get_detail_cost(self, stdCode:str, usertag:str):
method stra_get_detail_entertime (line 361) | def stra_get_detail_entertime(self, stdCode:str, usertag:str):
method stra_get_comminfo (line 370) | def stra_get_comminfo(self, stdCode:str):
method stra_get_sessinfo (line 380) | def stra_get_sessinfo(self, stdCode:str):
FILE: wtpy/ExtModuleDefs.py
class BaseExtParser (line 3) | class BaseExtParser:
method __init__ (line 7) | def __init__(self, id:str):
method id (line 15) | def id(self) -> str:
method init (line 18) | def init(self, engine):
method connect (line 25) | def connect(self):
method disconnect (line 31) | def disconnect(self):
method release (line 37) | def release(self):
method subscribe (line 43) | def subscribe(self, fullCode:str):
method unsubscribe (line 50) | def unsubscribe(self, fullCode:str):
class BaseExtExecuter (line 58) | class BaseExtExecuter:
method __init__ (line 63) | def __init__(self, id:str, scale:float):
method id (line 74) | def id(self):
method init (line 77) | def init(self):
method set_position (line 80) | def set_position(self, stdCode:str, targetPos:float):
FILE: wtpy/ExtToolDefs.py
function fileToJson (line 5) | def fileToJson(filename, encoding="utf-8"):
class BaseIndexWriter (line 14) | class BaseIndexWriter:
method __init__ (line 19) | def __init__(self):
method write_indicator (line 22) | def write_indicator(self, id:str, tag:str, time:int, data:dict):
class BaseDataReporter (line 33) | class BaseDataReporter:
method __init__ (line 41) | def __init__(self, id:str):
method init (line 46) | def init(self):
method rpt_portfolio_rt_data_impl (line 58) | def rpt_portfolio_rt_data_impl(self, rtData):
method rpt_strategy_rt_data_impl (line 61) | def rpt_strategy_rt_data_impl(self, rtData):
method rpt_init_data_impl (line 64) | def rpt_init_data_impl(self, initData):
method __do_report_rt_data__ (line 67) | def __do_report_rt_data__(self):
method __task_loop__ (line 85) | def __task_loop__(self):
method __start__ (line 99) | def __start__(self):
method __do_report_init_data__ (line 106) | def __do_report_init_data__(self):
method __do_report_settle_data__ (line 112) | def __do_report_settle_data__(self):
method report_rt_data (line 115) | def report_rt_data(self):
method report_settle_data (line 121) | def report_settle_data(self):
method report_init_data (line 126) | def report_init_data(self):
FILE: wtpy/HftContext.py
class HftContext (line 9) | class HftContext:
method __init__ (line 19) | def __init__(self, id:int, stra, wrapper: WtWrapper, engine):
method id (line 34) | def id(self):
method on_init (line 37) | def on_init(self):
method on_session_begin (line 43) | def on_session_begin(self, curTDate:int):
method on_session_end (line 51) | def on_session_end(self, curTDate:int):
method on_backtest_end (line 59) | def on_backtest_end(self):
method on_getticks (line 65) | def on_getticks(self, stdCode:str, newTicks:list, isLast:bool):
method on_getbars (line 72) | def on_getbars(self, stdCode:str, period:str, newBars:list, isLast:bool):
method on_tick (line 79) | def on_tick(self, stdCode:str, newTick:dict):
method on_order_queue (line 82) | def on_order_queue(self, stdCode:str, newOrdQue:dict):
method on_get_order_queue (line 85) | def on_get_order_queue(self, stdCode:str, newOdrQues:list, isLast:bool):
method on_order_detail (line 91) | def on_order_detail(self, stdCode:str, newOrdDtl:dict):
method on_get_order_detail (line 94) | def on_get_order_detail(self, stdCode:str, newOrdDtls:list, isLast:bool):
method on_transaction (line 100) | def on_transaction(self, stdCode:str, newTrans:dict):
method on_get_transaction (line 103) | def on_get_transaction(self, stdCode:str, newTranses:list, isLast:bool):
method on_channel_ready (line 109) | def on_channel_ready(self):
method on_channel_lost (line 112) | def on_channel_lost(self):
method on_entrust (line 115) | def on_entrust(self, localid:int, stdCode:str, bSucc:bool, msg:str, us...
method on_order (line 118) | def on_order(self, localid:int, stdCode:str, isBuy:bool, totalQty:floa...
method on_trade (line 121) | def on_trade(self, localid:int, stdCode:str, isBuy:bool, qty:float, pr...
method on_bar (line 124) | def on_bar(self, code:str, period:str, newBar:dict):
method stra_log_text (line 146) | def stra_log_text(self, message:str):
method stra_get_date (line 153) | def stra_get_date(self):
method stra_get_time (line 160) | def stra_get_time(self):
method stra_get_secs (line 167) | def stra_get_secs(self):
method stra_get_price (line 174) | def stra_get_price(self, code):
method stra_get_bars (line 181) | def stra_get_bars(self, code:str, period:str, count:int) -> WtKlineData:
method stra_get_ticks (line 205) | def stra_get_ticks(self, code:str, count:int) -> WtHftData:
method stra_get_order_queue (line 219) | def stra_get_order_queue(self, code:str, count:int) -> WtHftData:
method stra_get_order_detail (line 233) | def stra_get_order_detail(self, code:str, count:int) -> WtHftData:
method stra_get_transaction (line 247) | def stra_get_transaction(self, code:str, count:int) -> WtHftData:
method stra_get_position (line 261) | def stra_get_position(self, code:str = ""):
method stra_get_position_profit (line 269) | def stra_get_position_profit(self, code:str = ""):
method stra_get_undone (line 277) | def stra_get_undone(self, stdCode:str):
method user_save_data (line 281) | def user_save_data(self, key:str, val):
method user_load_data (line 289) | def user_load_data(self, key:str, defVal = None, vType = float):
method stra_get_comminfo (line 302) | def stra_get_comminfo(self, code:str):
method stra_sub_ticks (line 312) | def stra_sub_ticks(self, stdCode:str):
method stra_cancel (line 320) | def stra_cancel(self, localid:int):
method stra_cancel_all (line 328) | def stra_cancel_all(self, stdCode:str, isBuy:bool):
method stra_buy (line 345) | def stra_buy(self, stdCode:str, price:float, qty:float, userTag:str):
method stra_sell (line 363) | def stra_sell(self, stdCode:str, price:float, qty:float, userTag:str):
FILE: wtpy/ProductMgr.py
class ProductInfo (line 3) | class ProductInfo:
method __init__ (line 8) | def __init__(self):
class ProductMgr (line 19) | class ProductMgr:
method __init__ (line 23) | def __init__(self):
method load (line 27) | def load(self, fname:str):
method getProductInfo (line 55) | def getProductInfo(self, pid:str) -> ProductInfo:
FILE: wtpy/SelContext.py
class SelContext (line 9) | class SelContext:
method __init__ (line 19) | def __init__(self, id:int, stra, wrapper: WtWrapper, engine):
method write_indicator (line 31) | def write_indicator(self, tag, time, data):
method on_init (line 40) | def on_init(self):
method on_session_begin (line 46) | def on_session_begin(self, curTDate:int):
method on_session_end (line 54) | def on_session_end(self, curTDate:int):
method on_backtest_end (line 62) | def on_backtest_end(self):
method on_getticks (line 68) | def on_getticks(self, stdCode:str, newTicks:list, isLast:bool):
method on_getpositions (line 75) | def on_getpositions(self, stdCode:str, qty:float, isLast:bool):
method on_getbars (line 80) | def on_getbars(self, stdCode:str, period:str, newBars:list, isLast:bool):
method on_tick (line 87) | def on_tick(self, stdCode:str, newTick):
method on_bar (line 90) | def on_bar(self, stdCode:str, period:str, newBar:dict):
method on_calculate (line 93) | def on_calculate(self):
method on_calculate_done (line 96) | def on_calculate_done(self):
method stra_log_text (line 99) | def stra_log_text(self, message:str):
method stra_get_date (line 106) | def stra_get_date(self):
method stra_get_time (line 113) | def stra_get_time(self):
method stra_get_price (line 120) | def stra_get_price(self, stdCode):
method stra_get_all_position (line 127) | def stra_get_all_position(self):
method stra_get_bars (line 135) | def stra_get_bars(self, stdCode:str, period:str, count:int) -> WtKline...
method stra_get_ticks (line 158) | def stra_get_ticks(self, stdCode:str, count:int) -> WtHftData:
method stra_sub_ticks (line 172) | def stra_sub_ticks(self, stdCode:str):
method stra_get_position (line 179) | def stra_get_position(self, stdCode:str = "", usertag:str = "") -> float:
method stra_set_position (line 188) | def stra_set_position(self, stdCode:str, qty:float, usertag:str = ""):
method user_save_data (line 197) | def user_save_data(self, key:str, val):
method user_load_data (line 205) | def user_load_data(self, key:str, defVal = None, vType = float):
method stra_get_comminfo (line 218) | def stra_get_comminfo(self, stdCode:str):
method stra_get_sessioninfo (line 228) | def stra_get_sessioninfo(self, stdCode:str):
method stra_get_contract (line 238) | def stra_get_contract(self, stdCode:str):
method stra_get_all_codes (line 248) | def stra_get_all_codes(self):
FILE: wtpy/SessionMgr.py
class SectionInfo (line 4) | class SectionInfo:
method __init__ (line 6) | def __init__(self):
class SessionInfo (line 10) | class SessionInfo:
method __init__ (line 12) | def __init__(self):
method toString (line 20) | def toString(self):
method offsetTime (line 42) | def offsetTime(self, rawTime:int):
method originalTime (line 52) | def originalTime(self, offTime:int):
method getOpenTime (line 62) | def getOpenTime(self, bOffset:bool = False):
method getCloseTime (line 72) | def getCloseTime(self, bOffset:bool = False):
method getTradingMins (line 82) | def getTradingMins(self):
method getTradingSecs (line 95) | def getTradingSecs(self):
method isLastOfSection (line 99) | def isLastOfSection(self, rawTime:int):
method isInTradingTime (line 108) | def isInTradingTime(self, rawTime:int, bStrict:bool = False):
method isFirstOfSection (line 118) | def isFirstOfSection(self, rawTime:int):
method timeToMinutes (line 127) | def timeToMinutes(self, rawTime:int):
method minutesToTime (line 152) | def minutesToTime(self, minutes:int, bHeadFirst:bool = False):
class SessionMgr (line 184) | class SessionMgr:
method __init__ (line 186) | def __init__(self):
method load (line 191) | def load(self, fname:int):
method getSession (line 220) | def getSession(self, sid:str) -> SessionInfo:
FILE: wtpy/StrategyDefs.py
class BaseCtaStrategy (line 3) | class BaseCtaStrategy:
method __init__ (line 8) | def __init__(self, name:str):
method name (line 12) | def name(self) -> str:
method on_init (line 16) | def on_init(self, context:CtaContext):
method on_session_begin (line 25) | def on_session_begin(self, context:CtaContext, curTDate:int):
method on_session_end (line 33) | def on_session_end(self, context:CtaContext, curTDate:int):
method on_calculate (line 41) | def on_calculate(self, context:CtaContext):
method on_calculate_done (line 49) | def on_calculate_done(self, context:CtaContext):
method on_tick (line 58) | def on_tick(self, context:CtaContext, stdCode:str, newTick:dict):
method on_bar (line 70) | def on_bar(self, context:CtaContext, stdCode:str, period:str, newBar:d...
method on_backtest_end (line 81) | def on_backtest_end(self, context:CtaContext):
class BaseHftStrategy (line 89) | class BaseHftStrategy:
method __init__ (line 94) | def __init__(self, name:str):
method name (line 98) | def name(self) -> str:
method on_init (line 102) | def on_init(self, context:HftContext):
method on_session_begin (line 111) | def on_session_begin(self, context:HftContext, curTDate:int):
method on_session_end (line 119) | def on_session_end(self, context:HftContext, curTDate:int):
method on_backtest_end (line 127) | def on_backtest_end(self, context:CtaContext):
method on_tick (line 135) | def on_tick(self, context:HftContext, stdCode:str, newTick:dict):
method on_order_detail (line 145) | def on_order_detail(self, context:HftContext, stdCode:str, newOrdQue:d...
method on_order_queue (line 155) | def on_order_queue(self, context:HftContext, stdCode:str, newOrdQue:di...
method on_transaction (line 165) | def on_transaction(self, context:HftContext, stdCode:str, newTrans:dict):
method on_bar (line 175) | def on_bar(self, context:HftContext, stdCode:str, period:str, newBar:d...
method on_channel_ready (line 186) | def on_channel_ready(self, context:HftContext):
method on_channel_lost (line 194) | def on_channel_lost(self, context:HftContext):
method on_entrust (line 202) | def on_entrust(self, context:HftContext, localid:int, stdCode:str, bSu...
method on_order (line 214) | def on_order(self, context:HftContext, localid:int, stdCode:str, isBuy...
method on_trade (line 228) | def on_trade(self, context:HftContext, localid:int, stdCode:str, isBuy...
class BaseSelStrategy (line 240) | class BaseSelStrategy:
method __init__ (line 245) | def __init__(self, name:str):
method name (line 249) | def name(self) -> str:
method on_init (line 253) | def on_init(self, context:SelContext):
method on_session_begin (line 262) | def on_session_begin(self, context:SelContext, curTDate:int):
method on_session_end (line 270) | def on_session_end(self, context:SelContext, curTDate:int):
method on_calculate (line 278) | def on_calculate(self, context:SelContext):
method on_calculate_done (line 285) | def on_calculate_done(self, context:SelContext):
method on_backtest_end (line 292) | def on_backtest_end(self, context:CtaContext):
method on_tick (line 300) | def on_tick(self, context:SelContext, stdCode:str, newTick:dict):
method on_bar (line 311) | def on_bar(self, context:SelContext, stdCode:str, period:str, newBar:d...
FILE: wtpy/WtBtEngine.py
class WtBtEngine (line 21) | class WtBtEngine:
method __init__ (line 23) | def __init__(self, eType:EngineType = EngineType.ET_CTA, logCfg:str = ...
method __check_config__ (line 42) | def __check_config__(self):
method set_writer (line 60) | def set_writer(self, writer:BaseIndexWriter):
method write_indicator (line 66) | def write_indicator(self, id, tag, time, data):
method init (line 73) | def init(self, folder:str, cfgfile:str = "configbt.json", commfile:str...
method configMocker (line 101) | def configMocker(self, name:str):
method configBacktest (line 107) | def configBacktest(self, stime:int, etime:int):
method configBTStorage (line 116) | def configBTStorage(self, mode:str, path:str = None, dbcfg:dict = None):
method setExternalCtaStrategy (line 127) | def setExternalCtaStrategy(self, id:str, module:str, typeName:str, par...
method setExternalHftStrategy (line 144) | def setExternalHftStrategy(self, id:str, module:str, typeName:str, par...
method commitBTConfig (line 161) | def commitBTConfig(self):
method getSessionByCode (line 179) | def getSessionByCode(self, code:str) -> SessionInfo:
method getSessionByName (line 192) | def getSessionByName(self, sname:str) -> SessionInfo:
method getProductInfo (line 199) | def getProductInfo(self, code:str) -> ProductInfo:
method getContractInfo (line 206) | def getContractInfo(self, code:str) -> ContractInfo:
method getAllCodes (line 213) | def getAllCodes(self) -> list:
method set_time_range (line 219) | def set_time_range(self, beginTime:int, endTime:int):
method set_cta_strategy (line 227) | def set_cta_strategy(self, strategy:BaseCtaStrategy, slippage:int = 0,...
method set_hft_strategy (line 237) | def set_hft_strategy(self, strategy:BaseHftStrategy, hook:bool = False):
method set_sel_strategy (line 246) | def set_sel_strategy(self, strategy:BaseSelStrategy, date:int=0, time:...
method get_context (line 254) | def get_context(self, id:int):
method run_backtest (line 257) | def run_backtest(self, bAsync:bool = False, bNeedDump:bool = True):
method cta_step (line 268) | def cta_step(self, remark:str = "") -> bool:
method hft_step (line 276) | def hft_step(self):
method stop_backtest (line 282) | def stop_backtest(self):
method release_backtest (line 288) | def release_backtest(self):
method on_init (line 294) | def on_init(self):
method on_schedule (line 297) | def on_schedule(self, date:int, time:int, taskid:int = 0):
method on_session_begin (line 300) | def on_session_begin(self, date:int):
method on_session_end (line 303) | def on_session_end(self, date:int):
method on_backtest_end (line 306) | def on_backtest_end(self):
method clear_cache (line 312) | def clear_cache(self):
FILE: wtpy/WtCoreDefs.py
class WTSStruct (line 13) | class WTSStruct(Structure):
method fields (line 15) | def fields(self) -> list:
method values (line 19) | def values(self) -> tuple:
method to_dict (line 23) | def to_dict(self) -> dict:
class WTSTickStruct (line 26) | class WTSTickStruct(WTSStruct):
method fields (line 63) | def fields(self) -> list:
class WTSBarStruct (line 74) | class WTSBarStruct(WTSStruct):
class WTSTransStruct (line 91) | class WTSTransStruct(WTSStruct):
class WTSOrdQueStruct (line 112) | class WTSOrdQueStruct(WTSStruct):
class WTSOrdDtlStruct (line 130) | class WTSOrdDtlStruct(WTSStruct):
class CacheList (line 149) | class CacheList(list):
method to_record (line 150) | def to_record(self) -> np.recarray:
method to_pandas (line 156) | def to_pandas(self) -> pd.DataFrame:
class BarList (line 159) | class BarList(CacheList):
method on_read_bar (line 160) | def on_read_bar(self, curBar:POINTER(WTSBarStruct), count:int, isLast:...
method on_data_count (line 168) | def on_data_count(self, count:int):
class TickList (line 171) | class TickList(CacheList):
method on_read_tick (line 172) | def on_read_tick(self, curTick:POINTER(WTSTickStruct), count:int, isLa...
method on_data_count (line 180) | def on_data_count(self, count:int):
class EngineType (line 237) | class EngineType(Enum):
FILE: wtpy/WtDataDefs.py
class WtKlineData (line 4) | class WtKlineData:
method __init__ (line 5) | def __init__(self, size:int, bAlloc:bool = True):
method append_bar (line 24) | def append_bar(self, newBar:dict):
method is_empty (line 45) | def is_empty(self) -> bool:
method clear (line 48) | def clear(self):
method get_bar (line 58) | def get_bar(self, iLoc:int = -1) -> dict:
method slice (line 72) | def slice(self, iStart:int = 0, iEnd:int = -1, bCopy:bool = False):
method to_df (line 98) | def to_df(self) -> DataFrame:
class WtHftData (line 110) | class WtHftData:
method __init__ (line 111) | def __init__(self, capacity:int):
method append_item (line 117) | def append_item(self, newItem:dict):
method is_empty (line 127) | def is_empty(self) -> bool:
method clear (line 130) | def clear(self):
method get_item (line 134) | def get_item(self, iLoc:int=-1) -> dict:
method to_df (line 140) | def to_df(self) -> DataFrame:
FILE: wtpy/WtDtEngine.py
class WtDtEngine (line 6) | class WtDtEngine:
method __init__ (line 8) | def __init__(self):
method initialize (line 12) | def initialize(self, cfgfile:str = "dtcfg.json", logprofile:str = "log...
method run (line 20) | def run(self):
method add_exetended_parser (line 26) | def add_exetended_parser(self, parser:BaseExtParser):
method get_extended_parser (line 36) | def get_extended_parser(self, id:str)->BaseExtParser:
method push_quote_from_extended_parser (line 44) | def push_quote_from_extended_parser(self, id:str, newTick, bNeedSlice:...
FILE: wtpy/WtDtServo.py
function pack_rsp (line 14) | def pack_rsp(obj):
function parse_data (line 19) | def parse_data():
function get_param (line 30) | def get_param(json_data, key:str, type=str, defVal = ""):
function httpPost (line 36) | def httpPost(url, datas:dict, encoding='utf-8') -> dict:
class WtDtServo (line 58) | class WtDtServo:
method __init__ (line 61) | def __init__(self):
method __check_config__ (line 68) | def __check_config__(self):
method setRemoteUrl (line 89) | def setRemoteUrl(self, url:str="http://127.0.0.1:8081"):
method setBasefiles (line 97) | def setBasefiles(self, commfile:str="./common/commodities.json", contr...
method setStorage (line 110) | def setStorage(self, path:str = "./storage/"):
method commitConfig (line 113) | def commitConfig(self):
method __server_impl__ (line 128) | def __server_impl__(self, port:int, host:str):
method runServer (line 131) | def runServer(self, port:int = 8081, host="0.0.0.0", bSync:bool = True):
method get_bars (line 232) | def get_bars(self, stdCode:str, period:str, fromTime:int = None, dataC...
method get_ticks (line 250) | def get_ticks(self, stdCode:str, fromTime:int = None, dataCount:int = ...
class WtDtRemoteServo (line 267) | class WtDtRemoteServo:
method __init__ (line 269) | def __init__(self, url:str="http://127.0.0.1:8081"):
method get_bars (line 272) | def get_bars(self, stdCode:str, period:str, fromTime:int = None, dataC...
method get_ticks (line 319) | def get_ticks(self, stdCode:str, fromTime:int = None, dataCount:int = ...
FILE: wtpy/WtEngine.py
class WtEngine (line 19) | class WtEngine:
method __init__ (line 24) | def __init__(self, eType:EngineType, logCfg:str = "logcfg.json", genDi...
method __check_config__ (line 57) | def __check_config__(self):
method getEngineType (line 73) | def getEngineType(self):
method add_exetended_parser (line 76) | def add_exetended_parser(self, parser:BaseExtParser):
method add_exetended_executer (line 83) | def add_exetended_executer(self, executer:BaseExtExecuter):
method get_extended_parser (line 90) | def get_extended_parser(self, id:str)->BaseExtParser:
method get_extended_executer (line 95) | def get_extended_executer(self, id:str)->BaseExtExecuter:
method push_quote_from_extended_parser (line 100) | def push_quote_from_extended_parser(self, id:str, newTick, bNeedSlice:...
method set_writer (line 103) | def set_writer(self, writer:BaseIndexWriter):
method write_indicator (line 109) | def write_indicator(self, id:str, tag:str, time:int, data:dict):
method set_data_reporter (line 116) | def set_data_reporter(self, reporter:BaseDataReporter):
method init (line 122) | def init(self, folder:str, cfgfile:str = "config.json", commfile:str="...
method configEngine (line 150) | def configEngine(self, name:str, mode:str = "product"):
method addExternalCtaStrategy (line 157) | def addExternalCtaStrategy(self, id:str, params:dict):
method addExternalHftStrategy (line 170) | def addExternalHftStrategy(self, id:str, params:dict):
method configStorage (line 183) | def configStorage(self, path:str, module:str=""):
method commitConfig (line 191) | def commitConfig(self):
method regCtaStraFactories (line 209) | def regCtaStraFactories(self, factFolder:str):
method regHftStraFactories (line 217) | def regHftStraFactories(self, factFolder:str):
method regExecuterFactories (line 225) | def regExecuterFactories(self, factFolder:str):
method addExecuter (line 233) | def addExecuter(self, id:str, trader:str, policies:dict, scale:int = 1):
method addTrader (line 247) | def addTrader(self, id:str, params:dict):
method getSessionByCode (line 257) | def getSessionByCode(self, stdCode:str) -> SessionInfo:
method getSessionByName (line 269) | def getSessionByName(self, sname:str) -> SessionInfo:
method getProductInfo (line 276) | def getProductInfo(self, stdCode:str) -> ProductInfo:
method getContractInfo (line 283) | def getContractInfo(self, stdCode:str) -> ContractInfo:
method getAllCodes (line 290) | def getAllCodes(self) -> list:
method add_cta_strategy (line 296) | def add_cta_strategy(self, strategy:BaseCtaStrategy):
method add_hft_strategy (line 304) | def add_hft_strategy(self, strategy:BaseHftStrategy, trader:str, agent...
method add_sel_strategy (line 312) | def add_sel_strategy(self, strategy:BaseSelStrategy, date:int, time:in...
method get_context (line 316) | def get_context(self, id:int):
method run (line 337) | def run(self):
method release (line 346) | def release(self):
method on_init (line 352) | def on_init(self):
method on_schedule (line 357) | def on_schedule(self, date:int, time:int, taskid:int = 0):
method on_session_begin (line 362) | def on_session_begin(self, date:int):
method on_session_end (line 366) | def on_session_end(self, date:int):
FILE: wtpy/WtMsgQue.py
class WtMQServer (line 4) | class WtMQServer:
method __init__ (line 6) | def __init__(self):
method init (line 9) | def init(self, wrapper:WtMQWrapper, id:int):
method publish_message (line 13) | def publish_message(self, topic:str, message:str):
class WtMQClient (line 19) | class WtMQClient:
method __init__ (line 21) | def __init__(self):
method init (line 24) | def init(self, wrapper:WtMQWrapper, id:int):
method start (line 28) | def start(self):
method subscribe (line 34) | def subscribe(self, topic:str):
method on_mq_message (line 39) | def on_mq_message(self, topic:str, message:str, dataLen:int):
class WtMsgQue (line 43) | class WtMsgQue:
method __init__ (line 45) | def __init__(self) -> None:
method get_client (line 52) | def get_client(self, client_id:int) -> WtMQClient:
method on_mq_message (line 58) | def on_mq_message(self, client_id:int, topic:str, message:str, dataLen...
method add_mq_server (line 65) | def add_mq_server(self, url:str, server:WtMQServer = None) -> WtMQServer:
method destroy_mq_server (line 74) | def destroy_mq_server(self, server:WtMQServer):
method add_mq_client (line 82) | def add_mq_client(self, url:str, client:WtMQClient = None) -> WtMQClient:
method destroy_mq_client (line 90) | def destroy_mq_client(self, client:WtMQClient):
FILE: wtpy/WtUtilDefs.py
function singleton (line 1) | def singleton(cls):
FILE: wtpy/apps/WtBtAnalyst.py
class Calculate (line 13) | class Calculate():
method __init__ (line 17) | def __init__(self, ret, mar, rf, period, trade):
method calculate_upside_ratio (line 32) | def calculate_upside_ratio(self):
method sharp_ratio (line 39) | def sharp_ratio(self):
method sortion_ratio (line 46) | def sortion_ratio(self):
method maxDrawdown (line 53) | def maxDrawdown(self):
method maxDrawdown_time (line 61) | def maxDrawdown_time(self):
method calmar_ratio (line 70) | def calmar_ratio(self):
method sterling_a_ratio (line 77) | def sterling_a_ratio(self):
method single_largest_maxdrawdown (line 84) | def single_largest_maxdrawdown(self):
method single_maxdrawdown_time (line 93) | def single_maxdrawdown_time(self):
method get_annual_return (line 98) | def get_annual_return(self):
method monthly_return (line 103) | def monthly_return(self):
method monthly_average_return (line 109) | def monthly_average_return(self):
method decay_time (line 114) | def decay_time(self):
function fmtNAN (line 132) | def fmtNAN(val, defVal = 0):
function continue_trading_analysis (line 138) | def continue_trading_analysis(data, x_value) -> dict:
function nomalize_val (line 185) | def nomalize_val(val):
function extreme_trading (line 191) | def extreme_trading(data, time_of_std=1):
function average_profit (line 225) | def average_profit(data):
function stat_closes_by_day (line 282) | def stat_closes_by_day(df_closes:df, capital) -> df:
function stat_closes_by_month (line 297) | def stat_closes_by_month(df_closes:df, capital) -> df:
function stat_closes_by_year (line 312) | def stat_closes_by_year(df_closes:df, capital) -> df:
function time_analysis (line 327) | def time_analysis(df_closes:df) -> dict:
function ratio_calculate (line 391) | def ratio_calculate(data, after_merge, capital = 500000, rf = 0, period ...
function performance_summary (line 437) | def performance_summary(input_data, input_data1, capital = 500000, rf = ...
function do_trading_analyze (line 510) | def do_trading_analyze(df_closes, df_funds):
function trading_analyze (line 602) | def trading_analyze(workbook:Workbook, df_closes, df_funds, capital = 50...
function strategy_analyze (line 821) | def strategy_analyze(workbook:Workbook, df_closes, df_trades, capital, r...
function output_closes (line 973) | def output_closes(workbook:Workbook, df_closes:df, capital = 500000):
function summary_analyze (line 1034) | def summary_analyze(df_funds:df, capital = 5000000, rf = 0, period = 240...
function funds_analyze (line 1114) | def funds_analyze(workbook:Workbook, df_funds:df, capital = 5000000, rf ...
class WtBtAnalyst (line 1334) | class WtBtAnalyst:
method __init__ (line 1336) | def __init__(self):
method add_strategy (line 1340) | def add_strategy(self, sname:str, folder:str, init_capital:float, rf:...
method run_new (line 1348) | def run_new(self, outFileName:str = ''):
method run (line 1378) | def run(self, outFileName:str = ''):
method run_simple (line 1402) | def run_simple(self):
FILE: wtpy/apps/WtCtaOptimizer.py
function fmtNAN (line 16) | def fmtNAN(val, defVal = 0):
class ParamInfo (line 22) | class ParamInfo:
method __init__ (line 26) | def __init__(self, name:str, start_val = None, end_val = None, step_va...
method gen_array (line 34) | def gen_array(self):
class WtCtaOptimizer (line 51) | class WtCtaOptimizer:
method __init__ (line 56) | def __init__(self, worker_num:int = 8):
method add_mutable_param (line 71) | def add_mutable_param(self, name:str, start_val, end_val, step_val, nd...
method add_listed_param (line 83) | def add_listed_param(self, name:str, val_list:list):
method add_fixed_param (line 92) | def add_fixed_param(self, name:str, val):
method set_strategy (line 102) | def set_strategy(self, typeName:type, name_prefix:str):
method set_cpp_strategy (line 113) | def set_cpp_strategy(self, module:str, type_name:type, name_prefix:str):
method config_backtest_env (line 126) | def config_backtest_env(self, deps_dir:str, cfgfile:str="configbt.json...
method config_backtest_time (line 148) | def config_backtest_time(self, start_time:int, end_time:int):
method __gen_tasks__ (line 160) | def __gen_tasks__(self, markerfile:str = "strategies.json"):
method __ayalyze_result__ (line 225) | def __ayalyze_result__(self, strName:str, time_range:tuple, params:dict):
method __execute_task__ (line 300) | def __execute_task__(self, params:dict):
method __start_task__ (line 335) | def __start_task__(self, params:dict):
method go (line 350) | def go(self, interval:float = 0.2, out_marker_file:str = "strategies.j...
method analyze (line 405) | def analyze(self, out_marker_file:str = "strategies.json", out_summary...
method analyzer (line 433) | def analyzer(self, out_marker_file:str = "strategies.json", init_capit...
FILE: wtpy/apps/WtHotPicker.py
class DayData (line 16) | class DayData:
method __init__ (line 21) | def __init__(self):
function extractPID (line 29) | def extractPID(code):
function readFileContent (line 38) | def readFileContent(filename):
function cmp_alg_01 (line 46) | def cmp_alg_01(left:DayData, right:DayData):
function countFridays (line 58) | def countFridays(curDate:datetime.datetime):
function httpGet (line 76) | def httpGet(url, encoding='utf-8'):
function httpPost (line 93) | def httpPost(url, datas, encoding='utf-8'):
class WtCacheMon (line 112) | class WtCacheMon:
method __init__ (line 116) | def __init__(self):
method get_cache (line 119) | def get_cache(self, exchg, curDT:datetime.datetime):
class WtCacheMonExchg (line 122) | class WtCacheMonExchg(WtCacheMon):
method getCffexData (line 129) | def getCffexData(curDT:datetime.datetime) -> dict:
method getShfeData (line 177) | def getShfeData(curDT:datetime.datetime) -> dict:
method getCzceData (line 211) | def getCzceData(curDT:datetime.datetime) -> dict:
method getDceData (line 275) | def getDceData(curDT:datetime.datetime) -> dict:
method getIneData (line 353) | def getIneData(curDT:datetime.datetime) -> dict:
method cache_by_date (line 382) | def cache_by_date(self, exchg:str, curDT:datetime.datetime):
method get_cache (line 408) | def get_cache(self, exchg:str, curDT:datetime.datetime):
class WtCacheMonSS (line 426) | class WtCacheMonSS(WtCacheMon):
method __init__ (line 433) | def __init__(self, snapshot_path:str):
method cache_snapshot (line 437) | def cache_snapshot(self, curDT:datetime):
method get_cache (line 480) | def get_cache(self, exchg, curDT:datetime):
class WtMailNotifier (line 499) | class WtMailNotifier:
method __init__ (line 503) | def __init__(self, user:str, pwd:str, sender:str=None, host:str="smtp....
method add_receiver (line 513) | def add_receiver(self, name:str, addr:str):
method notify (line 525) | def notify(self, hot_changes:dict, sec_changes:dict, nextDT:datetime.d...
class WtHotPicker (line 608) | class WtHotPicker:
method __init__ (line 612) | def __init__(self, markerFile:str = "./marker.json", hotFile:str = ".....
method set_cacher (line 623) | def set_cacher(self, cacher:WtCacheMon):
method set_mail_notifier (line 629) | def set_mail_notifier(self, notifier:WtMailNotifier):
method pick_exchg_hots (line 635) | def pick_exchg_hots(self, exchg:str, beginDT:datetime.datetime, endDT:...
method merge_switch_list (line 790) | def merge_switch_list(self, total, exchg, switch_list):
method execute_rebuild (line 815) | def execute_rebuild(self, beginDate:datetime.datetime = None, endDate:...
method execute_increment (line 898) | def execute_increment(self, endDate:datetime.datetime = None, exchange...
FILE: wtpy/apps/datahelper/DHBaostock.py
function transCodes (line 7) | def transCodes(codes:list) -> list:
class DHBaostock (line 19) | class DHBaostock(BaseDataHelper):
method __init__ (line 21) | def __init__(self):
method auth (line 26) | def auth(self, **kwargs):
method dmpCodeListToFile (line 34) | def dmpCodeListToFile(self, filename:str, hasIndex:bool=True, hasStock...
method dmpAdjFactorsToFile (line 37) | def dmpAdjFactorsToFile(self, codes:list, filename:str):
method dmpBarsToFile (line 75) | def dmpBarsToFile(self, folder:str, codes:list, start_date:datetime=No...
method dmpAdjFactorsToDB (line 136) | def dmpAdjFactorsToDB(self, dbHelper:DBHelper, codes:list):
method dmpBarsToDB (line 173) | def dmpBarsToDB(self, dbHelper:DBHelper, codes:list, start_date:dateti...
FILE: wtpy/apps/datahelper/DHDefs.py
class DBHelper (line 3) | class DBHelper:
method __init__ (line 5) | def __init__(self):
method initDB (line 8) | def initDB(self):
method writeBars (line 14) | def writeBars(self, bars:list, period="day"):
method writeFactors (line 22) | def writeFactors(self, factors:dict):
class BaseDataHelper (line 30) | class BaseDataHelper:
method __init__ (line 32) | def __init__(self):
method __check__ (line 36) | def __check__(self):
method auth (line 40) | def auth(self, **kwargs):
method dmpCodeListToFile (line 46) | def dmpCodeListToFile(self, filename:str, hasIndex:bool=True, hasStock...
method dmpAdjFactorsToFile (line 55) | def dmpAdjFactorsToFile(self, codes:list, filename:str):
method dmpBarsToFile (line 63) | def dmpBarsToFile(self, folder:str, codes:list, start_date:datetime=No...
method dmpAdjFactorsToDB (line 74) | def dmpAdjFactorsToDB(self, dbHelper:DBHelper, codes:list):
method dmpBarsToDB (line 82) | def dmpBarsToDB(self, dbHelper:DBHelper, codes:list, start_date:dateti...
FILE: wtpy/apps/datahelper/DHFactory.py
class DHFactory (line 6) | class DHFactory:
method createHelper (line 9) | def createHelper(name:str) -> BaseDataHelper:
FILE: wtpy/apps/datahelper/DHRqData.py
function exchgStdToRQ (line 7) | def exchgStdToRQ(exchg:str) -> str:
function exchgRQToStd (line 15) | def exchgRQToStd(exchg:str) -> str:
function stdCodeToRQ (line 23) | def stdCodeToRQ(stdCode:str):
class DHRqData (line 43) | class DHRqData(BaseDataHelper):
method __init__ (line 45) | def __init__(self):
method auth (line 50) | def auth(self, **kwargs):
method dmpCodeListToFile (line 58) | def dmpCodeListToFile(self, filename:str, hasIndex:bool=True, hasStock...
method dmpAdjFactorsToFile (line 107) | def dmpAdjFactorsToFile(self, codes:list, filename:str):
method dmpBarsToFile (line 139) | def dmpBarsToFile(self, folder:str, codes:list, start_date:datetime=No...
method dmpAdjFactorsToDB (line 203) | def dmpAdjFactorsToDB(self, dbHelper:DBHelper, codes:list):
method dmpBarsToDB (line 233) | def dmpBarsToDB(self, dbHelper:DBHelper, codes:list, start_date:dateti...
FILE: wtpy/apps/datahelper/DHTushare.py
function transCode (line 7) | def transCode(stdCode:str) -> str:
class DHTushare (line 32) | class DHTushare(BaseDataHelper):
method __init__ (line 34) | def __init__(self):
method auth (line 42) | def auth(self, **kwargs):
method dmpCodeListToFile (line 54) | def dmpCodeListToFile(self, filename:str, hasIndex:bool=True, hasStock...
method dmpAdjFactorsToFile (line 123) | def dmpAdjFactorsToFile(self, codes:list, filename:str):
method __dmp_bars_to_file_from_pro__ (line 162) | def __dmp_bars_to_file_from_pro__(self, folder:str, codes:list, start_...
method __dmp_bars_to_file_from_old__ (line 235) | def __dmp_bars_to_file_from_old__(self, folder:str, codes:list, start_...
method dmpBarsToFile (line 294) | def dmpBarsToFile(self, folder:str, codes:list, start_date:datetime=No...
method dmpAdjFactorsToDB (line 300) | def dmpAdjFactorsToDB(self, dbHelper:DBHelper, codes:list):
method __dmp_bars_to_db_from_pro__ (line 337) | def __dmp_bars_to_db_from_pro__(self, dbHelper:DBHelper, codes:list, s...
method __dmp_bars_to_db_from_old__ (line 418) | def __dmp_bars_to_db_from_old__(self, dbHelper:DBHelper, codes:list, s...
method dmpBarsToDB (line 483) | def dmpBarsToDB(self, dbHelper:DBHelper, codes:list, start_date:dateti...
FILE: wtpy/apps/datahelper/db/MysqlHelper.py
class MysqlHelper (line 6) | class MysqlHelper(DBHelper):
method __init__ (line 7) | def __init__(self, host:str, user:str, pwd:str, dbname:str, port:int=3...
method __get_conn__ (line 17) | def __get_conn__(self):
method initDB (line 28) | def initDB(self):
method writeBars (line 46) | def writeBars(self, bars:list, period="day"):
method writeFactors (line 124) | def writeFactors(self, factors:dict):
FILE: wtpy/apps/datahelper/db/initdb_mysql.sql
type `tb_adj_factors` (line 1) | CREATE TABLE IF NOT EXISTS `tb_adj_factors` (
type `tb_kline_day` (line 13) | CREATE TABLE IF NOT EXISTS `tb_kline_day` (
type `tb_kline_min1` (line 34) | CREATE TABLE IF NOT EXISTS `tb_kline_min1` (
type `tb_kline_min5` (line 56) | CREATE TABLE IF NOT EXISTS `tb_kline_min5` (
FILE: wtpy/monitor/DataMgr.py
function backup_file (line 8) | def backup_file(filename):
class DataMgr (line 22) | class DataMgr:
method __init__ (line 24) | def __init__(self, datafile:str="mondata.db", logger:WtLogger=None):
method get_db (line 64) | def get_db(self):
method __check_db__ (line 67) | def __check_db__(self):
method __check_cache__ (line 149) | def __check_cache__(self, grpid, grpInfo):
method get_groups (line 201) | def get_groups(self, tpfilter:str=''):
method has_group (line 212) | def has_group(self, grpid:str):
method get_group (line 215) | def get_group(self, grpid:str):
method get_group_cfg (line 221) | def get_group_cfg(self, grpid:str):
method set_group_cfg (line 233) | def set_group_cfg(self, grpid:str, config:dict):
method get_group_entry (line 246) | def get_group_entry(self, grpid:str):
method set_group_entry (line 258) | def set_group_entry(self, grpid:str, content:str):
method add_group (line 271) | def add_group(self, grpInfo:dict):
method del_group (line 296) | def del_group(self, grpid:str):
method get_users (line 304) | def get_users(self):
method add_user (line 312) | def add_user(self, usrInfo, admin):
method mod_user_pwd (line 336) | def mod_user_pwd(self, loginid:str, newpwd:str, admin:str):
method del_user (line 344) | def del_user(self, loginid, admin):
method log_action (line 355) | def log_action(self, adminInfo, atype, remark):
method get_user (line 362) | def get_user(self, loginid:str):
method get_strategies (line 378) | def get_strategies(self, grpid:str):
method get_channels (line 387) | def get_channels(self, grpid:str):
method get_trades (line 396) | def get_trades(self, grpid:str, straid:str, limit:int = 200):
method get_funds (line 453) | def get_funds(self, grpid:str, straid:str):
method get_signals (line 536) | def get_signals(self, grpid:str, straid:str, limit:int = 200):
method get_rounds (line 586) | def get_rounds(self, grpid:str, straid:str, limit:int = 200):
method get_positions (line 640) | def get_positions(self, grpid:str, straid:str):
method get_channel_orders (line 710) | def get_channel_orders(self, grpid:str, chnlid:str, limit:int = 200):
method get_channel_trades (line 764) | def get_channel_trades(self, grpid:str, chnlid:str, limit:int = 200):
method get_channel_positions (line 816) | def get_channel_positions(self, grpid:str, chnlid:str):
method get_channel_funds (line 860) | def get_channel_funds(self, grpid:str, chnlid:str):
method get_actions (line 904) | def get_actions(self, sdate, edate):
method get_group_trades (line 921) | def get_group_trades(self, grpid:str):
method get_group_rounds (line 970) | def get_group_rounds(self, grpid:str):
method get_group_funds (line 1019) | def get_group_funds(self, grpid:str):
method get_group_positions (line 1110) | def get_group_positions(self, grpid:str):
method get_group_performances (line 1142) | def get_group_performances(self, grpid:str):
method get_group_filters (line 1186) | def get_group_filters(self, grpid:str):
method set_group_filters (line 1233) | def set_group_filters(self, grpid:str, filters:dict):
FILE: wtpy/monitor/EventReceiver.py
class EventSink (line 15) | class EventSink:
method __init__ (line 16) | def __init__(self):
method on_order (line 19) | def on_order(self, chnl:str, ordInfo:dict):
method on_trade (line 22) | def on_trade(self, chnl:str, trdInfo:dict):
method on_notify (line 25) | def on_notify(self, chnl:str, message:str):
method on_log (line 28) | def on_log(self, tag:str, time:int, message:str):
function decode_bytes (line 31) | def decode_bytes(data:bytes):
class EventReceiver (line 42) | class EventReceiver(WtMQClient):
method __init__ (line 44) | def __init__(self, url:str, topics:list = [], sink:EventSink = None, l...
method on_mq_message (line 55) | def on_mq_message(self, topic:str, message:str, dataLen:int):
method run (line 76) | def run(self):
method release (line 79) | def release(self):
class BtEventSink (line 86) | class BtEventSink:
method __init__ (line 87) | def __init__(self):
method on_begin (line 90) | def on_begin(self):
method on_finish (line 93) | def on_finish(self):
method on_fund (line 96) | def on_fund(self, fundInfo:dict):
method on_state (line 99) | def on_state(self, statInfo:float):
class BtEventReceiver (line 102) | class BtEventReceiver(WtMQClient):
method __init__ (line 104) | def __init__(self, url:str, topics:list = [], sink:BtEventSink = None,...
method on_mq_message (line 115) | def on_mq_message(self, topic:str, message:str, dataLen:int):
method run (line 131) | def run(self):
method release (line 134) | def release(self):
FILE: wtpy/monitor/PushSvr.py
function get_param (line 6) | def get_param(json_data, key:str, type=str, defVal = ""):
class PushServer (line 12) | class PushServer:
method __init__ (line 14) | def __init__(self, app, dataMgr, logger:WtLogger = None):
method run (line 41) | def run(self, port:int, host:str):
method notifyGrpLog (line 44) | def notifyGrpLog(self, groupid, tag:str, time:int, message):
method notifyGrpEvt (line 47) | def notifyGrpEvt(self, groupid, evttype):
method notifyGrpChnlEvt (line 50) | def notifyGrpChnlEvt(self, groupid, chnlid, evttype, data):
FILE: wtpy/monitor/WatchDog.py
function isWindows (line 16) | def isWindows():
class WatcherSink (line 22) | class WatcherSink:
method __init__ (line 24) | def __init__(self):
method on_start (line 27) | def on_start(self, appid:str):
method on_stop (line 30) | def on_stop(self, appid:str):
method on_output (line 33) | def on_output(self, appid:str, tag:str, time:int, message:str):
method on_order (line 36) | def on_order(self, appid:str, chnl:str, ordInfo:dict):
method on_trade (line 39) | def on_trade(self, appid:str, chnl:str, trdInfo:dict):
method on_notify (line 42) | def on_notify(self, appid:str, chnl:str, message:str):
class ActionType (line 46) | class ActionType(Enum):
class AppState (line 55) | class AppState(Enum):
class AppInfo (line 65) | class AppInfo(EventSink):
method __init__ (line 66) | def __init__(self, appConf:dict, sink:WatcherSink = None, logger:WtLog...
method applyConf (line 92) | def applyConf(self, appConf:dict):
method getConf (line 115) | def getConf(self):
method cmd_line (line 122) | def cmd_line(self) -> str:
method is_running (line 128) | def is_running(self, pids) -> bool:
method run (line 158) | def run(self):
method stop (line 189) | def stop(self):
method restart (line 207) | def restart(self):
method update_state (line 213) | def update_state(self, pids):
method tick (line 224) | def tick(self, pids):
method __schedule__ (line 237) | def __schedule__(self):
method isRunning (line 287) | def isRunning(self):
method on_order (line 291) | def on_order(self, chnl:str, ordInfo:dict):
method on_trade (line 296) | def on_trade(self, chnl:str, trdInfo:dict):
method on_notify (line 301) | def on_notify(self, chnl:str, message:str):
method on_log (line 306) | def on_log(self, tag:str, time:int, message:str):
class WatchDog (line 311) | class WatchDog:
method __init__ (line 313) | def __init__(self, db, sink:WatcherSink = None, logger:WtLogger=None):
method __watch_impl__ (line 349) | def __watch_impl__(self):
method get_apps (line 358) | def get_apps(self):
method run (line 367) | def run(self):
method start (line 373) | def start(self, appid:str):
method stop (line 381) | def stop(self, appid:str):
method has_app (line 389) | def has_app(self, appid:str):
method restart (line 392) | def restart(self, appid:str):
method isRunning (line 399) | def isRunning(self, appid:str):
method getAppConf (line 406) | def getAppConf(self, appid:str):
method delApp (line 413) | def delApp(self, appid:str):
method updateMQURL (line 424) | def updateMQURL(self, appid:str, mqurl:str):
method applyAppConf (line 439) | def applyAppConf(self, appConf:dict, isGroup:bool = False):
FILE: wtpy/monitor/WtBtMon.py
function isWindows (line 26) | def isWindows():
function md5_str (line 32) | def md5_str(v:str) -> str:
function gen_btid (line 35) | def gen_btid(user:str, straid:str) -> str:
function gen_straid (line 40) | def gen_straid(user:str) -> str:
class BtTaskSink (line 45) | class BtTaskSink:
method __init__ (line 47) | def __init__(self):
method on_start (line 50) | def on_start(self, user:str, straid:str, btid:str):
method on_stop (line 53) | def on_stop(self, user:str, straid:str, btid:str):
method on_state (line 56) | def on_state(self, user:str, straid:str, btid:str, statInfo:dict):
method on_fund (line 59) | def on_fund(self, user:str, straid:str, btid:str, fundInfo:dict):
class WtBtTask (line 62) | class WtBtTask(BtEventSink):
method __init__ (line 66) | def __init__(self, user:str, straid:str, btid:str, folder:str, logger:...
method __check__ (line 81) | def __check__(self):
method run (line 93) | def run(self):
method cmd_line (line 122) | def cmd_line(self) -> str:
method is_running (line 128) | def is_running(self, pids) -> bool:
method on_begin (line 156) | def on_begin(self):
method on_finish (line 160) | def on_finish(self):
method on_state (line 163) | def on_state(self, statInfo:dict):
method on_fund (line 168) | def on_fund(self, fundInfo:dict):
class WtBtMon (line 174) | class WtBtMon(BtTaskSink):
method __init__ (line 178) | def __init__(self, deploy_folder:str, dtServo:WtDtServo = None, logger...
method __load_user_data__ (line 190) | def __load_user_data__(self, user:str):
method __save_user_data__ (line 208) | def __save_user_data__(self, user):
method get_strategies (line 230) | def get_strategies(self, user:str) -> list:
method add_strategy (line 242) | def add_strategy(self, user:str, name:str) -> dict:
method del_strategy (line 280) | def del_strategy(self, user:str, straid:str):
method has_strategy (line 302) | def has_strategy(self, user:str, straid:str, btid:str = None) -> bool:
method get_strategy_code (line 314) | def get_strategy_code(self, user:str, straid:str, btid:str = None) -> ...
method set_strategy_code (line 341) | def set_strategy_code(self, user:str, straid:str, content:str) -> bool:
method get_backtests (line 357) | def get_backtests(self, user:str, straid:str) -> list:
method del_backtest (line 373) | def del_backtest(self, user:str, btid:str):
method get_bt_funds (line 389) | def get_bt_funds(self, user:str, straid:str, btid:str) -> list:
method get_bt_trades (line 431) | def get_bt_trades(self, user:str, straid:str, btid:str) -> list:
method get_bt_rounds (line 479) | def get_bt_rounds(self, user:str, straid:str, btid:str) -> list:
method get_bt_signals (line 523) | def get_bt_signals(self, user:str, straid:str, btid:str) -> list:
method get_bt_summary (line 562) | def get_bt_summary(self, user:str, straid:str, btid:str) -> list:
method get_bt_state (line 585) | def get_bt_state(self, user:str, straid:str, btid:str) -> list:
method get_bt_state (line 608) | def get_bt_state(self, user:str, straid:str, btid:str) -> dict:
method update_bt_state (line 632) | def update_bt_state(self, user:str, straid:str, btid:str, stateObj:dict):
method get_bt_kline (line 645) | def get_bt_kline(self, user:str, straid:str, btid:str) -> list:
method run_backtest (line 687) | def run_backtest(self, user:str, straid:str, fromTime:int, endTime:int...
method __update_bt_result__ (line 794) | def __update_bt_result__(self, user:str, straid:str, btid:str):
method __save_tasks__ (line 812) | def __save_tasks__(self):
method __load_tasks__ (line 820) | def __load_tasks__(self):
method on_start (line 847) | def on_start(self, user:str, straid:str, btid:str):
method on_stop (line 850) | def on_stop(self, user:str, straid:str, btid:str):
method on_state (line 853) | def on_state(self, user:str, straid:str, btid:str, statInfo:dict):
method on_fund (line 856) | def on_fund(self, user:str, straid:str, btid:str, fundInfo:dict):
FILE: wtpy/monitor/WtLogger.py
class WtLogger (line 4) | class WtLogger:
method __init__ (line 6) | def __init__(self, catName:str='', filename:str="out.log"):
method info (line 31) | def info(self, message:str):
method warn (line 34) | def warn(self, message:str):
method error (line 37) | def error(self, message:str):
method fatal (line 40) | def fatal(self, message:str):
FILE: wtpy/monitor/WtMonSvr.py
function pack_rsp (line 20) | def pack_rsp(obj):
function parse_data (line 25) | def parse_data():
function get_param (line 36) | def get_param(json_data, key:str, type=str, defVal = ""):
function get_tail (line 43) | def get_tail(filename, N:int = 100, encoding="GBK") :
function check_auth (line 59) | def check_auth():
function get_cfg_tree (line 80) | def get_cfg_tree(root:str, name:str):
function get_path_tree (line 169) | def get_path_tree(root:str, name:str, hasFile:bool = True):
class WtMonSvr (line 225) | class WtMonSvr(WatcherSink):
method __init__ (line 227) | def __init__(self, static_folder:str="", static_url_path="/", deploy_d...
method set_bt_mon (line 255) | def set_bt_mon(self, btMon:WtBtMon):
method set_dt_servo (line 259) | def set_dt_servo(self, dtServo:WtDtServo):
method init_bt_apis (line 262) | def init_bt_apis(self, app:Flask):
method init_mgr_apis (line 891) | def init_mgr_apis(self, app:Flask):
method __run_impl__ (line 2272) | def __run_impl__(self, port:int, host:str):
method run (line 2276) | def run(self, port:int = 8080, host="0.0.0.0", bSync:bool = True):
method init_logging (line 2285) | def init_logging(self):
method on_start (line 2288) | def on_start(self, grpid:str):
method on_stop (line 2292) | def on_stop(self, grpid:str):
method on_output (line 2296) | def on_output(self, grpid:str, tag:str, time:int, message:str):
method on_order (line 2300) | def on_order(self, grpid:str, chnl:str, ordInfo:dict):
method on_trade (line 2303) | def on_trade(self, grpid:str, chnl:str, trdInfo:dict):
method on_notify (line 2306) | def on_notify(self, grpid:str, chnl:str, message:str):
FILE: wtpy/monitor/static/console/static/js/manifest.3ad1d5771e9b13dbdad2.js
function t (line 1) | function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{...
FILE: wtpy/monitor/static/console/static/js/vendor.cd39a6c53a9d7599c08c.js
function y (line 1) | function y(){if(!v){v=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+)...
function m (line 1) | function m(o,u){var c,m=g[o],v=g[u],y=f[m],b=new l(y,e,e.ecModel);if(i&&...
function r (line 1) | function r(){var e=this.__cachedImgObj;this.onload=this.onerror=this.__c...
function o (line 1) | function o(e){return e&&e.width&&e.height}
function h (line 1) | function h(e){return e.isHorizontal()?0:1}
function d (line 1) | function d(e,t){var n=e.getRect();return[n[s[t]],n[s[t]]+n[l[t]]]}
function u (line 1) | function u(e,t){this.root,this.data,this._nodes=[],this.hostModel=e,this...
function r (line 1) | function r(e){this._setting=e||{},this._extent=[1/0,-1/0],this._interval...
function s (line 1) | function s(e){return e>a||e<-a}
function d (line 1) | function d(e){if(null==e||"object"!=typeof e)return e;var t=e,o=r.call(e...
function f (line 1) | function f(e,t,n){if(!x(t)||!x(e))return n?d(t):e;for(var i in t)if(t.ha...
function p (line 1) | function p(e,t,n){for(var i in t)t.hasOwnProperty(i)&&(n?null!=t[i]:null...
function v (line 1) | function v(e,t,n){if(e&&t)if(e.forEach&&e.forEach===a)e.forEach(t,n);els...
function y (line 1) | function y(e,t){var n=l.call(arguments,2);return function(){return e.app...
function b (line 1) | function b(e){return"[object Array]"===r.call(e)}
function x (line 1) | function x(e){var t=typeof e;return"function"===t||!!e&&"object"===t}
function _ (line 1) | function _(e){return!!n[r.call(e)]}
function w (line 1) | function w(e){return"object"==typeof e&&"number"==typeof e.nodeType&&"ob...
function S (line 1) | function S(e){return e[C]}
function k (line 1) | function k(e){var t=b(e);this.data={};var n=this;function i(e,i){t?n.set...
function i (line 1) | function i(){}
function y (line 1) | function y(e,t,n){if(n||null!=t.get(e)){for(var i=0;null!=t.get(e+i);)i+...
function D (line 1) | function D(e,t,n){null!=m.get(t)?e.otherDims[t]=n:(e.coordDim=t,e.coordD...
function i (line 6) | function i(e,t){0}
function r (line 6) | function r(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}
function o (line 6) | function o(e,t){return r(e)&&e._isRouter&&(null==t||e.type===t)}
function a (line 6) | function a(e,t){for(var n in t)e[n]=t[n];return e}
function l (line 6) | function l(e,t,n,i){var r=t.props=function(e,t){switch(typeof t){case"un...
function p (line 6) | function p(e){var t={};return(e=e.trim().replace(/^(\?|#|&)/,""))?(e.spl...
function g (line 6) | function g(e){var t=e?Object.keys(e).map(function(t){var n=e[t];if(void ...
function v (line 6) | function v(e,t,n,i){var r=i&&i.options.stringifyQuery,o=t.query||{};try{...
function y (line 6) | function y(e){if(Array.isArray(e))return e.map(y);if(e&&"object"==typeof...
function x (line 6) | function x(e,t){var n=e.path,i=e.query;void 0===i&&(i={});var r=e.hash;r...
function _ (line 6) | function _(e,t){return t===b?e===t:!!t&&(e.path&&t.path?e.path.replace(m...
function w (line 6) | function w(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e...
function C (line 6) | function C(e,t,n){var i=e.charAt(0);if("/"===i)return e;if("?"===i||"#"=...
function S (line 6) | function S(e){return e.replace(/\/\//g,"/")}
function E (line 6) | function E(e,t){for(var n,i=[],r=0,o=0,a="",s=t&&t.delimiter||"/";null!=...
function L (line 6) | function L(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%...
function P (line 6) | function P(e,t){for(var n=new Array(e.length),i=0;i<e.length;i++)"object...
function N (line 6) | function N(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
function R (line 6) | function R(e){return e.replace(/([=!:$\/()])/g,"\\$1")}
function B (line 6) | function B(e,t){return e.keys=t,e}
function z (line 6) | function z(e){return e&&e.sensitive?"":"i"}
function F (line 6) | function F(e,t,n){k(t)||(n=t||n,t=[]);for(var i=(n=n||{}).strict,r=!1!==...
function $ (line 6) | function $(e,t,n){return k(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp...
function j (line 6) | function j(e,t,n){t=t||{};try{var i=V[e]||(V[e]=T.compile(e));return"str...
function H (line 6) | function H(e,t,n,i){var r="string"==typeof e?{path:e}:e;if(r._normalized...
function X (line 6) | function X(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.default...
function K (line 6) | function K(e){if(!K.installed||W!==e){K.installed=!0,W=e;var t=function(...
function J (line 6) | function J(e,t,n,i){var r=t||[],o=n||Object.create(null),a=i||Object.cre...
function Q (line 6) | function Q(e,t){var n=J(e),i=n.pathList,r=n.pathMap,o=n.nameMap;function...
function ee (line 6) | function ee(e,t,n){var i=t.match(e);if(!i)return!1;if(!n)return!0;for(va...
function ne (line 6) | function ne(){return te.now().toFixed(3)}
function re (line 6) | function re(){return ie}
function oe (line 6) | function oe(e){return ie=e}
function se (line 6) | function se(){"scrollRestoration"in window.history&&(window.history.scro...
function le (line 6) | function le(e,t,n,i){if(e.app){var r=e.options.scrollBehavior;r&&e.app.$...
function ue (line 6) | function ue(){var e=re();e&&(ae[e]={x:window.pageXOffset,y:window.pageYO...
function ce (line 6) | function ce(e){ue(),e.state&&e.state.key&&oe(e.state.key)}
function he (line 6) | function he(e){return fe(e.x)||fe(e.y)}
function de (line 6) | function de(e){return{x:fe(e.x)?e.x:window.pageXOffset,y:fe(e.y)?e.y:win...
function fe (line 6) | function fe(e){return"number"==typeof e}
function ge (line 6) | function ge(e,t){var n,i="object"==typeof e;if(i&&"string"==typeof e.sel...
function ye (line 6) | function ye(e,t){ue();var n=window.history;try{if(t){var i=a({},n.state)...
function be (line 6) | function be(e){ye(e,!0)}
function xe (line 6) | function xe(e,t,n){var i=function(r){r>=e.length?n():e[r]?t(e[r],functio...
function _e (line 6) | function _e(e){return function(t,n,i){var o=!1,a=0,s=null;we(e,function(...
function we (line 6) | function we(e,t){return Ce(e.map(function(e){return Object.keys(e.compon...
function Ce (line 6) | function Ce(e){return Array.prototype.concat.apply([],e)}
function ke (line 6) | function ke(e){var t=!1;return function(){for(var n=[],i=arguments.lengt...
function Me (line 6) | function Me(e,t){return Ae(e,t,Te.redirected,'Redirected when going from...
function De (line 6) | function De(e,t){return Ae(e,t,Te.cancelled,'Navigation cancelled from "...
function Ae (line 6) | function Ae(e,t,n,i){var r=new Error(i);return r._isRouter=!0,r.from=e,r...
function Ee (line 6) | function Ee(e,t,n,i){var r=we(e,function(e,i,r,o){var a=function(e,t){"f...
function Le (line 6) | function Le(e,t){if(t)return function(){return e.apply(t,arguments)}}
function t (line 6) | function t(t,n){e.call(this,t,n),this._startLocation=Ne(this.base)}
function Ne (line 6) | function Ne(e){var t=decodeURI(window.location.pathname);return e&&0===t...
function t (line 6) | function t(t,n,i){e.call(this,t,n),i&&function(e){var t=Ne(e);if(!/^\/#/...
function Be (line 6) | function Be(){var e=ze();return"/"===e.charAt(0)||(Ve("/"+e),!1)}
function ze (line 6) | function ze(){var e=window.location.href,t=e.indexOf("#");if(t<0)return"...
function Fe (line 6) | function Fe(e){var t=window.location.href,n=t.indexOf("#");return(n>=0?t...
function $e (line 6) | function $e(e){ve?ye(Fe(e)):window.location.hash=e}
function Ve (line 6) | function Ve(e){ve?be(Fe(e)):window.location.replace(Fe(e))}
function t (line 6) | function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}
function qe (line 6) | function qe(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e....
function u (line 6) | function u(e,t,n){t[1]>t[0]&&(t=t.slice().reverse());var i=e.coordToPoin...
function c (line 6) | function c(e){return e.getRadiusAxis().inverse?0:1}
function h (line 6) | function h(e){var t=e[0],n=e[e.length-1];t&&n&&Math.abs(Math.abs(t.coord...
function s (line 6) | function s(e,t,n){this._model=e}
function l (line 6) | function l(e,t,n,i){var r=n.calendarModel,o=n.seriesModel,a=r?r.coordina...
function h (line 6) | function h(e,t){return null!=e[t]&&"auto"!==e[t]}
function n (line 6) | function n(){}
function i (line 6) | function i(e,t,n,i){for(var r=0,o=t.length,a=0,s=0;r<o;r++){var l=t[r];i...
function f (line 6) | function f(){for(var n=-1*s;n<=s;n+=2){var l,c=u[n-1],h=u[n+1],d=(h?h.ne...
function a (line 6) | function a(e){return parseInt(e,10)}
function s (line 6) | function s(e,t){r.initVML(),this.root=e,this.storage=t;var n=document.cr...
function n (line 6) | function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{...
function i (line 6) | function i(e,t,n,i,r,o,a,s){var l,u="function"==typeof e?e.options:e;if(...
function m (line 6) | function m(e,t){var n=e.getVisual("opacity");return null!=n?n:e.getModel...
function v (line 6) | function v(e,t,n){var i=e.getGraphicEl(),r=m(e,t);null!=n&&(null==r&&(r=...
function y (line 6) | function y(e,t){var n=m(e,t),i=e.getGraphicEl();i.traverse(function(e){!...
function a (line 6) | function a(e,t,n){this.model=e,this.ecModel=t,this.api=n,this._brushType...
function B (line 6) | function B(e,t){R[e]=t}
function z (line 6) | function z(e,t,n,i){var o=r.createFromString(e,t);return n&&("center"===...
function F (line 6) | function F(e,t){var n,i=t.width/t.height,r=e.height*i;return n=r<=e.widt...
function V (line 6) | function V(e,t){if(e.applyTransform){var n=e.getBoundingRect().calculate...
function H (line 6) | function H(e){return null!=e&&"none"!==e}
function G (line 6) | function G(e){var t=e.__hoverStl;if(t&&!e.__highlighted){var n=e.__zr,i=...
function U (line 6) | function U(e,t,n){!H(t[n])&&H(e[n])&&(e[n]=function(e){if("string"!=type...
function Y (line 6) | function Y(e){var t=e.__highlighted;if(t&&(e.__highlighted=!1,!e.isGroup...
function X (line 6) | function X(e,t,n){var i,r=L,o=L;e.__highlighted&&(r=E,i=!0),t(e,n),e.__h...
function K (line 6) | function K(e,t){t=e.__hoverStl=!1!==t&&(e.hoverStyle||t||{}),e.__hoverSt...
function Z (line 6) | function Z(e){!te(this,e)&&!this.__highByOuter&&X(this,G)}
function J (line 6) | function J(e){!te(this,e)&&!this.__highByOuter&&X(this,Y)}
function Q (line 6) | function Q(e){this.__highByOuter|=1<<(e||0),X(this,G)}
function ee (line 6) | function ee(e){!(this.__highByOuter&=~(1<<(e||0)))&&X(this,Y)}
function te (line 6) | function te(e,t){return e.__highDownSilentOnTouch&&t.zrByTouch}
function ne (line 6) | function ne(e,t){var n=!1===t;if(e.__highDownSilentOnTouch=e.highDownSil...
function ie (line 6) | function ie(e,t,n,r,o){return re(e,t,r,o),n&&i.extend(e,n),e}
function re (line 6) | function re(e,t,n,r){if((n=n||I).isRectText){var o;n.getTextPosition?o=n...
function oe (line 6) | function oe(e,t,n,r,o,a){n=!o&&n||I,e.textFill=ae(t.getShallow("color"),...
function ae (line 6) | function ae(e,t){return"auto"!==e?e:t&&t.autoColor?t.autoColor:null}
function se (line 6) | function se(e){var t,n=e.textPosition,i=e.insideRollbackOpt;if(i&&null==...
function le (line 6) | function le(e){var t=e.insideRollback;t&&(e.textFill=t.textFill,e.textSt...
function ue (line 6) | function ue(e,t,n,i,r,o){if("function"==typeof r&&(o=r,r=null),i&&i.isAn...
function ce (line 6) | function ce(e,t,n,i,r){ue(!0,e,t,n,i,r)}
function he (line 6) | function he(e,t,n){return t&&!i.isArrayLike(t)&&(t=u.getLocalTransform(t...
function de (line 6) | function de(e,t,n,i,r,o,a,s){var l,u=n-e,c=i-t,h=a-r,d=s-o,f=fe(h,d,u,c)...
function fe (line 6) | function fe(e,t,n,i){return e*i-n*t}
function l (line 6) | function l(e){var t={position:s.clone(e.position),rotation:e.rotation};r...
function a (line 6) | function a(e,t,n,i){var r=t.getData(),o=this.dataIndex,a=r.getName(o),l=...
function s (line 6) | function s(e,t,n,i,r){var o=(t.startAngle+t.endAngle)/2,a=Math.cos(o),s=...
function l (line 6) | function l(e,t){r.Group.call(this);var n=new r.Sector({z2:2}),i=new r.Po...
function n (line 6) | function n(e){return e}
function i (line 6) | function i(e,t,i,r,o){this._old=e,this._new=t,this._oldKeyGetter=i||n,th...
function r (line 6) | function r(e,t,n,i,r){for(var o=0;o<e.length;o++){var a="_ec_"+r[i](e[o]...
function f (line 6) | function f(e,t,n){var r=e.ends;return new d({shape:{points:n?function(e,...
function p (line 6) | function p(e,t){for(var n=!0,i=0;i<t.ends.length;i++)if(e.contain(t.ends...
function g (line 6) | function g(e,t,n,i){var r=t.getItemModel(n),a=r.getModel(l),s=t.getItemV...
function v (line 6) | function v(e,t,n){var i=e.getData(),r=i.getLayout("largePoints"),o=new m...
function y (line 6) | function y(e,t,n,i){var r=e>0?"P":"N",o=i.getVisual("borderColor"+r)||i....
function c (line 6) | function c(e,t,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var ...
function p (line 6) | function p(e,t,n){n=a.normalizeCssArray(n||0);var i=t.width,s=t.height,l...
function g (line 6) | function g(e,t){return t&&e&&s(l,function(n){t.hasOwnProperty(n)&&(e[n]=...
function l (line 6) | function l(n,i){var o={},a=0,l={},u=0;if(s(n,function(t){l[t]=e[t]}),s(n...
function c (line 6) | function c(e,t){return e.hasOwnProperty(t)}
function h (line 6) | function h(e,t){return null!=e[t]&&"auto"!==e[t]}
function d (line 6) | function d(e,t,n){s(e,function(e){t[e]=n[e]})}
function l (line 6) | function l(e,t,n){o.Group.call(this),this.updateData(e,t,n)}
function h (line 6) | function h(e){return[e[0]/2,e[1]/2]}
function d (line 6) | function d(e,t){this.parent.drift(e,t)}
function v (line 6) | function v(e,t){if(!this.incremental&&!this.useHoverLayer)if("emphasis"=...
function o (line 6) | function o(e){return"_EC_"+e}
function l (line 6) | function l(e,t){this.id=null==e?"":e,this.inEdges=[],this.outEdges=[],th...
function u (line 6) | function u(e,t,n){this.node1=e,this.node2=t,this.dataIndex=null==n?-1:n}
function m (line 6) | function m(e,t){var n=(e[1]-e[0])/t/2;e[0]+=n,e[1]-=n}
function p (line 6) | function p(e,t){return e=u(e),t=u(t),f?e>t:e<t}
function m (line 6) | function m(e,t,n,i,r,o,a,s,l,c){if(c>t&&c>i&&c>o&&c>s||c<t&&c<i&&c<o&&c<...
function v (line 6) | function v(e,t,n,i,r,o,a,s){if(s>t&&s>i&&s>o||s<t&&s<i&&s<o)return 0;var...
function y (line 6) | function y(e,t,n,i,r,o,a,s){if((s-=t)>n||s<-n)return 0;var u=Math.sqrt(n...
function b (line 6) | function b(e,t,n,i,l){for(var u,d,p=0,g=0,b=0,x=0,_=0,w=0;w<e.length;){v...
function o (line 6) | function o(e,t,n,i){for(var r,o=[],a=0;a<n.length;a++){var s=n[a],l=e.ge...
function a (line 6) | function a(e,t,n,r,a){var s=o(e,n,r,a),l=new i.Polyline({shape:{points:s...
function s (line 6) | function s(e){var t=e.get("smooth",!0);return!0===t&&(t=r),{lineStyle:e....
function l (line 6) | function l(e,t,n,i){var r=i.lineStyle;t.hasItemOption&&(r=t.getItemModel...
function r (line 6) | function r(e,t,n,i,r,o,a){var s=.5*(n-e),l=.5*(i-t);return(2*(t-n)+s+l)*...
function p (line 6) | function p(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Erro...
function v (line 6) | function v(e,t){var n=e+":"+(t=t||g);if(h[n])return h[n];for(var i=(e+""...
function y (line 6) | function y(e,t,n){return"right"===n?e-=t:"center"===n&&(e-=t/2),e}
function b (line 6) | function b(e,t,n){return"middle"===n?e-=t/2:"bottom"===n&&(e-=t),e}
function x (line 6) | function x(e,t,n){var i=t.textPosition,r=t.textDistance,o=n.x,a=n.y;r=r|...
function _ (line 6) | function _(e,t,n,i,r){if(!t)return"";var o=(e+"").split("\n");r=w(t,n,i,...
function w (line 6) | function w(e,t,n,i){(i=s({},i)).font=t;n=l(n,"...");i.maxIterations=l(i....
function C (line 6) | function C(e,t){var n=t.containerWidth,i=t.font,r=t.contentWidth;if(!n)r...
function S (line 6) | function S(e,t,n,i){for(var r=0,o=0,a=e.length;o<a&&r<t;o++){var s=e.cha...
function k (line 6) | function k(e){return v("国",e)}
function T (line 6) | function T(e,t){return m.measureText(e,t)}
function M (line 6) | function M(e,t,n,i,r){null!=e&&(e+="");var o=l(i,k(t)),a=e?e.split("\n")...
function D (line 6) | function D(e,t){var n={lines:[],width:0,height:0};if(null!=e&&(e+=""),!e...
function A (line 6) | function A(e,t,n){for(var i=""===t,r=t.split("\n"),o=e.lines,a=0;a<r.len...
function f (line 6) | function f(e,t){var n,r,o,a=e.type,l=t.getMin(),d=t.getMax(),f=e.getExte...
function p (line 6) | function p(e){var t,n=e.getLabelModel().get("formatter"),i="category"===...
function g (line 6) | function g(e,t){return"category"===e.type?e.scale.getLabel(t):t}
function m (line 6) | function m(e){var t=e.get("interval");return null==t?"auto":t}
function d (line 6) | function d(e,t,n,i,r,o,c,h){a(i)?(o=r,r=i,i=0):s(r)?(o=r,r="linear",i=0)...
function f (line 6) | function f(e,t,n,i){if(t){var r={};r[t]={},r[t][n]=i,e.attr(r)}else e.at...
function a (line 6) | function a(e,t,n,i,a,l){var u=o.getAxisPointerClass(e.axisPointerClass);...
function s (line 6) | function s(e,t,n){var i=e._axisPointer;i&&i.dispose(t,n),e._axisPointer=...
function x (line 6) | function x(e){return f(1e4*e)/1e4}
function _ (line 6) | function _(e){return e<b&&e>-b}
function w (line 6) | function w(e,t){t&&C(e,"transform","matrix("+h.call(t,",")+")")}
function C (line 6) | function C(e,t,n){(!n||"linear"!==n.type&&"radial"!==n.type)&&e.setAttri...
function S (line 6) | function S(e,t,n,i){if(function(e,t){var n=t?e.textFill:e.fill;return nu...
function L (line 6) | function L(e,t,n,i){C(e,"dominant-baseline","middle"),C(e,"text-anchor",...
function P (line 6) | function P(e){e&&e.__textSvgEl&&(e.__textSvgEl.parentNode&&e.__textSvgEl...
function d (line 6) | function d(e){var t=o.getTransform(n.handles[e].parent,this.group),s=o.t...
function x (line 6) | function x(e){return"vertical"===e?"ns-resize":"ew-resize"}
function e (line 6) | function e(e){return{type:e,style:"keyword"}}
function p (line 6) | function p(e,t,n){return i=e,r=n,t}
function g (line 6) | function g(e,t){var n,i=e.next();if('"'==i||"'"==i)return t.tokenize=(n=...
function m (line 6) | function m(e,t){for(var n,i=!1;n=e.next();){if("/"==n&&i){t.tokenize=g;b...
function v (line 6) | function v(e,t){for(var n,i=!1;null!=(n=e.next());){if(!i&&("`"==n||"$"=...
function b (line 6) | function b(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf...
function _ (line 6) | function _(e,t,n,i,r,o){this.indented=e,this.column=t,this.type=n,this.p...
function w (line 6) | function w(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;f...
function S (line 6) | function S(){for(var e=arguments.length-1;e>=0;e--)C.cc.push(arguments[e])}
function k (line 6) | function k(){return S.apply(null,arguments),!0}
function T (line 6) | function T(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}
function M (line 6) | function M(e){var t=C.state;if(C.marked="def",t.context)if("var"==t.lexi...
function D (line 6) | function D(e){return"public"==e||"private"==e||"protected"==e||"abstract...
function A (line 6) | function A(e,t,n){this.prev=e,this.vars=t,this.block=n}
function I (line 6) | function I(e,t){this.name=e,this.next=t}
function E (line 6) | function E(){C.state.context=new A(C.state.context,C.state.localVars,!1)...
function L (line 6) | function L(){C.state.context=new A(C.state.context,C.state.localVars,!0)...
function P (line 6) | function P(){C.state.localVars=C.state.context.vars,C.state.context=C.st...
function N (line 6) | function N(e,t){var n=function(){var n=C.state,i=n.indented;if("stat"==n...
function R (line 6) | function R(){var e=C.state;e.lexical.prev&&(")"==e.lexical.type&&(e.inde...
function B (line 6) | function B(e){return function t(n){return n==e?k():";"==e||"}"==n||")"==...
function z (line 6) | function z(e,t){return"var"==e?k(N("vardef",t),xe,B(";"),R):"keyword a"=...
function F (line 6) | function F(e){if("("==e)return k(Le,B(")"))}
function $ (line 6) | function $(e,t){return H(e,t,!1)}
function V (line 6) | function V(e,t){return H(e,t,!0)}
function j (line 6) | function j(e){return"("!=e?S():k(N(")"),W,B(")"),R)}
function H (line 6) | function H(e,t,n){if(C.state.fatArrowAt==C.stream.start){var i=n?K:X;if(...
function W (line 6) | function W(e){return e.match(/[;\}\)\],]/)?S():S($)}
function q (line 6) | function q(e,t){return","==e?k(W):G(e,t,!1)}
function G (line 6) | function G(e,t,n){var i=0==n?q:G,r=0==n?$:V;return"=>"==e?k(E,n?K:X,P):"...
function U (line 6) | function U(e,t){return"quasi"!=e?S():"${"!=t.slice(t.length-2)?k(U):k($,Y)}
function Y (line 6) | function Y(e){if("}"==e)return C.marked="string-2",C.state.tokenize=v,k(U)}
function X (line 6) | function X(e){return b(C.stream,C.state),S("{"==e?z:$)}
function K (line 6) | function K(e){return b(C.stream,C.state),S("{"==e?z:V)}
function Z (line 6) | function Z(e,t){if("target"==t)return C.marked="keyword",k(q)}
function J (line 6) | function J(e,t){if("target"==t)return C.marked="keyword",k(G)}
function Q (line 6) | function Q(e){return":"==e?k(R,z):S(q,B(";"),R)}
function ee (line 6) | function ee(e){if("variable"==e)return C.marked="property",k()}
function te (line 6) | function te(e,t){if("async"==e)return C.marked="property",k(te);if("vari...
function ne (line 6) | function ne(e){return"variable"!=e?S(ie):(C.marked="property",k(Ie))}
function ie (line 6) | function ie(e){return":"==e?k(V):"("==e?S(Ie):void 0}
function re (line 6) | function re(e,t,n){function i(r,o){if(n?n.indexOf(r)>-1:","==r){var a=C....
function oe (line 6) | function oe(e,t,n){for(var i=3;i<arguments.length;i++)C.cc.push(argument...
function ae (line 6) | function ae(e){return"}"==e?k():S(z,ae)}
function se (line 6) | function se(e,t){if(u){if(":"==e)return k(he);if("?"==t)return k(se)}}
function le (line 6) | function le(e,t){if(u&&(":"==e||"in"==t))return k(he)}
function ue (line 6) | function ue(e){if(u&&":"==e)return C.stream.match(/^\s*\w+\s+is\b/,!1)?k...
function ce (line 6) | function ce(e,t){if("is"==t)return C.marked="keyword",k()}
function he (line 6) | function he(e,t){return"keyof"==t||"typeof"==t||"infer"==t?(C.marked="ke...
function de (line 6) | function de(e){if("=>"==e)return k(he)}
function fe (line 6) | function fe(e){return e.match(/[\}\)\]]/)?k():","==e||";"==e?k(fe):S(pe,...
function pe (line 6) | function pe(e,t){return"variable"==e||"keyword"==C.style?(C.marked="prop...
function ge (line 6) | function ge(e,t){return"variable"==e&&C.stream.match(/^\s*[?:]/,!1)||"?"...
function me (line 6) | function me(e,t){return"<"==t?k(N(">"),re(he,">"),R,me):"|"==t||"."==e||...
function ve (line 6) | function ve(e,t){if("<"==t)return k(N(">"),re(he,">"),R,me)}
function ye (line 6) | function ye(){return S(he,be)}
function be (line 6) | function be(e,t){if("="==t)return k(he)}
function xe (line 6) | function xe(e,t){return"enum"==t?(C.marked="keyword",k(Ue)):S(_e,se,Se,ke)}
function _e (line 6) | function _e(e,t){return u&&D(t)?(C.marked="keyword",k(_e)):"variable"==e...
function we (line 6) | function we(e,t){return"variable"!=e||C.stream.match(/^\s*:/,!1)?("varia...
function Ce (line 6) | function Ce(){return S(_e,Se)}
function Se (line 6) | function Se(e,t){if("="==t)return k(V)}
function ke (line 6) | function ke(e){if(","==e)return k(xe)}
function Te (line 6) | function Te(e,t){if("keyword b"==e&&"else"==t)return k(N("form","else"),...
function Me (line 6) | function Me(e,t){return"await"==t?k(Me):"("==e?k(N(")"),De,R):void 0}
function De (line 6) | function De(e){return"var"==e?k(xe,Ae):"variable"==e?k(Ae):S(Ae)}
function Ae (line 6) | function Ae(e,t){return")"==e?k():";"==e?k(Ae):"in"==t||"of"==t?(C.marke...
function Ie (line 6) | function Ie(e,t){return"*"==t?(C.marked="keyword",k(Ie)):"variable"==e?(...
function Oe (line 6) | function Oe(e,t){return"*"==t?(C.marked="keyword",k(Oe)):"variable"==e?(...
function Ee (line 6) | function Ee(e,t){return"keyword"==e||"variable"==e?(C.marked="type",k(Ee...
function Le (line 6) | function Le(e,t){return"@"==t&&k($,Le),"spread"==e?k(Le):u&&D(t)?(C.mark...
function Pe (line 6) | function Pe(e,t){return"variable"==e?Ne(e,t):Re(e,t)}
function Ne (line 6) | function Ne(e,t){if("variable"==e)return M(t),k(Re)}
function Re (line 6) | function Re(e,t){return"<"==t?k(N(">"),re(ye,">"),R,Re):"extends"==t||"i...
function Be (line 6) | function Be(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t...
function ze (line 6) | function ze(e,t){if("?"==t)return k(ze);if(":"==e)return k(he,Se);if("="...
function Fe (line 6) | function Fe(e,t){return"*"==t?(C.marked="keyword",k(qe,B(";"))):"default...
function $e (line 6) | function $e(e,t){return"as"==t?(C.marked="keyword",k(B("variable"))):"va...
function Ve (line 6) | function Ve(e){return"string"==e?k():"("==e?S($):S(je,He,qe)}
function je (line 6) | function je(e,t){return"{"==e?oe(je,"}"):("variable"==e&&M(t),"*"==t&&(C...
function He (line 6) | function He(e){if(","==e)return k(je,He)}
function We (line 6) | function We(e,t){if("as"==t)return C.marked="keyword",k(je)}
function qe (line 6) | function qe(e,t){if("from"==t)return C.marked="keyword",k($)}
function Ge (line 6) | function Ge(e){return"]"==e?k():S(re(V,"]"))}
function Ue (line 6) | function Ue(){return S(N("form"),_e,B("{"),N("}"),re(Ye,"}"),R,R)}
function Ye (line 6) | function Ye(){return S(_e,Se)}
function Xe (line 6) | function Xe(e,t,n){return t.tokenize==g&&/^(?:operator|sof|keyword [bcd]...
function v (line 6) | function v(e,t){h.isInstance(e)||(e=h.seriesDataToSource(e)),this._sourc...
function x (line 6) | function x(){return this._data.length}
function _ (line 6) | function _(e){return this._data[e]}
function w (line 6) | function w(e){for(var t=0;t<e.length;t++)this._data.push(e[t])}
function S (line 6) | function S(e,t,n,i){return null!=n?e[n]:e}
function T (line 6) | function T(e,t,n,i){return M(e[i],this._dimensionInfos[t])}
function M (line 6) | function M(e,t){var n=t&&t.type;if("ordinal"===n){var i=t&&t.ordinalMeta...
function s (line 6) | function s(e){this.pointerChecker,this._zr=e,this._opt={};var t=i.bind,n...
function l (line 6) | function l(e){if(!(o.isMiddleOrRightButtonOnMouseUpDown(e)||e.target&&e....
function u (line 6) | function u(e){if(this._dragging&&g("moveOnMouseMove",e,this._opt)&&"pinc...
function c (line 6) | function c(e){o.isMiddleOrRightButtonOnMouseUpDown(e)||(this._dragging=!1)}
function h (line 6) | function h(e){var t=g("zoomOnMouseWheel",e,this._opt),n=g("moveOnMouseWh...
function d (line 6) | function d(e){a.isTaken(this._zr,"globalPan")||f(this,"zoom",null,e,{sca...
function f (line 6) | function f(e,t,n,i,r){e.pointerChecker&&e.pointerChecker(i,r.originX,r.o...
function p (line 6) | function p(e,t,n,r,o){o.isAvailableBehavior=i.bind(g,null,n,r),e.trigger...
function g (line 6) | function g(e,t,n){var r=n[e];return!e||r&&(!i.isString(r)||t.event[r+"Ke...
function a (line 6) | function a(e){o.call(this,e)}
function y (line 6) | function y(e,t,n){return e.getCoordSysModel()===t}
function b (line 6) | function b(e,t,n){this._coordsMap={},this._coordsList=[],this._axesMap={...
function _ (line 6) | function _(e,t,n,i){n.getAxesOnZeroOf=function(){return r?[r]:[]};var r,...
function w (line 6) | function w(e){return e&&"category"!==e.type&&"time"!==e.type&&h(e)}
function a (line 6) | function a(){o(r,function(e){var t=e.isHorizontal(),n=t?[0,i.width]:[0,i...
function s (line 6) | function s(t){return function(n,o){if(y(n,e)){var s=n.get("position");"x...
function n (line 6) | function n(e,t,n){o(e.mapDimension(t.dim,!0),function(n){t.scale.unionEx...
function S (line 6) | function S(e,t){return a(C,function(t){return e.getReferringComponents(t...
function k (line 6) | function k(e){return"cartesian2d"===e.get("coordinateSystem")}
function f (line 6) | function f(e,t,n){var i=e.cpx2,r=e.cpy2;return null===i||null===r?[(n?h:...
function p (line 6) | function p(e){return e.name}
function m (line 6) | function m(t,n,s){var u=this._layers;if("remove"!==t){for(var h,d,f,p=[]...
function i (line 6) | function i(e,t,r,o,a,s){var l=o+"-"+a,u=e.length;if(s.hasOwnProperty(l))...
function s (line 6) | function s(e,t){t=t||[0,360],o.call(this,"angle",e,t),this.type="category"}
function o (line 6) | function o(e,t,n){var i,o={},a="toggleSelected"===e;return n.eachCompone...
function o (line 6) | function o(e){this._ctor=e||r,this.group=new i.Group}
function s (line 6) | function s(e){var t=e.hostModel;return{lineStyle:t.getModel("lineStyle")...
function l (line 6) | function l(e){return isNaN(e[0])||isNaN(e[1])}
function u (line 6) | function u(e){return!l(e[0])&&!l(e[1])}
function n (line 6) | function n(e){e.isGroup||function(e){return e.animators&&e.animators.len...
function i (line 12) | function i(e){return void 0===e||null===e}
function r (line 12) | function r(e){return void 0!==e&&null!==e}
function o (line 12) | function o(e){return!0===e}
function a (line 12) | function a(e){return"string"==typeof e||"number"==typeof e||"symbol"==ty...
function s (line 12) | function s(e){return null!==e&&"object"==typeof e}
function u (line 12) | function u(e){return"[object Object]"===l.call(e)}
function c (line 12) | function c(e){return"[object RegExp]"===l.call(e)}
function h (line 12) | function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t...
function d (line 12) | function d(e){return r(e)&&"function"==typeof e.then&&"function"==typeof...
function f (line 12) | function f(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===l?J...
function p (line 12) | function p(e){var t=parseFloat(e);return isNaN(t)?e:t}
function g (line 12) | function g(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r<i.len...
function y (line 12) | function y(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(...
function x (line 12) | function x(e,t){return b.call(e,t)}
function _ (line 12) | function _(e){var t=Object.create(null);return function(n){return t[n]||...
function n (line 12) | function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e...
function D (line 12) | function D(e,t){t=t||0;for(var n=e.length-t,i=new Array(n);n--;)i[n]=e[n...
function A (line 12) | function A(e,t){for(var n in t)e[n]=t[n];return e}
function I (line 12) | function I(e){for(var t={},n=0;n<e.length;n++)e[n]&&A(t,e[n]);return t}
function O (line 12) | function O(e,t,n){}
function P (line 12) | function P(e,t){if(e===t)return!0;var n=s(e),i=s(t);if(!n||!i)return!n&&...
function N (line 12) | function N(e,t){for(var n=0;n<e.length;n++)if(P(e[n],t))return n;return-1}
function R (line 12) | function R(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments...
function j (line 12) | function j(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}
function H (line 12) | function H(e,t,n,i){Object.defineProperty(e,t,{value:n,enumerable:!!i,wr...
function se (line 12) | function se(e){return"function"==typeof e&&/native code/.test(e.toString...
function e (line 12) | function e(){this.set=Object.create(null)}
function pe (line 12) | function pe(e){fe.push(e),de.target=e}
function ge (line 12) | function ge(){fe.pop(),de.target=fe[fe.length-1]}
function be (line 12) | function be(e){return new me(void 0,void 0,void 0,String(e))}
function xe (line 12) | function xe(e){var t=new me(e.tag,e.data,e.children&&e.children.slice(),...
function ke (line 12) | function ke(e){Se=e}
function Me (line 12) | function Me(e,t){var n;if(s(e)&&!(e instanceof me))return x(e,"__ob__")&...
function De (line 12) | function De(e,t,n,i,r){var o=new de,a=Object.getOwnPropertyDescriptor(e,...
function Ae (line 12) | function Ae(e,t,n){if(Array.isArray(e)&&h(t))return e.length=Math.max(e....
function Ie (line 12) | function Ie(e,t){if(Array.isArray(e)&&h(t))e.splice(t,1);else{var n=e.__...
function Ee (line 12) | function Ee(e,t){if(!t)return e;for(var n,i,r,o=ue?Reflect.ownKeys(t):Ob...
function Le (line 12) | function Le(e,t,n){return n?function(){var i="function"==typeof t?t.call...
function Pe (line 12) | function Pe(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n...
function Ne (line 12) | function Ne(e,t,n,i){var r=Object.create(e||null);return t?A(r,t):r}
function Be (line 12) | function Be(e,t,n){if("function"==typeof t&&(t=t.options),function(e,t){...
function ze (line 12) | function ze(e,t,n,i){if("string"==typeof n){var r=e[t];if(x(r,n))return ...
function Fe (line 12) | function Fe(e,t,n,i){var r=t[e],o=!x(n,e),a=n[e],s=je(Boolean,r.type);if...
function $e (line 12) | function $e(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return ...
function Ve (line 12) | function Ve(e,t){return $e(e)===$e(t)}
function je (line 12) | function je(e,t){if(!Array.isArray(t))return Ve(t,e)?0:-1;for(var n=0,i=...
function He (line 12) | function He(e,t,n){pe();try{if(t)for(var i=t;i=i.$parent;){var r=i.$opti...
function We (line 12) | function We(e,t,n,i,r){var o;try{(o=n?e.apply(t,n):e.call(t))&&!o._isVue...
function qe (line 12) | function qe(e,t,n){if($.errorHandler)try{return $.errorHandler.call(null...
function Ge (line 12) | function Ge(e,t,n){if(!U&&!Y||"undefined"==typeof console)throw e;consol...
function Ze (line 12) | function Ze(){Ke=!1;var e=Xe.slice(0);Xe.length=0;for(var t=0;t<e.length...
function nt (line 12) | function nt(e,t){var n;if(Xe.push(function(){if(e)try{e.call(t)}catch(e)...
function rt (line 12) | function rt(e){!function e(t,n){var i,r;var o=Array.isArray(t);if(!o&&!s...
function at (line 12) | function at(e,t){function n(){var e=arguments,i=n.fns;if(!Array.isArray(...
function st (line 12) | function st(e,t,n,r,a,s){var l,u,c,h;for(l in e)u=e[l],c=t[l],h=ot(l),i(...
function lt (line 12) | function lt(e,t,n){var a;e instanceof me&&(e=e.data.hook||(e.data.hook={...
function ut (line 12) | function ut(e,t,n,i,o){if(r(t)){if(x(t,n))return e[n]=t[n],o||delete t[n...
function ct (line 12) | function ct(e){return a(e)?[be(e)]:Array.isArray(e)?function e(t,n){var ...
function ht (line 12) | function ht(e){return r(e)&&r(e.text)&&!1===e.isComment}
function dt (line 12) | function dt(e,t){if(e){for(var n=Object.create(null),i=ue?Reflect.ownKey...
function ft (line 12) | function ft(e,t){if(!e||!e.length)return{};for(var n={},i=0,r=e.length;i...
function pt (line 12) | function pt(e){return e.isComment&&!e.asyncFactory||" "===e.text}
function gt (line 12) | function gt(e,t,i){var r,o=Object.keys(t).length>0,a=e?!!e.$stable:!o,s=...
function mt (line 12) | function mt(e,t,n){var i=function(){var e=arguments.length?n.apply(null,...
function vt (line 12) | function vt(e,t){return function(){return e[t]}}
function yt (line 12) | function yt(e,t){var n,i,o,a,l;if(Array.isArray(e)||"string"==typeof e)f...
function bt (line 12) | function bt(e,t,n,i){var r,o=this.$scopedSlots[e];o?(n=n||{},i&&(n=A(A({...
function xt (line 12) | function xt(e){return ze(this.$options,"filters",e)||L}
function _t (line 12) | function _t(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}
function wt (line 12) | function wt(e,t,n,i,r){var o=$.keyCodes[t]||n;return r&&i&&!$.keyCodes[t...
function Ct (line 12) | function Ct(e,t,n,i,r){if(n)if(s(n)){var o;Array.isArray(n)&&(n=I(n));va...
function St (line 12) | function St(e,t){var n=this._staticTrees||(this._staticTrees=[]),i=n[e];...
function kt (line 12) | function kt(e,t,n){return Tt(e,"__once__"+t+(n?"_"+n:""),!0),e}
function Tt (line 12) | function Tt(e,t,n){if(Array.isArray(e))for(var i=0;i<e.length;i++)e[i]&&...
function Mt (line 12) | function Mt(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}
function Dt (line 12) | function Dt(e,t){if(t)if(u(t)){var n=e.on=e.on?A({},e.on):{};for(var i i...
function At (line 12) | function At(e,t,n,i){t=t||{$stable:!n};for(var r=0;r<e.length;r++){var o...
function It (line 12) | function It(e,t){for(var n=0;n<t.length;n+=2){var i=t[n];"string"==typeo...
function Ot (line 12) | function Ot(e,t){return"string"==typeof e?t+e:e}
function Et (line 12) | function Et(e){e._o=kt,e._n=p,e._s=f,e._l=yt,e._t=bt,e._q=P,e._i=N,e._m=...
function Lt (line 12) | function Lt(e,t,i,r,a){var s,l=this,u=a.options;x(r,"_uid")?(s=Object.cr...
function Pt (line 12) | function Pt(e,t,n,i,r){var o=xe(e);return o.fnContext=n,o.fnOptions=i,t....
function Nt (line 12) | function Nt(e,t){for(var n in t)e[C(n)]=t[n]}
function zt (line 12) | function zt(e,t,a,l,u){if(!i(e)){var c=a.$options._base;if(s(e)&&(e=c.ex...
function Ft (line 12) | function Ft(e,t){var n=function(n,i){e(n,i),t(n,i)};return n._merged=!0,n}
function jt (line 12) | function jt(e,t,n,l,u,c){return(Array.isArray(n)||a(n))&&(u=l,l=n,n=void...
function qt (line 12) | function qt(e,t){return(e.__esModule||ue&&"Module"===e[Symbol.toStringTa...
function Gt (line 12) | function Gt(e){return e.isComment&&e.asyncFactory}
function Ut (line 12) | function Ut(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t...
function Yt (line 12) | function Yt(e,t){Ht.$on(e,t)}
function Xt (line 12) | function Xt(e,t){Ht.$off(e,t)}
function Kt (line 12) | function Kt(e,t){var n=Ht;return function i(){null!==t.apply(null,argume...
function Zt (line 12) | function Zt(e,t,n){Ht=e,st(t,n||{},Yt,Xt,Kt,e),Ht=void 0}
function Qt (line 12) | function Qt(e){var t=Jt;return Jt=e,function(){Jt=t}}
function en (line 12) | function en(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}
function tn (line 12) | function tn(e,t){if(t){if(e._directInactive=!1,en(e))return}else if(e._d...
function nn (line 12) | function nn(e,t){pe();var n=e.$options[t],i=t+" hook";if(n)for(var r=0,o...
function fn (line 12) | function fn(){var e,t;for(cn=hn(),ln=!0,rn.sort(function(e,t){return e.i...
function vn (line 12) | function vn(e,t,n){mn.get=function(){return this[t][n]},mn.set=function(...
function yn (line 12) | function yn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){va...
function xn (line 12) | function xn(e,t,n){var i=!oe();"function"==typeof n?(mn.get=i?_n(t):wn(n...
function _n (line 12) | function _n(e){return function(){var t=this._computedWatchers&&this._com...
function wn (line 12) | function wn(e){return function(){return e.call(this,this)}}
function Cn (line 12) | function Cn(e,t,n,i){return u(n)&&(i=n,n=n.handler),"string"==typeof n&&...
function kn (line 12) | function kn(e){var t=e.options;if(e.super){var n=kn(e.super);if(n!==e.su...
function Tn (line 12) | function Tn(e){this._init(e)}
function Mn (line 12) | function Mn(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i...
function Dn (line 12) | function Dn(e){return e&&(e.Ctor.options.name||e.tag)}
function An (line 12) | function An(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeo...
function In (line 12) | function In(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var o in n){var a...
function On (line 12) | function On(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstanc...
function i (line 12) | function i(){n.$off(e,i),t.apply(n,arguments)}
function qn (line 12) | function qn(e){for(var t=e.data,n=e,i=e;r(i.componentInstance);)(i=i.com...
function Gn (line 12) | function Gn(e,t){return{staticClass:Un(e.staticClass,t.staticClass),clas...
function Un (line 12) | function Un(e,t){return e?t?e+" "+t:e:t||""}
function Yn (line 12) | function Yn(e){return Array.isArray(e)?function(e){for(var t,n="",i=0,o=...
function Qn (line 12) | function Qn(e){return Zn(e)?"svg":"math"===e?"math":void 0}
function ni (line 12) | function ni(e){if("string"==typeof e){var t=document.querySelector(e);re...
function oi (line 12) | function oi(e,t){var n=e.data.ref;if(r(n)){var i=e.context,o=e.component...
function li (line 12) | function li(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.i...
function ui (line 12) | function ui(e,t,n){var i,o,a={};for(i=t;i<=n;++i)r(o=e[i].key)&&(a[o]=i)...
function hi (line 12) | function hi(e,t){(e.data.directives||t.data.directives)&&function(e,t){v...
function fi (line 12) | function fi(e,t){var n,i,r=Object.create(null);if(!e)return r;for(n=0;n<...
function pi (line 12) | function pi(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{})...
function gi (line 12) | function gi(e,t,n,i,r){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,i,r)}c...
function vi (line 12) | function vi(e,t){var n=t.componentOptions;if(!(r(n)&&!1===n.Ctor.options...
function yi (line 12) | function yi(e,t,n){e.tagName.indexOf("-")>-1?bi(e,t,n):$n(t)?Wn(n)?e.rem...
function bi (line 12) | function bi(e,t,n){if(Wn(n))e.removeAttribute(t);else{if(Z&&!J&&"TEXTARE...
function _i (line 12) | function _i(e,t){var n=t.elm,o=t.data,a=e.data;if(!(i(o.staticClass)&&i(...
function Ii (line 12) | function Ii(e){var t,n,i,r,o,a=!1,s=!1,l=!1,u=!1,c=0,h=0,d=0,f=0;for(i=0...
function Oi (line 12) | function Oi(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";...
function Ei (line 12) | function Ei(e,t){console.error("[Vue compiler]: "+e)}
function Li (line 12) | function Li(e,t){return e?e.map(function(e){return e[t]}).filter(functio...
function Pi (line 12) | function Pi(e,t,n,i,r){(e.props||(e.props=[])).push(Wi({name:t,value:n,d...
function Ni (line 12) | function Ni(e,t,n,i,r){(r?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(...
function Ri (line 12) | function Ri(e,t,n,i){e.attrsMap[t]=n,e.attrsList.push(Wi({name:t,value:n...
function Bi (line 12) | function Bi(e,t,n,i,r,o,a,s){(e.directives||(e.directives=[])).push(Wi({...
function zi (line 12) | function zi(e,t,n){return n?"_p("+t+',"'+e+'")':e+t}
function Fi (line 12) | function Fi(e,t,i,r,o,a,s,l){var u;(r=r||n).right?l?t="("+t+")==='click'...
function $i (line 12) | function $i(e,t){return e.rawAttrsMap[":"+t]||e.rawAttrsMap["v-bind:"+t]...
function Vi (line 12) | function Vi(e,t,n){var i=ji(e,":"+t)||ji(e,"v-bind:"+t);if(null!=i)retur...
function ji (line 12) | function ji(e,t,n){var i;if(null!=(i=e.attrsMap[t]))for(var r=e.attrsLis...
function Hi (line 12) | function Hi(e,t){for(var n=e.attrsList,i=0,r=n.length;i<r;i++){var o=n[i...
function Wi (line 12) | function Wi(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end...
function qi (line 12) | function qi(e,t,n){var i=n||{},r=i.number,o="$$v";i.trim&&(o="(typeof $$...
function Gi (line 12) | function Gi(e,t){var n=function(e){if(e=e.trim(),wi=e.length,e.indexOf("...
function Ui (line 12) | function Ui(){return Ci.charCodeAt(++ki)}
function Yi (line 12) | function Yi(){return ki>=wi}
function Xi (line 12) | function Xi(e){return 34===e||39===e}
function Ki (line 12) | function Ki(e){var t=1;for(Ti=ki;!Yi();)if(Xi(e=Ui()))Zi(e);else if(91==...
function Zi (line 12) | function Zi(e){for(var t=e;!Yi()&&(e=Ui())!==t;);}
function tr (line 12) | function tr(e,t,n){var i=Ji;return function r(){null!==t.apply(null,argu...
function ir (line 12) | function ir(e,t,n,i){if(nr){var r=cn,o=t;t=o._wrapper=function(e){if(e.t...
function rr (line 12) | function rr(e,t,n,i){(i||Ji).removeEventListener(e,t._wrapper||t,n)}
function or (line 12) | function or(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},o=...
function lr (line 12) | function lr(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,o,a=...
function ur (line 12) | function ur(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t...
function dr (line 12) | function dr(e){var t=fr(e.style);return e.staticStyle?A(e.staticStyle,t):t}
function fr (line 12) | function fr(e){return Array.isArray(e)?I(e):"string"==typeof e?hr(e):e}
function xr (line 12) | function xr(e,t){var n=t.data,o=e.data;if(!(i(n.staticStyle)&&i(n.style)...
function Cr (line 12) | function Cr(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
function Sr (line 12) | function Sr(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
function kr (line 12) | function kr(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A...
function Nr (line 12) | function Nr(e){Pr(function(){Pr(e)})}
function Rr (line 12) | function Rr(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n...
function Br (line 12) | function Br(e,t){e._transitionClasses&&y(e._transitionClasses,t),Sr(e,t)}
function zr (line 12) | function zr(e,t,n){var i=$r(e,t),r=i.type,o=i.timeout,a=i.propCount;if(!...
function $r (line 12) | function $r(e,t){var n,i=window.getComputedStyle(e),r=(i[Ir+"Delay"]||""...
function Vr (line 12) | function Vr(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.a...
function jr (line 12) | function jr(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}
function Hr (line 12) | function Hr(e,t){var n=e.elm;r(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
function Wr (line 12) | function Wr(e,t){var n=e.elm;r(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
function qr (line 12) | function qr(e){return"number"==typeof e&&!isNaN(e)}
function Gr (line 12) | function Gr(e){if(i(e))return!1;var t=e.fns;return r(t)?Gr(Array.isArray...
function Ur (line 12) | function Ur(e,t){!0!==t.data.show&&Hr(t)}
function c (line 12) | function c(e){var t=u.parentNode(e);r(t)&&u.removeChild(t,e)}
function h (line 12) | function h(e,t,n,i,a,l,c){if(r(e.elm)&&r(l)&&(e=l[c]=xe(e)),e.isRootInse...
function d (line 12) | function d(e,t){r(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingI...
function f (line 12) | function f(e,t,n){r(e)&&(r(n)?u.parentNode(n)===e&&u.insertBefore(e,t,n)...
function p (line 12) | function p(e,t,n){if(Array.isArray(t))for(var i=0;i<t.length;++i)h(t[i],...
function m (line 12) | function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;ret...
function v (line 12) | function v(e,n){for(var i=0;i<s.create.length;++i)s.create[i](ai,e);r(t=...
function y (line 12) | function y(e){var t;if(r(t=e.fnScopeId))u.setStyleScope(e.elm,t);else fo...
function b (line 12) | function b(e,t,n,i,r,o){for(;i<=r;++i)h(n[i],o,e,t,!1,n,i)}
function x (line 12) | function x(e){var t,n,i=e.data;if(r(i))for(r(t=i.hook)&&r(t=t.destroy)&&...
function _ (line 12) | function _(e,t,n){for(;t<=n;++t){var i=e[t];r(i)&&(r(i.tag)?(w(i),x(i)):...
function w (line 12) | function w(e,t){if(r(t)||r(e.data)){var n,i=s.remove.length+1;for(r(t)?t...
function C (line 12) | function C(e,t,n,i){for(var o=n;o<i;o++){var a=t[o];if(r(a)&&li(e,a))ret...
function S (line 12) | function S(e,t,n,a,l,c){if(e!==t){r(t.elm)&&r(a)&&(t=a[l]=xe(t));var d=t...
function k (line 12) | function k(e,t,n){if(o(n)&&r(e.parent))e.parent.data.pendingInsert=t;els...
function M (line 12) | function M(e,t,n,i){var a,s=t.tag,l=t.data,u=t.children;if(i=i||l&&l.pre...
function Kr (line 12) | function Kr(e,t,n){Zr(e,t,n),(Z||Q)&&setTimeout(function(){Zr(e,t,n)},0)}
function Zr (line 12) | function Zr(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){f...
function Jr (line 12) | function Jr(e,t){return t.every(function(t){return!P(t,e)})}
function Qr (line 12) | function Qr(e){return"_value"in e?e._value:e.value}
function eo (line 12) | function eo(e){e.target.composing=!0}
function to (line 12) | function to(e){e.target.composing&&(e.target.composing=!1,no(e.target,"i...
function no (line 12) | function no(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,...
function io (line 12) | function io(e){return!e.componentInstance||e.data&&e.data.transition?e:i...
function ao (line 12) | function ao(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abst...
function so (line 12) | function so(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];...
function lo (line 12) | function lo(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{...
function po (line 12) | function po(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._ent...
function go (line 12) | function go(e){e.data.newPos=e.elm.getBoundingClientRect()}
function mo (line 12) | function mo(e){var t=e.data.pos,n=e.data.newPos,i=t.left-n.left,r=t.top-...
function _o (line 12) | function _o(e,t){var n=t?xo(t):yo;if(n.test(e)){for(var i,r,o,a=[],s=[],...
function Go (line 12) | function Go(e,t){var n=t?Ho:jo;return e.replace(n,function(e){return Vo[...
function ga (line 12) | function ga(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:function(e){...
function ma (line 12) | function ma(e,t){Uo=t.warn||Ei,Jo=t.isPreTag||E,Qo=t.mustUseProp||E,ea=t...
function va (line 12) | function va(e,t){var n,i;!function(e){var t=Vi(e,"key");if(t){e.key=t}}(...
function ya (line 12) | function ya(e){var t;if(t=ji(e,"v-for")){var n=function(e){var t=e.match...
function ba (line 12) | function ba(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push...
function xa (line 12) | function xa(e){var t=e.name.replace(ca,"");return t||"#"!==e.name[0]&&(t...
function _a (line 12) | function _a(e){var t=e.match(ua);if(t){var n={};return t.forEach(functio...
function Sa (line 12) | function Sa(e){return ga(e.tag,e.attrsList.slice(),e.parent)}
function Ia (line 12) | function Ia(e,t){e&&(Ta=Aa(t.staticKeys||""),Ma=t.isReservedTag||E,funct...
function za (line 12) | function za(e,t){var n=t?"nativeOn:":"on:",i="",r="";for(var o in e){var...
function Fa (line 12) | function Fa(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+...
function $a (line 12) | function $a(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var...
function Ha (line 12) | function Ha(e,t){var n=new ja(t);return{render:"with(this){return "+(e?W...
function Wa (line 12) | function Wa(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&...
function qa (line 12) | function qa(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e...
function Ga (line 12) | function Ga(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ua(e,...
function Ua (line 12) | function Ua(e,t,n,i){return e.ifProcessed=!0,function e(t,n,i,r){if(!t.l...
function Ya (line 12) | function Ya(e,t,n,i){var r=e.for,o=e.alias,a=e.iterator1?","+e.iterator1...
function Xa (line 12) | function Xa(e,t){var n="{",i=function(e,t){var n=e.directives;if(!n)retu...
function Ka (line 12) | function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}
function Za (line 12) | function Za(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&...
function Ja (line 12) | function Ja(e,t,n,i,r){var o=e.children;if(o.length){var a=o[0];if(1===o...
function Qa (line 12) | function Qa(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}
function es (line 12) | function es(e,t){return 1===e.type?Wa(e,t):3===e.type&&e.isComment?(i=e,...
function ts (line 12) | function ts(e){for(var t="",n="",i=0;i<e.length;i++){var r=e[i],o=ns(r.v...
function ns (line 12) | function ns(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"...
function is (line 12) | function is(e,t){try{return new Function(e)}catch(n){return t.push({err:...
function rs (line 12) | function rs(e){var t=Object.create(null);return function(n,i,r){(i=A({},...
function t (line 12) | function t(t,n){var i=Object.create(e),r=[],o=[],a=function(e,t,n){(n?o:...
function us (line 12) | function us(e){return(as=as||document.createElement("div")).innerHTML=e?...
function l (line 12) | function l(e){return e&&e.__esModule?e:{default:e}}
function i (line 12) | function i(t,i){t.extendSelectionsBy(function(r){return t.display.shift|...
function r (line 12) | function r(t,i){if(t.isReadOnly())return e.Pass;t.operation(function(){f...
function o (line 12) | function o(t,i){for(var r=i.ch,o=r,a=t.getLine(i.line);r&&e.isWordChar(a...
function a (line 12) | function a(e,t){for(var n=e.listSelections(),i=[],r=0;r<n.length;r++){va...
function l (line 12) | function l(t){for(var i=t.listSelections(),r=[],o=0;o<i.length;o++){var ...
function u (line 12) | function u(e){return e?/\bpunctuation\b/.test(e)?e:void 0:null}
function c (line 12) | function c(t,i){if(t.isReadOnly())return e.Pass;for(var r,o=t.listSelect...
function h (line 12) | function h(t,n){t.operation(function(){for(var i=t.listSelections(),r=[]...
function d (line 12) | function d(t){var n=t.getCursor("from"),i=t.getCursor("to");if(0==e.cmpP...
function f (line 12) | function f(e,t){var i=d(e);if(i){var r=i.query,o=e.getSearchCursor(r,t?i...
function _ (line 39) | function _(e,t,n){var i,r,o=(n=n||b).createElement("script");if(o.text=e...
function w (line 39) | function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof...
function S (line 39) | function S(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!v(e)&&!y(e...
function se (line 50) | function se(e,t,i,r){var o,s,u,c,h,p,v,y=t&&t.ownerDocument,_=t?t.nodeTy...
function le (line 50) | function le(){var e=[];return function t(n,r){return e.push(n+" ")>i.cac...
function ue (line 50) | function ue(e){return e[x]=!0,e}
function ce (line 50) | function ce(e){var t=f.createElement("fieldset");try{return!!e(t)}catch(...
function he (line 50) | function he(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r...
function de (line 50) | function de(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourc...
function fe (line 50) | function fe(e){return function(t){return"input"===t.nodeName.toLowerCase...
function pe (line 50) | function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(...
function ge (line 50) | function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t....
function me (line 50) | function me(e){return ue(function(t){return t=+t,ue(function(n,i){for(va...
function ve (line 50) | function ve(e){return e&&void 0!==e.getElementsByTagName&&e}
function ye (line 50) | function ye(){}
function be (line 50) | function be(e){for(var t=0,n=e.length,i="";t<n;t++)i+=e[t].value;return i}
function xe (line 50) | function xe(e,t,n){var i=t.dir,r=t.next,o=r||i,a=n&&"parentNode"===o,s=C...
function _e (line 50) | function _e(e){return e.length>1?function(t,n,i){for(var r=e.length;r--;...
function we (line 50) | function we(e,t,n,i,r){for(var o,a=[],s=0,l=e.length,u=null!=t;s<l;s++)(...
function Ce (line 50) | function Ce(e,t,n,i,r,o){return i&&!i[x]&&(i=Ce(i)),r&&!r[x]&&(r=Ce(r,o)...
function Se (line 50) | function Se(e){for(var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.r...
function A (line 50) | function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerC...
function O (line 50) | function O(e,t,n){return v(t)?C.grep(e,function(e,i){return!!t.call(e,i,...
function R (line 50) | function R(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function z (line 50) | function z(e){return e}
function F (line 50) | function F(e){throw e}
function $ (line 50) | function $(e,t,n,i){var r;try{e&&v(r=e.promise)?r.call(e).done(t).fail(n...
function a (line 50) | function a(e,t,i,r){return function(){var s=this,l=arguments,u=function(...
function H (line 50) | function H(){b.removeEventListener("DOMContentLoaded",H),n.removeEventLi...
function U (line 50) | function U(e,t){return t.toUpperCase()}
function Y (line 50) | function Y(e){return e.replace(q,"ms-").replace(G,U)}
function K (line 50) | function K(){this.expando=C.expando+K.uid++}
function te (line 50) | function te(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.re...
function ue (line 50) | function ue(e,t,n,i){var r,o,a=20,s=i?function(){return i.cur()}:functio...
function he (line 50) | function he(e){var t,n=e.ownerDocument,i=e.nodeName,r=ce[i];return r||(t...
function de (line 50) | function de(e,t){for(var n,i,r=[],o=0,a=e.length;o<a;o++)(i=e[o]).style&...
function be (line 50) | function be(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getEle...
function xe (line 50) | function xe(e,t){for(var n=0,i=e.length;n<i;n++)Z.set(e[n],"globalEval",...
function we (line 50) | function we(e,t,n,i,r){for(var o,a,s,l,u,c,h=t.createDocumentFragment(),...
function Te (line 50) | function Te(){return!0}
function Me (line 50) | function Me(){return!1}
function De (line 50) | function De(e,t){return e===function(){try{return b.activeElement}catch(...
function Ae (line 50) | function Ae(e,t,n,i,r,o){var a,s;if("object"==typeof t){for(s in"string"...
function Ie (line 50) | function Ie(e,t,n){n?(Z.set(e,t,!1),C.event.add(e,t,{namespace:!1,handle...
function Pe (line 50) | function Pe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"...
function Ne (line 50) | function Ne(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function Re (line 50) | function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.sli...
function Be (line 50) | function Be(e,t){var n,i,r,o,a,s;if(1===t.nodeType){if(Z.hasData(e)&&(s=...
function ze (line 50) | function ze(e,t,n,i){t=l(t);var r,o,a,s,u,c,h=0,d=e.length,f=d-1,p=t[0],...
function Fe (line 50) | function Fe(e,t,n){for(var i,r=t?C.filter(t,e):e,o=0;null!=(i=r[o]);o++)...
function We (line 50) | function We(e,t,n){var i,r,o,a,s=e.style;return(n=n||Ve(e))&&(""!==(a=n....
function qe (line 50) | function qe(e,t){return{get:function(){if(!e())return(this.get=t).apply(...
function e (line 50) | function e(){if(c){u.style.cssText="position:absolute;left:-11111px;widt...
function t (line 50) | function t(e){return Math.round(parseFloat(e))}
function Xe (line 50) | function Xe(e){var t=C.cssProps[e]||Ye[e];return t||(e in Ue?e:Ye[e]=fun...
function et (line 50) | function et(e,t,n){var i=ie.exec(t);return i?Math.max(0,i[2]-(n||0))+(i[...
function tt (line 50) | function tt(e,t,n,i,r,o){var a="width"===t?1:0,s=0,l=0;if(n===(i?"border...
function nt (line 50) | function nt(e,t,n){var i=Ve(e),r=(!m.boxSizingReliable()||n)&&"border-bo...
function it (line 50) | function it(e,t,n,i,r){return new it.prototype.init(e,t,n,i,r)}
function lt (line 50) | function lt(){ot&&(!1===b.hidden&&n.requestAnimationFrame?n.requestAnima...
function ut (line 50) | function ut(){return n.setTimeout(function(){rt=void 0}),rt=Date.now()}
function ct (line 50) | function ct(e,t){var n,i=0,r={height:e};for(t=t?1:0;i<4;i+=2-t)r["margin...
function ht (line 50) | function ht(e,t,n){for(var i,r=(dt.tweeners[t]||[]).concat(dt.tweeners["...
function dt (line 50) | function dt(e,t,n){var i,r,o=0,a=dt.prefilters.length,s=C.Deferred().alw...
function vt (line 50) | function vt(e){return(e.match(B)||[]).join(" ")}
function yt (line 50) | function yt(e){return e.getAttribute&&e.getAttribute("class")||""}
function bt (line 50) | function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(B)|...
function It (line 50) | function It(e,t,n,i){var r;if(Array.isArray(t))C.each(t,function(t,r){n|...
function Vt (line 50) | function Vt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var ...
function jt (line 50) | function jt(e,t,n,i){var r={},o=e===zt;function a(s){var l;return r[s]=!...
function Ht (line 50) | function Ht(e,t){var n,i,r=C.ajaxSettings.flatOptions||{};for(n in t)voi...
function k (line 50) | function k(e,t,a,l){var h,d,b,x,_,w=t;u||(u=!0,s&&n.clearTimeout(s),i=vo...
function o (line 50) | function o(e,t){t.update="updateView",i.registerAction(t,function(t,n){v...
function f (line 50) | function f(e,t,n,i,r,o){var a;return"line"!==t&&t.indexOf("empty")<0?(a=...
function p (line 50) | function p(e,t,n,i){m(e,t,n,i),n.dispatchAction({type:"legendToggleSelec...
function g (line 50) | function g(e,t,n,i){var r=n.getZr().storage.getDisplayList()[0];r&&r.use...
function m (line 50) | function m(e,t,n,i){var r=n.getZr().storage.getDisplayList()[0];r&&r.use...
function S (line 50) | function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}
function M (line 50) | function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firs...
function D (line 50) | function D(e,t){return M(e).appendChild(t)}
function A (line 50) | function A(e,t,n,i){var r=document.createElement(e);if(n&&(r.className=n...
function I (line 50) | function I(e,t,n,i){var r=A(e,t,n,i);return r.setAttribute("role","prese...
function O (line 50) | function O(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.c...
function E (line 50) | function E(){var e;try{e=document.activeElement}catch(t){e=document.body...
function L (line 50) | function L(e,t){var n=e.className;S(t).test(n)||(e.className+=(n?" ":"")...
function P (line 50) | function P(e,t){for(var n=e.split(" "),i=0;i<n.length;i++)n[i]&&!S(n[i])...
function R (line 50) | function R(e){var t=Array.prototype.slice.call(arguments,1);return funct...
function B (line 50) | function B(e,t,n){for(var i in t||(t={}),e)!e.hasOwnProperty(i)||!1===n&...
function z (line 50) | function z(e,t,n,i,r){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.len...
function $ (line 50) | function $(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}
function G (line 50) | function G(e,t,n){for(var i=0,r=0;;){var o=e.indexOf("\t",i);-1==o&&(o=e...
function Y (line 50) | function Y(e){for(;U.length<=e;)U.push(X(U)+" ");return U[e]}
function X (line 50) | function X(e){return e[e.length-1]}
function K (line 50) | function K(e,t){for(var n=[],i=0;i<e.length;i++)n[i]=t(e[i],i);return n}
function Z (line 50) | function Z(){}
function J (line 50) | function J(e,t){var n;return Object.create?n=Object.create(e):(Z.prototy...
function ee (line 50) | function ee(e){return/\w/.test(e)||e>""&&(e.toUpperCase()!=e.toLowerCas...
function te (line 50) | function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(...
function ne (line 50) | function ne(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;retu...
function re (line 50) | function re(e){return e.charCodeAt(0)>=768&&ie.test(e)}
function oe (line 50) | function oe(e,t,n){for(;(n<0?t>0:t<e.length)&&re(e.charAt(t));)t+=n;retu...
function ae (line 50) | function ae(e,t,n){for(var i=t>n?-1:1;;){if(t==n)return t;var r=(t+n)/2,...
function le (line 50) | function le(e,t,n){var i;se=null;for(var r=0;r<e.length;++r){var o=e[r];...
function s (line 50) | function s(e,t,n){this.level=e,this.from=t,this.to=n}
function ce (line 50) | function ce(e,t){var n=e.order;return null==n&&(n=e.order=ue(e.text,t)),n}
function fe (line 50) | function fe(e,t){return e._handlers&&e._handlers[t]||he}
function pe (line 50) | function pe(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1...
function ge (line 50) | function ge(e,t){var n=fe(e,t);if(n.length)for(var i=Array.prototype.sli...
function me (line 50) | function me(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:f...
function ve (line 50) | function ve(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(va...
function ye (line 50) | function ye(e,t){return fe(e,t).length>0}
function be (line 50) | function be(e){e.prototype.on=function(e,t){de(this,e,t)},e.prototype.of...
function xe (line 50) | function xe(e){e.preventDefault?e.preventDefault():e.returnValue=!1}
function _e (line 50) | function _e(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}
function we (line 50) | function we(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.r...
function Ce (line 50) | function Ce(e){xe(e),_e(e)}
function Se (line 50) | function Se(e){return e.target||e.srcElement}
function ke (line 50) | function ke(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?...
function Ae (line 50) | function Ae(e){if(null==Te){var t=A("span","");D(e,A("span",[t,document...
function Ie (line 50) | function Ie(e){if(null!=Me)return Me;var t=D(e,document.createTextNode("...
function ze (line 50) | function ze(e){if("string"==typeof e&&Be.hasOwnProperty(e))e=Be[e];else ...
function Fe (line 50) | function Fe(e,t){t=ze(t);var n=Re[t.name];if(!n)return Fe(e,"text/plain"...
function Ve (line 50) | function Ve(e,t){B(t,$e.hasOwnProperty(e)?$e[e]:$e[e]={})}
function je (line 50) | function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t)...
function He (line 50) | function He(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t...
function We (line 50) | function We(e,t,n){return!e.startState||e.startState(t,n)}
function Ge (line 50) | function Ge(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is ...
function Ue (line 50) | function Ue(e,t,n){var i=[],r=t.line;return e.iter(t.line,n.line+1,funct...
function Ye (line 50) | function Ye(e,t,n){var i=[];return e.iter(t,n,function(e){i.push(e.text)...
function Xe (line 50) | function Xe(e,t){var n=t-e.height;if(n)for(var i=e;i;i=i.parent)i.height...
function Ke (line 50) | function Ke(e){if(null==e.parent)return null;for(var t=e.parent,n=$(t.li...
function Ze (line 50) | function Ze(e,t){var n=e.first;e:do{for(var i=0;i<e.children.length;++i)...
function Je (line 50) | function Je(e,t){return t>=e.first&&t<e.first+e.size}
function Qe (line 50) | function Qe(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}
function et (line 50) | function et(e,t,n){if(void 0===n&&(n=null),!(this instanceof et))return ...
function tt (line 50) | function tt(e,t){return e.line-t.line||e.ch-t.ch}
function nt (line 50) | function nt(e,t){return e.sticky==t.sticky&&0==tt(e,t)}
function it (line 50) | function it(e){return et(e.line,e.ch)}
function rt (line 50) | function rt(e,t){return tt(e,t)<0?t:e}
function ot (line 50) | function ot(e,t){return tt(e,t)<0?e:t}
function at (line 50) | function at(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}
function st (line 50) | function st(e,t){if(t.line<e.first)return et(e.first,0);var n=e.first+e....
function lt (line 50) | function lt(e,t){for(var n=[],i=0;i<t.length;i++)n[i]=st(e,t[i]);return n}
function ht (line 50) | function ht(e,t,n,i){var r=[e.state.modeGen],o={};xt(e,t.text,e.doc.mode...
function dt (line 50) | function dt(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var i=ft(...
function ft (line 50) | function ft(e,t,n){var i=e.doc,r=e.display;if(!i.mode.startState)return ...
function pt (line 50) | function pt(e,t,n,i){var r=e.doc.mode,o=new qe(t,e.options.tabSize,n);fo...
function gt (line 50) | function gt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){va...
function mt (line 50) | function mt(e,t,n,i){for(var r=0;r<10;r++){i&&(i[0]=He(e,n).mode);var o=...
function yt (line 50) | function yt(e,t,n,i){var r,o,a=e.doc,s=a.mode,l=Ge(a,(t=st(a,t)).line),u...
function bt (line 50) | function bt(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)...
function xt (line 50) | function xt(e,t,n,i,r,o,a){var s=n.flattenSpans;null==s&&(s=e.options.fl...
function Ct (line 50) | function Ct(e,t,n){this.marker=e,this.from=t,this.to=n}
function St (line 50) | function St(e,t){if(e)for(var n=0;n<e.length;++n){var i=e[n];if(i.marker...
function kt (line 50) | function kt(e,t){for(var n,i=0;i<e.length;++i)e[i]!=t&&(n||(n=[])).push(...
function Tt (line 50) | function Tt(e,t){if(t.full)return null;var n=Je(e,t.from.line)&&Ge(e,t.f...
function Mt (line 50) | function Mt(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.fr...
function Dt (line 50) | function Dt(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n]...
function At (line 50) | function At(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine...
function It (line 50) | function It(e){return e.inclusiveLeft?-1:0}
function Ot (line 50) | function Ot(e){return e.inclusiveRight?1:0}
function Et (line 50) | function Et(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;va...
function Lt (line 50) | function Lt(e,t){var n,i=wt&&e.markedSpans;if(i)for(var r=void 0,o=0;o<i...
function Pt (line 50) | function Pt(e){return Lt(e,!0)}
function Nt (line 50) | function Nt(e){return Lt(e,!1)}
function Rt (line 50) | function Rt(e,t){var n,i=wt&&e.markedSpans;if(i)for(var r=0;r<i.length;+...
function Bt (line 50) | function Bt(e,t,n,i,r){var o=Ge(e,t),a=wt&&o.markedSpans;if(a)for(var s=...
function zt (line 50) | function zt(e){for(var t;t=Pt(e);)e=t.find(-1,!0).line;return e}
function Ft (line 50) | function Ft(e,t){var n=Ge(e,t),i=zt(n);return n==i?t:Ke(i)}
function $t (line 50) | function $t(e,t){if(t>e.lastLine())return t;var n,i=Ge(e,t);if(!Vt(e,i))...
function Vt (line 50) | function Vt(e,t){var n=wt&&t.markedSpans;if(n)for(var i=void 0,r=0;r<n.l...
function jt (line 50) | function jt(e,t,n){if(null==n.to){var i=n.marker.find(1,!0);return jt(e,...
function Ht (line 50) | function Ht(e){for(var t=0,n=(e=zt(e)).parent,i=0;i<n.lines.length;++i){...
function Wt (line 50) | function Wt(e){if(0==e.height)return 0;for(var t,n=e.text.length,i=e;t=P...
function qt (line 50) | function qt(e){var t=e.display,n=e.doc;t.maxLine=Ge(n,n.first),t.maxLine...
function Ut (line 50) | function Ut(e){e.parent=null,Dt(e)}
function Kt (line 50) | function Kt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass...
function Zt (line 50) | function Zt(e,t){var n=I("span",null,null,l?"padding-right: .1px":null),...
function Jt (line 50) | function Jt(e){var t=A("span","•","cm-invalidchar");return t.title="\\u"...
function Qt (line 50) | function Qt(e,t,n,i,r,o,l){if(t){var u,c=e.splitSpaces?function(e,t){if(...
function en (line 50) | function en(e,t){return function(n,i,r,o,a,s,l){r=r?r+" cm-force-border"...
function tn (line 50) | function tn(e,t,n,i){var r=!i&&n.widgetNode;r&&e.map.push(e.pos,e.pos+t,...
function nn (line 50) | function nn(e,t,n){var i=e.markedSpans,r=e.text,o=0;if(i)for(var a,s,l,u...
function rn (line 50) | function rn(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=Nt(e)...
function on (line 50) | function on(e,t,n){for(var i,r=[],o=t;o<n;o=i){var a=new rn(e.doc,Ge(e.d...
function ln (line 50) | function ln(e,t){var n=fe(e,t);if(n.length){var i,r=Array.prototype.slic...
function un (line 50) | function un(){var e=sn;sn=null;for(var t=0;t<e.length;++t)e[t]()}
function cn (line 50) | function cn(e,t,n,i){for(var r=0;r<t.changes.length;r++){var o=t.changes...
function hn (line 50) | function hn(e){return e.node==e.text&&(e.node=A("div",null,null,"positio...
function dn (line 50) | function dn(e,t){var n=e.display.externalMeasured;return n&&n.line==t.li...
function fn (line 50) | function fn(e,t){var n=t.text.className,i=dn(e,t);t.text==t.node&&(t.nod...
function pn (line 50) | function pn(e,t){!function(e,t){var n=t.bgClass?t.bgClass+" "+(t.line.bg...
function gn (line 50) | function gn(e,t,n,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter...
function mn (line 50) | function mn(e,t,n){t.alignable&&(t.alignable=null);for(var i=S("CodeMirr...
function vn (line 50) | function vn(e,t,n,i){var r=dn(e,t);return t.text=t.node=r.pre,r.bgClass&...
function yn (line 50) | function yn(e,t,n){if(bn(e,t.line,t,n,!0),t.rest)for(var i=0;i<t.rest.le...
function bn (line 50) | function bn(e,t,n,i,r){if(t.widgets)for(var o=hn(n),a=0,s=t.widgets;a<s....
function xn (line 50) | function xn(e,t,n,i){if(e.noHScroll){(n.alignable||(n.alignable=[])).pus...
function _n (line 50) | function _n(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)re...
function wn (line 50) | function wn(e,t){for(var n=Se(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n...
function Cn (line 50) | function Cn(e){return e.lineSpace.offsetTop}
function Sn (line 50) | function Sn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}
function kn (line 50) | function kn(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=D(e.mea...
function Tn (line 50) | function Tn(e){return V-e.display.nativeBarWidth}
function Mn (line 50) | function Mn(e){return e.display.scroller.clientWidth-Tn(e)-e.display.bar...
function Dn (line 50) | function Dn(e){return e.display.scroller.clientHeight-Tn(e)-e.display.ba...
function An (line 50) | function An(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure...
function In (line 50) | function In(e,t,n,i){return Ln(e,En(e,t),n,i)}
function On (line 50) | function On(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.d...
function En (line 50) | function En(e,t){var n=Ke(t),i=On(e,n);i&&!i.text?i=null:i&&i.changes&&(...
function Ln (line 50) | function Ln(e,t,n,i,r){t.before&&(n=-1);var o,l=n+(i||"");return t.cache...
function Rn (line 50) | function Rn(e,t,n){for(var i,r,o,a,s,l,u=0;u<e.length;u+=3)if(s=e[u],l=e...
function Bn (line 50) | function Bn(e,t){var n=Nn;if("left"==t)for(var i=0;i<e.length&&(n=e[i])....
function zn (line 50) | function zn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,...
function Fn (line 50) | function Fn(e){e.display.externalMeasure=null,M(e.display.lineMeasure);f...
function $n (line 50) | function $n(e){Fn(e),e.display.cachedCharWidth=e.display.cachedTextHeigh...
function Vn (line 50) | function Vn(){return c&&m?-(document.body.getBoundingClientRect().left-p...
function jn (line 50) | function jn(){return c&&m?-(document.body.getBoundingClientRect().top-pa...
function Hn (line 50) | function Hn(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e...
function Wn (line 50) | function Wn(e,t,n,i,r){if(!r){var o=Hn(t);n.top+=o,n.bottom+=o}if("line"...
function qn (line 50) | function qn(e,t,n){if("div"==n)return t;var i=t.left,r=t.top;if("page"==...
function Gn (line 50) | function Gn(e,t,n,i,r){return i||(i=Ge(e.doc,t.line)),Wn(e,i,In(e,i,t.ch...
function Un (line 50) | function Un(e,t,n,i,r,o){function a(t,a){var s=Ln(e,r,t,a?"right":"left"...
function Yn (line 50) | function Yn(e,t){var n=0;t=st(e.doc,t),e.options.lineWrapping||(n=ni(e.d...
function Xn (line 50) | function Xn(e,t,n,i,r){var o=et(e,t,n);return o.xRel=r,i&&(o.outside=i),o}
function Kn (line 50) | function Kn(e,t,n){var i=e.doc;if((n+=e.display.viewOffset)<0)return Xn(...
function Zn (line 50) | function Zn(e,t,n,i){i-=Hn(t);var r=t.text.length,o=ae(function(t){retur...
function Jn (line 50) | function Jn(e,t,n,i){return n||(n=En(e,t)),Zn(e,t,n,Wn(e,t,Ln(e,n,i),"li...
function Qn (line 50) | function Qn(e,t,n,i){return!(e.bottom<=n)&&(e.top>n||(i?e.left:e.right)>t)}
function ei (line 50) | function ei(e,t,n,i,r){r-=Ht(t);var o=En(e,t),a=Hn(t),s=0,l=t.text.lengt...
function ti (line 50) | function ti(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(...
function ni (line 50) | function ni(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t...
function ii (line 50) | function ii(e){for(var t=e.display,n={},i={},r=t.gutters.clientLeft,o=t....
function ri (line 50) | function ri(e){return e.scroller.getBoundingClientRect().left-e.sizer.ge...
function oi (line 50) | function oi(e){var t=ti(e.display),n=e.options.lineWrapping,i=n&&Math.ma...
function ai (line 50) | function ai(e){var t=e.doc,n=oi(e);t.iter(function(e){var t=n(e);t!=e.he...
function si (line 50) | function si(e,t,n,i){var r=e.display;if(!n&&"true"==Se(t).getAttribute("...
function li (line 50) | function li(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.vie...
function ui (line 50) | function ui(e,t,n,i){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e....
function ci (line 50) | function ci(e,t,n){e.curOp.viewChanged=!0;var i=e.display,r=e.display.ex...
function hi (line 50) | function hi(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display...
function di (line 50) | function di(e,t,n,i){var r,o=li(e,t),a=e.display.view;if(!wt||n==e.doc.f...
function fi (line 50) | function fi(e){for(var t=e.display.view,n=0,i=0;i<t.length;i++){var r=t[...
function pi (line 50) | function pi(e){e.display.input.showSelection(e.display.input.prepareSele...
function gi (line 50) | function gi(e,t){void 0===t&&(t=!0);for(var n=e.doc,i={},r=i.cursors=doc...
function mi (line 50) | function mi(e,t,n){var i=Un(e,t,"div",null,null,!e.options.singleCursorH...
function vi (line 50) | function vi(e,t){return e.top-t.top||e.left-t.left}
function yi (line 50) | function yi(e,t,n){var i=e.display,r=e.doc,o=document.createDocumentFrag...
function bi (line 50) | function bi(e){if(e.state.focused){var t=e.display;clearInterval(t.blink...
function xi (line 50) | function xi(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||w...
function _i (line 50) | function _i(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.stat...
function wi (line 50) | function wi(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.st...
function Ci (line 50) | function Ci(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ge(e,"blu...
function Si (line 50) | function Si(e){for(var t=e.display,n=t.lineDiv.offsetTop,i=0;i<t.view.le...
function ki (line 50) | function ki(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e....
function Ti (line 50) | function Ti(e,t,n){var i=n&&null!=n.top?Math.max(0,n.top):e.scroller.scr...
function Mi (line 50) | function Mi(e,t){var n=e.display,i=ti(e.display);t.top<0&&(t.top=0);var ...
function Di (line 50) | function Di(e,t){null!=t&&(Oi(e),e.curOp.scrollTop=(null==e.curOp.scroll...
function Ai (line 50) | function Ai(e){Oi(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:...
function Ii (line 50) | function Ii(e,t,n){null==t&&null==n||Oi(e),null!=t&&(e.curOp.scrollLeft=...
function Oi (line 50) | function Oi(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Ei...
function Ei (line 50) | function Ei(e,t,n,i){var r=Mi(e,{left:Math.min(t.left,n.left),top:Math.m...
function Li (line 50) | function Li(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||or(e,{top:t}),Pi(e,t...
function Pi (line 50) | function Pi(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight...
function Ni (line 50) | function Ni(e,t,n,i){t=Math.max(0,Math.min(t,e.display.scroller.scrollWi...
function Ri (line 50) | function Ri(e){var t=e.display,n=t.gutters.offsetWidth,i=Math.round(e.do...
function Fi (line 50) | function Fi(e,t){t||(t=Ri(e));var n=e.display.barWidth,i=e.display.barHe...
function $i (line 50) | function $i(e,t){var n=e.display,i=n.scrollbars.update(t);n.sizer.style....
function ji (line 50) | function ji(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.dis...
function Wi (line 50) | function Wi(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.heig...
function qi (line 50) | function qi(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try...
function Gi (line 50) | function Gi(e){var t=e.cm,n=t.display;!function(e){var t=e.display;!t.sc...
function Ui (line 50) | function Ui(e){var t=e.cm,n=t.display;e.updatedDisplay&&Si(t),e.barMeasu...
function Yi (line 50) | function Yi(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style....
function Xi (line 50) | function Xi(e){var t=e.cm,n=t.display,i=t.doc;(e.updatedDisplay&&rr(t,e....
function Ki (line 50) | function Ki(e,t){if(e.curOp)return t();Wi(e);try{return t()}finally{qi(e)}}
function Zi (line 50) | function Zi(e,t){return function(){if(e.curOp)return t.apply(e,arguments...
function Ji (line 50) | function Ji(e){return function(){if(this.curOp)return e.apply(this,argum...
function Qi (line 50) | function Qi(e){return function(){var t=this.cm;if(!t||t.curOp)return e.a...
function er (line 50) | function er(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highl...
function tr (line 50) | function tr(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){...
function ir (line 50) | function ir(e,t){var n=e.display,i=e.doc;if(t.editorIsHidden)return hi(e...
function rr (line 50) | function rr(e,t){for(var n=t.viewport,i=!0;;i=!1){if(i&&e.options.lineWr...
function or (line 50) | function or(e,t){var n=new nr(e,t);if(ir(e,n)){Si(e),rr(e,n);var i=Ri(e)...
function ar (line 50) | function ar(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}
function sr (line 50) | function sr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.disp...
function lr (line 50) | function lr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.fir...
function ur (line 50) | function ur(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=Qe(e.opt...
function cr (line 50) | function cr(e,t){for(var n=[],i=!1,r=0;r<e.length;r++){var o=e[r],a=null...
function hr (line 50) | function hr(e){var t=e.gutters,n=e.gutterSpecs;M(t),e.lineGutter=null;fo...
function dr (line 50) | function dr(e){hr(e.display),ui(e),lr(e)}
function gr (line 50) | function gr(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.det...
function mr (line 50) | function mr(e){var t=gr(e);return t.x*=pr,t.y*=pr,t}
function vr (line 50) | function vr(e,t){var i=gr(t),r=i.x,o=i.y,a=e.display,s=a.scroller,u=s.sc...
function xr (line 50) | function xr(e,t,n){var i=e&&e.options.selectionsMayTouch,r=t[n];t.sort(f...
function _r (line 50) | function _r(e,t){return new yr([new br(e,t||e)],0)}
function wr (line 50) | function wr(e){return e.text?et(e.from.line+e.text.length-1,X(e.text).le...
function Cr (line 50) | function Cr(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return wr(t...
function Sr (line 50) | function Sr(e,t){for(var n=[],i=0;i<e.sel.ranges.length;i++){var r=e.sel...
function kr (line 50) | function kr(e,t,n){return e.line==t.line?et(n.line,e.ch-t.ch+n.ch):et(n....
function Tr (line 50) | function Tr(e){e.doc.mode=Fe(e.options,e.doc.modeOption),Mr(e)}
function Mr (line 50) | function Mr(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),...
function Dr (line 50) | function Dr(e,t){return 0==t.from.ch&&0==t.to.ch&&""==X(t.text)&&(!e.cm|...
function Ar (line 50) | function Ar(e,t,n,i){function r(e){return n?n[e]:null}function o(e,n,r){...
function Ir (line 50) | function Ir(e,t,n){!function e(i,r,o){if(i.linked)for(var a=0;a<i.linked...
function Or (line 50) | function Or(e,t){if(t.cm)throw new Error("This document is already in us...
function Er (line 50) | function Er(e){("rtl"==e.doc.direction?L:T)(e.display.lineDiv,"CodeMirro...
function Lr (line 50) | function Lr(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastM...
function Pr (line 50) | function Pr(e,t){var n={from:it(t.from),to:wr(t),text:Ue(e,t.from,t.to)}...
function Nr (line 50) | function Nr(e){for(;e.length;){if(!X(e).ranges)break;e.pop()}}
function Rr (line 50) | function Rr(e,t,n,i){var r=e.history;r.undone.length=0;var o,a,s=+new Da...
function Br (line 50) | function Br(e,t,n,i){var r=e.history,o=i&&i.origin;n==r.lastSelOp||o&&r....
function zr (line 50) | function zr(e,t){var n=X(t);n&&n.ranges&&n.equals(e)||t.push(e)}
function Fr (line 50) | function Fr(e,t,n,i){var r=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,...
function $r (line 50) | function $r(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marke...
function Vr (line 50) | function Vr(e,t){var n=function(e,t){var n=t["spans_"+e.id];if(!n)return...
function jr (line 50) | function jr(e,t,n){for(var i=[],r=0;r<e.length;++r){var o=e[r];if(o.rang...
function Hr (line 50) | function Hr(e,t,n,i){if(i){var r=e.anchor;if(n){var o=tt(t,r)<0;o!=tt(n,...
function Wr (line 50) | function Wr(e,t,n,i,r){null==r&&(r=e.cm&&(e.cm.display.shift||e.extend))...
function qr (line 50) | function qr(e,t,n){for(var i=[],r=e.cm&&(e.cm.display.shift||e.extend),o...
function Gr (line 50) | function Gr(e,t,n,i){var r=e.sel.ranges.slice(0);r[t]=n,Xr(e,xr(e.cm,r,e...
function Ur (line 50) | function Ur(e,t,n,i){Xr(e,_r(t,n),i)}
function Yr (line 50) | function Yr(e,t,n){var i=e.history.done,r=X(i);r&&r.ranges?(i[i.length-1...
function Xr (line 50) | function Xr(e,t,n){Kr(e,t,n),Br(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}
function Kr (line 50) | function Kr(e,t,n){(ye(e,"beforeSelectionChange")||e.cm&&ye(e.cm,"before...
function Zr (line 50) | function Zr(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput...
function Jr (line 50) | function Jr(e){Zr(e,Qr(e,e.sel,null,!1))}
function Qr (line 50) | function Qr(e,t,n,i){for(var r,o=0;o<t.ranges.length;o++){var a=t.ranges...
function eo (line 50) | function eo(e,t,n,i,r){var o=Ge(e,t.line);if(o.markedSpans)for(var a=0;a...
function to (line 50) | function to(e,t,n,i,r){var o=i||1,a=eo(e,t,n,o,r)||!r&&eo(e,t,n,o,!0)||e...
function no (line 50) | function no(e,t,n,i){return n<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1...
function io (line 50) | function io(e){e.setSelection(et(e.firstLine(),0),et(e.lastLine()),H)}
function ro (line 50) | function ro(e,t,n){var i={canceled:!1,from:t.from,to:t.to,text:t.text,or...
function oo (line 50) | function oo(e,t,n){if(e.cm){if(!e.cm.curOp)return Zi(e.cm,oo)(e,t,n);if(...
function ao (line 50) | function ao(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to))...
function so (line 50) | function so(e,t,n){var i=e.cm&&e.cm.state.suppressEdits;if(!i||n){for(va...
function lo (line 50) | function lo(e,t){if(0!=t&&(e.first+=t,e.sel=new yr(K(e.sel.ranges,functi...
function uo (line 50) | function uo(e,t,n,i){if(e.cm&&!e.cm.curOp)return Zi(e.cm,uo)(e,t,n,i);if...
function co (line 50) | function co(e,t,n,i,r){var o;i||(i=n),tt(i,n)<0&&(n=(o=[i,n])[0],i=o[1])...
function ho (line 50) | function ho(e,t,n,i){n<e.line?e.line+=i:t<e.line&&(e.line=t,e.ch=0)}
function fo (line 50) | function fo(e,t,n,i){for(var r=0;r<e.length;++r){var o=e[r],a=!0;if(o.ra...
function po (line 50) | function po(e,t){var n=t.from.line,i=t.to.line,r=t.text.length-(i-n)-1;f...
function go (line 50) | function go(e,t,n,i){var r=t,o=t;return"number"==typeof t?o=Ge(e,at(e,t)...
function mo (line 50) | function mo(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;...
function vo (line 50) | function vo(e){this.children=e;for(var t=0,n=0,i=0;i<e.length;++i){var r...
function bo (line 50) | function bo(e,t,n){Ht(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&...
function wo (line 50) | function wo(e,t,n,i,r){if(i&&i.shared)return function(e,t,n,i,r){(i=B(i)...
function So (line 50) | function So(e){return e.findMarks(et(e.first,0),e.clipPos(et(e.lastLine(...
function ko (line 50) | function ko(e){for(var t=function(t){var n=e[t],i=[n.primary.doc];Ir(n.p...
function Ao (line 50) | function Ao(e){var t=this;if(Io(t),!me(t,e)&&!wn(t.display,e)){xe(e),a&&...
function Io (line 50) | function Io(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e....
function Oo (line 50) | function Oo(e){if(document.getElementsByClassName){for(var t=document.ge...
function Lo (line 50) | function Lo(){var e;Eo||(de(window,"resize",function(){null==e&&(e=setTi...
function Po (line 50) | function Po(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.ca...
function $o (line 50) | function $o(e){var t,n,i,r,o=e.split(/-(?!$)/);e=o[o.length-1];for(var a...
function Vo (line 50) | function Vo(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var i=e[n...
function jo (line 50) | function jo(e,t,n,i){var r=(t=Go(t)).call?t.call(e,i):t[e];if(!1===r)ret...
function Ho (line 50) | function Ho(e){var t="string"==typeof e?e:No[e.keyCode];return"Ctrl"==t|...
function Wo (line 50) | function Wo(e,t,n){var i=e;return t.altKey&&"Alt"!=i&&(e="Alt-"+e),(w?t....
function qo (line 50) | function qo(e,t){if(h&&34==e.keyCode&&e.char)return!1;var n=No[e.keyCode...
function Go (line 50) | function Go(e){return"string"==typeof e?Fo[e]:e}
function Uo (line 50) | function Uo(e,t){for(var n=e.doc.sel.ranges,i=[],r=0;r<n.length;r++){for...
function Yo (line 50) | function Yo(e,t,n){var i=oe(e.text,t+n,n);return i<0||i>e.text.length?nu...
function Xo (line 50) | function Xo(e,t,n){var i=Yo(e,t.ch,n);return null==i?null:new et(t.line,...
function Ko (line 50) | function Ko(e,t,n,i,r){if(e){"rtl"==t.doc.direction&&(r=-r);var o=ce(n,t...
function Jo (line 50) | function Jo(e,t){var n=Ge(e.doc,t),i=zt(n);return i!=n&&(t=Ke(i)),Ko(!0,...
function Qo (line 50) | function Qo(e,t){var n=Jo(e,t.line),i=Ge(e.doc,n.line),r=ce(i,e.doc.dire...
function ea (line 50) | function ea(e,t,n){if("string"==typeof t&&!(t=Zo[t]))return!1;e.display....
function na (line 50) | function na(e,t,n,i){var r=e.state.keySeq;if(r){if(Ho(t))return"handled"...
function ia (line 50) | function ia(e,t,n,i){var r=function(e,t,n){for(var i=0;i<e.state.keyMaps...
function ra (line 50) | function ra(e,t){var n=qo(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?...
function aa (line 50) | function aa(e){var t=this;if(!(e.target&&e.target!=t.display.input.getFi...
function sa (line 50) | function sa(e){16==e.keyCode&&(this.doc.sel.shift=!1),me(this,e)}
function la (line 50) | function la(e){var t=this;if(!(e.target&&e.target!=t.display.input.getFi...
function da (line 50) | function da(e){var t=this,n=t.display;if(!(me(t,e)||n.activeTouch&&n.inp...
function fa (line 50) | function fa(e,t,n){if("char"==n)return new br(t,t);if("word"==n)return e...
function pa (line 50) | function pa(e,t,n,i){var r,o;if(t.touches)r=t.touches[0].clientX,o=t.tou...
function ga (line 50) | function ga(e,t){return pa(e,t,"gutterClick",!0)}
function ma (line 50) | function ma(e,t){wn(e.display,t)||function(e,t){if(!ye(e,"gutterContextM...
function va (line 50) | function va(e){e.display.wrapper.className=e.display.wrapper.className.r...
function _a (line 50) | function _a(e,t,n){if(!t!=!(n&&n!=ya)){var i=e.display.dragFunctions,r=t...
function wa (line 50) | function wa(e){e.options.lineWrapping?(L(e.display.wrapper,"CodeMirror-w...
function Ca (line 50) | function Ca(e,t){var i=this;if(!(this instanceof Ca))return new Ca(e,t);...
function ka (line 50) | function ka(e,t,n,i){var r,o=e.doc;null==n&&(n="add"),"smart"==n&&(o.mod...
function Ma (line 50) | function Ma(e){Ta=e}
function Da (line 50) | function Da(e,t,n,i,r){var o=e.doc;e.display.shift=!1,i||(i=o.sel);var a...
function Aa (line 50) | function Aa(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");...
function Ia (line 50) | function Ia(e,t){if(e.options.electricChars&&e.options.smartIndent)for(v...
function Oa (line 50) | function Oa(e){for(var t=[],n=[],i=0;i<e.doc.sel.ranges.length;i++){var ...
function Ea (line 50) | function Ea(e,t,n,i){e.setAttribute("autocorrect",n?"":"off"),e.setAttri...
function La (line 50) | function La(){var e=A("textarea",null,null,"position: absolute; bottom: ...
function Pa (line 50) | function Pa(e,t,n,i,r){var o=t,a=n,s=Ge(e,t.line),l=r&&"rtl"==e.directio...
function Na (line 50) | function Na(e,t,n,i){var r,o,a=e.doc,s=t.left;if("page"==i){var l=Math.m...
function Ba (line 50) | function Ba(e,t){var n=On(e,t.line);if(!n||n.hidden)return null;var i=Ge...
function za (line 50) | function za(e,t){return t&&(e.bad=!0),e}
function Fa (line 50) | function Fa(e,t,n){var i;if(t==e.display.lineDiv){if(!(i=e.display.lineD...
function $a (line 50) | function $a(e,t,n){var i=e.text.firstChild,r=!1;if(!t||!O(i,t))return za...
function o (line 50) | function o(e){for(var t=e.target;t;t=t.parentNode){if(t==r)return!0;if(/...
function a (line 50) | function a(e){if(o(e)&&!me(i,e)){if(i.somethingSelected())Ma({lineWise:!...
function u (line 50) | function u(){a&&(o+=s,l&&(o+=s),a=l=!1)}
function c (line 50) | function c(e){e&&(u(),o+=e)}
function h (line 50) | function h(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)ret...
function o (line 50) | function o(e){if(!me(i,e)){if(i.somethingSelected())Ma({lineWise:!1,text...
function m (line 50) | function m(){if(null!=r.selectionStart){var e=n.somethingSelected(),o="...
function v (line 50) | function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrap...
function n (line 50) | function n(n,i,r,o){e.defaults[n]=i,r&&(t[n]=o?function(e,t,n){n!=ya&&r(...
function i (line 50) | function i(){e.value=s.getValue()}
function u (line 50) | function u(e){r(c,function(t){t[0]in e&&!(t[1]in e)&&(e[t[1]]=e[t[0]])})}
function r (line 50) | function r(e,t){var n=this.getAxis(),i=t instanceof Array?t[0]:t,r=(e in...
function d (line 50) | function d(e,t,n,i){n<0&&(e+=n,n=-n),i<0&&(t+=i,i=-i),this.x=e,this.y=t,...
function s (line 50) | function s(e,t){return e.zlevel===t.zlevel?e.z===t.z?e.z2-t.z2:e.z-t.z:e...
function o (line 50) | function o(e){var t=e[r];return t||(t=e[r]=[{}]),t}
function s (line 50) | function s(e){for(var t in e=e||{},o.call(this,e),e)e.hasOwnProperty(t)&...
function g (line 50) | function g(e){return e>-l&&e<l}
function m (line 50) | function m(e){return e>l||e<-l}
function v (line 50) | function v(e,t,n,i,r){var o=1-r;return o*o*(o*e+3*r*t)+r*r*(r*i+3*o*n)}
function y (line 50) | function y(e,t,n,i){var r=1-i;return r*(r*e+2*i*t)+i*i*n}
function g (line 50) | function g(e,t,n,i){for(var r=t;r<n;r++)e[r]=i}
function h (line 50) | function h(e){return!isNaN(e)&&!isFinite(e)}
function d (line 50) | function d(e,t,n,i){var r=1-e,o=i.dimensions[e];return h(t[r])&&h(n[r])&...
function f (line 50) | function f(e,t){if("cartesian2d"===e.type){var n=t[0].coord,i=t[1].coord...
function p (line 50) | function p(e,t,n,i,r){var a,s=i.coordinateSystem,l=e.getItemModel(t),u=o...
function w (line 50) | function w(t,n,i){var r=t.getItemModel(n);p(t,n,i,e,o),t.setItemVisual(n...
function s (line 50) | function s(e){this.model=e}
function d (line 50) | function d(e){return function(t,n){var i=f(t),o=[];return r(i,function(i...
function f (line 50) | function f(e){return a.retrieveMap(e)||[]}
function o (line 50) | function o(e,t,n){for(var i=[],r=t[0],o=t[1],a=0;a<e.length;a+=2){var s=...
function s (line 50) | function s(e,t,n){if(this.name=e,this.geometries=t,n)n=[n[0],n[1]];else{...
function a (line 50) | function a(e){var t={main:"",sub:""};return e&&(e=e.split(r),t.main=e[0]...
function l (line 50) | function l(e,t){var n=i.slice(arguments,2);return this.superClass.protot...
function u (line 50) | function u(e,t,n){return this.superClass.prototype[t].apply(e,n)}
function s (line 50) | function s(e,t,n,a,s){if(t.getBoundingClientRect&&i.domSupported&&!l(t))...
function l (line 50) | function l(e){return"CANVAS"===e.nodeName.toUpperCase()}
function i (line 50) | function i(e){return Math.sqrt(o(e))}
function o (line 50) | function o(e){return e[0]*e[0]+e[1]*e[1]}
function s (line 50) | function s(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[...
function u (line 50) | function u(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])}
function s (line 50) | function s(e,t){return e[t]}
function l (line 50) | function l(e,t,n){e[t]=n}
function u (line 50) | function u(e,t,n){return(t-e)*n+e}
function c (line 50) | function c(e,t,n){return n>.5?t:e}
function h (line 50) | function h(e,t,n,i,r){var o=e.length;if(1===r)for(var a=0;a<o;a++)i[a]=u...
function d (line 50) | function d(e,t,n){var i=e.length,r=t.length;if(i!==r)if(i>r)e.length=r;e...
function f (line 50) | function f(e,t,n){if(e===t)return!0;var i=e.length;if(i!==t.length)retur...
function p (line 50) | function p(e,t,n,i,r,o,a,s,l){var u=e.length;if(1===l)for(var c=0;c<u;c+...
function g (line 50) | function g(e,t,n,i,r,o,a){var s=.5*(n-e),l=.5*(i-t);return(2*(t-n)+s+l)*...
function m (line 50) | function m(e){if(o(e)){var t=e.length;if(o(e[0])){for(var n=[],i=0;i<t;i...
function v (line 50) | function v(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Ma...
function y (line 50) | function y(e,t,n,a,s,l){var m=e._getter,y=e._setter,b="spline"===t,x=a.l...
function t (line 50) | function t(e){return e.state.search||(e.state.search=new function(){this...
function n (line 50) | function n(e){return"string"==typeof e&&e==e.toLowerCase()}
function i (line 50) | function i(e,t,i){return e.getSearchCursor(t,i,{caseFold:n(t),multiline:...
function r (line 50) | function r(e,t,n,i,r){e.openDialog?e.openDialog(t,r,{value:i,selectValue...
function o (line 50) | function o(e){return e.replace(/\\([nrt\\])/g,function(e,t){return"n"==t...
function a (line 50) | function a(e){var t=e.match(/^\/(.*)\/([a-z]*)$/);if(t)try{e=new RegExp(...
function s (line 50) | function s(e,t,i){t.queryText=i,t.query=a(i),e.removeOverlay(t.overlay,n...
function l (line 50) | function l(n,i,o,a){var l=t(n);if(l.query)return u(n,i);var d=n.getSelec...
function u (line 50) | function u(n,r,o){n.operation(function(){var a=t(n),s=i(n,a.query,r?a.po...
function c (line 50) | function c(e){e.operation(function(){var n=t(e);n.lastQuery=n.query,n.qu...
function h (line 50) | function h(e){return'<span class="CodeMirror-search-label">'+e.phrase("S...
function d (line 50) | function d(e,t,n){e.operation(function(){for(var r=i(e,t);r.findNext();)...
function f (line 50) | function f(e,n){if(!e.getOption("readOnly")){var s=e.getSelection()||t(e...
function m (line 50) | function m(e,t){var n=e.getItemLayout(t);return n&&!isNaN(n.x)&&!isNaN(n...
function v (line 50) | function v(e,t,n){return n.itemModel=t,n.itemStyle=t.getModel("itemStyle...
function y (line 50) | function y(e,t,n,a,s,l){var u=!n,c=e.tree.getNodeByDataIndex(t),h=(l=v(c...
function b (line 50) | function b(e,t,n,i,o,a){for(var s,l=e.tree.getNodeByDataIndex(t),u=e.tre...
function x (line 50) | function x(e,t,n){var i,r,o,s,l,u,c,h,d=e.orient;if("radial"===e.layout)...
function c (line 50) | function c(e,t){return e.getVisual("opacity")||e.getModel().get(t)}
function h (line 50) | function h(e,t,n){var i=e.getGraphicEl(),r=c(e,t);null!=n&&(null==r&&(r=...
function d (line 50) | function d(e,t){var n=c(e,t),i=e.getGraphicEl();i.traverse(function(e){"...
function l (line 50) | function l(e,t){var n={};return n[t.dim+"AxisIndex"]=t.index,e.getCartes...
function c (line 50) | function c(e){return"x"===e.dim?0:1}
function o (line 50) | function o(e,t,n){var r=e.getArea(),o=e.getBaseAxis().isHorizontal(),a=r...
function a (line 50) | function a(e,t,n){var o=e.getArea(),a=new i.Sector({shape:{cx:r(e.cx,1),...
function r (line 50) | function r(e){return(e=Math.round(e))<0?0:e>255?255:e}
function o (line 50) | function o(e){return e<0?0:e>1?1:e}
function a (line 50) | function a(e){return e.length&&"%"===e.charAt(e.length-1)?r(parseFloat(e...
function s (line 50) | function s(e){return e.length&&"%"===e.charAt(e.length-1)?o(parseFloat(e...
function l (line 50) | function l(e,t,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?e+(t-e)*n*6:2*n<1?t:...
function u (line 50) | function u(e,t,n){return e+(t-e)*n}
function c (line 50) | function c(e,t,n,i,r){return e[0]=t,e[1]=n,e[2]=i,e[3]=r,e}
function h (line 50) | function h(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}
function p (line 50) | function p(e,t){f&&h(f,t),f=d.put(e,f||t.slice())}
function g (line 50) | function g(e,t){if(e){t=t||[];var n=d.get(e);if(n)return h(t,n);var r,o=...
function m (line 50) | function m(e,t){var n=(parseFloat(e[0])%360+360)%360/360,i=s(e[1]),o=s(e...
function v (line 50) | function v(e,t,n){if(t&&t.length&&e>=0&&e<=1){n=n||[];var i=e*(t.length-...
function b (line 50) | function b(e,t,n){if(t&&t.length&&e>=0&&e<=1){var i=e*(t.length-1),a=Mat...
function _ (line 50) | function _(e,t){if(e&&e.length){var n=e[0]+","+e[1]+","+e[2];return"rgba...
function o (line 50) | function o(e,t){return e&&e.hasOwnProperty&&e.hasOwnProperty(t)}
function p (line 50) | function p(e,t,n){(this._brushController=new o(n.getZr())).on("brush",r....
function v (line 50) | function v(e){var t={};return r.each(["xAxisIndex","yAxisIndex"],functio...
function r (line 50) | function r(e,t,r){var o=t.getAxis(e),a=o.model,s=function(e,t,n){var i;r...
function o (line 50) | function o(n,i){if(i){var o=n+"Index",a=i[o];null==a||"all"===a||r.isArr...
function s (line 50) | function s(e){return e.getId()}
function c (line 50) | function c(i,a){var s=null==i?null:n[i],c=null==a?null:r[a];!function(n,...
function s (line 50) | function s(e,t,n){e.handler("leave",null,n)}
function l (line 50) | function l(e,t,n,i){t.handler(e,n,i)}
function n (line 50) | function n(n,i){e.on(n,function(n){var r=function(e){var t={showTip:[],h...
function t (line 50) | function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{...
function i (line 50) | function i(e){return e&&e.__esModule?e:{default:e}}
function s (line 50) | function s(e){var t=e.getZr();return t[a]||(t[a]={})}
function l (line 50) | function l(e){i.each(e,function(t,n){t.count||(t.controller.dispose(),de...
function u (line 50) | function u(e,t){e.dispatchAction({type:"dataZoom",batch:t})}
function g (line 50) | function g(e){return{renderMode:r,content:s(l(e)),style:f}}
function g (line 50) | function g(e,n){var i=m.getDimensionInfo(n);if(i&&!1!==i.otherDims.toolt...
function S (line 50) | function S(e){var t=e.name;c.isNameSpecified(e)||(e.name=function(e){var...
function k (line 50) | function k(e){return e.model.getRawData().count()}
function T (line 50) | function T(e){var t=e.model;return t.setData(t.getRawData().cloneShallow...
function M (line 50) | function M(e,t){t.outputData&&e.end>t.outputData.count()&&t.model.getRaw...
function D (line 50) | function D(e,t){i.each(e.CHANGABLE_METHODS,function(n){e.wrapMethod(n,i....
function A (line 50) | function A(e){var t=I(e);t&&t.setOutputEnd(this.count())}
function I (line 50) | function I(e){var t=(e.ecModel||{}).scheduler,n=t&&t.getPipeline(e.uid);...
function n (line 50) | function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{...
function i (line 50) | function i(e,t,n,i,r,o,a,s){var l,u="function"==typeof e?e.options:e;if(...
function r (line 50) | function r(e){var t=e.children;return t.length&&e.isExpand?t[t.length-1]...
function o (line 50) | function o(e){var t=e.children;return t.length&&e.isExpand?t[0]:e.hierNo...
function a (line 50) | function a(e,t,n){return e.hierNode.ancestor.parentNode===t.parentNode?e...
function s (line 50) | function s(e,t,n){var i=n/(t.hierNode.i-e.hierNode.i);t.hierNode.change-...
function l (line 50) | function l(e,t){return e.parentNode===t.parentNode?1:2}
function c (line 50) | function c(e){return!isNaN(e)&&!isFinite(e)}
function h (line 50) | function h(e,t,n,i){var r=1-e;return c(t[r])&&c(n[r])}
function d (line 50) | function d(e,t){var n=t.coord[0],i=t.coord[1];return!("cartesian2d"!==e....
function f (line 50) | function f(e,t,n,i,r){var o,s=i.coordinateSystem,l=e.getItemModel(t),u=a...
function l (line 50) | function l(e,t){var n=e._model;return n.get("axisExpandable")&&n.get("ax...
function r (line 50) | function r(e){var t=e.itemStyle||(e.itemStyle={}),n=t.emphasis||(t.empha...
function o (line 50) | function o(e,t){return e.hasOwnProperty(t)}
function c (line 50) | function c(e,t){var n=e.getAxisModel(),i=e._percentWindow,o=e._valueWind...
function f (line 50) | function f(e,t,n,o,s){var l=s?"Span":"ValueSpan";a(0,e,n,"all",d["min"+l...
function n (line 50) | function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{...
function i (line 50) | function i(e,t,n,i,r,o,a,s){var l,u="function"==typeof e?e.options:e;if(...
function l (line 50) | function l(e,t){var n=t.rippleEffectColor||t.color;e.eachChild(function(...
function u (line 50) | function u(e,t){o.call(this);var n=new s(e,t),i=new o;this.add(n),this.a...
function d (line 50) | function d(e,t,n){for(var i,r=e[0],o=e[1],d=e[2],f=1/0,p=n*n,g=.1,m=.1;m...
function c (line 50) | function c(e){i.call(this,e),this.path=null}
function u (line 50) | function u(){s.call(this)}
function c (line 50) | function c(e){this.name=e,this.zoomLimit,s.call(this),this._roamTransfor...
function h (line 50) | function h(e,t,n,i){var r=n.seriesModel,o=r?r.coordinateSystem:null;retu...
function h (line 50) | function h(e,t){var n=e.visual,r=[];i.isObject(n)?a(n,function(e){r.push...
function d (line 50) | function d(e){return{applyVisual:function(t,n,i){t=this.mapValueToVisual...
function f (line 50) | function f(e){var t=this.option.visual;return t[Math.round(o(e,[0,1],[0,...
function p (line 50) | function p(e){return function(t,n,i){i(e,this.mapValueToVisual(t))}}
function g (line 50) | function g(e){var t=this.option.visual;return t[this.option.loop&&e!==l?...
function m (line 50) | function m(){return this.option.visual[0]}
function v (line 50) | function v(e){return{linear:function(t){return o(t,e,this.option.visual,...
function y (line 50) | function y(e){var t=this.option,n=t.pieceList;if(t.hasSpecialVisual){var...
function b (line 50) | function b(e,t){return e.visual=t,"color"===e.type&&(e.parsedVisual=i.ma...
function _ (line 50) | function _(e,t,n){return e?t<=n:t<n}
function h (line 50) | function h(t,n){var o=Math.abs(t-e);o<r&&(r=o,i=n)}
function u (line 50) | function u(e){return null==e?"":(e+"").replace(s,function(e,t){return l[...
function d (line 50) | function d(e,t){return"0000".substr(0,t-(e+="").length)+e}
function n (line 50) | function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{...
function r (line 50) | function r(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==i&...
function i (line 50) | function i(e){if(e)return function(e){for(var t in i.prototype)e[t]=i.pr...
function n (line 50) | function n(){this.off(e,n),t.apply(this,arguments)}
function m (line 50) | function m(e,t,n){for(var i=new Array(e.length),r=s(e.length,n),o=functi...
function l (line 50) | function l(){}
function c (line 50) | function c(e){var n=""+e.type;if(t.BINARY_EVENT!==e.type&&t.BINARY_ACK!=...
function h (line 50) | function h(){this.reconstructor=null}
function d (line 50) | function d(e){this.reconPack=e,this.buffers=[]}
function f (line 50) | function f(e){return{type:t.ERROR,data:"parser error: "+e}}
function a (line 57) | function a(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}
function s (line 57) | function s(e,t){if(a()<t)throw new RangeError("Invalid typed array lengt...
function l (line 57) | function l(e,t,n){if(!(l.TYPED_ARRAY_SUPPORT||this instanceof l))return ...
function u (line 57) | function u(e,t,n,i){if("number"==typeof t)throw new TypeError('"value" a...
function c (line 57) | function c(e){if("number"!=typeof e)throw new TypeError('"size" argument...
function h (line 57) | function h(e,t){if(c(t),e=s(e,t<0?0:0|f(t)),!l.TYPED_ARRAY_SUPPORT)for(v...
function d (line 57) | function d(e,t){var n=t.length<0?0:0|f(t.length);e=s(e,n);for(var i=0;i<...
function f (line 57) | function f(e){if(e>=a())throw new RangeError("Attempt to allocate Buffer...
function p (line 57) | function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ...
function g (line 57) | function g(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}
function m (line 57) | function m(e,t,n,i,r){if(0===e.length)return-1;if("string"==typeof n?(i=...
function v (line 57) | function v(e,t,n,i,r){var o,a=1,s=e.length,l=t.length;if(void 0!==i&&("u...
function y (line 57) | function y(e,t,n,i){n=Number(n)||0;var r=e.length-n;i?(i=Number(i))>r&&(...
function b (line 57) | function b(e,t,n,i){return j($(t,e.length-n),e,n,i)}
function x (line 57) | function x(e,t,n,i){return j(function(e){for(var t=[],n=0;n<e.length;++n...
function _ (line 57) | function _(e,t,n,i){return x(e,t,n,i)}
function w (line 57) | function w(e,t,n,i){return j(V(t),e,n,i)}
function C (line 57) | function C(e,t,n,i){return j(function(e,t){for(var n,i,r,o=[],a=0;a<e.le...
function S (line 57) | function S(e,t,n){return 0===t&&n===e.length?i.fromByteArray(e):i.fromBy...
function k (line 57) | function k(e,t,n){n=Math.min(e.length,n);for(var i=[],r=t;r<n;){var o,a,...
function M (line 57) | function M(e,t,n){var i="";n=Math.min(e.length,n);for(var r=t;r<n;++r)i+...
function D (line 57) | function D(e,t,n){var i="";n=Math.min(e.length,n);for(var r=t;r<n;++r)i+...
function A (line 57) | function A(e,t,n){var i=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>i)&&(n=i);...
function I (line 57) | function I(e,t,n){for(var i=e.slice(t,n),r="",o=0;o<i.length;o+=2)r+=Str...
function O (line 57) | function O(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uin...
function E (line 57) | function E(e,t,n,i,r,o){if(!l.isBuffer(e))throw new TypeError('"buffer" ...
f
Condensed preview — 188 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,083K chars).
[
{
"path": ".gitignore",
"chars": 1798,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 977,
"preview": "# Wt4ElegantRL\nWt4ElegantRL = [WonderTrader](https://github.com/wondertrader/wtpy) + [ElegantRL](https://github.com/AI4F"
},
{
"path": "analysts.py",
"chars": 1324,
"preview": "from ntpath import realpath\nfrom wtpy.apps import WtBtAnalyst\nfrom glob import glob\nfrom tqdm.auto import tqdm\nfrom os.p"
},
{
"path": "assessments.py",
"chars": 6563,
"preview": "from abc import abstractmethod\nimport numpy as np\nfrom wtpy.StrategyDefs import CtaContext, HftContext\n\n\nclass Assessmen"
},
{
"path": "compare_elegantrl.py",
"chars": 8568,
"preview": "from click import command, group, option\nfrom elegantrl.agent import AgentPPO as Agent\n# from elegantrl.agent import Age"
},
{
"path": "compare_rllib.py",
"chars": 8973,
"preview": "from ray import tune, init\n# from ray.rllib.agents.sac import SACTrainer as Trainer\n# from ray.rllib.agents.ddpg import "
},
{
"path": "compare_sb3.py",
"chars": 9150,
"preview": "# from stable_baselines3 import SAC as Trainer\nfrom stable_baselines3 import TD3 as Trainer\n\n# from stable_baselines3 im"
},
{
"path": "config/01commom/actpolicy.json",
"chars": 1110,
"preview": "{\n \"default\":{\n \"order\":[\n {\n \"action\":\"close\",\n \"limit\":0\n "
},
{
"path": "config/01commom/commodities.json",
"chars": 22033,
"preview": "{\n \"CFFEX\": {\n \"IC\": {\n \"covermode\": 0,\n \"pricemode\": 0,\n \"category\": 1,\n "
},
{
"path": "config/01commom/contracts.json",
"chars": 143400,
"preview": "{\n \"CFFEX\": {\n \"IC2110\": {\n \"name\": \"֤2110\",\n \"code\": \"IC2110\",\n \"exchg\": \"CF"
},
{
"path": "config/01commom/fees.json",
"chars": 3859,
"preview": "{\n \"CFFEX.T\":\n {\n \"open\":3.0,\n \"close\":3.0,\n \"closetoday\":0.0,\n \"byvolume\":true\n },"
},
{
"path": "config/01commom/holidays.json",
"chars": 487,
"preview": "{\n \"CHINA\" : [\n 20180101,20180215,20181005,20181231,\n 20190101,20190913,20191001,20191002,20191003,2019"
},
{
"path": "config/01commom/hots.json",
"chars": 324774,
"preview": "{\n \"CFFEX\": {\n \"IC\": [\n {\n \"date\": 20160104,\n \"from\": \"\",\n "
},
{
"path": "config/01commom/sessions.json",
"chars": 3657,
"preview": "{\n \"SD0930\":{\n \"name\":\"SD0930\",\n \"offset\": 0,\n \"auction\":{\n \"from\": 929,\n "
},
{
"path": "config/03research/cta.json",
"chars": 595,
"preview": "{\n \"replayer\":{\n \"mode\":\"bin\",\n \"path\":\"./dataset/\",\n \"path1\":\"D:/Github/test/Storage\",\n "
},
{
"path": "config/03research/hft.json",
"chars": 552,
"preview": "{\n \"replayer\":{\n \"mode\":\"bin\",\n \"path\":\"./dataset/\",\n \"tick\":true,\n \"basefiles\":{\n "
},
{
"path": "config/03research/log_debugger.json",
"chars": 848,
"preview": "{\n \"root\":{\n \"level\":\"debug\",\n \"async\":false,\n \"sinks\":[\n {\n \"type\":\"b"
},
{
"path": "config/03research/log_evaluator.json",
"chars": 487,
"preview": "{\n \"root\":{\n \"level\":\"info\",\n \"async\":false,\n \"sinks\":[]\n },\n \"dyn_pattern\":{\n \"str"
},
{
"path": "config/03research/log_trainer.json",
"chars": 224,
"preview": "{\n \"root\":{\n \"level\":\"info\",\n \"async\":false,\n \"sinks\":[]\n },\n \"dyn_pattern\":{\n \"str"
},
{
"path": "config/04realtime/log.json",
"chars": 2202,
"preview": "{\n \"root\":{\n \"level\":\"debug\",\n \"async\":false,\n \"sinks\":[\n {\n \"type\":\"d"
},
{
"path": "dataset_from_storage.py",
"chars": 3110,
"preview": "import pandas as pd\nfrom ctypes import POINTER\nfrom os import makedirs\n\nfrom wtpy.wrapper.WtDtHelper import WtDataHelper"
},
{
"path": "elegantrl/__init__.py",
"chars": 1,
"preview": "\n"
},
{
"path": "elegantrl/agent.py",
"chars": 71440,
"preview": "import os\nimport torch\nimport numpy as np\nimport numpy.random as rd\n\nfrom copy import deepcopy\nfrom torch.nn.utils impor"
},
{
"path": "elegantrl/demo.py",
"chars": 26269,
"preview": "from elegantrl.agent import *\nfrom elegantrl.env import build_env\nfrom elegantrl.run import Arguments, train_and_evaluat"
},
{
"path": "elegantrl/env.py",
"chars": 21419,
"preview": "import os\nimport gym # not necessary\nimport numpy as np\nfrom copy import deepcopy\n\n\"\"\"[ElegantRL.2021.11.08](https://gi"
},
{
"path": "elegantrl/evaluator.py",
"chars": 8589,
"preview": "import os\nimport time\nimport torch\nimport numpy as np\n\n\"\"\"[ElegantRL.2021.11.10](https://github.com/AI4Finance-Foundatio"
},
{
"path": "elegantrl/net.py",
"chars": 36364,
"preview": "import numpy as np\nimport torch\nimport torch.nn as nn\n\n\"\"\"[ElegantRL.2021.09.01](https://github.com/AI4Finance-Foundatio"
},
{
"path": "elegantrl/replay.py",
"chars": 16187,
"preview": "import os\nimport torch\nimport numpy as np\nimport numpy.random as rd\n\n\"\"\"[ElegantRL.2021.09.01](https://github.com/AI4Fin"
},
{
"path": "elegantrl/run.py",
"chars": 31150,
"preview": "import os\nimport sys\nimport time\n\nimport torch\nimport numpy as np\nimport numpy.random as rd\nimport multiprocessing as mp"
},
{
"path": "envs.py",
"chars": 7439,
"preview": "from gym import Env\nfrom gym.spaces import Box, Space\nfrom features import Feature\nfrom stoppers import Stopper\nfrom ass"
},
{
"path": "envs_simple_cta.py",
"chars": 3905,
"preview": "from features import Indicator\nfrom assessments import SimpleAssessment\nfrom stoppers import SimpleStopper\nfrom strategi"
},
{
"path": "features.py",
"chars": 13354,
"preview": "import numpy as np\nimport talib as ta\nfrom reprocess import REPROCESS, ZFILTER, MAXMIN\nfrom wtpy.StrategyDefs import Cta"
},
{
"path": "reprocess.py",
"chars": 1097,
"preview": "import numpy as np\nimport talib as ta\n\n\nclass REPROCESS():\n @staticmethod\n def n() -> int: # 定义至少需要多少条数据才能计算\n "
},
{
"path": "requirements/full_with_cuda.yaml",
"chars": 540,
"preview": "channels:\n - pytorch\n - conda-forge\n - defaults\ndependencies:\n - python==3.8.12\n - pip\n\n # torch\n - pytorch\n -"
},
{
"path": "requirements/full_without_cuda.yaml",
"chars": 536,
"preview": "channels:\n - pytorch\n - conda-forge\n - defaults\ndependencies:\n - python==3.8.12\n - pip\n\n # torch\n - pytorch\n -"
},
{
"path": "run_toy.py",
"chars": 164,
"preview": "from runner import entry, Runner\n\nclass SimpleRunner(Runner):\n def test(self):\n print('test1')\n\n\nif __name__ ="
},
{
"path": "runner.py",
"chars": 558,
"preview": "import click\n\nclass Runner():\n def debug(self):\n print('debug')\n def train(self):\n print('train')\n "
},
{
"path": "stoppers.py",
"chars": 67,
"preview": "class Stopper():\n pass\n\n\nclass SimpleStopper(Stopper):\n pass\n"
},
{
"path": "strategies.py",
"chars": 3623,
"preview": "from features import Feature\nfrom stoppers import Stopper\nfrom abc import abstractmethod\nfrom gym.spaces import Space, B"
},
{
"path": "wtpy/CodeHelper.py",
"chars": 769,
"preview": "import re\n\nclass CodeHelper:\n\n @staticmethod\n def isStdStkCode(stdCode:str) -> bool:\n pattern = re.compile("
},
{
"path": "wtpy/ContractMgr.py",
"chars": 1869,
"preview": "import json\n\nclass ContractInfo:\n\n def __init__(self):\n self.exchg = '' #交易所\n self.code = '' #"
},
{
"path": "wtpy/CtaContext.py",
"chars": 11380,
"preview": "from pandas import DataFrame as df\nimport pandas as pd\nimport os\nimport json\n\nfrom wtpy.wrapper import WtWrapper\nfrom wt"
},
{
"path": "wtpy/ExtModuleDefs.py",
"chars": 1626,
"preview": "\n\nclass BaseExtParser:\n '''\n 扩展行情接入模块基类\n '''\n def __init__(self, id:str):\n '''\n 构造函数\n @"
},
{
"path": "wtpy/ExtToolDefs.py",
"chars": 3805,
"preview": "import json\nimport time\nfrom threading import Thread\n\ndef fileToJson(filename, encoding=\"utf-8\"):\n f = open(filename,"
},
{
"path": "wtpy/HftContext.py",
"chars": 11159,
"preview": "from pandas import DataFrame as df\nimport pandas as pd\nimport os\nimport json\n\nfrom wtpy.wrapper import WtWrapper\nfrom wt"
},
{
"path": "wtpy/ProductMgr.py",
"chars": 1715,
"preview": "import json\n\nclass ProductInfo:\n '''\n 品种信息\n '''\n\n def __init__(self):\n self.exchg = '' #交易所\n "
},
{
"path": "wtpy/SelContext.py",
"chars": 6984,
"preview": "from pandas import DataFrame as df\nimport pandas as pd\nimport os\nimport json\n\nfrom wtpy.wrapper import WtWrapper\nfrom wt"
},
{
"path": "wtpy/SessionMgr.py",
"chars": 6488,
"preview": "import math\nimport json\n\nclass SectionInfo:\n\n def __init__(self):\n self.stime = 0\n self.etime = 0\n\nclas"
},
{
"path": "wtpy/StrategyDefs.py",
"chars": 6532,
"preview": "from wtpy import CtaContext, SelContext, HftContext\n\nclass BaseCtaStrategy:\n '''\n CTA策略基础类,所有的策略都从该类派生\n 包含了策略的基"
},
{
"path": "wtpy/WtBtEngine.py",
"chars": 9699,
"preview": "from wtpy.wrapper import WtBtWrapper\nfrom wtpy.CtaContext import CtaContext\nfrom wtpy.SelContext import SelContext\nfrom "
},
{
"path": "wtpy/WtCoreDefs.py",
"chars": 8193,
"preview": "from ctypes import c_uint, c_void_p, CFUNCTYPE, POINTER, c_char_p, c_bool, c_ulong, c_double\nfrom ctypes import Structur"
},
{
"path": "wtpy/WtDataDefs.py",
"chars": 4280,
"preview": "import numpy as np\nfrom pandas import DataFrame\n\nclass WtKlineData:\n def __init__(self, size:int, bAlloc:bool = True)"
},
{
"path": "wtpy/WtDtEngine.py",
"chars": 1370,
"preview": "from wtpy.wrapper import WtDtWrapper\nfrom wtpy.ExtModuleDefs import BaseExtParser\nfrom wtpy.WtUtilDefs import singleton\n"
},
{
"path": "wtpy/WtDtServo.py",
"chars": 13168,
"preview": "from wtpy.WtUtilDefs import singleton\nfrom wtpy.wrapper import WtDtServoApi\nfrom wtpy.WtCoreDefs import BarList, TickLis"
},
{
"path": "wtpy/WtEngine.py",
"chars": 11623,
"preview": "from wtpy.wrapper import WtWrapper\nfrom wtpy.CtaContext import CtaContext\nfrom wtpy.SelContext import SelContext\nfrom wt"
},
{
"path": "wtpy/WtMsgQue.py",
"chars": 2670,
"preview": "from wtpy.wrapper.WtMQWrapper import WtMQWrapper, CB_ON_MSG\nfrom wtpy.WtUtilDefs import singleton\n\nclass WtMQServer:\n\n "
},
{
"path": "wtpy/WtUtilDefs.py",
"chars": 211,
"preview": "def singleton(cls):\n instances = {}\n def getinstance(*args,**kwargs):\n if cls not in instances:\n "
},
{
"path": "wtpy/__init__.py",
"chars": 1156,
"preview": "from .StrategyDefs import BaseCtaStrategy, BaseSelStrategy, BaseHftStrategy\nfrom .CtaContext import CtaContext\nfrom .Sel"
},
{
"path": "wtpy/apps/WtBtAnalyst.py",
"chars": 52524,
"preview": "from pandas import DataFrame as df\nimport pandas as pd\nimport numpy as np\nfrom dateutil.parser import parse\nfrom collect"
},
{
"path": "wtpy/apps/WtCtaOptimizer.py",
"chars": 15001,
"preview": "from json import encoder\nimport multiprocessing\nimport time\nimport threading\nimport json\n\nimport os\nimport math\nimport n"
},
{
"path": "wtpy/apps/WtHotPicker.py",
"chars": 33010,
"preview": "\nimport datetime\nimport time\nimport json\nimport os\nimport logging\nimport functools\n\nimport urllib.request\nimport io\nimpo"
},
{
"path": "wtpy/apps/__init__.py",
"chars": 301,
"preview": "from .WtBtAnalyst import WtBtAnalyst\nfrom .WtCtaOptimizer import WtCtaOptimizer\nfrom .WtHotPicker import WtHotPicker, Wt"
},
{
"path": "wtpy/apps/datahelper/DHBaostock.py",
"chars": 8195,
"preview": "from wtpy.apps.datahelper.DHDefs import BaseDataHelper, DBHelper\nimport baostock as bs\nfrom datetime import datetime\nimp"
},
{
"path": "wtpy/apps/datahelper/DHDefs.py",
"chars": 2267,
"preview": "from datetime import datetime\n\nclass DBHelper:\n\n def __init__(self):\n pass\n\n def initDB(self):\n '''\n"
},
{
"path": "wtpy/apps/datahelper/DHFactory.py",
"chars": 705,
"preview": "from wtpy.apps.datahelper.DHDefs import BaseDataHelper\nfrom wtpy.apps.datahelper.DHBaostock import DHBaostock\nfrom wtpy."
},
{
"path": "wtpy/apps/datahelper/DHRqData.py",
"chars": 10200,
"preview": "from wtpy.apps.datahelper.DHDefs import BaseDataHelper, DBHelper\nimport rqdatac as rq\nfrom datetime import datetime, tim"
},
{
"path": "wtpy/apps/datahelper/DHTushare.py",
"chars": 17772,
"preview": "from wtpy.apps.datahelper.DHDefs import BaseDataHelper, DBHelper\nimport tushare as ts\nfrom datetime import datetime\nimpo"
},
{
"path": "wtpy/apps/datahelper/__init__.py",
"chars": 111,
"preview": "from .DHFactory import DHFactory\nfrom .db.MysqlHelper import MysqlHelper\n\n__all__ = [\"DHFactory\",\"MysqlHelper\"]"
},
{
"path": "wtpy/apps/datahelper/db/MysqlHelper.py",
"chars": 4994,
"preview": "from wtpy.apps.datahelper.DHDefs import DBHelper\nimport pymysql\nimport math\nimport os\n\nclass MysqlHelper(DBHelper):\n "
},
{
"path": "wtpy/apps/datahelper/db/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/apps/datahelper/db/initdb_mysql.sql",
"chars": 3834,
"preview": "CREATE TABLE IF NOT EXISTS `tb_adj_factors` (\n `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n `exchange` varchar(2"
},
{
"path": "wtpy/monitor/DataMgr.py",
"chars": 45426,
"preview": "import json\nimport os\nimport sqlite3\nimport hashlib\nimport datetime\nfrom .WtLogger import WtLogger\n\ndef backup_file(file"
},
{
"path": "wtpy/monitor/EventReceiver.py",
"chars": 3776,
"preview": "import threading\nimport struct\nimport json\nimport chardet\n\nfrom wtpy import WtMsgQue, WtMQClient\n\nmq = WtMsgQue()\n\nTOPIC"
},
{
"path": "wtpy/monitor/PushSvr.py",
"chars": 1899,
"preview": "from flask_socketio import SocketIO, emit\nfrom flask import session, sessions\n\nfrom .WtLogger import WtLogger\n\ndef get_p"
},
{
"path": "wtpy/monitor/WatchDog.py",
"chars": 16553,
"preview": "import threading\nimport time\nimport subprocess\nimport os\nimport datetime\nimport json\nimport copy\nimport platform\nimport "
},
{
"path": "wtpy/monitor/WtBtMon.py",
"chars": 25452,
"preview": "'''\nDescripttion: 回测管理模块\nversion: \nAuthor: Wesley\nDate: 2021-08-11 14:03:33\nLastEditors: Wesley\nLastEditTime: 2021-09-02"
},
{
"path": "wtpy/monitor/WtLogger.py",
"chars": 1269,
"preview": "import logging\nimport os\n\nclass WtLogger:\n\n def __init__(self, catName:str='', filename:str=\"out.log\"):\n self."
},
{
"path": "wtpy/monitor/WtMonSvr.py",
"chars": 70811,
"preview": "from flask import Flask, session, redirect, request, make_response\nfrom flask_compress import Compress\nimport json\nimpo"
},
{
"path": "wtpy/monitor/__init__.py",
"chars": 299,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2020-08-25 15:38:28\nLastEditors: W"
},
{
"path": "wtpy/monitor/static/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/index.html",
"chars": 511,
"preview": "<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content=\"width=device-width,initial-scale=1\"><title>策"
},
{
"path": "wtpy/monitor/static/console/static/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/static/css/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/static/css/app.7b6729291f05cec91b99cfd44c17df6b.css",
"chars": 250042,
"preview": "#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;"
},
{
"path": "wtpy/monitor/static/console/static/css/static/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/static/css/static/fonts/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/static/js/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/monitor/static/console/static/js/app.d3652914f874ea570f72.js",
"chars": 180394,
"preview": "webpackJsonp([1],{\"+B9X\":function(t,e){},\"4/hK\":function(t,e){},\"7Otq\":function(t,e){t.exports=\"data:image/png;base64,iV"
},
{
"path": "wtpy/monitor/static/console/static/js/manifest.3ad1d5771e9b13dbdad2.js",
"chars": 858,
"preview": "!function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a<e.length;a++)i=e[a],"
},
{
"path": "wtpy/monitor/static/console/static/js/vendor.cd39a6c53a9d7599c08c.js",
"chars": 2130786,
"preview": "webpackJsonp([0],{\"++K3\":function(e,t){var n,i,r,o,a,s,l,u,c,h,d,f,p,g,m,v=!1;function y(){if(!v){v=!0;var e=navigator.u"
},
{
"path": "wtpy/wrapper/ContractLoader.py",
"chars": 1198,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2021-05-24 15:05:01\nLastEditors: W"
},
{
"path": "wtpy/wrapper/PlatformHelper.py",
"chars": 1056,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2021-02-26 16:28:57\nLastEditors: W"
},
{
"path": "wtpy/wrapper/WtBtWrapper.py",
"chars": 40884,
"preview": "from ctypes import cdll, c_char_p, c_bool, c_ulong, c_uint64, c_double, POINTER, addressof, sizeof\nfrom wtpy.WtCoreDefs "
},
{
"path": "wtpy/wrapper/WtDtHelper.py",
"chars": 6216,
"preview": "from ctypes import cdll, CFUNCTYPE, c_char_p, c_void_p, c_bool, POINTER, c_int, c_uint, c_uint64\nfrom wtpy.WtCoreDefs im"
},
{
"path": "wtpy/wrapper/WtDtServoApi.py",
"chars": 3125,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2021-07-27 09:53:43\nLastEditors: W"
},
{
"path": "wtpy/wrapper/WtDtWrapper.py",
"chars": 3406,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2021-07-27 09:53:43\nLastEditors: W"
},
{
"path": "wtpy/wrapper/WtExecApi.py",
"chars": 1585,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2021-07-27 09:53:43\nLastEditors: W"
},
{
"path": "wtpy/wrapper/WtMQWrapper.py",
"chars": 1934,
"preview": "'''\nDescripttion: Automatically generated file comment\nversion: \nAuthor: Wesley\nDate: 2021-07-27 09:53:43\nLastEditors: W"
},
{
"path": "wtpy/wrapper/WtWrapper.py",
"chars": 42976,
"preview": "from ctypes import cdll, c_char_p, c_bool, c_ulong, c_uint64, c_double, POINTER, sizeof, addressof\nfrom wtpy.WtCoreDefs "
},
{
"path": "wtpy/wrapper/__init__.py",
"chars": 398,
"preview": "from .WtWrapper import WtWrapper\nfrom .WtExecApi import WtExecApi\nfrom .WtBtWrapper import WtBtWrapper\nfrom .WtDtWrapper"
},
{
"path": "wtpy/wrapper/linux/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/linux/executer/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/linux/parsers/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/linux/traders/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x64/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x64/executer/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x64/parsers/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x64/traders/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x86/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x86/executer/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x86/parsers/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "wtpy/wrapper/x86/traders/__init__.py",
"chars": 0,
"preview": ""
}
]
// ... and 74 more files (download for full content)
About this extraction
This page contains the full source code of the drlgistics/Wt4ElegantRL GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 188 files (3.7 MB), approximately 977.4k tokens, and a symbol index with 3297 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.