Initial commit
@@ -0,0 +1,2 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
# 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/
|
||||||
|
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/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# 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
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .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
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
#poetry.lock
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
#pdm.lock
|
||||||
|
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||||
|
# in version control.
|
||||||
|
# https://pdm.fming.dev/#use-with-ide
|
||||||
|
.pdm.toml
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__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/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
#.idea/
|
||||||
@@ -0,0 +1,326 @@
|
|||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from Common.cache import make_cache
|
||||||
|
from Common.CEnum import BI_DIR, BI_TYPE, DATA_FIELD, FX_TYPE, MACD_ALGO
|
||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
from KLine.KLine import CKLine
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
|
||||||
|
class CBi:
|
||||||
|
def __init__(self, begin_klc: CKLine, end_klc: CKLine, idx: int, is_sure: bool):
|
||||||
|
# self.__begin_klc = begin_klc
|
||||||
|
# self.__end_klc = end_klc
|
||||||
|
self.__dir = None
|
||||||
|
self.__idx = idx
|
||||||
|
self.__type = BI_TYPE.STRICT
|
||||||
|
|
||||||
|
self.set(begin_klc, end_klc)
|
||||||
|
|
||||||
|
self.__is_sure = is_sure
|
||||||
|
self.__sure_end: List[CKLine] = []
|
||||||
|
|
||||||
|
self.__seg_idx: Optional[int] = None
|
||||||
|
|
||||||
|
from Seg.Seg import CSeg
|
||||||
|
self.parent_seg: Optional[CSeg[CBi]] = None # 在哪个线段里面
|
||||||
|
|
||||||
|
from BuySellPoint.BS_Point import CBS_Point
|
||||||
|
self.bsp: Optional[CBS_Point] = None # 尾部是不是买卖点
|
||||||
|
|
||||||
|
self.next: Optional[CBi] = None
|
||||||
|
self.pre: Optional[CBi] = None
|
||||||
|
|
||||||
|
def clean_cache(self):
|
||||||
|
self._memoize_cache = {}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def begin_klc(self): return self.__begin_klc
|
||||||
|
|
||||||
|
@property
|
||||||
|
def end_klc(self): return self.__end_klc
|
||||||
|
|
||||||
|
@property
|
||||||
|
def dir(self): return self.__dir
|
||||||
|
|
||||||
|
@property
|
||||||
|
def idx(self): return self.__idx
|
||||||
|
|
||||||
|
@property
|
||||||
|
def type(self): return self.__type
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_sure(self): return self.__is_sure
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sure_end(self): return self.__sure_end
|
||||||
|
|
||||||
|
@property
|
||||||
|
def klc_lst(self):
|
||||||
|
klc = self.begin_klc
|
||||||
|
while True:
|
||||||
|
yield klc
|
||||||
|
klc = klc.next
|
||||||
|
if not klc or klc.idx > self.end_klc.idx:
|
||||||
|
break
|
||||||
|
|
||||||
|
@property
|
||||||
|
def klc_lst_re(self):
|
||||||
|
klc = self.end_klc
|
||||||
|
while True:
|
||||||
|
yield klc
|
||||||
|
klc = klc.pre
|
||||||
|
if not klc or klc.idx < self.begin_klc.idx:
|
||||||
|
break
|
||||||
|
|
||||||
|
@property
|
||||||
|
def seg_idx(self): return self.__seg_idx
|
||||||
|
|
||||||
|
def set_seg_idx(self, idx):
|
||||||
|
self.__seg_idx = idx
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.dir}|{self.begin_klc} ~ {self.end_klc}"
|
||||||
|
|
||||||
|
def check(self):
|
||||||
|
try:
|
||||||
|
if self.is_down():
|
||||||
|
assert self.begin_klc.high > self.end_klc.low
|
||||||
|
else:
|
||||||
|
assert self.begin_klc.low < self.end_klc.high
|
||||||
|
except Exception as e:
|
||||||
|
raise CChanException(f"{self.idx}:{self.begin_klc[0].time}~{self.end_klc[-1].time}笔的方向和收尾位置不一致!", ErrCode.BI_ERR) from e
|
||||||
|
|
||||||
|
def set(self, begin_klc: CKLine, end_klc: CKLine):
|
||||||
|
self.__begin_klc: CKLine = begin_klc
|
||||||
|
self.__end_klc: CKLine = end_klc
|
||||||
|
if begin_klc.fx == FX_TYPE.BOTTOM:
|
||||||
|
self.__dir = BI_DIR.UP
|
||||||
|
elif begin_klc.fx == FX_TYPE.TOP:
|
||||||
|
self.__dir = BI_DIR.DOWN
|
||||||
|
else:
|
||||||
|
raise CChanException("ERROR DIRECTION when creating bi", ErrCode.BI_ERR)
|
||||||
|
self.check()
|
||||||
|
self.clean_cache()
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_begin_val(self):
|
||||||
|
return self.begin_klc.low if self.is_up() else self.begin_klc.high
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_end_val(self):
|
||||||
|
return self.end_klc.high if self.is_up() else self.end_klc.low
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_begin_klu(self) -> CKLine_Unit:
|
||||||
|
if self.is_up():
|
||||||
|
return self.begin_klc.get_peak_klu(is_high=False)
|
||||||
|
else:
|
||||||
|
return self.begin_klc.get_peak_klu(is_high=True)
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_end_klu(self) -> CKLine_Unit:
|
||||||
|
if self.is_up():
|
||||||
|
return self.end_klc.get_peak_klu(is_high=True)
|
||||||
|
else:
|
||||||
|
return self.end_klc.get_peak_klu(is_high=False)
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def amp(self):
|
||||||
|
return abs(self.get_end_val() - self.get_begin_val())
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_klu_cnt(self):
|
||||||
|
return self.get_end_klu().idx - self.get_begin_klu().idx + 1
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_klc_cnt(self):
|
||||||
|
assert self.end_klc.idx == self.get_end_klu().klc.idx
|
||||||
|
assert self.begin_klc.idx == self.get_begin_klu().klc.idx
|
||||||
|
return self.end_klc.idx - self.begin_klc.idx + 1
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def _high(self):
|
||||||
|
return self.end_klc.high if self.is_up() else self.begin_klc.high
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def _low(self):
|
||||||
|
return self.begin_klc.low if self.is_up() else self.end_klc.low
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def _mid(self):
|
||||||
|
return (self._high() + self._low()) / 2 # 笔的中位价
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def is_down(self):
|
||||||
|
return self.dir == BI_DIR.DOWN
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def is_up(self):
|
||||||
|
return self.dir == BI_DIR.UP
|
||||||
|
|
||||||
|
def update_virtual_end(self, new_klc: CKLine):
|
||||||
|
self.append_sure_end(self.end_klc)
|
||||||
|
self.update_new_end(new_klc)
|
||||||
|
self.__is_sure = False
|
||||||
|
|
||||||
|
def restore_from_virtual_end(self, sure_end: CKLine):
|
||||||
|
self.__is_sure = True
|
||||||
|
self.update_new_end(new_klc=sure_end)
|
||||||
|
self.__sure_end = []
|
||||||
|
|
||||||
|
def append_sure_end(self, klc: CKLine):
|
||||||
|
self.__sure_end.append(klc)
|
||||||
|
|
||||||
|
def update_new_end(self, new_klc: CKLine):
|
||||||
|
self.__end_klc = new_klc
|
||||||
|
self.check()
|
||||||
|
self.clean_cache()
|
||||||
|
|
||||||
|
def cal_macd_metric(self, macd_algo, is_reverse):
|
||||||
|
if macd_algo == MACD_ALGO.AREA:
|
||||||
|
return self.Cal_MACD_half(is_reverse)
|
||||||
|
elif macd_algo == MACD_ALGO.PEAK:
|
||||||
|
return self.Cal_MACD_peak()
|
||||||
|
elif macd_algo == MACD_ALGO.FULL_AREA:
|
||||||
|
return self.Cal_MACD_area()
|
||||||
|
elif macd_algo == MACD_ALGO.DIFF:
|
||||||
|
return self.Cal_MACD_diff()
|
||||||
|
elif macd_algo == MACD_ALGO.SLOPE:
|
||||||
|
return self.Cal_MACD_slope()
|
||||||
|
elif macd_algo == MACD_ALGO.AMP:
|
||||||
|
return self.Cal_MACD_amp()
|
||||||
|
elif macd_algo == MACD_ALGO.AMOUNT:
|
||||||
|
return self.Cal_MACD_trade_metric(DATA_FIELD.FIELD_TURNOVER, cal_avg=False)
|
||||||
|
elif macd_algo == MACD_ALGO.VOLUMN:
|
||||||
|
return self.Cal_MACD_trade_metric(DATA_FIELD.FIELD_VOLUME, cal_avg=False)
|
||||||
|
elif macd_algo == MACD_ALGO.VOLUMN_AVG:
|
||||||
|
return self.Cal_MACD_trade_metric(DATA_FIELD.FIELD_VOLUME, cal_avg=True)
|
||||||
|
elif macd_algo == MACD_ALGO.AMOUNT_AVG:
|
||||||
|
return self.Cal_MACD_trade_metric(DATA_FIELD.FIELD_TURNOVER, cal_avg=True)
|
||||||
|
elif macd_algo == MACD_ALGO.TURNRATE_AVG:
|
||||||
|
return self.Cal_MACD_trade_metric(DATA_FIELD.FIELD_TURNRATE, cal_avg=True)
|
||||||
|
elif macd_algo == MACD_ALGO.RSI:
|
||||||
|
return self.Cal_Rsi()
|
||||||
|
else:
|
||||||
|
raise CChanException(f"unsupport macd_algo={macd_algo}, should be one of area/full_area/peak/diff/slope/amp", ErrCode.PARA_ERROR)
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_Rsi(self):
|
||||||
|
rsi_lst: List[float] = []
|
||||||
|
for klc in self.klc_lst:
|
||||||
|
rsi_lst.extend(klu.rsi for klu in klc.lst)
|
||||||
|
return 10000.0/(min(rsi_lst)+1e-7) if self.is_down() else max(rsi_lst)
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_area(self):
|
||||||
|
_s = 1e-7
|
||||||
|
begin_klu = self.get_begin_klu()
|
||||||
|
end_klu = self.get_end_klu()
|
||||||
|
for klc in self.klc_lst:
|
||||||
|
for klu in klc.lst:
|
||||||
|
if klu.idx < begin_klu.idx or klu.idx > end_klu.idx:
|
||||||
|
continue
|
||||||
|
if (self.is_down() and klu.macd.macd < 0) or (self.is_up() and klu.macd.macd > 0):
|
||||||
|
_s += abs(klu.macd.macd)
|
||||||
|
return _s
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_peak(self):
|
||||||
|
peak = 1e-7
|
||||||
|
for klc in self.klc_lst:
|
||||||
|
for klu in klc.lst:
|
||||||
|
if abs(klu.macd.macd) > peak:
|
||||||
|
if self.is_down() and klu.macd.macd < 0:
|
||||||
|
peak = abs(klu.macd.macd)
|
||||||
|
elif self.is_up() and klu.macd.macd > 0:
|
||||||
|
peak = abs(klu.macd.macd)
|
||||||
|
return peak
|
||||||
|
|
||||||
|
def Cal_MACD_half(self, is_reverse):
|
||||||
|
if is_reverse:
|
||||||
|
return self.Cal_MACD_half_reverse()
|
||||||
|
else:
|
||||||
|
return self.Cal_MACD_half_obverse()
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_half_obverse(self):
|
||||||
|
_s = 1e-7
|
||||||
|
begin_klu = self.get_begin_klu()
|
||||||
|
peak_macd = begin_klu.macd.macd
|
||||||
|
for klc in self.klc_lst:
|
||||||
|
for klu in klc.lst:
|
||||||
|
if klu.idx < begin_klu.idx:
|
||||||
|
continue
|
||||||
|
if klu.macd.macd*peak_macd > 0:
|
||||||
|
_s += abs(klu.macd.macd)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
else: # 没有被break,继续找写一个KLC
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
return _s
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_half_reverse(self):
|
||||||
|
_s = 1e-7
|
||||||
|
begin_klu = self.get_end_klu()
|
||||||
|
peak_macd = begin_klu.macd.macd
|
||||||
|
for klc in self.klc_lst_re:
|
||||||
|
for klu in klc[::-1]:
|
||||||
|
if klu.idx > begin_klu.idx:
|
||||||
|
continue
|
||||||
|
if klu.macd.macd*peak_macd > 0:
|
||||||
|
_s += abs(klu.macd.macd)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
else: # 没有被break,继续找写一个KLC
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
return _s
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_diff(self):
|
||||||
|
"""
|
||||||
|
macd红绿柱最大值最小值之差
|
||||||
|
"""
|
||||||
|
_max, _min = float("-inf"), float("inf")
|
||||||
|
for klc in self.klc_lst:
|
||||||
|
for klu in klc.lst:
|
||||||
|
macd = klu.macd.macd
|
||||||
|
if macd > _max:
|
||||||
|
_max = macd
|
||||||
|
if macd < _min:
|
||||||
|
_min = macd
|
||||||
|
return _max-_min
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_slope(self):
|
||||||
|
begin_klu = self.get_begin_klu()
|
||||||
|
end_klu = self.get_end_klu()
|
||||||
|
if self.is_up():
|
||||||
|
return (end_klu.high - begin_klu.low)/end_klu.high/(end_klu.idx - begin_klu.idx + 1)
|
||||||
|
else:
|
||||||
|
return (begin_klu.high - end_klu.low)/begin_klu.high/(end_klu.idx - begin_klu.idx + 1)
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def Cal_MACD_amp(self):
|
||||||
|
begin_klu = self.get_begin_klu()
|
||||||
|
end_klu = self.get_end_klu()
|
||||||
|
if self.is_down():
|
||||||
|
return (begin_klu.high-end_klu.low)/begin_klu.high
|
||||||
|
else:
|
||||||
|
return (end_klu.high-begin_klu.low)/begin_klu.low
|
||||||
|
|
||||||
|
def Cal_MACD_trade_metric(self, metric: str, cal_avg=False) -> float:
|
||||||
|
_s = 0
|
||||||
|
for klc in self.klc_lst:
|
||||||
|
for klu in klc.lst:
|
||||||
|
metric_res = klu.trade_info.metric[metric]
|
||||||
|
if metric_res is None:
|
||||||
|
return 0.0
|
||||||
|
_s += metric_res
|
||||||
|
return _s / self.get_klu_cnt() if cal_avg else _s
|
||||||
|
|
||||||
|
# def set_klc_lst(self, lst):
|
||||||
|
# self.__klc_lst = lst
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
from Common.CEnum import FX_CHECK_METHOD
|
||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
|
||||||
|
|
||||||
|
class CBiConfig:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
bi_algo="normal",
|
||||||
|
is_strict=True,
|
||||||
|
bi_fx_check="half",
|
||||||
|
gap_as_kl=True,
|
||||||
|
bi_end_is_peak=True,
|
||||||
|
bi_allow_sub_peak=True,
|
||||||
|
):
|
||||||
|
self.bi_algo = bi_algo
|
||||||
|
self.is_strict = is_strict
|
||||||
|
if bi_fx_check == "strict":
|
||||||
|
self.bi_fx_check = FX_CHECK_METHOD.STRICT
|
||||||
|
elif bi_fx_check == "loss":
|
||||||
|
self.bi_fx_check = FX_CHECK_METHOD.LOSS
|
||||||
|
elif bi_fx_check == "half":
|
||||||
|
self.bi_fx_check = FX_CHECK_METHOD.HALF
|
||||||
|
elif bi_fx_check == 'totally':
|
||||||
|
self.bi_fx_check = FX_CHECK_METHOD.TOTALLY
|
||||||
|
else:
|
||||||
|
raise CChanException(f"unknown bi_fx_check={bi_fx_check}", ErrCode.PARA_ERROR)
|
||||||
|
|
||||||
|
self.gap_as_kl = gap_as_kl
|
||||||
|
self.bi_end_is_peak = bi_end_is_peak
|
||||||
|
self.bi_allow_sub_peak = bi_allow_sub_peak
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
from typing import List, Optional, Union, overload
|
||||||
|
|
||||||
|
from Common.CEnum import FX_TYPE, KLINE_DIR
|
||||||
|
from KLine.KLine import CKLine
|
||||||
|
|
||||||
|
from .Bi import CBi
|
||||||
|
from .BiConfig import CBiConfig
|
||||||
|
|
||||||
|
|
||||||
|
class CBiList:
|
||||||
|
def __init__(self, bi_conf=CBiConfig()):
|
||||||
|
self.bi_list: List[CBi] = []
|
||||||
|
self.last_end = None # 最后一笔的尾部
|
||||||
|
self.config = bi_conf
|
||||||
|
|
||||||
|
self.free_klc_lst = [] # 仅仅用作第一笔未画出来之前的缓存,为了获得更精准的结果而已,不加这块逻辑其实对后续计算没太大影响
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "\n".join([str(bi) for bi in self.bi_list])
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
yield from self.bi_list
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __getitem__(self, index: int) -> CBi: ...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __getitem__(self, index: slice) -> List[CBi]: ...
|
||||||
|
|
||||||
|
def __getitem__(self, index: Union[slice, int]) -> Union[List[CBi], CBi]:
|
||||||
|
return self.bi_list[index]
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.bi_list)
|
||||||
|
|
||||||
|
def try_create_first_bi(self, klc: CKLine) -> bool:
|
||||||
|
for exist_free_klc in self.free_klc_lst:
|
||||||
|
if exist_free_klc.fx == klc.fx:
|
||||||
|
continue
|
||||||
|
if self.can_make_bi(klc, exist_free_klc):
|
||||||
|
self.add_new_bi(exist_free_klc, klc)
|
||||||
|
self.last_end = klc
|
||||||
|
return True
|
||||||
|
self.free_klc_lst.append(klc)
|
||||||
|
self.last_end = klc
|
||||||
|
return False
|
||||||
|
|
||||||
|
def update_bi(self, klc: CKLine, last_klc: CKLine, cal_virtual: bool) -> bool:
|
||||||
|
# klc: 倒数第二根klc
|
||||||
|
# last_klc: 倒数第1根klc
|
||||||
|
flag1 = self.update_bi_sure(klc)
|
||||||
|
if cal_virtual:
|
||||||
|
flag2 = self.try_add_virtual_bi(last_klc)
|
||||||
|
return flag1 or flag2
|
||||||
|
else:
|
||||||
|
return flag1
|
||||||
|
|
||||||
|
def can_update_peak(self, klc: CKLine):
|
||||||
|
if self.config.bi_allow_sub_peak or len(self.bi_list) < 2:
|
||||||
|
return False
|
||||||
|
if self.bi_list[-1].is_down() and klc.high < self.bi_list[-1].get_begin_val():
|
||||||
|
return False
|
||||||
|
if self.bi_list[-1].is_up() and klc.low > self.bi_list[-1].get_begin_val():
|
||||||
|
return False
|
||||||
|
if not end_is_peak(self.bi_list[-2].begin_klc, klc):
|
||||||
|
return False
|
||||||
|
if self[-1].is_down() and self[-1].get_end_val() < self[-2].get_begin_val():
|
||||||
|
return False
|
||||||
|
if self[-1].is_up() and self[-1].get_end_val() > self[-2].get_begin_val():
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def update_peak(self, klc: CKLine, for_virtual=False):
|
||||||
|
if not self.can_update_peak(klc):
|
||||||
|
return False
|
||||||
|
_tmp_last_bi = self.bi_list[-1]
|
||||||
|
self.bi_list.pop()
|
||||||
|
if not self.try_update_end(klc, for_virtual=for_virtual):
|
||||||
|
self.bi_list.append(_tmp_last_bi)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
if for_virtual:
|
||||||
|
self.bi_list[-1].append_sure_end(_tmp_last_bi.end_klc)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def update_bi_sure(self, klc: CKLine) -> bool:
|
||||||
|
# klc: 倒数第二根klc
|
||||||
|
_tmp_end = self.get_last_klu_of_last_bi()
|
||||||
|
self.delete_virtual_bi()
|
||||||
|
# 返回值:是否出现新笔
|
||||||
|
if klc.fx == FX_TYPE.UNKNOWN:
|
||||||
|
return _tmp_end != self.get_last_klu_of_last_bi() # 虚笔是否有变
|
||||||
|
if self.last_end is None or len(self.bi_list) == 0:
|
||||||
|
return self.try_create_first_bi(klc)
|
||||||
|
if klc.fx == self.last_end.fx:
|
||||||
|
return self.try_update_end(klc)
|
||||||
|
elif self.can_make_bi(klc, self.last_end):
|
||||||
|
self.add_new_bi(self.last_end, klc)
|
||||||
|
self.last_end = klc
|
||||||
|
return True
|
||||||
|
elif self.update_peak(klc):
|
||||||
|
return True
|
||||||
|
return _tmp_end != self.get_last_klu_of_last_bi()
|
||||||
|
|
||||||
|
def delete_virtual_bi(self):
|
||||||
|
if len(self) > 0 and not self.bi_list[-1].is_sure:
|
||||||
|
sure_end_list = [klc for klc in self.bi_list[-1].sure_end]
|
||||||
|
if len(sure_end_list):
|
||||||
|
self.bi_list[-1].restore_from_virtual_end(sure_end_list[0])
|
||||||
|
self.last_end = self[-1].end_klc
|
||||||
|
for sure_end in sure_end_list[1:]:
|
||||||
|
self.add_new_bi(self.last_end, sure_end, is_sure=True)
|
||||||
|
self.last_end = self[-1].end_klc
|
||||||
|
else:
|
||||||
|
del self.bi_list[-1]
|
||||||
|
self.last_end = self[-1].end_klc if len(self) > 0 else None
|
||||||
|
if len(self) > 0:
|
||||||
|
self[-1].next = None
|
||||||
|
|
||||||
|
def try_add_virtual_bi(self, klc: CKLine, need_del_end=False):
|
||||||
|
if need_del_end:
|
||||||
|
self.delete_virtual_bi()
|
||||||
|
if len(self) == 0:
|
||||||
|
return False
|
||||||
|
if klc.idx == self[-1].end_klc.idx:
|
||||||
|
return False
|
||||||
|
if (self[-1].is_up() and klc.high >= self[-1].end_klc.high) or (self[-1].is_down() and klc.low <= self[-1].end_klc.low):
|
||||||
|
# 更新最后一笔
|
||||||
|
self.bi_list[-1].update_virtual_end(klc)
|
||||||
|
return True
|
||||||
|
_tmp_klc = klc
|
||||||
|
while _tmp_klc and _tmp_klc.idx > self[-1].end_klc.idx:
|
||||||
|
assert _tmp_klc is not None
|
||||||
|
if self.can_make_bi(_tmp_klc, self[-1].end_klc, for_virtual=True):
|
||||||
|
# 新增一笔
|
||||||
|
self.add_new_bi(self.last_end, _tmp_klc, is_sure=False)
|
||||||
|
return True
|
||||||
|
elif self.update_peak(_tmp_klc, for_virtual=True):
|
||||||
|
return True
|
||||||
|
_tmp_klc = _tmp_klc.pre
|
||||||
|
return False
|
||||||
|
|
||||||
|
def add_new_bi(self, pre_klc, cur_klc, is_sure=True):
|
||||||
|
self.bi_list.append(CBi(pre_klc, cur_klc, idx=len(self.bi_list), is_sure=is_sure))
|
||||||
|
if len(self.bi_list) >= 2:
|
||||||
|
self.bi_list[-2].next = self.bi_list[-1]
|
||||||
|
self.bi_list[-1].pre = self.bi_list[-2]
|
||||||
|
|
||||||
|
def satisfy_bi_span(self, klc: CKLine, last_end: CKLine):
|
||||||
|
bi_span = self.get_klc_span(klc, last_end)
|
||||||
|
if self.config.is_strict:
|
||||||
|
return bi_span >= 4
|
||||||
|
uint_kl_cnt = 0
|
||||||
|
tmp_klc = last_end.next
|
||||||
|
while tmp_klc:
|
||||||
|
uint_kl_cnt += len(tmp_klc.lst)
|
||||||
|
if not tmp_klc.next: # 最后尾部虚笔的时候,可能klc.idx == last_end.idx+1
|
||||||
|
return False
|
||||||
|
if tmp_klc.next.idx < klc.idx:
|
||||||
|
tmp_klc = tmp_klc.next
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
return bi_span >= 3 and uint_kl_cnt >= 3
|
||||||
|
|
||||||
|
def get_klc_span(self, klc: CKLine, last_end: CKLine) -> int:
|
||||||
|
span = klc.idx - last_end.idx
|
||||||
|
if not self.config.gap_as_kl:
|
||||||
|
return span
|
||||||
|
if span >= 4: # 加速运算,如果span需要真正精确的值,需要去掉这一行
|
||||||
|
return span
|
||||||
|
tmp_klc = last_end
|
||||||
|
while tmp_klc and tmp_klc.idx < klc.idx:
|
||||||
|
if tmp_klc.has_gap_with_next():
|
||||||
|
span += 1
|
||||||
|
tmp_klc = tmp_klc.next
|
||||||
|
return span
|
||||||
|
|
||||||
|
def can_make_bi(self, klc: CKLine, last_end: CKLine, for_virtual: bool = False):
|
||||||
|
satisify_span = True if self.config.bi_algo == 'fx' else self.satisfy_bi_span(klc, last_end)
|
||||||
|
if not satisify_span:
|
||||||
|
return False
|
||||||
|
if not last_end.check_fx_valid(klc, self.config.bi_fx_check, for_virtual):
|
||||||
|
return False
|
||||||
|
if self.config.bi_end_is_peak and not end_is_peak(last_end, klc):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def try_update_end(self, klc: CKLine, for_virtual=False) -> bool:
|
||||||
|
def check_top(klc: CKLine, for_virtual):
|
||||||
|
if for_virtual:
|
||||||
|
return klc.dir == KLINE_DIR.UP
|
||||||
|
else:
|
||||||
|
return klc.fx == FX_TYPE.TOP
|
||||||
|
|
||||||
|
def check_bottom(klc: CKLine, for_virtual):
|
||||||
|
if for_virtual:
|
||||||
|
return klc.dir == KLINE_DIR.DOWN
|
||||||
|
else:
|
||||||
|
return klc.fx == FX_TYPE.BOTTOM
|
||||||
|
|
||||||
|
if len(self.bi_list) == 0:
|
||||||
|
return False
|
||||||
|
last_bi = self.bi_list[-1]
|
||||||
|
if (last_bi.is_up() and check_top(klc, for_virtual) and klc.high >= last_bi.get_end_val()) or \
|
||||||
|
(last_bi.is_down() and check_bottom(klc, for_virtual) and klc.low <= last_bi.get_end_val()):
|
||||||
|
last_bi.update_virtual_end(klc) if for_virtual else last_bi.update_new_end(klc)
|
||||||
|
self.last_end = klc
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_last_klu_of_last_bi(self) -> Optional[int]:
|
||||||
|
return self.bi_list[-1].get_end_klu().idx if len(self) > 0 else None
|
||||||
|
|
||||||
|
|
||||||
|
def end_is_peak(last_end: CKLine, cur_end: CKLine) -> bool:
|
||||||
|
if last_end.fx == FX_TYPE.BOTTOM:
|
||||||
|
cmp_thred = cur_end.high # 或者严格点选择get_klu_max_high()
|
||||||
|
klc = last_end.get_next()
|
||||||
|
while True:
|
||||||
|
if klc.idx >= cur_end.idx:
|
||||||
|
return True
|
||||||
|
if klc.high > cmp_thred:
|
||||||
|
return False
|
||||||
|
klc = klc.get_next()
|
||||||
|
elif last_end.fx == FX_TYPE.TOP:
|
||||||
|
cmp_thred = cur_end.low # 或者严格点选择get_klu_min_low()
|
||||||
|
klc = last_end.get_next()
|
||||||
|
while True:
|
||||||
|
if klc.idx >= cur_end.idx:
|
||||||
|
return True
|
||||||
|
if klc.low < cmp_thred:
|
||||||
|
return False
|
||||||
|
klc = klc.get_next()
|
||||||
|
return True
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
|
from Common.CEnum import BSP_TYPE, MACD_ALGO
|
||||||
|
from Common.func_util import _parse_inf
|
||||||
|
|
||||||
|
|
||||||
|
class CBSPointConfig:
|
||||||
|
def __init__(self, **args):
|
||||||
|
self.b_conf = CPointConfig(**args)
|
||||||
|
self.s_conf = CPointConfig(**args)
|
||||||
|
|
||||||
|
def GetBSConfig(self, is_buy):
|
||||||
|
return self.b_conf if is_buy else self.s_conf
|
||||||
|
|
||||||
|
|
||||||
|
class CPointConfig:
|
||||||
|
def __init__(self,
|
||||||
|
divergence_rate,
|
||||||
|
min_zs_cnt,
|
||||||
|
bsp1_only_multibi_zs,
|
||||||
|
max_bs2_rate,
|
||||||
|
macd_algo,
|
||||||
|
bs1_peak,
|
||||||
|
bs_type,
|
||||||
|
bsp2_follow_1,
|
||||||
|
bsp3_follow_1,
|
||||||
|
bsp3_peak,
|
||||||
|
bsp2s_follow_2,
|
||||||
|
max_bsp2s_lv,
|
||||||
|
strict_bsp3,
|
||||||
|
):
|
||||||
|
self.divergence_rate = divergence_rate
|
||||||
|
self.min_zs_cnt = min_zs_cnt
|
||||||
|
self.bsp1_only_multibi_zs = bsp1_only_multibi_zs
|
||||||
|
self.max_bs2_rate = max_bs2_rate
|
||||||
|
assert self.max_bs2_rate <= 1
|
||||||
|
self.SetMacdAlgo(macd_algo)
|
||||||
|
self.bs1_peak = bs1_peak
|
||||||
|
self.tmp_target_types = bs_type
|
||||||
|
self.target_types: List[BSP_TYPE] = []
|
||||||
|
self.bsp2_follow_1 = bsp2_follow_1
|
||||||
|
self.bsp3_follow_1 = bsp3_follow_1
|
||||||
|
self.bsp3_peak = bsp3_peak
|
||||||
|
self.bsp2s_follow_2 = bsp2s_follow_2
|
||||||
|
self.max_bsp2s_lv: Optional[int] = max_bsp2s_lv
|
||||||
|
self.strict_bsp3 = strict_bsp3
|
||||||
|
|
||||||
|
def parse_target_type(self):
|
||||||
|
_d: Dict[str, BSP_TYPE] = {x.value: x for x in BSP_TYPE}
|
||||||
|
if isinstance(self.tmp_target_types, str):
|
||||||
|
self.tmp_target_types = [t.strip() for t in self.tmp_target_types.split(",")]
|
||||||
|
for target_t in self.tmp_target_types:
|
||||||
|
assert target_t in ['1', '2', '3a', '2s', '1p', '3b']
|
||||||
|
self.target_types = [_d[_type] for _type in self.tmp_target_types]
|
||||||
|
|
||||||
|
def SetMacdAlgo(self, macd_algo):
|
||||||
|
_d = {
|
||||||
|
"area": MACD_ALGO.AREA,
|
||||||
|
"peak": MACD_ALGO.PEAK,
|
||||||
|
"full_area": MACD_ALGO.FULL_AREA,
|
||||||
|
"diff": MACD_ALGO.DIFF,
|
||||||
|
"slope": MACD_ALGO.SLOPE,
|
||||||
|
"amp": MACD_ALGO.AMP,
|
||||||
|
"amount": MACD_ALGO.AMOUNT,
|
||||||
|
"volumn": MACD_ALGO.VOLUMN,
|
||||||
|
"amount_avg": MACD_ALGO.AMOUNT_AVG,
|
||||||
|
"volumn_avg": MACD_ALGO.VOLUMN_AVG,
|
||||||
|
"turnrate_avg": MACD_ALGO.AMOUNT_AVG,
|
||||||
|
"rsi": MACD_ALGO.RSI,
|
||||||
|
}
|
||||||
|
self.macd_algo = _d[macd_algo]
|
||||||
|
|
||||||
|
def set(self, k, v):
|
||||||
|
v = _parse_inf(v)
|
||||||
|
if k == "macd_algo":
|
||||||
|
self.SetMacdAlgo(v)
|
||||||
|
else:
|
||||||
|
exec(f"self.{k} = {v}")
|
||||||
@@ -0,0 +1,342 @@
|
|||||||
|
from typing import Dict, Generic, List, Optional, TypeVar, Union, overload
|
||||||
|
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
from Bi.BiList import CBiList
|
||||||
|
from Common.CEnum import BSP_TYPE
|
||||||
|
from Common.func_util import has_overlap
|
||||||
|
from Seg.Seg import CSeg
|
||||||
|
from Seg.SegListComm import CSegListComm
|
||||||
|
from ZS.ZS import CZS
|
||||||
|
|
||||||
|
from .BS_Point import CBS_Point
|
||||||
|
from .BSPointConfig import CBSPointConfig, CPointConfig
|
||||||
|
|
||||||
|
LINE_TYPE = TypeVar('LINE_TYPE', CBi, CSeg[CBi])
|
||||||
|
LINE_LIST_TYPE = TypeVar('LINE_LIST_TYPE', CBiList, CSegListComm[CBi])
|
||||||
|
|
||||||
|
|
||||||
|
class CBSPointList(Generic[LINE_TYPE, LINE_LIST_TYPE]):
|
||||||
|
def __init__(self, bs_point_config: CBSPointConfig):
|
||||||
|
self.lst: List[CBS_Point[LINE_TYPE]] = []
|
||||||
|
self.bsp_dict: Dict[int, CBS_Point[LINE_TYPE]] = {}
|
||||||
|
self.bsp1_lst: List[CBS_Point[LINE_TYPE]] = []
|
||||||
|
self.config = bs_point_config
|
||||||
|
self.last_sure_pos = -1
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
yield from self.lst
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.lst)
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __getitem__(self, index: int) -> CBS_Point: ...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __getitem__(self, index: slice) -> List[CBS_Point]: ...
|
||||||
|
|
||||||
|
def __getitem__(self, index: Union[slice, int]) -> Union[List[CBS_Point], CBS_Point]:
|
||||||
|
return self.lst[index]
|
||||||
|
|
||||||
|
def cal(self, bi_list: LINE_LIST_TYPE, seg_list: CSegListComm[LINE_TYPE]):
|
||||||
|
self.lst = [bsp for bsp in self.lst if bsp.klu.idx <= self.last_sure_pos]
|
||||||
|
self.bsp_dict = {bsp.bi.get_end_klu().idx: bsp for bsp in self.lst}
|
||||||
|
self.bsp1_lst = [bsp for bsp in self.bsp1_lst if bsp.klu.idx <= self.last_sure_pos]
|
||||||
|
|
||||||
|
self.cal_seg_bs1point(seg_list, bi_list)
|
||||||
|
self.cal_seg_bs2point(seg_list, bi_list)
|
||||||
|
self.cal_seg_bs3point(seg_list, bi_list)
|
||||||
|
|
||||||
|
self.update_last_pos(seg_list)
|
||||||
|
|
||||||
|
def update_last_pos(self, seg_list: CSegListComm):
|
||||||
|
self.last_sure_pos = -1
|
||||||
|
for seg in seg_list[::-1]:
|
||||||
|
if seg.is_sure:
|
||||||
|
self.last_sure_pos = seg.end_bi.get_begin_klu().idx
|
||||||
|
return
|
||||||
|
|
||||||
|
def seg_need_cal(self, seg: CSeg):
|
||||||
|
return seg.end_bi.get_end_klu().idx > self.last_sure_pos
|
||||||
|
|
||||||
|
def add_bs(
|
||||||
|
self,
|
||||||
|
bs_type: BSP_TYPE,
|
||||||
|
bi: LINE_TYPE,
|
||||||
|
relate_bsp1: Optional[CBS_Point],
|
||||||
|
is_target_bsp: bool = True,
|
||||||
|
feature_dict=None,
|
||||||
|
):
|
||||||
|
is_buy = bi.is_down()
|
||||||
|
if exist_bsp := self.bsp_dict.get(bi.get_end_klu().idx):
|
||||||
|
assert exist_bsp.is_buy == is_buy
|
||||||
|
exist_bsp.add_another_bsp_prop(bs_type, relate_bsp1)
|
||||||
|
return
|
||||||
|
if bs_type not in self.config.GetBSConfig(is_buy).target_types:
|
||||||
|
is_target_bsp = False
|
||||||
|
|
||||||
|
if is_target_bsp or bs_type in [BSP_TYPE.T1, BSP_TYPE.T1P]:
|
||||||
|
bsp = CBS_Point[LINE_TYPE](
|
||||||
|
bi=bi,
|
||||||
|
is_buy=is_buy,
|
||||||
|
bs_type=bs_type,
|
||||||
|
relate_bsp1=relate_bsp1,
|
||||||
|
feature_dict=feature_dict,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
if is_target_bsp:
|
||||||
|
self.lst.append(bsp)
|
||||||
|
self.bsp_dict[bi.get_end_klu().idx] = bsp
|
||||||
|
if bs_type in [BSP_TYPE.T1, BSP_TYPE.T1P]:
|
||||||
|
self.bsp1_lst.append(bsp)
|
||||||
|
|
||||||
|
def cal_seg_bs1point(self, seg_list: CSegListComm[LINE_TYPE], bi_list: LINE_LIST_TYPE):
|
||||||
|
for seg in seg_list:
|
||||||
|
if not self.seg_need_cal(seg):
|
||||||
|
continue
|
||||||
|
self.cal_single_bs1point(seg, bi_list)
|
||||||
|
|
||||||
|
def cal_single_bs1point(self, seg: CSeg[LINE_TYPE], bi_list: LINE_LIST_TYPE):
|
||||||
|
BSP_CONF = self.config.GetBSConfig(seg.is_down())
|
||||||
|
zs_cnt = seg.get_multi_bi_zs_cnt() if BSP_CONF.bsp1_only_multibi_zs else len(seg.zs_lst)
|
||||||
|
is_target_bsp = (BSP_CONF.min_zs_cnt <= 0 or zs_cnt >= BSP_CONF.min_zs_cnt)
|
||||||
|
if len(seg.zs_lst) > 0 and \
|
||||||
|
not seg.zs_lst[-1].is_one_bi_zs() and \
|
||||||
|
((seg.zs_lst[-1].bi_out and seg.zs_lst[-1].bi_out.idx >= seg.end_bi.idx) or seg.zs_lst[-1].bi_lst[-1].idx >= seg.end_bi.idx) \
|
||||||
|
and seg.end_bi.idx - seg.zs_lst[-1].get_bi_in().idx > 2:
|
||||||
|
self.treat_bsp1(seg, BSP_CONF, is_target_bsp)
|
||||||
|
else:
|
||||||
|
self.treat_pz_bsp1(seg, BSP_CONF, bi_list, is_target_bsp)
|
||||||
|
|
||||||
|
def treat_bsp1(self, seg: CSeg[LINE_TYPE], BSP_CONF: CPointConfig, is_target_bsp: bool):
|
||||||
|
last_zs = seg.zs_lst[-1]
|
||||||
|
break_peak, _ = last_zs.out_bi_is_peak(seg.end_bi.idx)
|
||||||
|
if BSP_CONF.bs1_peak and not break_peak:
|
||||||
|
is_target_bsp = False
|
||||||
|
is_diver, divergence_rate = last_zs.is_divergence(BSP_CONF, out_bi=seg.end_bi)
|
||||||
|
if not is_diver:
|
||||||
|
is_target_bsp = False
|
||||||
|
feature_dict = {'divergence_rate': divergence_rate}
|
||||||
|
self.add_bs(bs_type=BSP_TYPE.T1, bi=seg.end_bi, relate_bsp1=None, is_target_bsp=is_target_bsp, feature_dict=feature_dict)
|
||||||
|
|
||||||
|
def treat_pz_bsp1(self, seg: CSeg[LINE_TYPE], BSP_CONF: CPointConfig, bi_list: LINE_LIST_TYPE, is_target_bsp):
|
||||||
|
last_bi = seg.end_bi
|
||||||
|
pre_bi = bi_list[last_bi.idx-2]
|
||||||
|
if last_bi.seg_idx != pre_bi.seg_idx:
|
||||||
|
return
|
||||||
|
if last_bi.dir != seg.dir:
|
||||||
|
return
|
||||||
|
if last_bi.is_down() and last_bi._low() > pre_bi._low(): # 创新低
|
||||||
|
return
|
||||||
|
if last_bi.is_up() and last_bi._high() < pre_bi._high(): # 创新高
|
||||||
|
return
|
||||||
|
in_metric = pre_bi.cal_macd_metric(BSP_CONF.macd_algo, is_reverse=False)
|
||||||
|
out_metric = last_bi.cal_macd_metric(BSP_CONF.macd_algo, is_reverse=True)
|
||||||
|
is_diver, divergence_rate = out_metric <= BSP_CONF.divergence_rate*in_metric, out_metric/(in_metric+1e-7)
|
||||||
|
if not is_diver:
|
||||||
|
is_target_bsp = False
|
||||||
|
if isinstance(bi_list, CBiList):
|
||||||
|
assert isinstance(last_bi, CBi) and isinstance(pre_bi, CBi)
|
||||||
|
feature_dict = {'divergence_rate': divergence_rate}
|
||||||
|
self.add_bs(bs_type=BSP_TYPE.T1P, bi=last_bi, relate_bsp1=None, is_target_bsp=is_target_bsp, feature_dict=feature_dict)
|
||||||
|
|
||||||
|
def cal_seg_bs2point(self, seg_list: CSegListComm[LINE_TYPE], bi_list: LINE_LIST_TYPE):
|
||||||
|
bsp1_bi_idx_dict = {bsp.bi.idx: bsp for bsp in self.bsp1_lst}
|
||||||
|
for seg in seg_list:
|
||||||
|
config = self.config.GetBSConfig(seg.is_down())
|
||||||
|
if BSP_TYPE.T2 not in config.target_types and BSP_TYPE.T2S not in config.target_types:
|
||||||
|
continue
|
||||||
|
self.treat_bsp2(seg, bsp1_bi_idx_dict, seg_list, bi_list)
|
||||||
|
|
||||||
|
def treat_bsp2(self, seg: CSeg, bsp1_bi_idx_dict, seg_list: CSegListComm[LINE_TYPE], bi_list: LINE_LIST_TYPE):
|
||||||
|
if not self.seg_need_cal(seg):
|
||||||
|
return
|
||||||
|
if len(seg_list) > 1:
|
||||||
|
BSP_CONF = self.config.GetBSConfig(seg.is_down())
|
||||||
|
bsp1_bi = seg.end_bi
|
||||||
|
bsp1_bi_idx = bsp1_bi.idx
|
||||||
|
real_bsp1 = bsp1_bi_idx_dict.get(bsp1_bi.idx)
|
||||||
|
if bsp1_bi.idx + 2 >= len(bi_list):
|
||||||
|
return
|
||||||
|
break_bi = bi_list[bsp1_bi.idx + 1]
|
||||||
|
bsp2_bi = bi_list[bsp1_bi.idx + 2]
|
||||||
|
else:
|
||||||
|
BSP_CONF = self.config.GetBSConfig(seg.is_up())
|
||||||
|
bsp1_bi, real_bsp1 = None, None
|
||||||
|
bsp1_bi_idx = -1
|
||||||
|
if len(bi_list) == 1:
|
||||||
|
return
|
||||||
|
bsp2_bi = bi_list[1]
|
||||||
|
break_bi = bi_list[0]
|
||||||
|
if BSP_CONF.bsp2_follow_1 and bsp1_bi_idx not in [bsp.bi.idx for bsp in self.bsp_dict.values()]: # check bsp2_follow_1
|
||||||
|
return
|
||||||
|
retrace_rate = bsp2_bi.amp()/break_bi.amp()
|
||||||
|
bsp2_flag = retrace_rate <= BSP_CONF.max_bs2_rate
|
||||||
|
if bsp2_flag:
|
||||||
|
self.add_bs(bs_type=BSP_TYPE.T2, bi=bsp2_bi, relate_bsp1=real_bsp1) # type: ignore
|
||||||
|
elif BSP_CONF.bsp2s_follow_2:
|
||||||
|
return
|
||||||
|
if BSP_TYPE.T2S not in self.config.GetBSConfig(seg.is_down()).target_types:
|
||||||
|
return
|
||||||
|
self.treat_bsp2s(seg_list, bi_list, bsp2_bi, break_bi, real_bsp1, BSP_CONF) # type: ignore
|
||||||
|
|
||||||
|
def treat_bsp2s(
|
||||||
|
self,
|
||||||
|
seg_list: CSegListComm,
|
||||||
|
bi_list: LINE_LIST_TYPE,
|
||||||
|
bsp2_bi: LINE_TYPE,
|
||||||
|
break_bi: LINE_TYPE,
|
||||||
|
real_bsp1: Optional[CBS_Point],
|
||||||
|
BSP_CONF: CPointConfig,
|
||||||
|
):
|
||||||
|
bias = 2
|
||||||
|
_low, _high = None, None
|
||||||
|
while bsp2_bi.idx + bias < len(bi_list): # 计算类二
|
||||||
|
bsp2s_bi = bi_list[bsp2_bi.idx + bias]
|
||||||
|
assert bsp2s_bi.seg_idx is not None and bsp2_bi.seg_idx is not None
|
||||||
|
if BSP_CONF.max_bsp2s_lv is not None and bias/2 > BSP_CONF.max_bsp2s_lv:
|
||||||
|
break
|
||||||
|
if bsp2s_bi.seg_idx != bsp2_bi.seg_idx and (bsp2s_bi.seg_idx < len(seg_list)-1 or bsp2s_bi.seg_idx - bsp2_bi.seg_idx >= 2 or seg_list[bsp2_bi.seg_idx].is_sure):
|
||||||
|
break
|
||||||
|
if bias == 2:
|
||||||
|
if not has_overlap(bsp2_bi._low(), bsp2_bi._high(), bsp2s_bi._low(), bsp2s_bi._high()):
|
||||||
|
break
|
||||||
|
_low = max([bsp2_bi._low(), bsp2s_bi._low()])
|
||||||
|
_high = min([bsp2_bi._high(), bsp2s_bi._high()])
|
||||||
|
elif not has_overlap(_low, _high, bsp2s_bi._low(), bsp2s_bi._high()):
|
||||||
|
break
|
||||||
|
|
||||||
|
if bsp2s_break_bsp1(bsp2s_bi, break_bi):
|
||||||
|
break
|
||||||
|
retrace_rate = abs(bsp2s_bi.get_end_val()-break_bi.get_end_val())/break_bi.amp()
|
||||||
|
if retrace_rate > BSP_CONF.max_bs2_rate:
|
||||||
|
break
|
||||||
|
|
||||||
|
self.add_bs(bs_type=BSP_TYPE.T2S, bi=bsp2s_bi, relate_bsp1=real_bsp1) # type: ignore
|
||||||
|
bias += 2
|
||||||
|
|
||||||
|
def cal_seg_bs3point(self, seg_list: CSegListComm[LINE_TYPE], bi_list: LINE_LIST_TYPE):
|
||||||
|
bsp1_bi_idx_dict = {bsp.bi.idx: bsp for bsp in self.bsp1_lst}
|
||||||
|
for seg in seg_list:
|
||||||
|
if not self.seg_need_cal(seg):
|
||||||
|
continue
|
||||||
|
config = self.config.GetBSConfig(seg.is_down())
|
||||||
|
if BSP_TYPE.T3A not in config.target_types and BSP_TYPE.T3B not in config.target_types:
|
||||||
|
continue
|
||||||
|
if len(seg_list) > 1:
|
||||||
|
bsp1_bi = seg.end_bi
|
||||||
|
bsp1_bi_idx = bsp1_bi.idx
|
||||||
|
BSP_CONF = self.config.GetBSConfig(seg.is_down())
|
||||||
|
real_bsp1 = bsp1_bi_idx_dict.get(bsp1_bi.idx)
|
||||||
|
next_seg_idx = seg.idx+1
|
||||||
|
next_seg = seg.next # 可能为None, 所以并不一定可以保证next_seg_idx == next_seg.idx
|
||||||
|
else:
|
||||||
|
next_seg = seg
|
||||||
|
next_seg_idx = seg.idx
|
||||||
|
bsp1_bi, real_bsp1 = None, None
|
||||||
|
bsp1_bi_idx = -1
|
||||||
|
BSP_CONF = self.config.GetBSConfig(seg.is_up())
|
||||||
|
if BSP_CONF.bsp3_follow_1 and bsp1_bi_idx not in [bsp.bi.idx for bsp in self.bsp_dict.values()]:
|
||||||
|
continue
|
||||||
|
if next_seg:
|
||||||
|
self.treat_bsp3_after(seg_list, next_seg, BSP_CONF, bi_list, real_bsp1, bsp1_bi_idx, next_seg_idx)
|
||||||
|
self.treat_bsp3_before(seg_list, seg, next_seg, bsp1_bi, BSP_CONF, bi_list, real_bsp1, next_seg_idx)
|
||||||
|
|
||||||
|
def treat_bsp3_after(
|
||||||
|
self,
|
||||||
|
seg_list: CSegListComm[LINE_TYPE],
|
||||||
|
next_seg: CSeg[LINE_TYPE],
|
||||||
|
BSP_CONF: CPointConfig,
|
||||||
|
bi_list: LINE_LIST_TYPE,
|
||||||
|
real_bsp1,
|
||||||
|
bsp1_bi_idx,
|
||||||
|
next_seg_idx
|
||||||
|
):
|
||||||
|
first_zs = next_seg.get_first_multi_bi_zs()
|
||||||
|
if first_zs is None:
|
||||||
|
return
|
||||||
|
if BSP_CONF.strict_bsp3 and first_zs.get_bi_in().idx != bsp1_bi_idx+1:
|
||||||
|
return
|
||||||
|
if first_zs.bi_out is None or first_zs.bi_out.idx+1 >= len(bi_list):
|
||||||
|
return
|
||||||
|
bsp3_bi = bi_list[first_zs.bi_out.idx+1]
|
||||||
|
if bsp3_bi.parent_seg is None:
|
||||||
|
if next_seg.idx != len(seg_list)-1:
|
||||||
|
return
|
||||||
|
elif bsp3_bi.parent_seg.idx != next_seg.idx:
|
||||||
|
if len(bsp3_bi.parent_seg.bi_list) >= 3:
|
||||||
|
return
|
||||||
|
if bsp3_bi.dir == next_seg.dir:
|
||||||
|
return
|
||||||
|
if bsp3_bi.seg_idx != next_seg_idx and next_seg_idx < len(seg_list)-2:
|
||||||
|
return
|
||||||
|
if bsp3_back2zs(bsp3_bi, first_zs):
|
||||||
|
return
|
||||||
|
bsp3_peak_zs = bsp3_break_zspeak(bsp3_bi, first_zs)
|
||||||
|
if BSP_CONF.bsp3_peak and not bsp3_peak_zs:
|
||||||
|
return
|
||||||
|
self.add_bs(bs_type=BSP_TYPE.T3A, bi=bsp3_bi, relate_bsp1=real_bsp1) # type: ignore
|
||||||
|
|
||||||
|
def treat_bsp3_before(
|
||||||
|
self,
|
||||||
|
seg_list: CSegListComm[LINE_TYPE],
|
||||||
|
seg: CSeg[LINE_TYPE],
|
||||||
|
next_seg: Optional[CSeg[LINE_TYPE]],
|
||||||
|
bsp1_bi: Optional[LINE_TYPE],
|
||||||
|
BSP_CONF: CPointConfig,
|
||||||
|
bi_list: LINE_LIST_TYPE,
|
||||||
|
real_bsp1,
|
||||||
|
next_seg_idx
|
||||||
|
):
|
||||||
|
cmp_zs = seg.get_final_multi_bi_zs()
|
||||||
|
if cmp_zs is None:
|
||||||
|
return
|
||||||
|
if not bsp1_bi:
|
||||||
|
return
|
||||||
|
if BSP_CONF.strict_bsp3 and (cmp_zs.bi_out is None or cmp_zs.bi_out.idx != bsp1_bi.idx):
|
||||||
|
return
|
||||||
|
end_bi_idx = cal_bsp3_bi_end_idx(next_seg)
|
||||||
|
for bsp3_bi in bi_list[bsp1_bi.idx+2::2]:
|
||||||
|
if bsp3_bi.idx > end_bi_idx:
|
||||||
|
break
|
||||||
|
assert bsp3_bi.seg_idx is not None
|
||||||
|
if bsp3_bi.seg_idx != next_seg_idx and bsp3_bi.seg_idx < len(seg_list)-1:
|
||||||
|
break
|
||||||
|
if bsp3_back2zs(bsp3_bi, cmp_zs): # type: ignore
|
||||||
|
continue
|
||||||
|
self.add_bs(bs_type=BSP_TYPE.T3B, bi=bsp3_bi, relate_bsp1=real_bsp1) # type: ignore
|
||||||
|
break
|
||||||
|
|
||||||
|
def getLastestBspList(self) -> List[CBS_Point[LINE_TYPE]]:
|
||||||
|
if len(self.lst) == 0:
|
||||||
|
return []
|
||||||
|
return sorted(self.lst, key=lambda bsp: bsp.bi.idx, reverse=True)
|
||||||
|
|
||||||
|
|
||||||
|
def bsp2s_break_bsp1(bsp2s_bi: LINE_TYPE, bsp2_break_bi: LINE_TYPE) -> bool:
|
||||||
|
return (bsp2s_bi.is_down() and bsp2s_bi._low() < bsp2_break_bi._low()) or \
|
||||||
|
(bsp2s_bi.is_up() and bsp2s_bi._high() > bsp2_break_bi._high())
|
||||||
|
|
||||||
|
|
||||||
|
def bsp3_back2zs(bsp3_bi: LINE_TYPE, zs: CZS) -> bool:
|
||||||
|
return (bsp3_bi.is_down() and bsp3_bi._low() < zs.high) or (bsp3_bi.is_up() and bsp3_bi._high() > zs.low)
|
||||||
|
|
||||||
|
|
||||||
|
def bsp3_break_zspeak(bsp3_bi: LINE_TYPE, zs: CZS) -> bool:
|
||||||
|
return (bsp3_bi.is_down() and bsp3_bi._high() >= zs.peak_high) or (bsp3_bi.is_up() and bsp3_bi._low() <= zs.peak_low)
|
||||||
|
|
||||||
|
|
||||||
|
def cal_bsp3_bi_end_idx(seg: Optional[CSeg[LINE_TYPE]]):
|
||||||
|
if not seg:
|
||||||
|
return float("inf")
|
||||||
|
if seg.get_multi_bi_zs_cnt() == 0 and seg.next is None:
|
||||||
|
return float("inf")
|
||||||
|
end_bi_idx = seg.end_bi.idx-1
|
||||||
|
for zs in seg.zs_lst:
|
||||||
|
if zs.is_one_bi_zs():
|
||||||
|
continue
|
||||||
|
if zs.bi_out is not None:
|
||||||
|
end_bi_idx = zs.bi_out.idx
|
||||||
|
break
|
||||||
|
return end_bi_idx
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
from typing import Dict, Generic, List, Optional, TypeVar, Union
|
||||||
|
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import BSP_TYPE
|
||||||
|
from Seg.Seg import CSeg
|
||||||
|
|
||||||
|
LINE_TYPE = TypeVar('LINE_TYPE', CBi, CSeg)
|
||||||
|
|
||||||
|
|
||||||
|
class CBS_Point(Generic[LINE_TYPE]):
|
||||||
|
def __init__(self, bi: LINE_TYPE, is_buy, bs_type: BSP_TYPE, relate_bsp1: Optional['CBS_Point'], feature_dict=None):
|
||||||
|
self.bi: LINE_TYPE = bi
|
||||||
|
self.klu = bi.get_end_klu()
|
||||||
|
self.is_buy = is_buy
|
||||||
|
self.type: List[BSP_TYPE] = [bs_type]
|
||||||
|
self.relate_bsp1 = relate_bsp1
|
||||||
|
|
||||||
|
self.bi.bsp = self # type: ignore
|
||||||
|
self.features = CFeatures(feature_dict)
|
||||||
|
|
||||||
|
self.is_segbsp = False
|
||||||
|
|
||||||
|
def add_type(self, bs_type: BSP_TYPE):
|
||||||
|
self.type.append(bs_type)
|
||||||
|
|
||||||
|
def type2str(self):
|
||||||
|
return ",".join([x.value for x in self.type])
|
||||||
|
|
||||||
|
def add_another_bsp_prop(self, bs_type: BSP_TYPE, relate_bsp1):
|
||||||
|
self.add_type(bs_type)
|
||||||
|
if self.relate_bsp1 is None:
|
||||||
|
self.relate_bsp1 = relate_bsp1
|
||||||
|
elif relate_bsp1 is not None:
|
||||||
|
assert self.relate_bsp1.klu.idx == relate_bsp1.klu.idx
|
||||||
|
|
||||||
|
def add_feat(self, inp1: Union[str, Dict[str, float], Dict[str, Optional[float]], 'CFeatures'], inp2: Optional[float] = None):
|
||||||
|
self.features.add_feat(inp1, inp2)
|
||||||
@@ -0,0 +1,299 @@
|
|||||||
|
import copy
|
||||||
|
import datetime
|
||||||
|
from collections import defaultdict
|
||||||
|
from typing import Dict, Iterable, List, Optional, Union
|
||||||
|
|
||||||
|
from BuySellPoint.BS_Point import CBS_Point
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE
|
||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Common.func_util import check_kltype_order, kltype_lte_day
|
||||||
|
from DataAPI.CommonStockAPI import CCommonStockApi
|
||||||
|
from KLine.KLine_List import CKLine_List
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
|
||||||
|
class CChan:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
code,
|
||||||
|
begin_time=None,
|
||||||
|
end_time=None,
|
||||||
|
data_src: Union[DATA_SRC, str] = DATA_SRC.CCXT,
|
||||||
|
lv_list=None,
|
||||||
|
config=None,
|
||||||
|
autype: AUTYPE = AUTYPE.QFQ,
|
||||||
|
):
|
||||||
|
if lv_list is None:
|
||||||
|
lv_list = [KL_TYPE.K_DAY, KL_TYPE.K_60M]
|
||||||
|
check_kltype_order(lv_list) # lv_list顺序从高到低
|
||||||
|
self.code = code
|
||||||
|
self.begin_time = str(begin_time) if isinstance(begin_time, datetime.date) else begin_time
|
||||||
|
self.end_time = str(end_time) if isinstance(end_time, datetime.date) else end_time
|
||||||
|
self.begin_time = str(begin_time)
|
||||||
|
self.end_time = str(end_time)
|
||||||
|
self.autype = autype
|
||||||
|
self.data_src = data_src
|
||||||
|
self.lv_list: List[KL_TYPE] = lv_list
|
||||||
|
|
||||||
|
if config is None:
|
||||||
|
config = CChanConfig()
|
||||||
|
self.conf = config
|
||||||
|
|
||||||
|
self.kl_misalign_cnt = 0
|
||||||
|
self.kl_inconsistent_detail = defaultdict(list)
|
||||||
|
|
||||||
|
self.g_kl_iter = defaultdict(list)
|
||||||
|
|
||||||
|
self.do_init()
|
||||||
|
|
||||||
|
if not config.trigger_step:
|
||||||
|
for _ in self.load():
|
||||||
|
...
|
||||||
|
|
||||||
|
def __deepcopy__(self, memo):
|
||||||
|
cls = self.__class__
|
||||||
|
obj: CChan = cls.__new__(cls)
|
||||||
|
memo[id(self)] = obj
|
||||||
|
obj.code = self.code
|
||||||
|
obj.begin_time = self.begin_time
|
||||||
|
obj.end_time = self.end_time
|
||||||
|
obj.autype = self.autype
|
||||||
|
obj.data_src = self.data_src
|
||||||
|
obj.lv_list = copy.deepcopy(self.lv_list, memo)
|
||||||
|
obj.conf = copy.deepcopy(self.conf, memo)
|
||||||
|
obj.kl_misalign_cnt = self.kl_misalign_cnt
|
||||||
|
obj.kl_inconsistent_detail = copy.deepcopy(self.kl_inconsistent_detail, memo)
|
||||||
|
obj.g_kl_iter = copy.deepcopy(self.g_kl_iter, memo)
|
||||||
|
if hasattr(self, 'klu_cache'):
|
||||||
|
obj.klu_cache = copy.deepcopy(self.klu_cache, memo)
|
||||||
|
if hasattr(self, 'klu_last_t'):
|
||||||
|
obj.klu_last_t = copy.deepcopy(self.klu_last_t, memo)
|
||||||
|
obj.kl_datas = {}
|
||||||
|
for kl_type, ckline in self.kl_datas.items():
|
||||||
|
obj.kl_datas[kl_type] = copy.deepcopy(ckline, memo)
|
||||||
|
for kl_type, ckline in self.kl_datas.items():
|
||||||
|
for klc in ckline:
|
||||||
|
for klu in klc.lst:
|
||||||
|
assert id(klu) in memo
|
||||||
|
if klu.sup_kl:
|
||||||
|
memo[id(klu)].sup_kl = memo[id(klu.sup_kl)]
|
||||||
|
memo[id(klu)].sub_kl_list = [memo[id(sub_kl)] for sub_kl in klu.sub_kl_list]
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def do_init(self):
|
||||||
|
self.kl_datas: Dict[KL_TYPE, CKLine_List] = {}
|
||||||
|
for idx in range(len(self.lv_list)):
|
||||||
|
self.kl_datas[self.lv_list[idx]] = CKLine_List(self.lv_list[idx], conf=self.conf)
|
||||||
|
|
||||||
|
def load_stock_data(self, stockapi_instance: CCommonStockApi, lv) -> Iterable[CKLine_Unit]:
|
||||||
|
for KLU_IDX, klu in enumerate(stockapi_instance.get_kl_data()):
|
||||||
|
klu.set_idx(KLU_IDX)
|
||||||
|
klu.kl_type = lv
|
||||||
|
yield klu
|
||||||
|
|
||||||
|
def get_load_stock_iter(self, stockapi_cls, lv):
|
||||||
|
stockapi_instance = stockapi_cls(code=self.code, k_type=lv, begin_date=self.begin_time, end_date=self.end_time, autype=self.autype)
|
||||||
|
return self.load_stock_data(stockapi_instance, lv)
|
||||||
|
|
||||||
|
def add_lv_iter(self, lv_idx, iter):
|
||||||
|
if isinstance(lv_idx, int):
|
||||||
|
self.g_kl_iter[self.lv_list[lv_idx]].append(iter)
|
||||||
|
else:
|
||||||
|
self.g_kl_iter[lv_idx].append(iter)
|
||||||
|
|
||||||
|
def get_next_lv_klu(self, lv_idx):
|
||||||
|
if isinstance(lv_idx, int):
|
||||||
|
lv_idx = self.lv_list[lv_idx]
|
||||||
|
if len(self.g_kl_iter[lv_idx]) == 0:
|
||||||
|
raise StopIteration
|
||||||
|
try:
|
||||||
|
return self.g_kl_iter[lv_idx][0].__next__()
|
||||||
|
except StopIteration:
|
||||||
|
self.g_kl_iter[lv_idx] = self.g_kl_iter[lv_idx][1:]
|
||||||
|
if len(self.g_kl_iter[lv_idx]) != 0:
|
||||||
|
return self.get_next_lv_klu(lv_idx)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
def step_load(self):
|
||||||
|
assert self.conf.trigger_step
|
||||||
|
self.do_init() # 清空数据,防止再次重跑没有数据
|
||||||
|
yielded = False # 是否曾经返回过结果
|
||||||
|
for idx, snapshot in enumerate(self.load(self.conf.trigger_step)):
|
||||||
|
if idx < self.conf.skip_step:
|
||||||
|
continue
|
||||||
|
yield snapshot
|
||||||
|
yielded = True
|
||||||
|
if not yielded:
|
||||||
|
yield self
|
||||||
|
|
||||||
|
def trigger_load(self, inp):
|
||||||
|
# {type: [klu, ...]}
|
||||||
|
if not hasattr(self, 'klu_cache'):
|
||||||
|
self.klu_cache: List[Optional[CKLine_Unit]] = [None for _ in self.lv_list]
|
||||||
|
if not hasattr(self, 'klu_last_t'):
|
||||||
|
self.klu_last_t = [CTime(1980, 1, 1, 0, 0) for _ in self.lv_list]
|
||||||
|
for lv_idx, lv in enumerate(self.lv_list):
|
||||||
|
if lv not in inp:
|
||||||
|
if lv_idx == 0:
|
||||||
|
raise CChanException(f"最高级别{lv}没有传入数据", ErrCode.NO_DATA)
|
||||||
|
continue
|
||||||
|
for klu in inp[lv]:
|
||||||
|
klu.kl_type = lv
|
||||||
|
assert isinstance(inp[lv], list)
|
||||||
|
self.add_lv_iter(lv, iter(inp[lv]))
|
||||||
|
for _ in self.load_iterator(lv_idx=0, parent_klu=None, step=False):
|
||||||
|
...
|
||||||
|
if not self.conf.trigger_step: # 非回放模式全部算完之后才算一次中枢和线段
|
||||||
|
for lv in self.lv_list:
|
||||||
|
self.kl_datas[lv].cal_seg_and_zs()
|
||||||
|
|
||||||
|
def init_lv_klu_iter(self, stockapi_cls):
|
||||||
|
# 为了跳过一些获取数据失败的级别
|
||||||
|
lv_klu_iter = []
|
||||||
|
valid_lv_list = []
|
||||||
|
for lv in self.lv_list:
|
||||||
|
try:
|
||||||
|
lv_klu_iter.append(self.get_load_stock_iter(stockapi_cls, lv))
|
||||||
|
valid_lv_list.append(lv)
|
||||||
|
except CChanException as e:
|
||||||
|
if e.errcode == ErrCode.SRC_DATA_NOT_FOUND and self.conf.auto_skip_illegal_sub_lv:
|
||||||
|
if self.conf.print_warning:
|
||||||
|
print(f"[WARNING-{self.code}]{lv}级别获取数据失败,跳过")
|
||||||
|
del self.kl_datas[lv]
|
||||||
|
continue
|
||||||
|
raise e
|
||||||
|
self.lv_list = valid_lv_list
|
||||||
|
return lv_klu_iter
|
||||||
|
|
||||||
|
def GetStockAPI(self):
|
||||||
|
_dict = {}
|
||||||
|
if self.data_src == DATA_SRC.BAO_STOCK:
|
||||||
|
from DataAPI.BaoStockAPI import CBaoStock
|
||||||
|
_dict[DATA_SRC.BAO_STOCK] = CBaoStock
|
||||||
|
elif self.data_src == DATA_SRC.CCXT:
|
||||||
|
from DataAPI.ccxt import CCXT
|
||||||
|
_dict[DATA_SRC.CCXT] = CCXT
|
||||||
|
elif self.data_src == DATA_SRC.CSV:
|
||||||
|
from DataAPI.csvAPI import CSV_API
|
||||||
|
_dict[DATA_SRC.CSV] = CSV_API
|
||||||
|
if self.data_src in _dict:
|
||||||
|
return _dict[self.data_src]
|
||||||
|
assert isinstance(self.data_src, str)
|
||||||
|
if self.data_src.find("custom:") < 0:
|
||||||
|
raise CChanException("load src type error", ErrCode.SRC_DATA_TYPE_ERR)
|
||||||
|
package_info = self.data_src.split(":")[1]
|
||||||
|
package_name, cls_name = package_info.split(".")
|
||||||
|
exec(f"from DataAPI.{package_name} import {cls_name}")
|
||||||
|
return eval(cls_name)
|
||||||
|
|
||||||
|
def load(self, step=False):
|
||||||
|
stockapi_cls = self.GetStockAPI()
|
||||||
|
try:
|
||||||
|
stockapi_cls.do_init()
|
||||||
|
for lv_idx, klu_iter in enumerate(self.init_lv_klu_iter(stockapi_cls)):
|
||||||
|
self.add_lv_iter(lv_idx, klu_iter)
|
||||||
|
self.klu_cache: List[Optional[CKLine_Unit]] = [None for _ in self.lv_list]
|
||||||
|
self.klu_last_t = [CTime(1980, 1, 1, 0, 0) for _ in self.lv_list]
|
||||||
|
|
||||||
|
yield from self.load_iterator(lv_idx=0, parent_klu=None, step=step) # 计算入口
|
||||||
|
if not step: # 非回放模式全部算完之后才算一次中枢和线段
|
||||||
|
for lv in self.lv_list:
|
||||||
|
self.kl_datas[lv].cal_seg_and_zs()
|
||||||
|
except Exception:
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
stockapi_cls.do_close()
|
||||||
|
if len(self[0]) == 0:
|
||||||
|
raise CChanException("最高级别没有获得任何数据", ErrCode.NO_DATA)
|
||||||
|
|
||||||
|
def set_klu_parent_relation(self, parent_klu, kline_unit, cur_lv, lv_idx):
|
||||||
|
if self.conf.kl_data_check and kltype_lte_day(cur_lv) and kltype_lte_day(self.lv_list[lv_idx-1]):
|
||||||
|
self.check_kl_consitent(parent_klu, kline_unit)
|
||||||
|
parent_klu.add_children(kline_unit)
|
||||||
|
kline_unit.set_parent(parent_klu)
|
||||||
|
|
||||||
|
def add_new_kl(self, cur_lv: KL_TYPE, kline_unit):
|
||||||
|
try:
|
||||||
|
self.kl_datas[cur_lv].add_single_klu(kline_unit)
|
||||||
|
except Exception:
|
||||||
|
if self.conf.print_err_time:
|
||||||
|
print(f"[ERROR-{self.code}]在计算{kline_unit.time}K线时发生错误!")
|
||||||
|
raise
|
||||||
|
|
||||||
|
def try_set_klu_idx(self, lv_idx: int, kline_unit: CKLine_Unit):
|
||||||
|
if kline_unit.idx >= 0:
|
||||||
|
return
|
||||||
|
if len(self[lv_idx]) == 0:
|
||||||
|
kline_unit.set_idx(0)
|
||||||
|
else:
|
||||||
|
kline_unit.set_idx(self[lv_idx][-1][-1].idx + 1)
|
||||||
|
|
||||||
|
def load_iterator(self, lv_idx, parent_klu, step):
|
||||||
|
# K线时间天级别以下描述的是结束时间,如60M线,每天第一根是10点30的
|
||||||
|
# 天以上是当天日期
|
||||||
|
cur_lv = self.lv_list[lv_idx]
|
||||||
|
pre_klu = self[lv_idx][-1][-1] if len(self[lv_idx]) > 0 and len(self[lv_idx][-1]) > 0 else None
|
||||||
|
while True:
|
||||||
|
if self.klu_cache[lv_idx]:
|
||||||
|
kline_unit = self.klu_cache[lv_idx]
|
||||||
|
assert kline_unit is not None
|
||||||
|
self.klu_cache[lv_idx] = None
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
kline_unit = self.get_next_lv_klu(lv_idx)
|
||||||
|
self.try_set_klu_idx(lv_idx, kline_unit)
|
||||||
|
if not kline_unit.time > self.klu_last_t[lv_idx]:
|
||||||
|
raise CChanException(f"kline time err, cur={kline_unit.time}, last={self.klu_last_t[lv_idx]}", ErrCode.KL_NOT_MONOTONOUS)
|
||||||
|
self.klu_last_t[lv_idx] = kline_unit.time
|
||||||
|
except StopIteration:
|
||||||
|
break
|
||||||
|
|
||||||
|
if parent_klu and kline_unit.time > parent_klu.time:
|
||||||
|
self.klu_cache[lv_idx] = kline_unit
|
||||||
|
break
|
||||||
|
kline_unit.set_pre_klu(pre_klu)
|
||||||
|
pre_klu = kline_unit
|
||||||
|
self.add_new_kl(cur_lv, kline_unit)
|
||||||
|
if parent_klu:
|
||||||
|
self.set_klu_parent_relation(parent_klu, kline_unit, cur_lv, lv_idx)
|
||||||
|
if lv_idx != len(self.lv_list)-1:
|
||||||
|
for _ in self.load_iterator(lv_idx+1, kline_unit, step):
|
||||||
|
...
|
||||||
|
self.check_kl_align(kline_unit, lv_idx)
|
||||||
|
if lv_idx == 0 and step:
|
||||||
|
yield self
|
||||||
|
|
||||||
|
def check_kl_consitent(self, parent_klu, sub_klu):
|
||||||
|
if parent_klu.time.year != sub_klu.time.year or \
|
||||||
|
parent_klu.time.month != sub_klu.time.month or \
|
||||||
|
parent_klu.time.day != sub_klu.time.day:
|
||||||
|
self.kl_inconsistent_detail[str(parent_klu.time)].append(sub_klu.time)
|
||||||
|
if self.conf.print_warning:
|
||||||
|
print(f"[WARNING-{self.code}]父级别时间是{parent_klu.time},次级别时间却是{sub_klu.time}")
|
||||||
|
if len(self.kl_inconsistent_detail) >= self.conf.max_kl_inconsistent_cnt:
|
||||||
|
raise CChanException(f"父&子级别K线时间不一致条数超过{self.conf.max_kl_inconsistent_cnt}!!", ErrCode.KL_TIME_INCONSISTENT)
|
||||||
|
|
||||||
|
def check_kl_align(self, kline_unit, lv_idx):
|
||||||
|
if self.conf.kl_data_check and len(kline_unit.sub_kl_list) == 0:
|
||||||
|
self.kl_misalign_cnt += 1
|
||||||
|
if self.conf.print_warning:
|
||||||
|
print(f"[WARNING-{self.code}]当前{kline_unit.time}没在次级别{self.lv_list[lv_idx+1]}找到K线!!")
|
||||||
|
if self.kl_misalign_cnt >= self.conf.max_kl_misalgin_cnt:
|
||||||
|
raise CChanException(f"在次级别找不到K线条数超过{self.conf.max_kl_misalgin_cnt}!!", ErrCode.KL_DATA_NOT_ALIGN)
|
||||||
|
|
||||||
|
def __getitem__(self, n) -> CKLine_List:
|
||||||
|
if isinstance(n, KL_TYPE):
|
||||||
|
return self.kl_datas[n]
|
||||||
|
elif isinstance(n, int):
|
||||||
|
return self.kl_datas[self.lv_list[n]]
|
||||||
|
else:
|
||||||
|
raise CChanException("unspoourt query type", ErrCode.COMMON_ERROR)
|
||||||
|
|
||||||
|
def get_bsp(self, idx=None) -> List[CBS_Point]:
|
||||||
|
if idx is not None:
|
||||||
|
return sorted(self[idx].bs_point_lst.lst, key=lambda x: x.klu.time)
|
||||||
|
assert len(self.lv_list) == 1
|
||||||
|
return sorted(self[0].bs_point_lst.lst, key=lambda x: x.klu.time)
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
from typing import List
|
||||||
|
|
||||||
|
from Bi.BiConfig import CBiConfig
|
||||||
|
from BuySellPoint.BSPointConfig import CBSPointConfig
|
||||||
|
from Common.CEnum import TREND_TYPE
|
||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
from Common.func_util import _parse_inf
|
||||||
|
from Math.BOLL import BollModel
|
||||||
|
from Math.Demark import CDemarkEngine
|
||||||
|
from Math.KDJ import KDJ
|
||||||
|
from Math.MACD import CMACD
|
||||||
|
from Math.RSI import RSI
|
||||||
|
from Math.TrendModel import CTrendModel
|
||||||
|
from Seg.SegConfig import CSegConfig
|
||||||
|
from ZS.ZSConfig import CZSConfig
|
||||||
|
|
||||||
|
|
||||||
|
class CChanConfig:
|
||||||
|
def __init__(self, conf=None):
|
||||||
|
if conf is None:
|
||||||
|
conf = {}
|
||||||
|
conf = ConfigWithCheck(conf)
|
||||||
|
self.bi_conf = CBiConfig(
|
||||||
|
bi_algo=conf.get("bi_algo", "normal"),
|
||||||
|
is_strict=conf.get("bi_strict", True),
|
||||||
|
bi_fx_check=conf.get("bi_fx_check", "strict"),
|
||||||
|
gap_as_kl=conf.get("gap_as_kl", False),
|
||||||
|
bi_end_is_peak=conf.get('bi_end_is_peak', True),
|
||||||
|
bi_allow_sub_peak=conf.get("bi_allow_sub_peak", True),
|
||||||
|
)
|
||||||
|
self.seg_conf = CSegConfig(
|
||||||
|
seg_algo=conf.get("seg_algo", "chan"),
|
||||||
|
left_method=conf.get("left_seg_method", "peak"),
|
||||||
|
)
|
||||||
|
self.zs_conf = CZSConfig(
|
||||||
|
need_combine=conf.get("zs_combine", True),
|
||||||
|
zs_combine_mode=conf.get("zs_combine_mode", "zs"),
|
||||||
|
one_bi_zs=conf.get("one_bi_zs", False),
|
||||||
|
zs_algo=conf.get("zs_algo", "normal"),
|
||||||
|
)
|
||||||
|
|
||||||
|
self.trigger_step = conf.get("trigger_step", False)
|
||||||
|
self.skip_step = conf.get("skip_step", 0)
|
||||||
|
|
||||||
|
self.kl_data_check = conf.get("kl_data_check", True)
|
||||||
|
self.max_kl_misalgin_cnt = conf.get("max_kl_misalgin_cnt", 2)
|
||||||
|
self.max_kl_inconsistent_cnt = conf.get("max_kl_inconsistent_cnt", 5)
|
||||||
|
self.auto_skip_illegal_sub_lv = conf.get("auto_skip_illegal_sub_lv", False)
|
||||||
|
self.print_warning = conf.get("print_warning", True)
|
||||||
|
self.print_err_time = conf.get("print_err_time", False)
|
||||||
|
|
||||||
|
self.mean_metrics: List[int] = conf.get("mean_metrics", [])
|
||||||
|
self.trend_metrics: List[int] = conf.get("trend_metrics", [])
|
||||||
|
self.macd_config = conf.get("macd", {"fast": 12, "slow": 26, "signal": 9})
|
||||||
|
self.cal_demark = conf.get("cal_demark", False)
|
||||||
|
self.cal_rsi = conf.get("cal_rsi", False)
|
||||||
|
self.cal_kdj = conf.get("cal_kdj", False)
|
||||||
|
self.rsi_cycle = conf.get("rsi_cycle", 14)
|
||||||
|
self.kdj_cycle = conf.get("kdj_cycle", 9)
|
||||||
|
self.demark_config = conf.get("demark", {
|
||||||
|
'demark_len': 9,
|
||||||
|
'setup_bias': 4,
|
||||||
|
'countdown_bias': 2,
|
||||||
|
'max_countdown': 13,
|
||||||
|
'tiaokong_st': True,
|
||||||
|
'setup_cmp2close': True,
|
||||||
|
'countdown_cmp2close': True,
|
||||||
|
})
|
||||||
|
self.boll_n = conf.get("boll_n", 20)
|
||||||
|
|
||||||
|
self.set_bsp_config(conf)
|
||||||
|
|
||||||
|
conf.check()
|
||||||
|
|
||||||
|
def GetMetricModel(self):
|
||||||
|
res: List[CMACD | CTrendModel | BollModel | CDemarkEngine | RSI | KDJ] = [
|
||||||
|
CMACD(
|
||||||
|
fastperiod=self.macd_config['fast'],
|
||||||
|
slowperiod=self.macd_config['slow'],
|
||||||
|
signalperiod=self.macd_config['signal'],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
res.extend(CTrendModel(TREND_TYPE.MEAN, mean_T) for mean_T in self.mean_metrics)
|
||||||
|
|
||||||
|
for trend_T in self.trend_metrics:
|
||||||
|
res.append(CTrendModel(TREND_TYPE.MAX, trend_T))
|
||||||
|
res.append(CTrendModel(TREND_TYPE.MIN, trend_T))
|
||||||
|
res.append(BollModel(self.boll_n))
|
||||||
|
if self.cal_demark:
|
||||||
|
res.append(CDemarkEngine(
|
||||||
|
demark_len=self.demark_config['demark_len'],
|
||||||
|
setup_bias=self.demark_config['setup_bias'],
|
||||||
|
countdown_bias=self.demark_config['countdown_bias'],
|
||||||
|
max_countdown=self.demark_config['max_countdown'],
|
||||||
|
tiaokong_st=self.demark_config['tiaokong_st'],
|
||||||
|
setup_cmp2close=self.demark_config['setup_cmp2close'],
|
||||||
|
countdown_cmp2close=self.demark_config['countdown_cmp2close'],
|
||||||
|
))
|
||||||
|
if self.cal_rsi:
|
||||||
|
res.append(RSI(self.rsi_cycle))
|
||||||
|
if self.cal_kdj:
|
||||||
|
res.append(KDJ(self.kdj_cycle))
|
||||||
|
return res
|
||||||
|
|
||||||
|
def set_bsp_config(self, conf):
|
||||||
|
para_dict = {
|
||||||
|
"divergence_rate": float("inf"),
|
||||||
|
"min_zs_cnt": 1,
|
||||||
|
"bsp1_only_multibi_zs": True,
|
||||||
|
"max_bs2_rate": 0.9999,
|
||||||
|
"macd_algo": "peak",
|
||||||
|
"bs1_peak": True,
|
||||||
|
"bs_type": "1,1p,2,2s,3a,3b",
|
||||||
|
"bsp2_follow_1": True,
|
||||||
|
"bsp3_follow_1": True,
|
||||||
|
"bsp3_peak": False,
|
||||||
|
"bsp2s_follow_2": False,
|
||||||
|
"max_bsp2s_lv": None,
|
||||||
|
"strict_bsp3": False,
|
||||||
|
}
|
||||||
|
args = {para: conf.get(para, default_value) for para, default_value in para_dict.items()}
|
||||||
|
self.bs_point_conf = CBSPointConfig(**args)
|
||||||
|
|
||||||
|
self.seg_bs_point_conf = CBSPointConfig(**args)
|
||||||
|
self.seg_bs_point_conf.b_conf.set("macd_algo", "slope")
|
||||||
|
self.seg_bs_point_conf.s_conf.set("macd_algo", "slope")
|
||||||
|
self.seg_bs_point_conf.b_conf.set("bsp1_only_multibi_zs", False)
|
||||||
|
self.seg_bs_point_conf.s_conf.set("bsp1_only_multibi_zs", False)
|
||||||
|
|
||||||
|
for k, v in conf.items():
|
||||||
|
if isinstance(v, str):
|
||||||
|
v = f'"{v}"'
|
||||||
|
v = _parse_inf(v)
|
||||||
|
if k.endswith("-buy"):
|
||||||
|
prop = k.replace("-buy", "")
|
||||||
|
exec(f"self.bs_point_conf.b_conf.set('{prop}', {v})")
|
||||||
|
elif k.endswith("-sell"):
|
||||||
|
prop = k.replace("-sell", "")
|
||||||
|
exec(f"self.bs_point_conf.s_conf.set('{prop}', {v})")
|
||||||
|
elif k.endswith("-segbuy"):
|
||||||
|
prop = k.replace("-segbuy", "")
|
||||||
|
exec(f"self.seg_bs_point_conf.b_conf.set('{prop}', {v})")
|
||||||
|
elif k.endswith("-segsell"):
|
||||||
|
prop = k.replace("-segsell", "")
|
||||||
|
exec(f"self.seg_bs_point_conf.s_conf.set('{prop}', {v})")
|
||||||
|
elif k.endswith("-seg"):
|
||||||
|
prop = k.replace("-seg", "")
|
||||||
|
exec(f"self.seg_bs_point_conf.b_conf.set('{prop}', {v})")
|
||||||
|
exec(f"self.seg_bs_point_conf.s_conf.set('{prop}', {v})")
|
||||||
|
elif k in args:
|
||||||
|
exec(f"self.bs_point_conf.b_conf.set({k}, {v})")
|
||||||
|
exec(f"self.bs_point_conf.s_conf.set({k}, {v})")
|
||||||
|
else:
|
||||||
|
raise CChanException(f"unknown para = {k}", ErrCode.PARA_ERROR)
|
||||||
|
self.bs_point_conf.b_conf.parse_target_type()
|
||||||
|
self.bs_point_conf.s_conf.parse_target_type()
|
||||||
|
self.seg_bs_point_conf.b_conf.parse_target_type()
|
||||||
|
self.seg_bs_point_conf.s_conf.parse_target_type()
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigWithCheck:
|
||||||
|
def __init__(self, conf):
|
||||||
|
self.conf = conf
|
||||||
|
|
||||||
|
def get(self, k, default_value=None):
|
||||||
|
res = self.conf.get(k, default_value)
|
||||||
|
if k in self.conf:
|
||||||
|
del self.conf[k]
|
||||||
|
return res
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
visit_keys = set()
|
||||||
|
for k, v in self.conf.items():
|
||||||
|
yield k, v
|
||||||
|
visit_keys.add(k)
|
||||||
|
for k in visit_keys:
|
||||||
|
del self.conf[k]
|
||||||
|
|
||||||
|
def check(self):
|
||||||
|
if len(self.conf) > 0:
|
||||||
|
invalid_key_lst = ",".join(list(self.conf.keys()))
|
||||||
|
raise CChanException(f"invalid CChanConfig: {invalid_key_lst}", ErrCode.PARA_ERROR)
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
|
class CFeatures:
|
||||||
|
def __init__(self, initFeat=None):
|
||||||
|
self.__features = {} if initFeat is None else dict(initFeat)
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
yield from self.__features.items()
|
||||||
|
|
||||||
|
def __getitem__(self, k):
|
||||||
|
return self.__features[k]
|
||||||
|
|
||||||
|
def add_feat(self, inp1, inp2: Optional[float] = None):
|
||||||
|
if inp2 is None:
|
||||||
|
self.__features.update(inp1)
|
||||||
|
else:
|
||||||
|
self.__features.update({inp1: inp2})
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
|
||||||
|
|
||||||
|
class CCombine_Item:
|
||||||
|
def __init__(self, item):
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
from Seg.Seg import CSeg
|
||||||
|
if isinstance(item, CBi):
|
||||||
|
self.time_begin = item.begin_klc.idx
|
||||||
|
self.time_end = item.end_klc.idx
|
||||||
|
self.high = item._high()
|
||||||
|
self.low = item._low()
|
||||||
|
elif isinstance(item, CKLine_Unit):
|
||||||
|
self.time_begin = item.time
|
||||||
|
self.time_end = item.time
|
||||||
|
self.high = item.high
|
||||||
|
self.low = item.low
|
||||||
|
elif isinstance(item, CSeg):
|
||||||
|
self.time_begin = item.start_bi.begin_klc.idx
|
||||||
|
self.time_end = item.end_bi.end_klc.idx
|
||||||
|
self.high = item._high()
|
||||||
|
self.low = item._low()
|
||||||
|
else:
|
||||||
|
raise CChanException(f"{type(item)} is unsupport sub class of CCombine_Item", ErrCode.COMMON_ERROR)
|
||||||
@@ -0,0 +1,175 @@
|
|||||||
|
from typing import Generic, Iterable, List, Optional, Self, TypeVar, Union, overload
|
||||||
|
|
||||||
|
from Common.cache import make_cache
|
||||||
|
from Common.CEnum import FX_TYPE, KLINE_DIR
|
||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
from .Combine_Item import CCombine_Item
|
||||||
|
|
||||||
|
T = TypeVar('T')
|
||||||
|
|
||||||
|
|
||||||
|
class CKLine_Combiner(Generic[T]):
|
||||||
|
def __init__(self, kl_unit: T, _dir):
|
||||||
|
item = CCombine_Item(kl_unit)
|
||||||
|
self.__time_begin = item.time_begin
|
||||||
|
self.__time_end = item.time_end
|
||||||
|
self.__high = item.high
|
||||||
|
self.__low = item.low
|
||||||
|
|
||||||
|
self.__lst: List[T] = [kl_unit] # 本级别每一根单位K线
|
||||||
|
|
||||||
|
self.__dir = _dir
|
||||||
|
self.__fx = FX_TYPE.UNKNOWN
|
||||||
|
self.__pre: Optional[Self] = None
|
||||||
|
self.__next: Optional[Self] = None
|
||||||
|
|
||||||
|
def clean_cache(self):
|
||||||
|
self._memoize_cache = {}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def time_begin(self): return self.__time_begin
|
||||||
|
|
||||||
|
@property
|
||||||
|
def time_end(self): return self.__time_end
|
||||||
|
|
||||||
|
@property
|
||||||
|
def high(self): return self.__high
|
||||||
|
|
||||||
|
@property
|
||||||
|
def low(self): return self.__low
|
||||||
|
|
||||||
|
@property
|
||||||
|
def lst(self): return self.__lst
|
||||||
|
|
||||||
|
@property
|
||||||
|
def dir(self): return self.__dir
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fx(self): return self.__fx
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pre(self) -> Self:
|
||||||
|
assert self.__pre is not None
|
||||||
|
return self.__pre
|
||||||
|
|
||||||
|
@property
|
||||||
|
def next(self): return self.__next
|
||||||
|
|
||||||
|
def get_next(self) -> Self:
|
||||||
|
assert self.next is not None
|
||||||
|
return self.next
|
||||||
|
|
||||||
|
def test_combine(self, item: CCombine_Item, exclude_included=False, allow_top_equal=None):
|
||||||
|
if (self.high >= item.high and self.low <= item.low):
|
||||||
|
return KLINE_DIR.COMBINE
|
||||||
|
if (self.high <= item.high and self.low >= item.low):
|
||||||
|
if allow_top_equal == 1 and self.high == item.high and self.low > item.low:
|
||||||
|
return KLINE_DIR.DOWN
|
||||||
|
elif allow_top_equal == -1 and self.low == item.low and self.high < item.high:
|
||||||
|
return KLINE_DIR.UP
|
||||||
|
return KLINE_DIR.INCLUDED if exclude_included else KLINE_DIR.COMBINE
|
||||||
|
if (self.high > item.high and self.low > item.low):
|
||||||
|
return KLINE_DIR.DOWN
|
||||||
|
if (self.high < item.high and self.low < item.low):
|
||||||
|
return KLINE_DIR.UP
|
||||||
|
else:
|
||||||
|
raise CChanException("combine type unknown", ErrCode.COMBINER_ERR)
|
||||||
|
|
||||||
|
def add(self, unit_kl: T):
|
||||||
|
# only for deepcopy
|
||||||
|
self.__lst.append(unit_kl)
|
||||||
|
|
||||||
|
def set_fx(self, fx: FX_TYPE):
|
||||||
|
# only for deepcopy
|
||||||
|
self.__fx = fx
|
||||||
|
|
||||||
|
def try_add(self, unit_kl: T, exclude_included=False, allow_top_equal=None):
|
||||||
|
# allow_top_equal = None普通模式
|
||||||
|
# allow_top_equal = 1 被包含,顶部相等不合并
|
||||||
|
# allow_top_equal = -1 被包含,底部相等不合并
|
||||||
|
combine_item = CCombine_Item(unit_kl)
|
||||||
|
_dir = self.test_combine(combine_item, exclude_included, allow_top_equal)
|
||||||
|
if _dir == KLINE_DIR.COMBINE:
|
||||||
|
self.__lst.append(unit_kl)
|
||||||
|
if isinstance(unit_kl, CKLine_Unit):
|
||||||
|
unit_kl.set_klc(self)
|
||||||
|
if self.dir == KLINE_DIR.UP:
|
||||||
|
if combine_item.high != combine_item.low or combine_item.high != self.high: # 处理一字K线
|
||||||
|
self.__high = max([self.high, combine_item.high])
|
||||||
|
self.__low = max([self.low, combine_item.low])
|
||||||
|
elif self.dir == KLINE_DIR.DOWN:
|
||||||
|
if combine_item.high != combine_item.low or combine_item.low != self.low: # 处理一字K线
|
||||||
|
self.__high = min([self.high, combine_item.high])
|
||||||
|
self.__low = min([self.low, combine_item.low])
|
||||||
|
else:
|
||||||
|
raise CChanException(f"KLINE_DIR = {self.dir} err!!! must be {KLINE_DIR.UP}/{KLINE_DIR.DOWN}", ErrCode.COMBINER_ERR)
|
||||||
|
self.__time_end = combine_item.time_end
|
||||||
|
self.clean_cache()
|
||||||
|
# 返回UP/DOWN/COMBINE给KL_LIST,设置下一个的方向
|
||||||
|
return _dir
|
||||||
|
|
||||||
|
def get_peak_klu(self, is_high) -> T:
|
||||||
|
# 获取最大值 or 最小值所在klu/bi
|
||||||
|
return self.get_high_peak_klu() if is_high else self.get_low_peak_klu()
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_high_peak_klu(self) -> T:
|
||||||
|
for kl in self.lst[::-1]:
|
||||||
|
if CCombine_Item(kl).high == self.high:
|
||||||
|
return kl
|
||||||
|
raise CChanException("can't find peak...", ErrCode.COMBINER_ERR)
|
||||||
|
|
||||||
|
@make_cache
|
||||||
|
def get_low_peak_klu(self) -> T:
|
||||||
|
for kl in self.lst[::-1]:
|
||||||
|
if CCombine_Item(kl).low == self.low:
|
||||||
|
return kl
|
||||||
|
raise CChanException("can't find peak...", ErrCode.COMBINER_ERR)
|
||||||
|
|
||||||
|
def update_fx(self, _pre: Self, _next: Self, exclude_included=False, allow_top_equal=None):
|
||||||
|
# allow_top_equal = None普通模式
|
||||||
|
# allow_top_equal = 1 被包含,顶部相等不合并
|
||||||
|
# allow_top_equal = -1 被包含,底部相等不合并
|
||||||
|
self.set_next(_next)
|
||||||
|
self.set_pre(_pre)
|
||||||
|
_next.set_pre(self)
|
||||||
|
if exclude_included:
|
||||||
|
if _pre.high < self.high and _next.high <= self.high and _next.low < self.low:
|
||||||
|
if allow_top_equal == 1 or _next.high < self.high:
|
||||||
|
self.__fx = FX_TYPE.TOP
|
||||||
|
elif _next.high > self.high and _pre.low > self.low and _next.low >= self.low:
|
||||||
|
if allow_top_equal == -1 or _next.low > self.low:
|
||||||
|
self.__fx = FX_TYPE.BOTTOM
|
||||||
|
elif _pre.high < self.high and _next.high < self.high and _pre.low < self.low and _next.low < self.low:
|
||||||
|
self.__fx = FX_TYPE.TOP
|
||||||
|
elif _pre.high > self.high and _next.high > self.high and _pre.low > self.low and _next.low > self.low:
|
||||||
|
self.__fx = FX_TYPE.BOTTOM
|
||||||
|
self.clean_cache()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.time_begin}~{self.time_end} {self.low}->{self.high}"
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __getitem__(self, index: int) -> T: ...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __getitem__(self, index: slice) -> List[T]: ...
|
||||||
|
|
||||||
|
def __getitem__(self, index: Union[slice, int]) -> Union[List[T], T]:
|
||||||
|
return self.lst[index]
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.lst)
|
||||||
|
|
||||||
|
def __iter__(self) -> Iterable[T]:
|
||||||
|
yield from self.lst
|
||||||
|
|
||||||
|
def set_pre(self, _pre: Self):
|
||||||
|
self.__pre = _pre
|
||||||
|
self.clean_cache()
|
||||||
|
|
||||||
|
def set_next(self, _next: Self):
|
||||||
|
self.__next = _next
|
||||||
|
self.clean_cache()
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
from enum import Enum, auto
|
||||||
|
from typing import Literal
|
||||||
|
|
||||||
|
|
||||||
|
class DATA_SRC(Enum):
|
||||||
|
BAO_STOCK = auto()
|
||||||
|
CCXT = auto()
|
||||||
|
CSV = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class KL_TYPE(Enum):
|
||||||
|
K_1M = auto()
|
||||||
|
K_DAY = auto()
|
||||||
|
K_WEEK = auto()
|
||||||
|
K_MON = auto()
|
||||||
|
K_YEAR = auto()
|
||||||
|
K_5M = auto()
|
||||||
|
K_15M = auto()
|
||||||
|
K_30M = auto()
|
||||||
|
K_60M = auto()
|
||||||
|
K_4H = auto()
|
||||||
|
K_6H = auto()
|
||||||
|
K_8H = auto()
|
||||||
|
K_12H = auto()
|
||||||
|
K_3DAY = auto()
|
||||||
|
K_3M = auto()
|
||||||
|
K_QUARTER = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class KLINE_DIR(Enum):
|
||||||
|
UP = auto()
|
||||||
|
DOWN = auto()
|
||||||
|
COMBINE = auto()
|
||||||
|
INCLUDED = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class FX_TYPE(Enum):
|
||||||
|
BOTTOM = auto()
|
||||||
|
TOP = auto()
|
||||||
|
UNKNOWN = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class BI_DIR(Enum):
|
||||||
|
UP = auto()
|
||||||
|
DOWN = auto()
|
||||||
|
|
||||||
|
class SEG_DIR(Enum):
|
||||||
|
UP = auto()
|
||||||
|
DOWN = auto()
|
||||||
|
|
||||||
|
class BI_TYPE(Enum):
|
||||||
|
UNKNOWN = auto()
|
||||||
|
STRICT = auto()
|
||||||
|
SUB_VALUE = auto() # 次高低点成笔
|
||||||
|
TIAOKONG_THRED = auto()
|
||||||
|
DAHENG = auto()
|
||||||
|
TUIBI = auto()
|
||||||
|
UNSTRICT = auto()
|
||||||
|
TIAOKONG_VALUE = auto()
|
||||||
|
|
||||||
|
|
||||||
|
BSP_MAIN_TYPE = Literal['1', '2', '3']
|
||||||
|
|
||||||
|
|
||||||
|
class BSP_TYPE(Enum):
|
||||||
|
T1 = '1'
|
||||||
|
T1P = '1p'
|
||||||
|
T2 = '2'
|
||||||
|
T2S = '2s'
|
||||||
|
T3A = '3a' # 中枢在1类后面
|
||||||
|
T3B = '3b' # 中枢在1类前面
|
||||||
|
|
||||||
|
def main_type(self) -> BSP_MAIN_TYPE:
|
||||||
|
return self.value[0] # type: ignore
|
||||||
|
|
||||||
|
|
||||||
|
class AUTYPE(Enum):
|
||||||
|
QFQ = auto()
|
||||||
|
HFQ = auto()
|
||||||
|
NONE = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class TREND_TYPE(Enum):
|
||||||
|
MEAN = "mean"
|
||||||
|
MAX = "max"
|
||||||
|
MIN = "min"
|
||||||
|
|
||||||
|
|
||||||
|
class TREND_LINE_SIDE(Enum):
|
||||||
|
INSIDE = auto()
|
||||||
|
OUTSIDE = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class LEFT_SEG_METHOD(Enum):
|
||||||
|
ALL = auto()
|
||||||
|
PEAK = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class FX_CHECK_METHOD(Enum):
|
||||||
|
STRICT = auto()
|
||||||
|
LOSS = auto()
|
||||||
|
HALF = auto()
|
||||||
|
TOTALLY = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class SEG_TYPE(Enum):
|
||||||
|
BI = auto()
|
||||||
|
SEG = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class MACD_ALGO(Enum):
|
||||||
|
AREA = auto()
|
||||||
|
PEAK = auto()
|
||||||
|
FULL_AREA = auto()
|
||||||
|
DIFF = auto()
|
||||||
|
SLOPE = auto()
|
||||||
|
AMP = auto()
|
||||||
|
VOLUMN = auto()
|
||||||
|
AMOUNT = auto()
|
||||||
|
VOLUMN_AVG = auto()
|
||||||
|
AMOUNT_AVG = auto()
|
||||||
|
TURNRATE_AVG = auto()
|
||||||
|
RSI = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class DATA_FIELD:
|
||||||
|
FIELD_TIME = "time_key"
|
||||||
|
FIELD_OPEN = "open"
|
||||||
|
FIELD_HIGH = "high"
|
||||||
|
FIELD_LOW = "low"
|
||||||
|
FIELD_CLOSE = "close"
|
||||||
|
FIELD_VOLUME = "volume" # 成交量
|
||||||
|
FIELD_TURNOVER = "turnover" # 成交额
|
||||||
|
FIELD_TURNRATE = "turnover_rate" # 换手率
|
||||||
|
|
||||||
|
|
||||||
|
TRADE_INFO_LST = [DATA_FIELD.FIELD_VOLUME, DATA_FIELD.FIELD_TURNOVER, DATA_FIELD.FIELD_TURNRATE]
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class CTime:
|
||||||
|
def __init__(self, year, month, day, hour, minute, second=0, auto=True):
|
||||||
|
self.year = year
|
||||||
|
self.month = month
|
||||||
|
self.day = day
|
||||||
|
self.hour = hour
|
||||||
|
self.minute = minute
|
||||||
|
self.second = second
|
||||||
|
self.auto = auto # 自适应对天的理解
|
||||||
|
self.set_timestamp() # set self.ts
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self.hour == 0 and self.minute == 0:
|
||||||
|
return f"{self.year:04}/{self.month:02}/{self.day:02}"
|
||||||
|
else:
|
||||||
|
return f"{self.year:04}/{self.month:02}/{self.day:02} {self.hour:02}:{self.minute:02}"
|
||||||
|
|
||||||
|
def to_str(self):
|
||||||
|
if self.hour == 0 and self.minute == 0:
|
||||||
|
return f"{self.year:04}/{self.month:02}/{self.day:02}"
|
||||||
|
else:
|
||||||
|
return f"{self.year:04}/{self.month:02}/{self.day:02} {self.hour:02}:{self.minute:02}"
|
||||||
|
|
||||||
|
def toDateStr(self, splt=''):
|
||||||
|
return f"{self.year:04}{splt}{self.month:02}{splt}{self.day:02}"
|
||||||
|
|
||||||
|
def toDate(self):
|
||||||
|
return CTime(self.year, self.month, self.day, 0, 0, auto=False)
|
||||||
|
|
||||||
|
def set_timestamp(self):
|
||||||
|
if self.hour == 0 and self.minute == 0 and self.auto:
|
||||||
|
date = datetime(self.year, self.month, self.day, 23, 59, self.second)
|
||||||
|
else:
|
||||||
|
date = datetime(self.year, self.month, self.day, self.hour, self.minute, self.second)
|
||||||
|
self.ts = date.timestamp()
|
||||||
|
|
||||||
|
def __gt__(self, t2):
|
||||||
|
return self.ts > t2.ts
|
||||||
|
|
||||||
|
def __ge__(self, t2):
|
||||||
|
return self.ts >= t2.ts
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
from enum import IntEnum
|
||||||
|
|
||||||
|
|
||||||
|
class ErrCode(IntEnum):
|
||||||
|
# chan err
|
||||||
|
_CHAN_ERR_BEGIN = 0
|
||||||
|
COMMON_ERROR = 1
|
||||||
|
SRC_DATA_NOT_FOUND = 3
|
||||||
|
SRC_DATA_TYPE_ERR = 4
|
||||||
|
PARA_ERROR = 5
|
||||||
|
EXTRA_KLU_ERR = 6
|
||||||
|
SEG_END_VALUE_ERR = 7
|
||||||
|
SEG_EIGEN_ERR = 8
|
||||||
|
BI_ERR = 9
|
||||||
|
COMBINER_ERR = 10
|
||||||
|
PLOT_ERR = 11
|
||||||
|
MODEL_ERROR = 12
|
||||||
|
SEG_LEN_ERR = 13
|
||||||
|
ENV_CONF_ERR = 14
|
||||||
|
UNKNOWN_DB_TYPE = 15
|
||||||
|
FEATURE_ERROR = 16
|
||||||
|
CONFIG_ERROR = 17
|
||||||
|
SRC_DATA_FORMAT_ERROR = 18
|
||||||
|
_CHAN_ERR_END = 99
|
||||||
|
|
||||||
|
# Trade Error
|
||||||
|
_TRADE_ERR_BEGIN = 100
|
||||||
|
SIGNAL_EXISTED = 101
|
||||||
|
RECORD_NOT_EXIST = 102
|
||||||
|
RECORD_ALREADY_OPENED = 103
|
||||||
|
QUOTA_NOT_ENOUGH = 104
|
||||||
|
RECORD_NOT_OPENED = 105
|
||||||
|
TRADE_UNLOCK_FAIL = 106
|
||||||
|
PLACE_ORDER_FAIL = 107
|
||||||
|
LIST_ORDER_FAIL = 108
|
||||||
|
CANDEL_ORDER_FAIL = 109
|
||||||
|
GET_FUTU_PRICE_FAIL = 110
|
||||||
|
GET_FUTU_LOT_SIZE_FAIL = 111
|
||||||
|
OPEN_RECORD_NOT_WATCHING = 112
|
||||||
|
GET_HOLDING_QTY_FAIL = 113
|
||||||
|
RECORD_CLOSED = 114
|
||||||
|
REQUEST_TRADING_DAYS_FAIL = 115
|
||||||
|
COVER_ORDER_ID_NOT_UNIQUE = 116
|
||||||
|
SIGNAL_TRADED = 117
|
||||||
|
_TRADE_ERR_END = 199
|
||||||
|
|
||||||
|
# KL data Error
|
||||||
|
_KL_ERR_BEGIN = 200
|
||||||
|
PRICE_BELOW_ZERO = 201
|
||||||
|
KL_DATA_NOT_ALIGN = 202
|
||||||
|
KL_DATA_INVALID = 203
|
||||||
|
KL_TIME_INCONSISTENT = 204
|
||||||
|
TRADEINFO_TOO_MUCH_ZERO = 205
|
||||||
|
KL_NOT_MONOTONOUS = 206
|
||||||
|
SNAPSHOT_ERR = 207
|
||||||
|
SUSPENSION = 208 # 疑似停牌
|
||||||
|
STOCK_IPO_TOO_LATE = 209
|
||||||
|
NO_DATA = 210
|
||||||
|
STOCK_NOT_ACTIVE = 211
|
||||||
|
STOCK_PRICE_NOT_ACTIVE = 212
|
||||||
|
_KL_ERR_END = 299
|
||||||
|
|
||||||
|
|
||||||
|
class CChanException(Exception):
|
||||||
|
def __init__(self, message, code=ErrCode.COMMON_ERROR):
|
||||||
|
self.errcode = code
|
||||||
|
self.msg = message
|
||||||
|
Exception.__init__(self, message)
|
||||||
|
|
||||||
|
def is_kldata_err(self):
|
||||||
|
return ErrCode._KL_ERR_BEGIN < self.errcode < ErrCode._KL_ERR_END
|
||||||
|
|
||||||
|
def is_chan_err(self):
|
||||||
|
return ErrCode._CHAN_ERR_BEGIN < self.errcode < ErrCode._CHAN_ERR_END
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
def foo():
|
||||||
|
raise CChanException("XXX", ErrCode.CONFIG_ERROR)
|
||||||
|
|
||||||
|
try:
|
||||||
|
foo()
|
||||||
|
except CChanException as e:
|
||||||
|
print(str(e.errcode))
|
||||||
|
# python3.8 结果为: ErrCode.CONFIG_ERROR
|
||||||
|
# python3.11 结果为:17
|
||||||
|
|
||||||
|
print(e.errcode.name, type(e.errcode.name))
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import inspect
|
||||||
|
import types
|
||||||
|
|
||||||
|
|
||||||
|
class make_cache:
|
||||||
|
def __init__(self, func):
|
||||||
|
self.func = func
|
||||||
|
|
||||||
|
fargspec = inspect.getfullargspec(func)
|
||||||
|
if len(fargspec.args) != 1 or fargspec.args[0] != "self":
|
||||||
|
raise Exception("@memoize must be `(self)`")
|
||||||
|
|
||||||
|
# set key for this function
|
||||||
|
self.func_key = str(func)
|
||||||
|
|
||||||
|
def __get__(self, instance, cls):
|
||||||
|
if instance is None:
|
||||||
|
raise Exception("@memoize's must be bound")
|
||||||
|
|
||||||
|
if not hasattr(instance, "_memoize_cache"):
|
||||||
|
setattr(instance, "_memoize_cache", {})
|
||||||
|
|
||||||
|
return types.MethodType(self, instance)
|
||||||
|
|
||||||
|
def __call__(self, *args, **kwargs):
|
||||||
|
instance = args[0]
|
||||||
|
cache = instance._memoize_cache
|
||||||
|
|
||||||
|
if self.func_key in cache:
|
||||||
|
return cache[self.func_key]
|
||||||
|
|
||||||
|
result = self.func(*args, **kwargs)
|
||||||
|
cache[self.func_key] = result
|
||||||
|
return result
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
from .CEnum import BI_DIR, KL_TYPE
|
||||||
|
|
||||||
|
|
||||||
|
def kltype_lt_day(_type):
|
||||||
|
return _type in [KL_TYPE.K_1M, KL_TYPE.K_5M, KL_TYPE.K_15M, KL_TYPE.K_30M, KL_TYPE.K_60M]
|
||||||
|
|
||||||
|
|
||||||
|
def kltype_lte_day(_type):
|
||||||
|
return _type in [KL_TYPE.K_1M, KL_TYPE.K_5M, KL_TYPE.K_15M, KL_TYPE.K_30M, KL_TYPE.K_60M, KL_TYPE.K_DAY]
|
||||||
|
|
||||||
|
|
||||||
|
def check_kltype_order(type_list: list):
|
||||||
|
_dict = {
|
||||||
|
KL_TYPE.K_1M: 1,
|
||||||
|
KL_TYPE.K_3M: 2,
|
||||||
|
KL_TYPE.K_5M: 3,
|
||||||
|
KL_TYPE.K_15M: 4,
|
||||||
|
KL_TYPE.K_30M: 5,
|
||||||
|
KL_TYPE.K_60M: 6,
|
||||||
|
KL_TYPE.K_4H: 7, # 4小时
|
||||||
|
KL_TYPE.K_6H: 8, # 6小时
|
||||||
|
KL_TYPE.K_8H: 9, # 8小时
|
||||||
|
KL_TYPE.K_12H: 10, # 12小时
|
||||||
|
KL_TYPE.K_DAY: 11,
|
||||||
|
KL_TYPE.K_3DAY: 12, # 3日线
|
||||||
|
KL_TYPE.K_WEEK: 13,
|
||||||
|
KL_TYPE.K_MON: 14,
|
||||||
|
KL_TYPE.K_QUARTER: 15,
|
||||||
|
KL_TYPE.K_YEAR: 16,
|
||||||
|
}
|
||||||
|
last_lv = float("inf")
|
||||||
|
for kl_type in type_list:
|
||||||
|
cur_lv = _dict[kl_type]
|
||||||
|
assert cur_lv < last_lv, "lv_list的顺序必须从大级别到小级别"
|
||||||
|
last_lv = cur_lv
|
||||||
|
|
||||||
|
|
||||||
|
def revert_bi_dir(dir):
|
||||||
|
return BI_DIR.DOWN if dir == BI_DIR.UP else BI_DIR.UP
|
||||||
|
|
||||||
|
|
||||||
|
def has_overlap(l1, h1, l2, h2, equal=False):
|
||||||
|
return h2 >= l1 and h1 >= l2 if equal else h2 > l1 and h1 > l2
|
||||||
|
|
||||||
|
|
||||||
|
def str2float(s):
|
||||||
|
try:
|
||||||
|
return float(s)
|
||||||
|
except ValueError:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_inf(v):
|
||||||
|
if type(v) == float:
|
||||||
|
if v == float("inf"):
|
||||||
|
v = 'float("inf")'
|
||||||
|
if v == float("-inf"):
|
||||||
|
v = 'float("-inf")'
|
||||||
|
return v
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
import baostock as bs
|
||||||
|
|
||||||
|
from Common.CEnum import AUTYPE, DATA_FIELD, KL_TYPE
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Common.func_util import kltype_lt_day, str2float
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
from .CommonStockAPI import CCommonStockApi
|
||||||
|
|
||||||
|
|
||||||
|
def create_item_dict(data, column_name):
|
||||||
|
for i in range(len(data)):
|
||||||
|
data[i] = parse_time_column(data[i]) if i == 0 else str2float(data[i])
|
||||||
|
return dict(zip(column_name, data))
|
||||||
|
|
||||||
|
|
||||||
|
def parse_time_column(inp):
|
||||||
|
# 20210902113000000
|
||||||
|
# 2021-09-13
|
||||||
|
if len(inp) == 10:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[5:7])
|
||||||
|
day = int(inp[8:10])
|
||||||
|
hour = minute = 0
|
||||||
|
elif len(inp) == 17:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[4:6])
|
||||||
|
day = int(inp[6:8])
|
||||||
|
hour = int(inp[8:10])
|
||||||
|
minute = int(inp[10:12])
|
||||||
|
elif len(inp) == 19:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[5:7])
|
||||||
|
day = int(inp[8:10])
|
||||||
|
hour = int(inp[11:13])
|
||||||
|
minute = int(inp[14:16])
|
||||||
|
else:
|
||||||
|
raise Exception(f"unknown time column from baostock:{inp}")
|
||||||
|
return CTime(year, month, day, hour, minute)
|
||||||
|
|
||||||
|
|
||||||
|
def GetColumnNameFromFieldList(fileds: str):
|
||||||
|
_dict = {
|
||||||
|
"time": DATA_FIELD.FIELD_TIME,
|
||||||
|
"date": DATA_FIELD.FIELD_TIME,
|
||||||
|
"open": DATA_FIELD.FIELD_OPEN,
|
||||||
|
"high": DATA_FIELD.FIELD_HIGH,
|
||||||
|
"low": DATA_FIELD.FIELD_LOW,
|
||||||
|
"close": DATA_FIELD.FIELD_CLOSE,
|
||||||
|
"volume": DATA_FIELD.FIELD_VOLUME,
|
||||||
|
"amount": DATA_FIELD.FIELD_TURNOVER,
|
||||||
|
"turn": DATA_FIELD.FIELD_TURNRATE,
|
||||||
|
}
|
||||||
|
return [_dict[x] for x in fileds.split(",")]
|
||||||
|
|
||||||
|
|
||||||
|
class CBaoStock(CCommonStockApi):
|
||||||
|
is_connect = None
|
||||||
|
|
||||||
|
def __init__(self, code, k_type=KL_TYPE.K_DAY, begin_date=None, end_date=None, autype=AUTYPE.QFQ):
|
||||||
|
super(CBaoStock, self).__init__(code, k_type, begin_date, end_date, autype)
|
||||||
|
|
||||||
|
def get_kl_data(self):
|
||||||
|
# 天级别以上才有详细交易信息
|
||||||
|
if kltype_lt_day(self.k_type):
|
||||||
|
if not self.is_stock:
|
||||||
|
raise Exception("没有获取到数据,注意指数是没有分钟级别数据的!")
|
||||||
|
fields = "time,open,high,low,close"
|
||||||
|
else:
|
||||||
|
fields = "date,open,high,low,close,volume,amount,turn"
|
||||||
|
autype_dict = {AUTYPE.QFQ: "2", AUTYPE.HFQ: "1", AUTYPE.NONE: "3"}
|
||||||
|
rs = bs.query_history_k_data_plus(
|
||||||
|
code=self.code,
|
||||||
|
fields=fields,
|
||||||
|
start_date=self.begin_date,
|
||||||
|
end_date=self.end_date,
|
||||||
|
frequency=self.__convert_type(),
|
||||||
|
adjustflag=autype_dict[self.autype],
|
||||||
|
)
|
||||||
|
if rs.error_code != '0':
|
||||||
|
raise Exception(rs.error_msg)
|
||||||
|
while rs.error_code == '0' and rs.next():
|
||||||
|
yield CKLine_Unit(create_item_dict(rs.get_row_data(), GetColumnNameFromFieldList(fields)))
|
||||||
|
|
||||||
|
def SetBasciInfo(self):
|
||||||
|
rs = bs.query_stock_basic(code=self.code)
|
||||||
|
if rs.error_code != '0':
|
||||||
|
raise Exception(rs.error_msg)
|
||||||
|
code, code_name, ipoDate, outDate, stock_type, status = rs.get_row_data()
|
||||||
|
self.name = code_name
|
||||||
|
self.is_stock = (stock_type == '1')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_init(cls):
|
||||||
|
if not cls.is_connect:
|
||||||
|
cls.is_connect = bs.login()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_close(cls):
|
||||||
|
if cls.is_connect:
|
||||||
|
bs.logout()
|
||||||
|
cls.is_connect = None
|
||||||
|
|
||||||
|
def __convert_type(self):
|
||||||
|
_dict = {
|
||||||
|
KL_TYPE.K_DAY: 'd',
|
||||||
|
KL_TYPE.K_WEEK: 'w',
|
||||||
|
KL_TYPE.K_MON: 'm',
|
||||||
|
KL_TYPE.K_5M: '5',
|
||||||
|
KL_TYPE.K_15M: '15',
|
||||||
|
KL_TYPE.K_30M: '30',
|
||||||
|
KL_TYPE.K_60M: '60',
|
||||||
|
}
|
||||||
|
return _dict[self.k_type]
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import abc
|
||||||
|
from typing import Iterable
|
||||||
|
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
|
||||||
|
class CCommonStockApi:
|
||||||
|
def __init__(self, code, k_type, begin_date, end_date, autype):
|
||||||
|
self.code = code
|
||||||
|
self.name = None
|
||||||
|
self.is_stock = None
|
||||||
|
self.k_type = k_type
|
||||||
|
self.begin_date = begin_date
|
||||||
|
self.end_date = end_date
|
||||||
|
self.autype = autype
|
||||||
|
self.SetBasciInfo()
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def get_kl_data(self) -> Iterable[CKLine_Unit]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def SetBasciInfo(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@abc.abstractmethod
|
||||||
|
def do_init(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@abc.abstractmethod
|
||||||
|
def do_close(cls):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
import pandas as pd
|
||||||
|
from Common.CEnum import AUTYPE, DATA_FIELD, KL_TYPE
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Common.func_util import kltype_lt_day, str2float
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
from .CommonStockAPI import CCommonStockApi
|
||||||
|
|
||||||
|
|
||||||
|
class WebDataAPI(CCommonStockApi):
|
||||||
|
"""Web应用的数据API适配器,用于将web应用的数据转换为chan.py格式"""
|
||||||
|
|
||||||
|
# 类变量用于存储数据
|
||||||
|
_data_cache = {}
|
||||||
|
|
||||||
|
def __init__(self, code, k_type=KL_TYPE.K_DAY, begin_date=None, end_date=None, autype=AUTYPE.QFQ):
|
||||||
|
super().__init__(code, k_type, begin_date, end_date, autype)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def set_data(cls, code, df_data):
|
||||||
|
"""设置指定代码的数据"""
|
||||||
|
cls._data_cache[code] = df_data
|
||||||
|
|
||||||
|
def get_kl_data(self):
|
||||||
|
"""将DataFrame数据转换为CKLine_Unit迭代器"""
|
||||||
|
df_data = self._data_cache.get(self.code)
|
||||||
|
if df_data is None or len(df_data) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
# 确保数据按时间排序并重置索引
|
||||||
|
df_data = df_data.sort_values('date').reset_index(drop=True)
|
||||||
|
print(f"WebDataAPI: 处理 {len(df_data)} 条K线数据,K线级别: {self.k_type}")
|
||||||
|
|
||||||
|
# 检查并处理重复时间
|
||||||
|
if 'timestamp' in df_data.columns:
|
||||||
|
df_data = df_data.drop_duplicates(subset=['timestamp'], keep='last')
|
||||||
|
df_data = df_data.sort_values('timestamp').reset_index(drop=True)
|
||||||
|
|
||||||
|
prev_timestamp = None
|
||||||
|
for idx, row in df_data.iterrows():
|
||||||
|
# 转换时间格式
|
||||||
|
if isinstance(row['date'], str):
|
||||||
|
time_obj = datetime.fromisoformat(row['date'].replace('Z', '+00:00'))
|
||||||
|
else:
|
||||||
|
time_obj = row['date']
|
||||||
|
|
||||||
|
# 检查时间戳确保单调递增
|
||||||
|
if 'timestamp' in row:
|
||||||
|
current_timestamp = row['timestamp']
|
||||||
|
if prev_timestamp is not None and current_timestamp <= prev_timestamp:
|
||||||
|
print(f"跳过重复或倒序时间戳: {current_timestamp}, 上个时间戳: {prev_timestamp}")
|
||||||
|
continue
|
||||||
|
prev_timestamp = current_timestamp
|
||||||
|
|
||||||
|
# 创建CTime对象 - 根据K线级别智能决定auto参数
|
||||||
|
# 对于日线及以上级别,且时分秒为0的情况,使用auto=True
|
||||||
|
# 对于分钟级别或有具体时分的数据,使用auto=False确保精确时间
|
||||||
|
use_auto = False # 默认不使用auto,确保时间精确
|
||||||
|
|
||||||
|
# 只有在日线级别且时分秒都为0时才考虑使用auto
|
||||||
|
if self.k_type in [KL_TYPE.K_DAY, KL_TYPE.K_WEEK, KL_TYPE.K_MON]:
|
||||||
|
if time_obj.hour == 0 and time_obj.minute == 0 and time_obj.second == 0:
|
||||||
|
use_auto = True
|
||||||
|
|
||||||
|
ctime = CTime(
|
||||||
|
time_obj.year,
|
||||||
|
time_obj.month,
|
||||||
|
time_obj.day,
|
||||||
|
time_obj.hour,
|
||||||
|
time_obj.minute,
|
||||||
|
time_obj.second,
|
||||||
|
auto=use_auto
|
||||||
|
)
|
||||||
|
|
||||||
|
# 输出详细调试信息(只输出前几条)
|
||||||
|
if idx < 3:
|
||||||
|
print(f"第{idx+1}条数据: 原始时间={time_obj}, CTime={ctime}, auto={use_auto}, timestamp={ctime.ts}")
|
||||||
|
|
||||||
|
# 创建数据字典
|
||||||
|
data_dict = {
|
||||||
|
DATA_FIELD.FIELD_TIME: ctime,
|
||||||
|
DATA_FIELD.FIELD_OPEN: float(row['open']),
|
||||||
|
DATA_FIELD.FIELD_HIGH: float(row['high']),
|
||||||
|
DATA_FIELD.FIELD_LOW: float(row['low']),
|
||||||
|
DATA_FIELD.FIELD_CLOSE: float(row['close']),
|
||||||
|
DATA_FIELD.FIELD_VOLUME: float(row['volume']) if 'volume' in row and pd.notna(row['volume']) else 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
yield CKLine_Unit(data_dict, autofix=True)
|
||||||
|
|
||||||
|
def SetBasciInfo(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_init(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_close(cls):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import ccxt
|
||||||
|
import json
|
||||||
|
from Common.CEnum import AUTYPE, DATA_FIELD, KL_TYPE
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Common.func_util import kltype_lt_day, str2float
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
from .CommonStockAPI import CCommonStockApi
|
||||||
|
|
||||||
|
|
||||||
|
def GetColumnNameFromFieldList(fileds: str):
|
||||||
|
_dict = {
|
||||||
|
"time": DATA_FIELD.FIELD_TIME,
|
||||||
|
"open": DATA_FIELD.FIELD_OPEN,
|
||||||
|
"high": DATA_FIELD.FIELD_HIGH,
|
||||||
|
"low": DATA_FIELD.FIELD_LOW,
|
||||||
|
"close": DATA_FIELD.FIELD_CLOSE,
|
||||||
|
}
|
||||||
|
return [_dict[x] for x in fileds.split(",")]
|
||||||
|
|
||||||
|
|
||||||
|
class CCXT(CCommonStockApi):
|
||||||
|
is_connect = None
|
||||||
|
|
||||||
|
def __init__(self, code, k_type=KL_TYPE.K_DAY, begin_date=None, end_date=None, autype=AUTYPE.QFQ):
|
||||||
|
super(CCXT, self).__init__(code, k_type, begin_date, end_date, autype)
|
||||||
|
|
||||||
|
def get_kl_data(self):
|
||||||
|
fields = "time,open,high,low,close"
|
||||||
|
exchange = ccxt.binance()
|
||||||
|
timeframe = self.__convert_type()
|
||||||
|
since_date = exchange.parse8601(f'{self.begin_date}T08:00:00')
|
||||||
|
|
||||||
|
#file_path = "BTC_USDT-5m-futures.json"
|
||||||
|
#with open(file_path, 'r') as file:
|
||||||
|
# data = json.load(file)
|
||||||
|
data = exchange.fetch_ohlcv(self.code, timeframe, since=since_date)
|
||||||
|
for item in data:
|
||||||
|
time_obj = datetime.fromtimestamp(item[0] / 1000)
|
||||||
|
time_str = time_obj.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
item_data = [
|
||||||
|
time_str,
|
||||||
|
item[1],
|
||||||
|
item[2],
|
||||||
|
item[3],
|
||||||
|
item[4],
|
||||||
|
item[5]
|
||||||
|
]
|
||||||
|
yield CKLine_Unit(self.create_item_dict(item_data, GetColumnNameFromFieldList(fields)), autofix=True)
|
||||||
|
|
||||||
|
def SetBasciInfo(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_init(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_close(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __convert_type(self):
|
||||||
|
_dict = {
|
||||||
|
KL_TYPE.K_DAY: '1d',
|
||||||
|
KL_TYPE.K_WEEK: '1w',
|
||||||
|
KL_TYPE.K_MON: '1M',
|
||||||
|
KL_TYPE.K_5M: '5m',
|
||||||
|
KL_TYPE.K_15M: '15m',
|
||||||
|
KL_TYPE.K_30M: '30m',
|
||||||
|
KL_TYPE.K_60M: '1h',
|
||||||
|
KL_TYPE.K_1M: '1m', # need to add this 1m
|
||||||
|
}
|
||||||
|
return _dict[self.k_type]
|
||||||
|
|
||||||
|
def parse_time_column(self, inp):
|
||||||
|
if len(inp) == 10:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[5:7])
|
||||||
|
day = int(inp[8:10])
|
||||||
|
hour = minute = 0
|
||||||
|
elif len(inp) == 17:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[4:6])
|
||||||
|
day = int(inp[6:8])
|
||||||
|
hour = int(inp[8:10])
|
||||||
|
minute = int(inp[10:12])
|
||||||
|
elif len(inp) == 19:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[5:7])
|
||||||
|
day = int(inp[8:10])
|
||||||
|
hour = int(inp[11:13])
|
||||||
|
minute = int(inp[14:16])
|
||||||
|
else:
|
||||||
|
raise Exception(f"unknown time column from TradingView:{inp}")
|
||||||
|
return CTime(year, month, day, hour, minute, auto=not kltype_lt_day(self.k_type))
|
||||||
|
|
||||||
|
def create_item_dict(self, data, column_name):
|
||||||
|
for i in range(len(data)):
|
||||||
|
data[i] = self.parse_time_column(data[i]) if i == 0 else str2float(data[i])
|
||||||
|
return dict(zip(column_name, data))
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from Common.CEnum import DATA_FIELD, KL_TYPE
|
||||||
|
from Common.ChanException import CChanException, ErrCode
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Common.func_util import str2float
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
from .CommonStockAPI import CCommonStockApi
|
||||||
|
|
||||||
|
|
||||||
|
def create_item_dict(data, column_name):
|
||||||
|
for i in range(len(data)):
|
||||||
|
data[i] = parse_time_column(data[i]) if column_name[i] == DATA_FIELD.FIELD_TIME else str2float(data[i])
|
||||||
|
return dict(zip(column_name, data))
|
||||||
|
|
||||||
|
|
||||||
|
def parse_time_column(inp):
|
||||||
|
# 20210902113000000
|
||||||
|
# 2021-09-13
|
||||||
|
if len(inp) == 10:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[5:7])
|
||||||
|
day = int(inp[8:10])
|
||||||
|
hour = minute = 0
|
||||||
|
elif len(inp) == 17:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[4:6])
|
||||||
|
day = int(inp[6:8])
|
||||||
|
hour = int(inp[8:10])
|
||||||
|
minute = int(inp[10:12])
|
||||||
|
elif len(inp) == 19:
|
||||||
|
year = int(inp[:4])
|
||||||
|
month = int(inp[5:7])
|
||||||
|
day = int(inp[8:10])
|
||||||
|
hour = int(inp[11:13])
|
||||||
|
minute = int(inp[14:16])
|
||||||
|
else:
|
||||||
|
raise Exception(f"unknown time column from csv:{inp}")
|
||||||
|
return CTime(year, month, day, hour, minute)
|
||||||
|
|
||||||
|
|
||||||
|
class CSV_API(CCommonStockApi):
|
||||||
|
def __init__(self, code, k_type=KL_TYPE.K_DAY, begin_date=None, end_date=None, autype=None):
|
||||||
|
self.headers_exist = True # 第一行是否是标题,如果是数据,设置为False
|
||||||
|
self.columns = [
|
||||||
|
DATA_FIELD.FIELD_TIME,
|
||||||
|
DATA_FIELD.FIELD_OPEN,
|
||||||
|
DATA_FIELD.FIELD_HIGH,
|
||||||
|
DATA_FIELD.FIELD_LOW,
|
||||||
|
DATA_FIELD.FIELD_CLOSE,
|
||||||
|
# DATA_FIELD.FIELD_VOLUME,
|
||||||
|
# DATA_FIELD.FIELD_TURNOVER,
|
||||||
|
# DATA_FIELD.FIELD_TURNRATE,
|
||||||
|
] # 每一列字段
|
||||||
|
self.time_column_idx = self.columns.index(DATA_FIELD.FIELD_TIME)
|
||||||
|
super(CSV_API, self).__init__(code, k_type, begin_date, end_date, autype)
|
||||||
|
|
||||||
|
def get_kl_data(self):
|
||||||
|
cur_path = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
file_path = f"{cur_path}/../{self.code}.csv"
|
||||||
|
if not os.path.exists(file_path):
|
||||||
|
raise CChanException(f"file not exist: {file_path}", ErrCode.SRC_DATA_NOT_FOUND)
|
||||||
|
|
||||||
|
for line_number, line in enumerate(open(file_path, 'r')):
|
||||||
|
if self.headers_exist and line_number == 0:
|
||||||
|
continue
|
||||||
|
data = line.strip("\n").split(",")
|
||||||
|
if len(data) != len(self.columns):
|
||||||
|
raise CChanException(f"file format error: {file_path}", ErrCode.SRC_DATA_FORMAT_ERROR)
|
||||||
|
if self.begin_date is not None and data[self.time_column_idx] < self.begin_date:
|
||||||
|
continue
|
||||||
|
if self.end_date is not None and data[self.time_column_idx] > self.end_date:
|
||||||
|
continue
|
||||||
|
yield CKLine_Unit(create_item_dict(data, self.columns))
|
||||||
|
|
||||||
|
def SetBasciInfo(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_init(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def do_close(cls):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
import json
|
||||||
|
from typing import Dict, TypedDict
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py"))
|
||||||
|
import xgboost as xgb
|
||||||
|
from BuySellPoint.BS_Point import CBS_Point
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE, BSP_TYPE, MACD_ALGO
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Plot.PlotDriver import CPlotDriver
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
|
||||||
|
class FeatureDict:
|
||||||
|
def klc_features(self, klc):
|
||||||
|
# klc features
|
||||||
|
klc_feature_dict = {
|
||||||
|
"klu_max_high": klc.get_klu_max_high(),
|
||||||
|
"klu_max_low": klc.get_klu_min_low(),
|
||||||
|
|
||||||
|
}
|
||||||
|
return klc_feature_dict
|
||||||
|
def bi_features(self, bi):
|
||||||
|
# bi features
|
||||||
|
bi_feature_dict = {
|
||||||
|
"bi_macd_area": bi.cal_macd_metric(MACD_ALGO.AREA, False),
|
||||||
|
"bi_macd_peak": bi.cal_macd_metric(MACD_ALGO.PEAK, False),
|
||||||
|
"bi_macd_full_area": bi.cal_macd_metric(MACD_ALGO.FULL_AREA, False),
|
||||||
|
"bi_macd_diff": bi.cal_macd_metric(MACD_ALGO.DIFF, False),
|
||||||
|
"bi_macd_slop": bi.cal_macd_metric(MACD_ALGO.SLOPE, False),
|
||||||
|
"bi_macd_amp": bi.cal_macd_metric(MACD_ALGO.AMP, False),
|
||||||
|
"bi_macd_amount": bi.cal_macd_metric(MACD_ALGO.AMOUNT, False),
|
||||||
|
"bi_macd_rsi": bi.cal_macd_metric(MACD_ALGO.RSI, False),
|
||||||
|
}
|
||||||
|
#bi_feature_dict.update(self.klc_features(bi.begin_klc))
|
||||||
|
#bi_feature_dict.update(self.klc_features(bi.end_klc))
|
||||||
|
return bi_feature_dict
|
||||||
|
|
||||||
|
def seg_features(self, seg):
|
||||||
|
seg_feature_dict = {
|
||||||
|
# seg features
|
||||||
|
"seg_macd_slope": seg.Cal_MACD_slope(),
|
||||||
|
"seg_macd_amp": seg.Cal_MACD_amp(),
|
||||||
|
"seg_amp": seg.amp(),
|
||||||
|
"seg_cal_klu_slope": seg.cal_klu_slope(),
|
||||||
|
"seg_cal_amp": seg.amp(),
|
||||||
|
}
|
||||||
|
return seg_feature_dict
|
||||||
|
|
||||||
|
def zs_features(self, zs):
|
||||||
|
zs_feature_dict = {
|
||||||
|
f"zs_high": zs.high,
|
||||||
|
f"zs_low": zs.low,
|
||||||
|
f"zs_mid": zs.mid,
|
||||||
|
f"zs_peak_low": zs.peak_low,
|
||||||
|
f"zs_peak_high": zs.peak_high,
|
||||||
|
}
|
||||||
|
#zs_feature_dict.update(bi_features(zs.begin_bi))
|
||||||
|
#zs_feature_dict.update(bi_features(zs.end_bi))
|
||||||
|
#zs_feature_dict.update(bi_features(zs.bi_in))
|
||||||
|
#zs_feature_dict.update(bi_features(zs.bi_out))
|
||||||
|
return zs_feature_dict
|
||||||
|
|
||||||
|
def klu_features(self, klu):
|
||||||
|
klu_feature_dict = {
|
||||||
|
# klu features
|
||||||
|
"klu_rsi": klu.rsi,
|
||||||
|
"klu_macd_fast_ema": klu.macd.fast_ema,
|
||||||
|
"klu_macd_slow_ema": klu.macd.slow_ema,
|
||||||
|
"klu_macd_DIF": klu.macd.DIF,
|
||||||
|
"klu_macd_DEA": klu.macd.DEA,
|
||||||
|
"klu_macd_macd": klu.macd.macd,
|
||||||
|
"klu_kdj_k": klu.kdj.k,
|
||||||
|
"klu_kdj_d": klu.kdj.d,
|
||||||
|
"klu_kdj_j": klu.kdj.j,
|
||||||
|
}
|
||||||
|
return klu_feature_dict
|
||||||
|
|
||||||
|
def stragety_feature(self, last_bsp):
|
||||||
|
last_bi = last_bsp.bi
|
||||||
|
last_klu = last_bsp.klu
|
||||||
|
feature_dict = {
|
||||||
|
"open_klu_rate": (last_klu.close - last_klu.open)/last_klu.open,
|
||||||
|
|
||||||
|
}
|
||||||
|
# add klu features
|
||||||
|
feature_dict.update(self.klu_features(last_klu))
|
||||||
|
# add bi features
|
||||||
|
#feature_dict.update(self.bi_features(last_bi))
|
||||||
|
# add seg features
|
||||||
|
seg = last_bi.parent_seg
|
||||||
|
#feature_dict.update(seg_features(seg))
|
||||||
|
|
||||||
|
# add zs features
|
||||||
|
zs_list = seg.zs_lst
|
||||||
|
zs_feature_dict = {}
|
||||||
|
if zs_list:
|
||||||
|
zs_feature_dict = {
|
||||||
|
f"zs_count": len(zs_list),
|
||||||
|
}
|
||||||
|
bi_in_zs = False
|
||||||
|
for zs in zs_list:
|
||||||
|
if last_bi in zs.bi_lst:
|
||||||
|
bi_in_zs = True
|
||||||
|
if bi_in_zs:
|
||||||
|
zs_feature_dict.update({
|
||||||
|
"bi_in_zs": 1
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
zs_feature_dict.update({
|
||||||
|
"bi_in_zs": 0
|
||||||
|
})
|
||||||
|
zs_feature_dict.update(self.zs_features(zs_list[-1]))
|
||||||
|
else:
|
||||||
|
zs_feature_dict ={
|
||||||
|
"zs_count": 0,
|
||||||
|
}
|
||||||
|
feature_dict.update(zs_feature_dict)
|
||||||
|
return feature_dict
|
||||||
|
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 409 KiB |
@@ -0,0 +1,269 @@
|
|||||||
|
0 0:0.4125454938802456 1:0.0005918367346938319 2:40.88699088514198 3:63776.55841478416 4:63818.22107904971 5:-41.66266426555376 6:-32.81084071156025 7:-17.70364710798701 8:24.133336749128045 9:21.070816140528727 10:30.258377966326677 11:0
|
||||||
|
0 0:3.327484437937823 1:-9.55989433127814e-06 2:10.950343151584079 3:63203.1678196618 4:63434.490864680985 5:-231.32304501918406 6:-142.76304727962938 7:-177.11999547910938 8:17.3293010432742 9:15.237733760329627 10:21.512435609163344 11:1 12:0 13:63784.0 14:63683.1 15:63733.55 16:63650.0 17:63958.0
|
||||||
|
0 0:3.327484437937823 1:0.0011261279249375838 2:33.28913522796762 3:62816.755195298276 4:63059.80055951527 5:-243.04536421699595 6:-240.30115713185978 7:-5.4884141702723355 8:36.39681998271597 9:34.724441314056826 10:39.74157732003425 11:1 12:0 13:63784.0 14:63683.1 15:63733.55 16:63650.0 17:63958.0
|
||||||
|
0 0:3.327484437937823 1:0.003788618962796901 2:31.216894004854367 3:62466.67057653834 4:62765.8111326304 5:-299.14055609206116 6:-257.56838628049263 7:-83.14433962313706 8:21.350026408897858 9:24.95048219517576 10:14.14911483634205 11:1 12:0 13:63784.0 14:63683.1 15:63733.55 16:63650.0 17:63958.0
|
||||||
|
0 0:0.7785897514463327 1:-0.0034685927609153884 2:26.194938425591758 3:62010.081931167246 4:62243.259946558486 5:-233.17801539124048 6:-164.44535756833108 7:-137.4653156458188 8:21.758272233884355 9:28.014268660532142 10:9.246279380588781 11:1 12:0 13:63784.0 14:63683.1 15:63733.55 16:63650.0 17:63958.0
|
||||||
|
1 0:1.4561068074600372 1:0.004090216791433795 2:28.04651318161514 3:61012.57865636736 4:61396.61698320064 5:-384.03832683328073 6:-266.66835101588885 7:-234.73995163478378 8:14.949683752295872 9:13.990083894671347 10:16.868883467544926 11:2 12:0 13:62422.3 14:61801.6 15:62111.95 16:61100.0 17:62791.6
|
||||||
|
0 0:1.2893854260926827 1:0.00026811799153468867 2:24.141975914932928 3:61455.63010566484 4:61560.758266618344 5:-105.12816095350718 6:-45.766321352891225 7:-118.7236792012319 8:11.433415553029374 9:14.577206406350228 10:5.14583384638766 11:0
|
||||||
|
0 0:0.49573946449025097 1:0.005931539193343532 2:45.48008026765487 3:61243.14421391929 4:61343.673230849025 5:-100.52901692973683 6:-86.99010193331307 7:-27.077829992847512 8:32.94112004727985 9:35.699990433448725 10:27.423379274942107 11:1 12:0 13:61532.4 14:61325.0 15:61428.7 16:61111.0 17:61763.0
|
||||||
|
0 0:0.49573946449025097 1:0.00032924466335556283 2:35.30523700248888 3:60922.756909392905 4:61043.12144263337 5:-120.36453324046306 6:-97.76790161414634 7:-45.19326325263344 8:23.43848867086265 9:31.00831482002913 10:8.298836372529685 11:1 12:0 13:61532.4 14:61325.0 15:61428.7 16:61111.0 17:61763.0
|
||||||
|
1 0:0.49573946449025097 1:-0.0032408085241489586 2:34.046931069533755 3:60843.268468870636 4:60957.67305577277 5:-114.40458690213563 6:-103.01379590809306 7:-22.78158198808515 8:34.47061462110964 9:37.28428570877141 10:28.843272445786113 11:1 12:0 13:61532.4 14:61325.0 15:61428.7 16:61111.0 17:61763.0
|
||||||
|
0 0:0.9198332590521919 1:0.0006657548242506379 2:32.412466510378025 3:60993.67690558492 4:61217.529864854136 5:-223.8529592692139 6:-175.15043459986757 7:-97.40504933869266 8:19.574454714022103 9:23.03975085340036 10:12.64386243526559 11:0
|
||||||
|
1 0:0.9198332590521919 1:-0.0011337679721369204 2:26.612670050822217 3:60429.71156769946 4:60779.97276078619 5:-350.26119308673515 6:-290.85450811202065 7:-118.81336994942899 8:12.237311181311366 9:15.155930607872115 10:6.400072328189864 11:0
|
||||||
|
0 0:2.5625222623612856 1:0.0018403210871642745 2:25.33058600805768 3:60800.76872295824 4:60982.942524345155 5:-182.17380138691806 6:-101.90292014448163 7:-160.54176248487286 8:15.869503321792 9:16.488013548855367 10:14.632482867665267 11:0
|
||||||
|
0 0:2.6390799655785515 1:0.0009227419376253971 2:24.54230113863524 3:60602.30358227465 4:60841.653627134736 5:-239.35004486008256 6:-163.072440717987 7:-152.5552082841911 8:14.37799099957994 9:14.49590273293112 10:14.142167532877583 11:0
|
||||||
|
0 0:2.6390799655785515 1:-0.0001792906068323485 2:25.118598469971943 3:60471.59975785506 4:60724.80494457045 5:-253.2051867153932 6:-204.61878029895337 7:-97.17281283287969 8:15.425403065953924 9:15.65564865872333 10:14.964911880415116 11:0
|
||||||
|
0 0:2.6390799655785515 1:-0.0026487870776320524 2:27.72212802743671 3:60406.6684656832 4:60656.58009651102 5:-249.91163082781713 6:-220.26264363208315 7:-59.29797439146796 8:21.508220191885624 9:19.421191963043988 10:25.68227664956889 11:0
|
||||||
|
1 0:0.4966393635143216 1:-0.0014021424204566841 2:25.032400401960118 3:60373.45312489185 4:60498.05148555849 5:-124.59836066664138 6:-90.35631060743316 7:-68.48410011841645 8:22.233461129973374 9:21.26496525707902 10:24.17045287576208 11:0
|
||||||
|
0 0:0.4790737207487578 1:-0.0001946520182775426 2:34.83937782734279 3:60703.09545855884 4:60740.023709156645 5:-36.928250597804436 6:-19.806123868912067 7:-34.24425345778474 8:25.81931776746773 9:29.086809296915828 10:19.284334708571528 11:0
|
||||||
|
1 0:0.6345586444235152 1:-0.0011432215388224008 2:29.358419000400147 3:60617.426830491946 4:60680.58774787547 5:-63.160917383524065 6:-41.319556480989945 7:-43.68272180506824 8:20.00589705123405 9:28.915865729813078 10:2.185959694075997 11:0
|
||||||
|
1 0:0.9722307157886161 1:-0.00025736984208177326 2:26.323923849933223 3:61897.708028327004 4:61961.34055724713 5:-63.63252892012679 6:-41.34837696256601 7:-44.56830391512156 8:19.68693891815647 9:20.821660461727156 10:17.417495831015103 11:0
|
||||||
|
0 0:0.23943878100343732 1:0.00020944061633540142 2:40.51474925024735 3:62112.101966905626 4:62129.453134805866 5:-17.351167900240398 6:-13.17192747197939 7:-8.358480856522014 8:32.095483113362576 9:36.45490268352974 10:23.37664397302825 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
0 0:1.0517485695667712 1:-8.074270368558145e-05 2:24.790616261762935 3:62024.3379283581 4:62072.36200716392 5:-48.02407880582177 6:-29.666525681476248 7:-36.71510624869105 8:14.029876645487537 9:20.49906854365389 10:1.0914928491548324 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
0 0:0.44010015180709855 1:-0.0009165858389912235 2:27.67428007472968 3:61892.181430479744 4:61941.834118619176 5:-49.65268813943112 6:-42.423565236708946 7:-14.45824580544435 8:10.85246584121428 9:20.649940386928343 10:-8.742483250213851 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
0 0:0.44010015180709855 1:0.0003526771919776557 2:36.271571264493105 3:61858.119313877454 4:61909.97742512455 5:-51.85811124709289 6:-48.472791324066705 7:-6.770639846052376 8:17.108313155947354 9:14.707405951661768 10:21.910127564518522 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
0 0:0.44010015180709855 1:0.00013595356861923255 2:32.62051532500578 3:61835.542561115566 4:61887.67189288071 5:-52.129331765143434 6:-50.03308681563635 7:-4.192489899014163 8:15.91527568973789 9:15.901617778953607 10:15.942591511306453 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
0 0:0.44010015180709855 1:-0.0006374414330460229 2:36.06081752726337 3:61819.90070378441 4:61863.388794025435 5:-43.48809024102229 6:-45.49952829000098 7:4.022876097957379 8:30.30367499885594 9:32.28123178049788 10:26.34856143557205 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
0 0:0.44010015180709855 1:-0.0007837092114978797 2:33.31540837777328 3:61793.6517910475 4:61838.68009782117 5:-45.02830677366728 6:-43.15349315528029 7:-3.749627236773989 8:22.31570892583974 9:30.958438692715244 10:5.030249392088727 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
1 0:0.44010015180709855 1:0.0005445696198223106 2:44.02805716072187 3:61733.265371863876 4:61771.66694594926 5:-38.40157408538653 6:-41.072310702965375 7:5.341473235157693 8:27.22983174443117 9:22.38815677760933 10:36.91318167807486 11:1 12:0 13:62160.0 14:62082.2 15:62121.1 16:62058.9 17:62212.6
|
||||||
|
1 0:0.4776764080085601 1:0.00014558913452112498 2:39.18998509874955 3:61875.356649684705 4:61901.387941796995 5:-26.03129211228952 6:-20.20494791813738 7:-11.652688388304284 8:28.598918541256246 9:33.95189946994303 10:17.892956683882687 11:0
|
||||||
|
0 0:0.29230027896108857 1:0.00048144920947618326 2:38.89988125998818 3:63418.28440979502 4:63471.27131452096 5:-52.98690472593444 6:-39.68949111162172 7:-26.594827228625434 8:27.70406229137895 9:31.16022430592136 10:20.791738262294132 11:0
|
||||||
|
0 0:0.767757043184749 1:-0.001866556993261413 2:24.497650967328426 3:63362.465647435114 4:63444.459640298104 5:-81.99399286299013 6:-34.72122061865524 7:-94.54554448866978 8:10.136599370388103 9:16.479349566512447 10:-2.548901021860587 11:1 12:0 13:63644.2 14:63302.2 15:63473.2 16:63281.6 17:63689.8
|
||||||
|
0 0:0.767757043184749 1:-0.0006584184977611958 2:30.77674370963628 3:63304.72392508667 4:63403.89255855461 5:-99.1686334679398 6:-56.509774355010734 7:-85.31771822585813 8:14.086860517742972 9:14.836868204055111 10:12.586845145118694 11:1 12:0 13:63644.2 14:63302.2 15:63473.2 16:63281.6 17:63689.8
|
||||||
|
0 0:0.767757043184749 1:-0.0018941345231773907 2:27.942228098585375 3:63140.49262540206 4:63256.408133306875 5:-115.91550790481415 6:-100.19856930310203 7:-31.43387720342423 8:22.388442128603018 9:26.388452992666743 10:14.388420400475567 11:1 12:0 13:63644.2 14:63302.2 15:63473.2 16:63281.6 17:63689.8
|
||||||
|
1 0:0.767757043184749 1:-0.0008011174234280325 2:21.63302428304185 3:62936.91351748417 4:63077.178855428196 5:-140.26533794402349 6:-123.7047582880477 7:-33.12115931195157 8:17.569750022900493 9:17.710636051378124 10:17.28797796594523 11:1 12:0 13:63644.2 14:63302.2 15:63473.2 16:63281.6 17:63689.8
|
||||||
|
0 0:1.2240224216219335 1:0.00019422978338609961 2:23.9735240268882 3:63257.147097576904 4:63438.54923320226 5:-181.40213562535791 6:-100.66048041379153 7:-161.48331042313276 8:13.076491550727006 9:18.06449292353262 10:3.1004888051157806 11:1 12:0 13:63795.7 14:63500.0 15:63647.85 16:63385.3 17:63885.0
|
||||||
|
0 0:1.2659938451511692 1:-0.0041422127681385755 2:16.592042042140548 3:62857.980802477025 4:63027.193764662414 5:-169.2129621853892 6:-66.99452364022832 7:-204.43687709032173 8:10.60772833370452 9:15.918041869311812 10:-0.012898737510067093 11:2 12:0 13:63346.3 14:62950.0 15:63148.15 16:62700.0 17:63434.9
|
||||||
|
1 0:0.18806871581276804 1:0.0010634749527478743 2:35.85316731443574 3:62299.11462795992 4:62370.532346315165 5:-71.4177183552456 6:-52.19362788567084 7:-38.44818093914951 8:37.757006074523346 9:50.292713830765706 10:12.685590562038627 11:3 12:0 13:62488.6 14:62160.0 15:62324.3 16:62091.8 17:62794.0
|
||||||
|
1 0:1.2773818578196559 1:0.0037134490172040014 2:38.8846963694282 3:62389.09157276442 4:62490.99597601824 5:-101.90440325382224 6:-34.60930947939301 7:-134.59018754885847 8:26.50064579261155 9:37.70565367307116 10:4.090630031692328 11:0
|
||||||
|
0 0:1.002668123248053 1:-0.0004268246348952009 2:23.12857232223864 3:62001.716791742685 4:62064.57193848705 5:-62.85514674436854 6:-30.201466000897568 7:-65.30736148694194 8:22.555930045725656 9:29.117618044802946 10:9.432554047571074 11:1 12:0 13:62204.6 14:62030.0 15:62117.3 16:62025.0 17:62250.0
|
||||||
|
0 0:1.0634488224542462 1:0.0017701463364118483 2:45.35711703990428 3:61914.0007280986 4:61973.46465940202 5:-59.463931303420395 6:-59.61943737156601 7:0.31101213629122526 8:50.07051563625974 9:48.039160130611705 10:54.1332266475558 11:1 12:0 13:62204.6 14:62030.0 15:62117.3 16:62025.0 17:62250.0
|
||||||
|
0 0:1.0634488224542462 1:0.00044999546767147795 2:41.10566303771916 3:61873.87709345722 4:61933.70025904222 5:-59.82316558500315 6:-57.13053365538643 7:-5.385263859233447 8:34.960928801180366 9:41.11852523451588 10:22.645735934509347 11:1 12:0 13:62204.6 14:62030.0 15:62117.3 16:62025.0 17:62250.0
|
||||||
|
0 0:0.1926610462478733 1:-0.0009550016186468112 2:37.73811611841088 3:61840.95085523592 4:61890.05154569685 5:-49.10069046093122 6:-42.42823868098227 7:-13.344903559897901 8:40.67932589999097 9:47.68397621777869 10:26.67002526441553 11:1 12:0 13:62204.6 14:62030.0 15:62117.3 16:62025.0 17:62250.0
|
||||||
|
0 0:1.046215760586181 1:-0.0020834994978440663 2:29.126943083553996 3:61647.69228628339 4:61753.060726659874 5:-105.36844037648552 6:-71.40794159602301 7:-67.92099756092503 8:25.754153287195912 9:34.001810084428925 10:9.258839692729879 11:2 12:0 13:62011.6 14:61662.1 15:61836.85 16:61600.1 17:62386.0
|
||||||
|
0 0:1.046215760586181 1:-0.0008535079010913523 2:23.83711110183428 3:61262.360069486305 4:61452.47866865291 5:-190.11859916660615 6:-155.25776164669685 7:-69.72167503981859 8:14.027551772953213 9:18.132157613423608 10:5.81834009201242 11:2 12:0 13:62011.6 14:61662.1 15:61836.85 16:61600.1 17:62386.0
|
||||||
|
0 0:1.046215760586181 1:-0.001132731177155198 2:26.502828457774143 3:61158.262290617335 4:61359.746755967164 5:-201.4844653498294 6:-175.3173694282424 7:-52.33419184317404 8:18.37369390396172 9:17.606104979742298 10:19.908871752400557 11:2 12:0 13:62011.6 14:61662.1 15:61836.85 16:61600.1 17:62386.0
|
||||||
|
1 0:1.046215760586181 1:-0.0011065990687365327 2:23.371316166195925 3:60815.29349060915 4:60993.12202701023 5:-177.82853640108078 6:-142.92152529591175 7:-69.81402221033807 8:30.047011149088437 9:40.20862643444013 10:9.72378057838506 11:2 12:0 13:62011.6 14:61662.1 15:61836.85 16:61600.1 17:62386.0
|
||||||
|
0 0:0.7450313325385992 1:-0.0027919786895941106 2:33.71760623173104 3:60952.498150506784 4:61009.03999078314 5:-56.54184027635347 6:-26.604418321661534 7:-59.87484390938387 8:26.593515493664565 9:40.6952224515468 10:-1.6098984220999029 11:0
|
||||||
|
0 0:0.7450313325385992 1:0.00034000244273597234 2:36.03925672268853 3:60766.87138543754 4:60868.43837706262 5:-101.56699162508448 6:-75.32876679096344 7:-52.47644966824208 8:23.600341344521837 9:29.955873963196066 10:10.88927610717338 11:0
|
||||||
|
0 0:0.7450313325385992 1:0.0004969153279394494 2:38.829054935258306 3:60662.75728843823 4:60776.942690310985 5:-114.18540187275357 6:-101.78265489370409 7:-24.805493958098964 8:26.890841950469884 9:22.68939889861492 10:35.293728054179816 11:0
|
||||||
|
0 0:0.6982746435109346 1:-0.001563636182938832 2:30.45959283677776 3:60511.44981070904 4:60600.112831859646 5:-88.66302115060535 6:-55.96455391420606 7:-65.39693447279858 8:10.94939626419043 9:17.50468674842954 10:-2.161184704287784 11:1 12:0 13:61020.0 14:60731.5 15:60875.75 16:60414.0 17:61230.8
|
||||||
|
0 0:1.0687088515032974 1:0.0024509354709178186 2:34.61922391749607 3:60376.085979997144 4:60512.04760442041 5:-135.9616244232675 6:-88.06239288211836 7:-95.79846308229827 8:18.26645649828202 9:15.595852677172399 10:23.607664140501264 11:1 12:0 13:61020.0 14:60731.5 15:60875.75 16:60414.0 17:61230.8
|
||||||
|
1 0:2.435817620739041 1:0.003859988016044267 2:25.93853209512315 3:59668.10416087729 4:60013.561887419215 5:-345.4577265419284 6:-233.25917796020912 7:-224.39709716343862 8:11.69222437758404 9:15.922838838215132 10:3.230995456321857 11:1 12:0 13:61020.0 14:60731.5 15:60875.75 16:60414.0 17:61230.8
|
||||||
|
0 0:2.0891128615258947 1:0.00047464878395299924 2:28.612146434549743 3:62610.78297861987 4:62744.112811840656 5:-133.32983322078508 6:-76.70925968942775 7:-113.24114706271465 8:7.454255182052641 9:8.834601938965093 10:4.693561668227737 11:0
|
||||||
|
1 0:8.284952002479201e-10 1:-0.001575940639569266 2:35.16585828798759 3:62473.32947400038 4:62566.44437556208 5:-93.11490156170476 6:-98.264190443515 7:10.2985777636205 8:29.029795372856846 9:39.500989908029624 10:8.087406302511283 11:0
|
||||||
|
0 0:0.5991516201220255 1:0.0009186947236141269 2:45.98799486879526 3:63117.4340366595 4:63136.27653333732 5:-18.842496677818417 6:-1.0372538332466796 7:-35.610485689143474 8:19.13041132727579 9:21.980349051245003 10:13.430535879337363 11:0
|
||||||
|
0 0:0.3570306002774446 1:0.0004986612375057005 2:41.08271487791497 3:63063.47352844943 4:63094.95554466597 5:-31.482016216541524 6:-19.46504412493307 7:-24.03394418321691 8:25.888187534261384 9:26.50282948871383 10:24.658903625356487 11:1 12:0 13:63230.0 14:63018.7 15:63124.35 16:63007.2 17:63366.8
|
||||||
|
0 0:0.41670811463484786 1:-0.0005163697143601623 2:34.988888704977484 3:62989.864712511604 4:63042.185646855585 5:-52.32093434398121 6:-38.29533043209686 7:-28.051207823768692 8:15.332452773413344 9:22.12634628274762 10:1.7446657547447941 11:1 12:0 13:63230.0 14:63018.7 15:63124.35 16:63007.2 17:63366.8
|
||||||
|
0 0:0.41670811463484786 1:0.0007657685567804213 2:46.96076955268015 3:62975.255148399534 4:63016.82150393575 5:-41.56635553621891 6:-43.6949657497332 7:4.257220427028585 8:54.94517513967317 9:38.05809827197396 10:88.7193288750716 11:1 12:0 13:63230.0 14:63018.7 15:63124.35 16:63007.2 17:63366.8
|
||||||
|
0 0:1.072219730319836 1:0.0018211630609548603 2:34.63442585309757 3:63058.113560384154 4:63119.09565521426 5:-60.98209483010578 6:-25.692449243439796 7:-70.57929117333197 8:26.41412279191389 9:35.43892832324415 10:8.36451172925338 11:1 12:0 13:63230.0 14:63018.7 15:63124.35 16:62862.0 17:63366.8
|
||||||
|
1 0:0.5797632888101101 1:0.0009106858054226244 2:33.546614238799535 3:62869.44072495118 4:62968.206941518525 5:-98.76621656734642 6:-79.19818539973184 7:-39.136062335229155 8:23.938427543866567 9:29.05828630106754 10:13.698710029464621 11:1 12:0 13:63230.0 14:63018.7 15:63124.35 16:62862.0 17:63366.8
|
||||||
|
0 0:0.4476953241615693 1:0.0004627420819244964 2:39.18796263298693 3:62731.80323575405 4:62758.60707544414 5:-26.803839690088353 6:-18.582652322961746 7:-16.442374734253214 8:23.960678561637067 9:23.644101180503082 10:24.593833323905038 11:1 12:0 13:62843.1 14:62736.2 15:62789.649999999994 16:62693.0 17:62938.1
|
||||||
|
0 0:0.649632889968404 1:-0.00026672033015831314 2:31.045685480144073 3:62678.78431083114 4:62721.90494987069 5:-43.120639039545495 6:-29.958588441550535 7:-26.32410119598992 8:15.414641905724434 9:20.402572980224978 10:5.438779756723342 11:1 12:0 13:62843.1 14:62736.2 15:62789.649999999994 16:62693.0 17:62938.1
|
||||||
|
0 0:0.8211455591019339 1:0.0008 2:33.697786003417335 3:62620.262858264025 4:62679.44121933241 5:-59.17836106838513 6:-43.93292605124244 7:-30.49087003428538 8:15.395723027894254 9:15.923891712907894 10:14.339385657866973 11:1 12:0 13:62843.1 14:62736.2 15:62789.649999999994 16:62693.0 17:62938.1
|
||||||
|
0 0:2.0178792535397485 1:0.00019932614901882435 2:22.98529984271218 3:62444.91098842297 4:62536.24823746933 5:-91.33724904635892 6:-50.45349878392034 7:-81.76750052487716 8:12.938665862155588 9:17.147740618804118 10:4.5205163488585285 11:1 12:0 13:62843.1 14:62736.2 15:62789.649999999994 16:62486.1 17:62938.1
|
||||||
|
1 0:2.0178792535397485 1:0.0013301088270858525 2:30.589055660959247 3:62238.45205669446 4:62379.56388100778 5:-141.1118243133169 6:-109.23746445880258 7:-63.74871970902865 8:13.506231548639512 9:13.29090181081408 10:13.936891024290375 11:1 12:0 13:62843.1 14:62736.2 15:62789.649999999994 16:62486.1 17:62938.1
|
||||||
|
1 0:0.6958746807739004 1:0.0002513536273369818 2:33.388150729250725 3:62613.63827888904 4:62673.17655027056 5:-59.538271381519735 6:-35.2401525124941 7:-48.59623773805127 8:22.30300903828853 9:29.420677729719166 10:8.067671655427247 11:0
|
||||||
|
1 0:0.7228523389785361 1:-0.0015453325601570425 2:29.571279207028653 3:65443.55014672388 4:65514.07390128375 5:-70.52375455987203 6:-51.51094158200929 7:-38.02562595572549 8:16.4395450913544 9:24.89640294303381 10:-0.47417061200442134 11:0
|
||||||
|
0 0:0.24262779412901836 1:-0.0001923221395838466 2:40.05733673770866 3:66728.09172434504 4:66780.01536224944 5:-51.9236379044014 6:-11.420220019225834 7:-81.00683577035113 8:28.08362664207145 9:42.558584054022155 10:-0.8662881818299581 11:1 12:0 13:67207.1 14:66477.1 15:66842.1 16:64771.7 17:67372.9
|
||||||
|
0 0:0.24262779412901836 1:-0.003138836499927187 2:37.7180669868541 3:66650.8043253435 4:66725.87363616786 5:-75.06931082435767 6:-42.751750151361875 7:-64.63512134599159 8:27.696690121317673 9:32.29190099461041 10:18.5062683747322 11:1 12:0 13:67207.1 14:66477.1 15:66842.1 16:64771.7 17:67372.9
|
||||||
|
1 0:0.24262779412901836 1:0.0009775790436018796 2:37.81498448492076 3:66492.38940513527 4:66614.74508686979 5:-122.35568173452339 6:-86.76247029187341 7:-71.18642288529995 8:24.093474312395184 9:23.142362502470114 10:25.99569793224532 11:1 12:0 13:67207.1 14:66477.1 15:66842.1 16:64771.7 17:67372.9
|
||||||
|
1 0:0.9060828607332074 1:0.0013313545221874076 2:39.43088798059732 3:66987.53780179912 4:67046.54703306017 5:-59.009231261050445 6:-23.708471660181825 7:-70.60151920173723 8:21.231790612686407 9:26.395193209456178 10:10.904985419146861 11:1 12:0 13:67168.6 14:66934.7 15:67051.65 16:66859.9 17:67335.9
|
||||||
|
0 0:0.4563688282933785 1:-0.00014425057365644928 2:27.841576327085264 3:67371.77821082609 4:67449.9300523802 5:-78.1518415541068 6:-51.606943318903724 7:-53.08979647040614 8:5.790862591648814 9:9.55681113157516 10:-1.7410344882038764 11:1 12:0 13:68030.6 14:67357.1 15:67693.85 16:67076.0 17:68299.9
|
||||||
|
0 0:0.32395275351145614 1:-0.0013016198763611344 2:30.491429565875194 3:67268.39763653163 4:67319.15381640464 5:-50.75617987300211 6:-26.86383002234576 7:-47.784699701312704 8:24.54782174572258 9:43.33495511147596 10:-13.026444985784195 11:1 12:0 13:68030.6 14:67357.1 15:67693.85 16:67076.0 17:68299.9
|
||||||
|
0 0:0.5643324948885564 1:-0.003973389472679779 2:23.912814019855276 3:67158.32665983195 4:67227.41391881576 5:-69.0872589838109 6:-26.589307929776385 7:-84.99590210806903 8:17.029411613811988 9:23.64368688755784 10:3.80086106632028 11:1 12:0 13:68030.6 14:67357.1 15:67693.85 16:67054.2 17:68299.9
|
||||||
|
0 0:0.41463242773364867 1:0.001052135325855184 2:42.53527738401657 3:66988.22618666387 4:67012.64403575484 5:-24.417849090968957 6:-6.7968204717288545 7:-35.24205723848021 8:29.91640365473243 9:35.99192690767771 10:17.765357148841872 11:2 12:0 13:67202.7 14:66789.3 15:66996.0 16:66766.0 17:67271.9
|
||||||
|
1 0:0.5035851573053632 1:-0.0005970372587160584 2:40.20793032466141 3:66984.97865415274 4:67011.09053762024 5:-26.111883467499865 6:-4.7105461007982665 7:-42.802674733403194 8:40.930153350608535 9:49.49908759855421 10:23.79228485471718 11:2 12:0 13:67202.7 14:66789.3 15:66996.0 16:66766.0 17:67271.9
|
||||||
|
0 0:0.4483303412052017 1:0.0002449009700144701 2:40.89090082056718 3:67868.75214804403 4:67904.31206724053 5:-35.55991919650114 6:-22.388628547224762 7:-26.34258129855276 8:21.641903998202046 9:31.632374375337974 10:1.6609632439301834 11:0
|
||||||
|
0 0:0.6315916537504713 1:-0.0005772768478027429 2:35.0866659847574 3:67802.67667462194 4:67837.53121599242 5:-34.854541370485094 6:-16.299301038805346 7:-37.110480663359496 8:10.92982367017773 9:15.178739113113037 10:2.4319927843071163 11:1 12:0 13:68019.6 14:67813.1 15:67916.35 16:67738.2 17:68025.0
|
||||||
|
1 0:0.6315916537504713 1:0.00023065219866238385 2:39.234621618547756 3:67700.28996677976 4:67751.89937731781 5:-51.60941053804709 6:-43.89983363323329 7:-15.419153809627588 8:14.58550790669506 9:21.30168838804579 10:1.1531469439936046 11:1 12:0 13:68019.6 14:67813.1 15:67916.35 16:67738.2 17:68025.0
|
||||||
|
1 0:0.21145544968947316 1:-0.0004222013401958891 2:35.05932691803265 3:68277.47610480044 4:68351.88074830903 5:-74.4046435085911 6:-66.83892677709102 7:-15.131433463000178 8:15.996868439363555 9:26.38632798323878 10:-4.7820506483868925 11:0
|
||||||
|
0 0:0.23400708414190635 1:-0.00011270739258029801 2:42.41584877401105 3:68330.53945101725 4:68350.75613865996 5:-20.216687642707257 6:-16.74062282431283 7:-6.952129636788854 8:19.09718162028483 9:17.682654687022655 10:21.926235486809176 11:0
|
||||||
|
0 0:0.3830263306341126 1:7.610450319122411e-05 2:44.00504045793821 3:68352.94953249747 4:68359.66460234059 5:-6.715069843121455 6:0.9998360439236684 7:-15.429811774090247 8:27.980356730255327 9:26.937551080383674 10:30.065968029998636 11:1 12:0 13:68420.0 14:68292.3 15:68356.15 16:68270.8 17:68456.0
|
||||||
|
0 0:0.5038602623556951 1:0.0003472013665376565 2:38.91469712800236 3:68312.0733728931 4:68334.11201944461 5:-22.038646551518468 6:-12.644663580705878 7:-18.78796594162518 8:19.40867841655028 9:23.37571602630652 10:11.474603197037801 11:1 12:0 13:68420.0 14:68292.3 15:68356.15 16:68270.8 17:68456.0
|
||||||
|
0 0:0.5038602623556951 1:8.79441730376751e-06 2:30.13550517894923 3:68267.73535889982 4:68301.25196204327 5:-33.516603143449174 6:-24.93980538761084 7:-17.15359551167667 8:18.7814500430224 9:14.915753915179874 10:26.512842298707447 11:1 12:0 13:68420.0 14:68292.3 15:68356.15 16:68270.8 17:68456.0
|
||||||
|
0 0:0.5507491016730408 1:-0.00093014930803653 2:25.35505902059043 3:68214.67218839654 4:68259.35767726612 5:-44.685488869581604 6:-33.06973769838841 7:-23.231502342386392 8:31.88249149935216 9:38.47786720703135 10:18.69174008399378 11:1 12:0 13:68420.0 14:68292.3 15:68356.15 16:68270.8 17:68456.0
|
||||||
|
1 0:1.2575933106177504 1:0.0006482624801553157 2:39.60705002878573 3:68097.2971308603 4:68133.20715474247 5:-35.91002388217021 6:-27.868953679004136 7:-16.082140406332144 8:21.848306169669744 9:18.031607813478665 10:29.481702882051906 11:2 12:0 13:68250.4 14:68088.0 15:68169.2 16:68042.5 17:68347.2
|
||||||
|
0 0:0.6020699327137655 1:0.0004769756815556908 2:48.310176587619424 3:68382.89535860949 4:68387.40830125744 5:-4.512942647954333 6:0.5191090455788838 7:-10.064103387066433 8:31.21843215793556 9:30.984908801877058 10:31.68547887005257 11:1 12:0 13:68431.3 14:68350.0 15:68390.65 16:68330.0 17:68445.5
|
||||||
|
0 0:1.2495859579995228 1:-0.0012616117309400337 2:27.348808045166237 3:68349.40242097269 4:68369.33726091642 5:-19.934839943729457 6:-6.763579287339889 7:-26.342521312779137 8:20.493105706187063 9:29.084839830826276 10:3.309637456908632 11:1 12:0 13:68431.3 14:68350.0 15:68390.65 16:68330.0 17:68445.5
|
||||||
|
1 0:1.4903484513014134 1:0.00017882741981344914 2:34.61885533154171 3:68293.38938816535 4:68332.4178677468 5:-39.02847958145139 6:-24.15413432203104 7:-29.748690518840704 8:21.024165577577136 9:22.697418470076357 10:17.677659792578694 11:1 12:0 13:68431.3 14:68350.0 15:68390.65 16:68330.0 17:68445.5
|
||||||
|
0 0:4.364060468501562 1:-0.0034140775974171884 2:24.080919374668497 3:69076.35881342863 4:69140.76253577821 5:-64.4037223495834 6:-11.309395887935464 7:-106.18865292329588 8:11.56815925455717 9:13.272008235546936 10:8.160461292577633 11:0
|
||||||
|
0 0:4.364060468501562 1:-0.0016667248420539084 2:27.029439244976118 3:68881.63372878426 4:69011.9750970899 5:-130.3413683056424 6:-79.4134634105251 7:-101.85580979023459 8:13.100276315086047 9:13.784091460017972 10:11.732646025222195 11:0
|
||||||
|
0 0:0.6649992679190825 1:-0.00024366756157343718 2:27.837506950242926 3:68658.66426601463 4:68777.37769853778 5:-118.71343252314546 6:-91.39585292572977 7:-54.635159194831374 8:12.902529575536802 9:14.153632233479836 10:10.40032425965073 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:0.6649992679190825 1:0.0008653952798742091 2:39.280343445196884 3:68600.10574971225 4:68694.3931076242 5:-94.28735791194777 6:-98.25347346092563 7:7.932231097955736 8:44.71211544307701 9:41.563411569214864 10:51.0095231908013 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:0.6649992679190825 1:0.000590005914699535 2:29.0137283010031 3:68475.5800535853 4:68591.2656508775 5:-115.68559729219123 6:-102.62461500996945 7:-26.121964564443573 8:25.40757677700898 9:30.705909208204048 10:14.810911914618842 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:0.6649992679190825 1:-0.002350231291441723 2:26.50930674558471 3:68375.47934395367 4:68494.28792757954 5:-118.80858362586878 6:-108.83710123795038 7:-19.9429647758368 8:24.32167472526509 9:30.122046520091526 10:12.720931135612211 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:0.330122756493345 1:-0.001470562361814098 2:32.17350611724865 3:68261.30850868042 4:68307.63388083577 5:-46.325372155348305 6:-37.33213479452353 7:-17.986474721649543 8:44.9304546388626 9:54.766532320389054 10:25.258299275809676 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:0.9301844148299 1:0.002291414136194408 2:34.03973456068147 3:68089.58427176646 4:68192.30586623772 5:-102.72159447125159 6:-65.35013021073163 7:-74.74292852103991 8:28.61502592719519 9:31.751625431694883 10:22.341826918195807 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:1.7742397961850693 1:-0.005557124668576048 2:21.604278690160356 3:67767.01295055902 4:67976.51999754416 5:-209.50704698514892 6:-139.73824405052238 7:-139.53760586925307 8:19.013037954317326 9:23.4602996792109 10:10.118514504530175 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:1.7742397961850693 1:0.0033930670019021274 2:40.486785602630015 3:67426.75476150142 4:67646.22874945415 5:-219.4739879527333 6:-214.28072294640629 7:-10.38653001265402 8:37.944396553786575 9:36.029996563497825 10:41.773196534364075 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
0 0:1.7742397961850693 1:0.0018134966575791788 2:37.52273198258737 3:67221.91439678683 4:67449.9651470532 5:-228.0507502663677 6:-220.44453213024485 7:-15.212436272245668 8:28.16397001929674 9:30.34366987657765 10:23.804570304734924 11:1 12:0 13:68944.0 14:68781.9 15:68862.95 16:68590.0 17:69200.0
|
||||||
|
1 0:1.0012870658850928 1:-0.003025549081129538 2:11.965565157124999 3:67187.56892457393 4:67372.49207862245 5:-184.9231540485198 6:-121.3962178038781 7:-127.05387248928338 8:9.78923668458065 9:8.691401797077996 10:11.984906459585961 11:2 12:0 13:67380.8 14:66920.0 15:67150.4 16:66865.9 17:67949.0
|
||||||
|
1 0:0.938999627806259 1:0.0018766467388216153 2:48.02094281041046 3:66971.46344842283 4:67039.87324557941 5:-68.40979715657886 6:-62.32194708790492 7:-12.175700137347889 8:43.227557785683025 9:39.55460105974571 10:50.57347123755767 11:0
|
||||||
|
0 0:0.3408292805757754 1:-0.0015362126404100899 2:31.799241756723603 3:67244.54548033302 4:67280.65942380682 5:-36.113943473799736 6:-23.676827822002032 7:-24.87423130359541 8:25.014968840129733 9:45.48972775648781 10:-15.934548992586429 11:0
|
||||||
|
0 0:0.4398521153021949 1:0.0007483333929616657 2:42.73913650234728 3:67157.46258674652 4:67213.46511259685 5:-56.00252585033013 6:-47.18953336611824 7:-17.62598496842378 8:32.79926211563298 9:27.93812655156751 10:42.521533243763905 11:0
|
||||||
|
1 0:0.47553615455063186 1:0.00019724720603811187 2:32.2869274585036 3:67068.49905885139 4:67148.7700566882 5:-80.27099783680751 6:-60.71599356235161 7:-39.11000854891179 8:22.50072438809408 9:28.465869013933997 10:10.570435136414247 11:0
|
||||||
|
0 0:0.043293202451287434 1:-0.00020776905716492135 2:40.903857759070334 3:66455.74015853967 4:66490.4907251185 5:-34.75056657883397 6:-32.612521956173495 7:-4.2760892453209465 8:37.47158119688152 9:42.224550443730024 10:27.96564270318453 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66150.0 17:66633.6
|
||||||
|
0 0:0.23293520380614513 1:-0.00038891853513385897 2:34.089822260727274 3:66418.28614901361 4:66466.80343374357 5:-48.517284729954554 6:-37.22775980807542 7:-22.57904984375827 8:25.024169664061063 9:34.08515157084612 10:6.902205850490944 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66150.0 17:66633.6
|
||||||
|
0 0:0.2535172043738337 1:0.0023583338869327935 2:47.36171103846687 3:66375.61729734951 4:66427.82712916407 5:-52.20983181455813 6:-46.6579211183482 7:-11.10382139241986 8:40.832722824381186 9:33.27422619744204 10:55.94971607825947 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66150.0 17:66633.6
|
||||||
|
0 0:1.3136259509728216 1:-0.0004969440968190784 2:28.006973377194072 3:66228.97357030258 4:66366.06213695162 5:-137.08856664903578 6:-72.91756075566066 7:-128.34201178675025 8:8.494563523518734 9:10.265291582488373 10:4.953107405579452 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66095.2 17:66921.7
|
||||||
|
0 0:1.3136259509728216 1:0.002211402153423 2:41.52498894529093 3:66059.28868415098 4:66188.42123844245 5:-129.13255429147102 6:-122.95652381718276 7:-12.352060948576536 8:27.93361299535473 9:29.090638344715636 10:25.619562296632907 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66095.2 17:66921.7
|
||||||
|
0 0:1.3136259509728216 1:-0.000949446536574144 2:27.906826643189248 3:65877.76933381495 4:66026.4974269544 5:-148.7280931394489 6:-131.17645057668625 7:-35.103285125525304 8:13.330784632919864 9:20.872699233255545 10:-1.7530445677515019 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66095.2 17:66921.7
|
||||||
|
1 0:1.3136259509728216 1:-0.004047291656810489 2:29.12923261327461 3:65627.40379717998 4:65788.90249985951 5:-161.49870267952792 6:-129.96878062353807 7:-63.059844111979714 8:25.60559799689685 9:33.55570779260395 10:9.705378405482662 11:1 12:0 13:66592.1 14:66377.0 15:66484.55 16:66095.2 17:66921.7
|
||||||
|
0 0:1.1334720679264028 1:0.00016987542468847498 2:29.609821725425306 3:67266.90614977844 4:67309.78959422755 5:-42.88344444910763 6:-6.956859445783297 7:-71.85317000664867 8:13.690983731572903 9:21.857693303296234 10:-2.6424354118737554 11:1 12:0 13:67456.7 14:67190.4 15:67323.54999999999 16:67015.9 17:67520.1
|
||||||
|
0 0:1.1334720679264028 1:0.00045600518594141704 2:39.16561811348492 3:67179.89748516622 4:67231.92342996842 5:-52.025944802197046 6:-41.353453153693586 7:-21.34498329700692 8:32.778771576402804 9:37.32566264896495 10:23.68498943127851 11:1 12:0 13:67456.7 14:67190.4 15:67323.54999999999 16:67015.9 17:67520.1
|
||||||
|
1 0:1.1494484523483761 1:0.001952361188318241 2:33.851650297275185 3:66972.57284191265 4:67078.8194153969 5:-106.2465734842408 6:-75.54495137336183 7:-61.403244221757944 8:17.702733876265967 9:19.350118783397022 10:14.407964062003856 11:1 12:0 13:67456.7 14:67190.4 15:67323.54999999999 16:67015.9 17:67520.1
|
||||||
|
0 0:0.4350089761303744 1:-0.0005413285202165367 2:33.55768622218456 3:68060.3015842451 4:68124.76796834808 5:-64.46638410298328 6:-45.73406415260127 7:-37.46463990076403 8:20.33104906044855 9:28.005085856571306 10:4.982975468203037 11:0
|
||||||
|
0 0:0.515631933337353 1:-0.0002357795461243737 2:28.970064502589125 3:67973.31380186032 4:68061.49490091274 5:-88.18109905242454 6:-65.97700009835032 7:-44.40819790814845 8:8.68577247997364 9:14.985057374083388 10:-3.9127973082458567 11:0
|
||||||
|
0 0:0.515631933337353 1:-0.0005611697074404515 2:36.486089736115595 3:67932.91234174467 4:68011.24803389735 5:-78.33569215268653 6:-75.4463522592195 7:-5.778679786934077 8:34.97743736836342 9:32.14271177664849 10:40.64688855179328 11:0
|
||||||
|
0 0:0.515631933337353 1:-0.0005568010747144981 2:39.56953094574564 3:67912.71098231059 4:67960.10716185649 5:-47.39617954590358 6:-55.382916324441545 7:15.973473557075934 8:37.423025563969375 9:46.05098766693082 10:20.16710135804648 11:0
|
||||||
|
0 0:1.0088113562845968 1:-4.432224637006865e-06 2:25.191929040530425 3:67891.95378903681 4:67954.08721443488 5:-62.133425398074905 6:-18.692075654762586 7:-86.88269948662463 8:4.539131289458822 9:8.94787313068913 10:-4.278352393001796 11:1 12:0 13:68216.4 14:68030.3 15:68123.35 16:67800.0 17:68256.5
|
||||||
|
0 0:1.0088113562845968 1:-0.0002702610899349588 2:32.32892086102642 3:67780.38180020188 4:67862.78154510832 5:-82.39974490643363 6:-65.07716484324415 7:-34.645160126378954 8:23.564589237859302 9:20.380340012430462 10:29.933087688716974 11:1 12:0 13:68216.4 14:68030.3 15:68123.35 16:67800.0 17:68256.5
|
||||||
|
0 0:1.0088113562845968 1:0.0004906524791250586 2:35.86633944615397 3:67744.84459538857 4:67827.25256527548 5:-82.40796988691727 6:-73.77710064223955 7:-17.26173848935545 8:36.2235762998826 9:28.46463382275992 10:51.741461254127955 11:1 12:0 13:68216.4 14:68030.3 15:68123.35 16:67800.0 17:68256.5
|
||||||
|
0 0:0.34376876977948156 1:-0.003220935489685619 2:29.94322994924491 3:67643.14650474832 4:67701.37525631742 5:-58.22875156909868 6:-46.898719919342014 7:-22.660063299513325 8:33.844287998939606 9:32.76135941849754 10:36.010145159823736 11:1 12:0 13:68216.4 14:68030.3 15:68123.35 16:67800.0 17:68256.5
|
||||||
|
1 0:0.703718402105289 1:0.0012663533482560455 2:32.28321458284613 3:67518.97203795455 4:67620.03168648823 5:-101.05964853368641 6:-70.52936186607533 7:-61.06057333522216 8:24.38269329680976 9:26.794445243348363 10:19.559189403732546 11:1 12:0 13:68216.4 14:68030.3 15:68123.35 16:67800.0 17:68256.5
|
||||||
|
0 0:0.7042078189746307 1:0.0010307568892653392 2:44.648372257048244 3:67033.88582297864 4:67059.33608668699 5:-25.450263708349667 6:-12.43937551080772 7:-26.021776395083894 8:22.302667304423206 9:27.304795465773452 10:12.29841098172271 11:2 12:0 13:67162.8 14:67029.5 15:67096.15 16:66972.0 17:67250.0
|
||||||
|
0 0:0.5342609014532396 1:-0.0015003963733702782 2:31.333175052746924 3:66994.98579772458 4:67023.98834365635 5:-29.00254593176942 6:-16.956543840164986 7:-24.092004183208864 8:26.628071300144278 9:29.83903949774176 10:20.20613490494931 11:2 12:0 13:67162.8 14:67029.5 15:67096.15 16:66939.5 17:67250.0
|
||||||
|
0 0:0.860771309081335 1:-0.00026642837791522654 2:33.97438673117918 3:66880.92009622187 4:66940.78533845287 5:-59.865242230996955 6:-42.9780092551365 7:-33.77446595172091 8:16.87372909789717 9:20.560078520553006 10:9.501030252585494 11:2 12:0 13:67162.8 14:67029.5 15:67096.15 16:66939.5 17:67250.0
|
||||||
|
1 0:0.860771309081335 1:0.00016024201036327147 2:34.90592581562376 3:66833.32305342198 4:66899.17521048084 5:-65.85215705886367 6:-55.948428532447664 7:-19.807457052832007 8:24.08322359380673 9:21.906522963244566 10:28.436624854931047 11:2 12:0 13:67162.8 14:67029.5 15:67096.15 16:66939.5 17:67250.0
|
||||||
|
0 0:0.44933032102518095 1:-0.00031740969843102617 2:35.7753145991624 3:67131.183629884 4:67147.86248857062 5:-16.678858686616877 6:-7.07728063049511 7:-19.203156112243533 8:17.096500135631253 9:20.384978060589813 10:10.519544285714133 11:1 12:0 13:67192.0 14:67081.6 15:67136.8 16:66909.4 17:67297.2
|
||||||
|
0 0:0.20552925829458377 1:6.263608434988352e-05 2:37.90831442011667 3:67087.17202462163 4:67109.24406049408 5:-22.072035872450215 6:-17.680155057841965 7:-8.7837616292165 8:14.775409167468844 9:22.196814733195048 10:-0.06740196398356346 11:1 12:0 13:67192.0 14:67081.6 15:67136.8 16:66909.4 17:67297.2
|
||||||
|
1 0:0.25426120861235313 1:0.0003581255707626284 2:38.39184109572525 3:67060.49608082387 4:67087.62708793517 5:-27.13100711129664 6:-22.818737731113295 7:-8.62453876036669 8:15.24813130450334 9:14.795066427519531 10:16.15426105847096 11:1 12:0 13:67192.0 14:67081.6 15:67136.8 16:66909.4 17:67297.2
|
||||||
|
0 0:0.4609183166778827 1:8.567448717155072e-05 2:39.96423524613351 3:67767.86178246947 4:67793.79147386858 5:-25.929691399112926 6:-11.164218662099662 7:-29.530945474026527 8:18.291911493455675 9:28.37563420481576 10:-1.875533929264492 11:0
|
||||||
|
0 0:0.4609183166778827 1:-0.0001906569239501858 2:36.83132232305272 3:67735.06451327789 4:67768.98364208493 5:-33.91912880704331 6:-21.87718356517476 7:-24.083890483737093 8:26.90658183538889 9:29.605781642395378 10:21.508182221375918 11:0
|
||||||
|
1 0:0.4609183166778827 1:-0.0008421649845529212 2:37.76491652822509 3:67689.84898793335 4:67717.56466350268 5:-27.715675569328596 6:-26.334836286933843 7:-2.7616785647895057 8:39.7198093690945 9:48.890586442263384 10:21.378255222756735 11:0
|
||||||
|
0 0:0.3640398273461792 1:-0.0038511181866319236 2:30.093426927905156 3:71150.0247322217 4:71200.27535061719 5:-50.25061839548289 6:-30.924585399231624 7:-38.65206599250253 8:35.833268062295794 9:36.30483074737111 10:34.89014269214516 11:1 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71580.0
|
||||||
|
1 0:0.46083762640587905 1:0.0008254865861898176 2:36.9868130416044 3:72278.94885774488 4:72397.63622968829 5:-118.68737194340792 6:-76.94857827125993 7:-83.47758734429598 8:18.1258744533991 9:16.50962942591932 10:21.358364508358655 11:1 12:0 13:72623.4 14:72203.9 15:72413.65 16:71871.1 17:72999.0
|
||||||
|
0 0:0.7893597476422236 1:0.0016517119771439993 2:42.794267772787386 3:71878.33197579478 4:71948.24177831705 5:-69.90980252227746 6:-41.747877018093604 7:-56.32385100836771 8:16.92674820429945 9:19.688800396016845 10:11.402643820864661 11:1 12:0 13:72165.6 14:71700.0 15:71932.8 16:71444.2 17:72484.5
|
||||||
|
1 0:0.3669235619400863 1:-0.00019325820825996954 2:48.17329467654061 3:71980.54196782151 4:71971.72633499099 5:8.815632830519462 6:3.1215931186825325 7:11.388079423673858 8:45.2715520777044 9:51.39436975117806 10:33.025916730757075 11:1 12:0 13:72165.6 14:71700.0 15:71932.8 16:71444.2 17:72484.5
|
||||||
|
0 0:0.4638886451382945 1:-0.002972822347207328 2:36.565683924714264 3:70450.64336670293 4:70514.87852164081 5:-64.23515493788 6:-35.42197219446868 7:-57.626365486822635 8:24.212523277346875 9:34.57471018453849 10:3.488149462963648 11:0
|
||||||
|
0 0:0.4638886451382945 1:0.003464767227512947 2:42.153415430606394 3:70126.27988827795 4:70265.73190456546 5:-139.45201628751238 6:-114.80853232584438 7:-49.28696792333599 8:32.18117208714911 9:27.982387501436694 10:40.578741258573935 11:0
|
||||||
|
0 0:0.5204282611863953 1:-0.0044198595406601615 2:28.724890739852142 3:70167.83477143313 4:70272.00980618317 5:-104.17503475003468 6:-57.86890467344616 7:-92.61226015317705 8:25.13271999425558 9:29.02558309003914 10:17.34699380268846 11:1 12:0 13:70669.7 14:70169.4 15:70419.54999999999 16:69705.0 17:70775.0
|
||||||
|
1 0:1.1018745142016215 1:0.0006258511285602105 2:22.47261650183981 3:69575.63001531348 4:69885.34649189218 5:-309.716476578702 6:-201.64107020055698 7:-216.15081275629 8:13.30027342760046 9:18.049136703810554 10:3.8025468751802762 11:1 12:0 13:70669.7 14:70169.4 15:70419.54999999999 16:69705.0 17:70775.0
|
||||||
|
0 0:0.18532029538207961 1:-0.000582577043284005 2:32.82055423135586 3:69349.44156339725 4:69569.94921083763 5:-220.50764744037588 6:-205.9527427596541 7:-29.10980936144358 8:23.235761509072304 9:20.346492534619237 10:29.01429945797844 11:0
|
||||||
|
1 0:0.18532029538207961 1:-0.0020971890714435106 2:27.614957596940485 3:69240.62620811284 4:69484.29802026546 5:-243.671812152621 6:-217.10149634632984 7:-53.1406316125823 8:18.576773209967335 9:20.24811987318919 10:15.234079883523627 11:0
|
||||||
|
0 0:0.9644712415855926 1:-0.0014997108213105318 2:37.612133944295046 3:69698.2351987623 4:69704.2135354094 5:-5.978336647109245 6:17.070037566971365 7:-46.09674842816122 8:15.983583870126765 9:28.727714195674093 10:-9.504676780967891 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69450.0 17:69846.2
|
||||||
|
0 0:0.9644712415855926 1:-0.0002542164746637677 2:41.93237045627236 3:69655.94771298103 4:69678.54792931146 5:-22.600216330436524 6:-6.939800711122257 7:-31.320831238628536 8:30.724982190152076 9:26.45391414309745 10:39.26711828426133 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69450.0 17:69846.2
|
||||||
|
0 0:0.9644712415855926 1:8.489196418414043e-05 2:36.355514343726384 3:69578.17580511078 4:69618.13868293347 5:-39.96287782269064 6:-27.912007250095648 7:-24.10174114518999 8:26.57735312853614 9:35.96143790529976 10:7.809183575008888 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69450.0 17:69846.2
|
||||||
|
0 0:0.9644712415855926 1:0.001001048580383481 2:41.83974644815724 3:69528.29377065794 4:69577.70972764143 5:-49.415956983488286 6:-40.70331466115069 7:-17.425284644675187 8:32.452251983015564 9:29.488582003777342 10:38.379591941492 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69450.0 17:69846.2
|
||||||
|
0 0:0.7109296301299062 1:-5.471042348751465e-05 2:37.8698967889062 3:69532.9226486992 4:69565.16457925308 5:-32.241930553878774 6:-14.361025585891758 7:-35.76180993597403 8:24.153026413932665 9:26.8217786277632 10:18.81552198627159 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69413.0 17:69846.2
|
||||||
|
0 0:1.4796970474492113 1:0.0009354618101691652 2:32.79814476815281 3:69374.41421517778 4:69456.92431725272 5:-82.51010207494255 6:-48.01890550879877 7:-68.98239313228757 8:17.588412160644737 9:20.89790157495132 10:10.96943333203157 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69375.0 17:69846.2
|
||||||
|
0 0:1.4796970474492113 1:0.0013128811444501763 2:38.304552632608726 3:69240.53102069184 4:69349.30181306797 5:-108.77079237613361 6:-89.13764652427429 7:-39.26629170371865 8:25.024892898531455 9:20.622569578473993 10:33.82953953864639 11:1 12:0 13:69750.0 14:69578.5 15:69664.25 16:69375.0 17:69846.2
|
||||||
|
0 0:0.6236094649434831 1:-0.001274685271380723 2:31.29702515463613 3:69179.1227398739 4:69240.72655879681 5:-61.6038189229148 6:-45.94718526604097 7:-31.31326731374766 8:12.022086854511036 9:17.411865093346506 10:1.2425303768400937 11:2 12:0 13:69393.7 14:69221.6 15:69307.65 16:69150.1 17:69570.0
|
||||||
|
0 0:3.8529092553983775 1:-0.000787968874495738 2:13.895029134765466 3:68519.92558454347 4:68798.21779448328 5:-278.2922099398129 6:-184.2021693914336 7:-188.18008109675856 8:12.924445856566283 9:13.345573453843777 10:12.0821906620113 11:2 12:0 13:69393.7 14:69221.6 15:69307.65 16:69150.1 17:69570.0
|
||||||
|
0 0:1.152852717757683 1:-0.00013779637214415157 2:31.457496980403846 3:68331.01437041422 4:68387.41235346331 5:-56.39798304908618 6:-30.68921160491531 7:-51.417542888341735 8:8.6135789375233 9:14.898552920493254 10:-3.9563690284166064 11:0
|
||||||
|
0 0:0.8775642557043374 1:-0.001041808415529341 2:38.03944461213507 3:68368.86407682771 4:68396.99011961638 5:-28.126042788673658 6:-11.449456576999571 7:-33.35317242334817 8:15.956130837375573 9:21.032751165274163 10:5.802890181578391 11:1 12:0 13:68575.8 14:68286.0 15:68430.9 16:68183.8 17:68605.5
|
||||||
|
0 0:0.6204330629047513 1:-0.0005078445146937872 2:39.1300110557794 3:68403.77744194499 4:68414.68557173137 5:-10.9081297863886 6:2.9276113531091297 7:-27.67148227899546 8:32.212324964848264 9:51.84723144201985 10:-7.057487989494902 11:1 12:0 13:68575.8 14:68286.0 15:68430.9 16:68183.8 17:68605.5
|
||||||
|
0 0:1.8535538132033473 1:0.0007264321300636168 2:33.82388082094175 3:68158.36032888932 4:68260.85110006321 5:-102.49077117389243 6:-67.79905121583613 7:-69.3834399161126 8:17.85027574991839 9:14.901318401393898 10:23.74819044696737 11:1 12:0 13:68575.8 14:68286.0 15:68430.9 16:68183.8 17:68605.5
|
||||||
|
1 0:0.4273052430085377 1:0.0004077387635470587 2:33.13978218869528 3:67914.84568008626 4:68071.32461864298 5:-156.47893855671282 6:-125.59381841332205 7:-61.77024028678153 8:25.337629868590316 9:25.34756860487405 10:25.317752396022854 11:3 12:0 13:68690.0 14:68375.7 15:68532.85 16:67846.0 17:68772.8
|
||||||
|
0 0:1.3468946334950527 1:-0.0007087882480582886 2:32.008501961571724 3:68986.60635200757 4:69045.93296756127 5:-59.3266155536985 6:-21.279989078507494 7:-76.09325295038201 8:12.257488179430382 9:13.164517235081913 10:10.44343006812732 11:0
|
||||||
|
0 0:1.3455762134143845 1:0.0008906575705894349 2:33.043991556920986 3:68778.85269630112 4:68875.9141840825 5:-97.06148778137867 6:-60.99530648853348 7:-72.13236258569039 8:12.565359597840837 9:13.873240790656741 10:9.949597212209028 11:1 12:0 13:69166.0 14:68980.0 15:69073.0 16:68713.4 17:69397.2
|
||||||
|
1 0:1.3455762134143845 1:0.0012663534133847433 2:37.84845538468214 3:68593.63188223503 4:68706.75767890498 5:-113.12579666994861 6:-106.26906172665699 7:-13.713469886583255 8:20.418428524273093 9:17.68486488127008 10:25.885555810279115 11:1 12:0 13:69166.0 14:68980.0 15:69073.0 16:68713.4 17:69397.2
|
||||||
|
0 0:1.3919042862198003 1:0.005539154246882926 2:38.69734096609816 3:67761.08502486203 4:68027.89639170974 5:-266.8113668477163 6:-213.65026689001675 7:-106.32219991539904 8:20.729984180965722 9:11.1240108690022 10:39.94193080489276 11:0
|
||||||
|
0 0:0.5070780370042839 1:-0.0011376157184796638 2:32.88426810027141 3:67325.20152545888 4:67484.4647562617 5:-159.263230802826 6:-117.28823747182776 7:-83.94998666199649 8:30.048404101300655 9:37.171336432422734 10:15.802539439056488 11:0
|
||||||
|
1 0:0.5795569037096832 1:-0.0012491474605891304 2:31.493915860265176 3:67221.56558923387 4:67409.95675262493 5:-188.39116339106113 6:-140.4165019131821 7:-95.94932295575808 8:21.503245230930084 9:29.320687404472885 10:5.868360883844488 11:0
|
||||||
|
1 0:1.5783079093055739 1:-0.006526540544512304 2:22.981423951769443 3:69728.64213482181 4:69869.1839548886 5:-140.54182006679184 6:-36.83754625369058 7:-207.4085476262025 8:21.639355386981247 9:27.52830425102909 10:9.861457658885556 11:0
|
||||||
|
0 0:0.3493262505082246 1:0.00015967830144868138 2:42.02770515313506 3:75249.00802671284 4:75316.09386136034 5:-67.08583464749972 6:-56.313612067759095 7:-21.544445159481256 8:28.64625814413288 9:24.290189559116726 10:37.35839531416519 11:0
|
||||||
|
0 0:0.6544080213836697 1:-0.0007999690162250034 2:30.740585748551595 3:75028.70183634978 4:75145.06506700059 5:-116.36323065080796 6:-82.34051104061871 7:-68.04543922037851 8:7.594580483160683 9:16.838180895989808 10:-10.892620342497569 11:1 12:0 13:75424.1 14:75051.0 15:75237.55 16:75015.9 17:76072.5
|
||||||
|
0 0:0.6544080213836697 1:-0.00020220145156546533 2:28.781293902783162 3:74863.25647953039 4:75010.82637448945 5:-147.56989495905873 6:-119.23693533422598 7:-56.66591924966551 8:6.589937265986141 9:10.001768723873923 10:-0.23372564978942378 11:1 12:0 13:75424.1 14:75051.0 15:75237.55 16:75015.9 17:76072.5
|
||||||
|
1 0:0.6135306612174006 1:-0.0017373888493417264 2:25.27571817424915 3:74726.69329829607 4:74826.79840624575 5:-100.10510794968286 6:-79.23112626015269 7:-41.74796337906034 8:15.183342428712706 9:30.196813843886368 10:-14.843600401634617 11:1 12:0 13:75424.1 14:75051.0 15:75237.55 16:75015.9 17:76072.5
|
||||||
|
1 0:2.8206101034474127 1:0.0006138889734163415 2:30.996033861494055 3:75842.70949127864 4:76038.45062478256 5:-195.74113350392145 6:-139.48673658848077 7:-112.50879383088136 8:13.19240613737967 9:9.937550401668208 10:19.702117608802595 11:0
|
||||||
|
0 0:0.6716203216615171 1:-0.0007756736112939418 2:38.563345724706956 3:75974.41822700019 4:76009.48793514163 5:-35.06970814144006 6:-18.32687514718794 7:-33.48566598850424 8:19.21583914588649 9:26.00581324847131 10:5.635890940716855 11:0
|
||||||
|
0 0:1.6777495564534297 1:-0.00028927502922462643 2:33.35086364287639 3:75976.65552743267 4:76017.01676070111 5:-40.36123326844245 6:1.4634103100118907 7:-83.64928715690867 8:21.888812967499653 9:34.84252289179565 10:-4.018606881092353 11:1 12:0 13:76189.9 14:75935.0 15:76062.45 16:75855.0 17:76330.0
|
||||||
|
1 0:1.7320119232693578 1:0.0012468547955698903 2:42.90072839303206 3:75879.82008953263 4:75954.08542161569 5:-74.26533208305773 6:-38.37385075754345 7:-71.78296265102856 8:23.812306047831896 9:25.848448716644832 10:19.740020710206025 11:1 12:0 13:76189.9 14:75935.0 15:76062.45 16:75855.0 17:76330.0
|
||||||
|
0 0:0.24987838025614412 1:-0.000560737868148031 2:38.81105308781844 3:76402.58353572976 4:76436.94944892371 5:-34.36591319394938 6:-13.37889699720074 7:-41.97403239349728 8:17.48770011706915 9:25.092010589162626 10:2.2790791728821915 11:0
|
||||||
|
0 0:0.24987838025614412 1:-0.00042201834862381506 2:40.30065358428198 3:76344.09429396129 4:76392.29986754221 5:-48.205573580926284 6:-34.13391438426025 7:-28.143318393332066 8:28.86467533755677 9:28.975804972879065 10:28.64241606691217 11:0
|
||||||
|
1 0:0.24987838025614412 1:-0.0009695630668630395 2:34.746195114984346 3:76280.57000657845 4:76346.44656087633 5:-65.87655429787992 6:-48.00105387062716 7:-35.75100085450552 8:17.068994952983655 9:23.944787588996697 10:3.3174096809575673 11:0
|
||||||
|
0 0:0.7199151455280003 1:-0.0009498577175940316 2:32.81202571817205 3:76447.89680872501 4:76482.23742076366 5:-34.34061203864985 6:-22.946798458850417 7:-22.78762715959887 8:18.006185360129148 9:24.99441586255555 10:4.029724355276343 11:1 12:0 13:76622.2 14:76493.9 15:76558.04999999999 16:76330.1 17:76735.0
|
||||||
|
0 0:0.7199151455280003 1:0.001110742901003767 2:47.92746542875733 3:76422.59052875431 4:76447.20000237992 5:-24.60947362560546 6:-24.481504315238084 7:-0.25593862073475293 8:30.950254666779585 9:36.958821665386104 10:18.93312066956655 11:1 12:0 13:76622.2 14:76493.9 15:76558.04999999999 16:76330.1 17:76735.0
|
||||||
|
0 0:0.7199151455280003 1:-0.0005831171213669838 2:34.94830059254923 3:76347.83777403084 4:76394.05737687947 5:-46.21960284863599 6:-35.98635323493514 7:-20.466499227401698 8:8.64718651902605 9:12.605280145996607 10:0.730999265084936 11:1 12:0 13:76622.2 14:76493.9 15:76558.04999999999 16:76330.1 17:76735.0
|
||||||
|
0 0:0.17341418359035393 1:-2.7531234841509508e-05 2:40.12892679811935 3:76333.02514533397 4:76353.05380441663 5:-20.028659082658123 6:-15.997418908090376 7:-8.062480349135495 8:20.768273982368555 9:36.75663606674964 10:-11.20845018639362 11:1 12:0 13:76622.2 14:76493.9 15:76558.04999999999 16:76259.1 17:76735.0
|
||||||
|
0 0:5.510385181838053 1:0.0006019251089511115 2:32.724982306569146 3:76217.00270519136 4:76265.63554810522 5:-48.63284291385207 6:-27.294902664615798 7:-42.67588049847255 8:25.020805595741212 9:22.821881329049674 10:29.418654129124292 11:1 12:0 13:76622.2 14:76493.9 15:76558.04999999999 16:76259.1 17:76735.0
|
||||||
|
1 0:7.2116354740452655 1:3.955424997269575e-06 2:19.495373764016534 3:76024.87143098217 4:76128.2567886128 5:-103.38535763062828 6:-74.31352262273731 7:-58.143670015781936 8:18.830095980780673 9:17.28493981775645 10:21.920408306829124 11:1 12:0 13:76622.2 14:76493.9 15:76558.04999999999 16:76259.1 17:76735.0
|
||||||
|
0 0:0.8085740865050461 1:-0.0012149597426551592 2:34.10068740761187 3:79638.94411248859 4:79683.32867278466 5:-44.38456029606459 6:10.777494149861369 7:-110.32410889185192 8:22.03267283981934 9:32.64654815703332 10:0.804922205391378 11:0
|
||||||
|
1 0:1.8633857513266523 1:0.001831789927692429 2:27.885768140396593 3:79211.91943066534 4:79554.79075246652 5:-342.8713218011835 6:-300.4517632675656 7:-84.83911706723586 8:16.298058308134557 9:12.33147043696762 10:24.23123405046843 11:1 12:0 13:79950.0 14:79307.9 15:79628.95 16:79200.0 17:81199.0
|
||||||
|
0 0:0.519663673836175 1:-0.0019573187994645336 2:33.64952949872014 3:86293.61085958846 4:86704.13446581314 5:-410.52360622468404 6:-331.5335343261048 7:-157.98014379715846 8:20.93834281986154 9:22.79855306252844 10:17.217922334527735 11:0
|
||||||
|
1 0:0.519663673836175 1:0.006337799178985531 2:39.65075846072201 3:86006.0448129778 4:86469.1403052548 5:-463.09549227700336 6:-391.7282582117007 7:-142.73446813060536 8:25.557590211374706 9:23.30218500353402 10:30.06840062705608 11:0
|
||||||
|
0 0:0.19463479799938554 1:-0.002951764350054593 2:36.636582310112104 3:88228.85761284364 4:88396.8581592679 5:-168.00054642425675 6:-140.3909779742533 7:-55.2191369000069 8:35.20453988258985 9:49.843321875193425 10:5.926975897382704 11:0
|
||||||
|
0 0:0.6880817193692343 1:0.001999415643565491 2:40.04155059501566 3:87751.18085831698 4:87945.64216806942 5:-194.4613097524416 6:-104.28901003771003 7:-180.34459942946313 8:22.767290671435095 9:28.736721153945716 10:10.828429706413857 11:1 12:0 13:88514.7 14:87630.3 15:88072.5 16:87384.6 17:88700.0
|
||||||
|
1 0:0.6412674330198508 1:0.0012880218604321223 2:37.53110461021272 3:86655.83376406849 4:86880.23917554953 5:-224.4054114810424 6:-186.82406058657045 7:-75.16270178894388 8:18.76361906153766 9:21.93175738075939 10:12.427342423094203 11:1 12:0 13:88514.7 14:87630.3 15:88072.5 16:87061.6 17:88700.0
|
||||||
|
0 0:1.4805866264052614 1:0.00903376977728943 2:38.95331867218469 3:91821.16900655527 4:92080.05344363341 5:-258.8844370781444 6:-10.359953643363678 7:-497.04896686956147 8:23.433649177550258 9:35.16958892913089 10:-0.038230325610996374 11:1 12:0 13:92886.5 14:91800.0 15:92343.25 16:91525.2 17:93197.6
|
||||||
|
0 0:1.4805866264052614 1:-0.00032522627562825895 2:33.29848142112513 3:91344.71850146794 4:91782.40479890117 5:-437.68629743323254 6:-189.58240746518362 7:-496.20777993609784 8:17.10193243294852 9:24.505482680213433 10:2.294831938418696 11:1 12:0 13:92886.5 14:91800.0 15:92343.25 16:91525.2 17:93197.6
|
||||||
|
0 0:1.4805866264052614 1:-0.008401796521345883 2:28.16372342138345 3:90708.57443900079 4:91301.08443346027 5:-592.509994459484 6:-410.24555546428854 7:-364.5288779903909 8:17.706445713271517 9:21.632145599333185 10:9.855045941148177 11:1 12:0 13:92886.5 14:91800.0 15:92343.25 16:91525.2 17:93197.6
|
||||||
|
0 0:0.5502785553603811 1:-0.003065450974134728 2:29.17354926032033 3:90040.6201982697 4:90589.47456726647 5:-548.8543689967773 6:-405.71747871667475 7:-286.2737805602052 8:20.550518745957625 9:37.66428272133191 10:-13.677009204790942 11:1 12:0 13:92886.5 14:91800.0 15:92343.25 16:91525.2 17:93197.6
|
||||||
|
1 0:0.7857084358440062 1:0.0060231196176588645 2:33.972093505102066 3:89444.16981515565 4:90163.66853190766 5:-719.4987167520158 6:-543.4415557513644 7:-352.11432200130275 8:15.841657599853917 9:21.466340920878103 10:4.592290957805545 11:1 12:0 13:92886.5 14:91800.0 15:92343.25 16:91525.2 17:93197.6
|
||||||
|
0 0:0.4980277241373202 1:9.934698889316491e-05 2:38.22380823754542 3:89785.97246429742 4:89871.26413025658 5:-85.2916659591574 6:-52.83602340759073 7:-64.91128510313334 8:23.58926479757251 9:29.37456344649234 10:12.018667499732857 11:1 12:0 13:90128.9 14:89567.2 15:89848.04999999999 16:89531.7 17:90642.5
|
||||||
|
1 0:1.0448045182060262 1:0.0027435686765276096 2:40.616449489404886 3:89792.75028775453 4:89880.86505524207 5:-88.11476748753921 6:-22.059980482357325 7:-132.10957401036376 8:21.901669357390666 9:21.7303557091676 10:22.244296653836805 11:1 12:0 13:90128.9 14:89567.2 15:89848.04999999999 16:89333.8 17:90642.5
|
||||||
|
0 0:2.7898488744666965 1:-0.0005526376337422885 2:38.060988735482745 3:91053.48728356932 4:91118.60406529022 5:-65.1167817208916 6:-0.519188562124819 7:-129.19518631753354 8:20.036364237219978 9:25.092487073809284 10:9.924118564041365 11:0
|
||||||
|
0 0:2.7898488744666965 1:-0.0003050744789228458 2:40.83014357337849 3:90924.13831692525 4:91027.94633686732 5:-103.80801994206558 6:-59.986676676963576 7:-87.64268653020402 8:27.62399369203331 9:27.864667458838817 10:27.142646158422295 11:0
|
||||||
|
0 0:10.283089854121284 1:0.0043663842485728846 2:34.35501167619407 3:89947.16798347986 4:90435.18122350036 5:-488.0132400205039 6:-264.3789236022802 7:-447.2686328364473 8:19.23088114781912 9:27.055080210820154 10:3.5824830218170476 11:0
|
||||||
|
1 0:10.283089854121284 1:-0.0012477286906006527 2:30.938326817354366 3:88647.02990559714 4:89312.75393726274 5:-665.7240316655952 6:-580.6556115020455 7:-170.13684032709943 8:18.402862754477773 9:23.16775227357449 10:8.873083716284341 11:0
|
||||||
|
0 0:11.244712004402466 1:-0.0034748620391656924 2:31.357345314586198 3:89087.08133946493 4:89192.97582867474 5:-105.89448920980794 6:25.412798623709612 7:-262.6145756670351 8:22.78151270974128 9:36.49246313566305 10:-4.6403881421022675 11:0
|
||||||
|
0 0:11.976290228310834 1:0.003525696884086552 2:33.34135720201617 3:87948.25080307071 4:88399.2718440857 5:-451.02104101498844 6:-346.9379995971268 7:-208.16608283572327 8:16.32135483304065 9:12.322555833614658 10:24.318952831892638 11:0
|
||||||
|
0 0:0.3317047953732337 1:-0.0037638022303419154 2:34.60529366778765 3:87608.69201017273 4:87838.57511689924 5:-229.88310672651278 6:-183.49415525457462 7:-92.77790294387631 8:28.712809160945874 9:43.12164124132198 10:-0.10485499980634927 11:0
|
||||||
|
1 0:0.3317047953732337 1:0.003809191023918296 2:45.33513749403204 3:87372.02543225422 4:87618.50741958365 5:-246.48198732943274 6:-228.6576446458986 7:-35.64868536706825 8:29.215851206370793 9:26.76765466295594 10:34.112244293200504 11:0
|
||||||
|
0 0:0.6191301066255922 1:-0.0019349998459919893 2:30.182727749818483 3:91130.90581113551 4:91240.92010766735 5:-110.01429653183732 6:-63.77428797294233 7:-92.48001711778997 8:34.588593591851065 9:34.871327478709226 10:34.023125818134744 11:1 12:0 13:91745.0 14:90993.0 15:91369.0 16:90900.0 17:91849.8
|
||||||
|
0 0:0.7662664852939907 1:0.003185105417895336 2:42.09378314265386 3:90544.39380125984 4:90709.77115814971 5:-165.37735688987595 6:-121.79182682153831 7:-87.1710601366753 8:23.60371524068516 9:19.779040095207133 10:31.253065531641205 11:1 12:0 13:91745.0 14:90993.0 15:91369.0 16:90900.0 17:91849.8
|
||||||
|
1 0:1.9877786999131821 1:0.002684001541374201 2:31.30941204669176 3:90109.24478591976 4:90370.36878781523 5:-261.1240018954704 6:-161.9194630643958 7:-198.40907766214923 8:17.357495628934643 9:15.128139150015532 10:21.816208586772866 11:1 12:0 13:91745.0 14:90993.0 15:91369.0 16:90120.0 17:91849.8
|
||||||
|
0 0:0.8268064251468755 1:0.0007662216757810144 2:34.92182073011472 3:90770.44622504209 4:90858.42526807437 5:-87.97904303227551 6:-34.040248684135314 7:-107.8775886962804 8:16.773377392133725 9:23.4684475066599 10:3.3832371630813753 11:0
|
||||||
|
0 0:0.8268064251468755 1:0.0006479536757503197 2:31.763086092187066 3:90506.42510688725 4:90659.79953157202 5:-153.37442468476365 6:-104.40195437181414 7:-97.94494062589902 8:25.741807662731013 9:33.0143906178156 10:11.196641752561831 11:0
|
||||||
|
0 0:0.9538463221695918 1:-0.0012608213096560025 2:29.91732362497052 3:90325.83609548927 4:90397.58643195292 5:-71.75033646365046 6:-10.44890689684466 7:-122.60285913361159 8:21.23883844104811 9:32.9797067061894 10:-2.2428980892344654 11:1 12:0 13:90701.0 14:90564.7 15:90632.85 16:89935.7 17:91250.0
|
||||||
|
0 0:0.9538463221695918 1:-0.0001445729537366548 2:32.846819770403584 3:90097.49431813935 4:90235.07581733029 5:-137.58149919094285 6:-95.60828892557547 7:-83.94642053073477 8:24.660306587053146 9:25.977991395440938 10:22.024936970277565 11:1 12:0 13:90701.0 14:90564.7 15:90632.85 16:89935.7 17:91250.0
|
||||||
|
0 0:0.9538463221695918 1:0.0013591145830435243 2:39.42978821362158 3:90006.15468337516 4:90148.78308437747 5:-142.62840100230824 6:-124.36434152654428 7:-36.528118951527915 8:28.673351282911064 9:25.319048336143155 10:35.38195717644689 11:1 12:0 13:90701.0 14:90564.7 15:90632.85 16:89935.7 17:91250.0
|
||||||
|
0 0:0.5894317140010426 1:-0.0017812432296005771 2:26.079798766205286 3:89687.09681132858 4:89850.87301952216 5:-163.7762081935798 6:-127.09789957036465 7:-73.35661724643032 8:20.499936007174657 9:23.152670820652958 10:15.19446638021806 11:1 12:0 13:90701.0 14:90564.7 15:90632.85 16:89935.7 17:91250.0
|
||||||
|
1 0:0.9046679812433642 1:-0.0045676895944352916 2:22.598093394060072 3:89391.51104594242 4:89609.51693960185 5:-218.0058936594287 6:-161.71151616089043 7:-112.58875499707653 8:22.662373988045736 9:34.41155027871632 10:-0.8359785932954367 11:1 12:0 13:90701.0 14:90564.7 15:90632.85 16:89935.7 17:91250.0
|
||||||
|
0 0:0.21024463466166607 1:-0.007415136107936888 2:28.788590863205243 3:90528.28070998058 4:90782.71046639573 5:-254.4297564151493 6:-264.51042990705656 7:20.161346983814497 8:51.5241052807317 9:62.82873428222958 10:28.914847277735944 11:0
|
||||||
|
0 0:0.35173388642572695 1:-0.0021049044273156454 2:25.019484504781914 3:90155.84239609347 4:90515.81217244404 5:-359.9697763505683 6:-302.4617947026974 7:-115.01596329574181 8:21.349473565850303 9:35.168342356261554 10:-6.288264014972199 11:0
|
||||||
|
1 0:0.35173388642572695 1:-0.001630994014485951 2:30.767314407022553 3:89892.82406562568 4:90213.9350523146 5:-321.11098668891646 6:-320.61848015347084 7:-0.9850130708912275 8:32.928364286037116 9:33.922022824633046 10:30.941047208845248 11:0
|
||||||
|
0 0:1.0319074978557257 1:-0.0014665786940486645 2:31.52957645814962 3:90962.69195920766 4:91217.76809809571 5:-255.07613888804917 6:-119.45366956024255 7:-271.2449386556133 8:13.339534720522163 9:19.931873628104533 10:0.1548569053574198 11:0
|
||||||
|
1 0:1.0319074978557257 1:-0.003545744994993425 2:25.872219507304067 3:90443.43545459244 4:90833.93403984302 5:-390.4985852505779 6:-280.8631788100671 7:-219.27081288102158 8:11.223190248996186 9:14.853921565076696 10:3.9617276168351623 11:0
|
||||||
|
0 0:0.9721561388849328 1:0.0012038030976843405 2:39.248051782751745 3:91644.21375280785 4:91704.88965876348 5:-60.675905955635244 6:-18.442740228509315 7:-84.46633145425186 8:29.75987727968009 9:46.12296135873867 10:-2.9662908784370785 11:0
|
||||||
|
1 0:3.761292652956454 1:0.00364099344445872 2:42.811562931491686 3:91704.80508357371 4:91890.41393490563 5:-185.60885133192642 6:-64.13715774856136 7:-242.9433871667301 8:21.680110940633778 9:18.294915681404454 10:28.450501459092422 11:1 12:0 13:92029.2 14:91456.0 15:91742.6 16:91250.0 17:92885.0
|
||||||
|
0 0:1.244343280983012 1:-0.003679974243399809 2:35.20021944466262 3:93232.43093711935 4:93222.38301079854 5:10.047926320810802 6:71.03849490446393 7:-121.98113716730626 8:19.976252793658418 9:38.294314212995516 10:-16.65987004501578 11:0
|
||||||
|
1 0:0.43314696012425613 1:0.0006831851849470997 2:38.48407479103617 3:93788.63503948666 4:93928.2363742952 5:-139.60133480853983 6:-80.45249310263668 7:-118.2976834118063 8:29.872155775157744 9:39.08271665273704 10:11.451034019999142 11:0
|
||||||
|
1 0:0.8487321930056525 1:-0.002597998013295637 2:43.977982555870085 3:98145.44259633085 4:98175.1377007709 5:-29.695104440048453 6:41.20818783892774 7:-141.8065845579524 8:34.97137419531035 9:38.88364848661699 10:27.146825612697057 11:0
|
||||||
|
0 0:0.3450000245956956 1:0.001992779225479919 2:42.60082007666138 3:98571.35029551786 4:98695.37152642477 5:-124.02123090691748 6:-113.737107414718 7:-20.568246984398968 8:25.683721568884188 9:28.927382078115503 10:19.196400550421565 11:0
|
||||||
|
0 0:0.3450000245956956 1:0.0004550020261807796 2:44.163888155632144 3:98518.2495733651 4:98625.03681789433 5:-106.78724452923052 6:-114.89274864368574 7:16.21100822891043 8:44.909624228593145 9:34.830343206619084 10:65.06818627254127 11:0
|
||||||
|
0 0:1.902489532973911 1:-0.0034197716070171738 2:16.59726928718956 3:98353.14132795403 4:98536.85631307148 5:-183.7149851174472 6:-69.48287925788563 7:-228.46421171912317 8:10.624586345718301 9:19.769686471351342 10:-7.665613905547779 11:1 12:0 13:98845.4 14:98461.5 15:98653.45 16:98300.0 17:99019.2
|
||||||
|
0 0:1.902489532973911 1:-0.0035612208558970858 2:27.52084916797594 3:98148.62644856932 4:98393.61777634213 5:-244.99132777280465 6:-145.26366211887046 7:-199.4553313078684 8:21.35866540864239 9:19.930109445496228 10:24.215777334934714 11:1 12:0 13:98845.4 14:98461.5 15:98653.45 16:98300.0 17:99019.2
|
||||||
|
1 0:1.902489532973911 1:-0.0008998748178702322 2:35.039555558388415 3:97671.98975596027 4:97912.44659416917 5:-240.45683820890554 6:-219.8515360150614 7:-41.21060438768825 8:23.943255358814742 9:31.902720104326484 10:8.024325867791262 11:1 12:0 13:98845.4 14:98461.5 15:98653.45 16:98300.0 17:99019.2
|
||||||
|
0 0:0.9297990245323531 1:-0.0022690617874422414 2:34.27658792383828 3:98956.12592627529 4:99023.34219194931 5:-67.21626567402564 6:-33.76664454640495 7:-66.89924225524138 8:22.56423891842959 9:31.983072895349746 10:3.7265709645892784 11:0
|
||||||
|
0 0:0.4464783121191794 1:0.000769269854174047 2:38.71202456376306 3:98575.23388346867 4:98668.42737619662 5:-93.1934927279508 6:-74.01234731045932 7:-38.36229083498296 8:20.467374060558107 9:17.472746792793252 10:26.456628596087818 11:1 12:0 13:98940.8 14:98740.9 15:98840.85 16:98508.1 17:99418.4
|
||||||
|
0 0:0.4464783121191794 1:-0.0006872670829523414 2:37.38188536974243 3:98545.16982189177 4:98640.24788768572 5:-95.07806579394673 6:-81.07362774458758 7:-28.008876098718304 8:26.441561816975074 9:22.52910166213929 10:34.266482126646636 11:1 12:0 13:98940.8 14:98740.9 15:98840.85 16:98508.1 17:99418.4
|
||||||
|
0 0:0.4464783121191794 1:-0.0007870657174484853 2:38.0833521706893 3:98526.27854096577 4:98598.68963456534 5:-72.41109359957045 6:-71.50914721107546 7:-1.8038927769899828 8:38.737881962664304 9:46.51635563800712 10:23.18093461197867 11:1 12:0 13:98940.8 14:98740.9 15:98840.85 16:98508.1 17:99418.4
|
||||||
|
1 0:0.4464783121191794 1:-0.0003372609332986419 2:40.65517232882169 3:98471.26862801365 4:98544.55213476207 5:-73.28350674841204 6:-73.42279975628406 7:0.27858601574405384 8:29.928775723934052 9:33.074425246727436 10:23.637476678347284 11:1 12:0 13:98940.8 14:98740.9 15:98840.85 16:98508.1 17:99418.4
|
||||||
|
0 0:0.4885039427599816 1:0.0002946378951068774 2:38.62947156175023 3:98526.91478253639 4:98583.81816065982 5:-56.90337812343205 6:-40.85997854740338 7:-32.08679915205734 8:20.764577310507015 9:25.02204013234346 10:12.249651666834126 11:0
|
||||||
|
0 0:2.5065460235358272 1:-0.002670449037485238 2:28.04563290651062 3:98147.06053136989 4:98360.62263641498 5:-213.56210504508635 6:-132.22180229698967 7:-162.68060549619338 8:24.799257932815006 9:22.131588188113376 10:30.134597422218263 11:1 12:0 13:98666.0 14:98450.0 15:98558.0 16:98400.0 17:98916.8
|
||||||
|
0 0:2.5065460235358272 1:-0.0008889180524184527 2:28.3389309621152 3:97834.94982751837 4:98106.74051172835 5:-271.79068420997646 6:-217.95885494106443 7:-107.66365853782406 8:16.45504693058593 9:21.288970295992847 10:6.787200199772094 11:1 12:0 13:98666.0 14:98450.0 15:98558.0 16:98400.0 17:98916.8
|
||||||
|
0 0:0.29499423509045675 1:-0.0002595843572209382 2:36.02522514710419 3:97567.1710064064 4:97680.7009943312 5:-113.52998792480503 6:-102.4077666986927 7:-22.24444245222466 8:26.97816551354565 9:27.13537445077856 10:26.663747639079837 11:1 12:0 13:98666.0 14:98450.0 15:98558.0 16:98400.0 17:98916.8
|
||||||
|
1 0:0.29499423509045675 1:-0.0012692831425643815 2:30.37411619390855 3:97457.3101258638 4:97592.06026277728 5:-134.75013691346976 6:-117.02401841252859 7:-35.45223700188234 8:16.47842330701645 9:19.164385398891476 10:11.106499123266396 11:1 12:0 13:98666.0 14:98450.0 15:98558.0 16:98400.0 17:98916.8
|
||||||
|
0 0:0.8319126247321323 1:2.3474417987557644e-05 2:33.88653321439345 3:98148.99595896614 4:98221.50583298724 5:-72.50987402109604 6:-45.663399670538084 7:-53.69294870111591 8:28.93899566369666 9:34.10256252795765 10:18.611861935174673 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
0 0:0.8319126247321323 1:-0.00036758699558895604 2:33.920668893957526 3:98009.12776216635 4:98094.1689988874 5:-85.04123672105197 6:-77.83331882971922 7:-14.41583578266551 8:30.512298788371453 9:35.29269694055778 10:20.951502483998794 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
0 0:0.8319126247321323 1:-0.0005600548792349373 2:24.50956903038626 3:97852.47272619886 4:97978.50016210473 5:-126.0274359058676 6:-96.81308863130575 7:-58.42869454912372 8:17.303162932852697 9:21.51645742982552 10:8.87657393890705 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
0 0:0.8319126247321323 1:-0.0017895596719754677 2:27.348644550842025 3:97680.94791782678 4:97839.2167529556 5:-158.2688351288234 6:-127.21291759854353 7:-62.11183506055977 8:23.18830758620642 9:28.11919979037686 10:13.326523177865539 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
0 0:0.8319126247321323 1:0.0005208675784074919 2:38.12194955149041 3:97501.54293055044 4:97651.96640774721 5:-150.4234771967749 6:-146.34746979815358 7:-8.152014797242657 8:25.044080066753693 9:28.74149927136416 10:17.649241657532762 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
0 0:1.285104856016015 1:-0.0003443180795942254 2:20.799700730497534 3:97111.36911596099 4:97357.29039965158 5:-245.92128369059355 6:-185.16833854841514 7:-121.50589028435684 8:21.92465988535781 9:23.295057877816767 10:19.18386390043989 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
1 0:1.3010983494605939 1:0.002195104926432179 2:35.12105935834926 3:96434.63298433331 4:96691.93823675804 5:-257.3052524247323 6:-191.18005648450588 7:-132.25039188045287 8:16.413835130880198 9:16.002208924661822 10:17.237087543316946 11:1 12:0 13:98340.2 14:97966.1 15:98153.15 16:97947.4 17:98578.9
|
||||||
|
0 0:0.08709889590730593 1:0.0019855766700005877 2:44.46676455620184 3:95247.4100487978 4:95417.0198372957 5:-169.60978849789535 6:-159.99791902734086 7:-19.22373894110899 8:23.442338760992104 9:26.418886705675316 10:17.489242871625684 11:1 12:0 13:96017.4 14:94900.0 15:95458.7 16:94665.4 17:96562.7
|
||||||
|
0 0:0.12863494778496662 1:-0.0039036072066270834 2:36.36781989189495 3:95132.76357530718 4:95325.74705876874 5:-192.98348346156126 6:-166.29853425092642 7:-53.36989842126968 8:27.35829506781214 9:28.74842008583017 10:24.578045031776085 11:1 12:0 13:96017.4 14:94900.0 15:95458.7 16:94665.4 17:96562.7
|
||||||
|
0 0:0.512057724705683 1:-0.0005722506393861582 2:30.09859954353128 3:94320.60008107667 4:94621.53359926183 5:-300.93351818516385 6:-194.70861887143855 7:-212.4497986274506 8:17.903218295474407 9:19.956911361171663 10:13.795832164079897 11:1 12:0 13:96017.4 14:94900.0 15:95458.7 16:94467.4 17:96562.7
|
||||||
|
0 0:0.512057724705683 1:-0.0054973152646382 2:29.35665586377553 3:94083.27669153897 4:94421.41339341838 5:-338.1367018794117 6:-259.0775716496779 7:-158.1182604594676 8:25.05543400668253 9:26.920921741635134 10:21.324458536777314 11:1 12:0 13:96017.4 14:94900.0 15:95458.7 16:94467.4 17:96562.7
|
||||||
|
1 0:0.512057724705683 1:-0.0029932232141327256 2:27.979242692058136 3:93770.78619774162 4:94190.50698938996 5:-419.72079164834577 6:-324.6383691160475 7:-190.16484506459653 8:23.2984092074714 9:24.194534623812807 10:21.506158374788598 11:1 12:0 13:96017.4 14:94900.0 15:95458.7 16:94467.4 17:96562.7
|
||||||
|
0 0:0.6068388517438031 1:0.0001655584350940914 2:28.799091896066727 3:92829.99612465223 4:93087.94386247409 5:-257.947737821858 6:-178.50996954754643 7:-158.8755365486232 8:18.622664960401508 9:16.974687566570797 10:21.91861974806293 11:0
|
||||||
|
0 0:0.6645859247377462 1:-0.00024279058930614053 2:24.930959851462262 3:92399.64852472619 4:92759.19957463567 5:-359.55104990948166 6:-272.5539459238348 7:-173.9942079712937 8:18.625643697416187 9:21.99036987063341 10:11.896191350981745 11:0
|
||||||
|
1 0:0.7210318064902158 1:0.004606670450080825 2:37.1657514715614 3:92166.26125917639 4:92560.61520874269 5:-394.353949566299 6:-334.6218531578827 7:-119.46419281683256 8:20.66786333540542 9:17.943728403195436 10:26.11613319982539 11:0
|
||||||
|
0 0:1269539898.4015584 1:-0.0024811844407941273 2:29.88254889338154 3:93315.72086028624 4:93430.81435514787 5:-115.0934948616341 6:-51.616499941556185 7:-126.95398984015583 8:10.213413391690958 9:14.606359748071021 10:1.4275206789308328 11:2 12:0 13:93721.8 14:93167.2 15:93444.5 16:93058.2 17:93939.0
|
||||||
|
0 0:0.5400351626272751 1:0.0002473224991468635 2:36.12029343607534 3:96082.03684538954 4:96215.72217124242 5:-133.6853258528863 6:-91.72557328233904 7:-83.91950514109453 8:7.333286133779332 9:14.863054523083466 10:-7.726250644828937 11:0
|
||||||
|
0 0:0.5400351626272751 1:-0.00010847072959075433 2:38.538499522196304 3:96010.95222631477 4:96151.62413888445 5:-140.67191256968363 6:-114.0010081234 7:-53.34180889256726 8:15.269218087508534 9:14.766823579524448 10:16.274007103476706 11:0
|
||||||
|
0 0:0.5400351626272751 1:0.0010593794705605725 2:46.567123780276916 3:95987.9796419545 4:96094.59337452626 5:-106.61373257175728 6:-115.0993266314933 7:16.971188119472032 8:46.57700105880415 9:37.089756390625695 10:65.55149039516107 11:0
|
||||||
|
0 0:1.382532849143821 1:-0.0019416109595484855 2:25.673522842982578 3:95587.39888874794 4:95854.497187709 5:-267.09829896106385 6:-159.67800441732527 7:-214.84058908747716 8:10.926806700752032 9:11.912528745768961 10:8.955362610718172 11:1 12:0 13:96575.5 14:96103.0 15:96339.25 16:95769.2 17:96627.6
|
||||||
|
1 0:0.5684291011164903 1:-0.00045377030358288587 2:28.14324846077095 3:95118.23314166164 4:95264.8312199885 5:-146.59807832686056 6:-85.53725685769462 7:-122.12164293833189 8:6.643991080241149 9:12.770919862605233 10:-5.609866484487021 11:2 12:0 13:95830.6 14:95135.8 15:95483.20000000001 16:94878.2 17:95985.1
|
||||||
|
1 0:0.7930878457394949 1:-0.0008708036452635039 2:30.195991637170664 3:95979.20659704019 4:96121.57411761649 5:-142.36752057629928 6:-91.54224531193688 7:-101.6505505287248 8:5.94550854114402 9:12.927166587017517 10:-8.017807550602974 11:0
|
||||||
|
0 0:0.3270519193349553 1:-0.00037091413286158894 2:26.7065600188471 3:96977.10225119478 4:97123.76068717257 5:-146.65843597779167 6:-101.31512119798406 7:-90.68662955961523 8:12.222254320661845 9:11.002475227118634 10:14.661812507748266 11:1 12:0 13:97418.6 14:96935.4 15:97177.0 16:96903.2 17:97687.4
|
||||||
|
0 0:0.3270519193349553 1:0.00038982959470169556 2:24.396352253122316 3:96669.2609873926 4:96866.38028305506 5:-197.11929566245817 6:-168.6571815074093 7:-56.92422831009776 8:12.211000632224714 9:13.278239446412238 10:10.076523003849669 11:1 12:0 13:97418.6 14:96935.4 15:97177.0 16:96903.2 17:97687.4
|
||||||
|
1 0:1.0360683984296162 1:0.0011569406041454743 2:31.765288565127904 3:96449.65528969179 4:96596.30137118058 5:-146.6460814887978 6:-107.21815143630788 7:-78.85586010497983 8:18.326004314842415 9:17.59845730260415 10:19.781098339318945 11:2 12:0 13:96811.9 14:96600.9 15:96706.4 16:96400.0 17:97239.9
|
||||||
|
0 0:1.052478584942194 1:0.0005642263788869391 2:32.450728639928016 3:96148.05771270738 4:96280.92443189597 5:-132.86671918859065 6:-96.124714829715 7:-73.4840087177513 8:15.557398467131964 9:19.592970153308688 10:7.486255094778521 11:0
|
||||||
|
1 0:1.052478584942194 1:-0.0019462303112095028 2:32.178282262441925 3:96066.7569483903 4:96211.84415223158 5:-145.0872038412781 6:-117.24620554243597 7:-55.68199659768425 8:21.543516610191467 9:20.77693126610489 10:23.076687298364632 11:0
|
||||||
|
0 0:0.4642655825570648 1:-0.0010347343657612698 2:19.965691949679908 3:95789.9268377101 4:96034.95734921106 5:-245.03051150096871 6:-182.01006960529895 7:-126.04088379133952 8:19.418290867312706 9:30.525283650427916 10:-2.795694698917714 11:1 12:0 13:96538.4 14:96221.1 15:96379.75 16:96155.6 17:97000.0
|
||||||
|
0 0:0.5670112584378307 1:0.0002754991845434136 2:19.583256649890473 3:95544.70579016482 4:95857.22445671 5:-312.51866654517653 6:-236.86491313667574 7:-151.30750681700158 8:12.391538269951885 9:17.715810603287263 10:1.7429936032811284 11:1 12:0 13:96538.4 14:96221.1 15:96379.75 16:96155.6 17:97000.0
|
||||||
|
1 0:6.49625953089316e-10 1:0.002272763159972358 2:46.059192970463116 3:95182.45843242262 4:95306.40600602726 5:-123.94757360464428 6:-134.31035053248613 7:20.7255538556837 8:33.804600481300646 9:24.952072077662358 10:51.50965728857723 11:1 12:0 13:96538.4 14:96221.1 15:96379.75 16:96155.6 17:97000.0
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
import json
|
||||||
|
from typing import Dict, TypedDict
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py"))
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py/Debug"))
|
||||||
|
import xgboost as xgb
|
||||||
|
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE, BSP_TYPE, MACD_ALGO
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Plot.PlotDriver import CPlotDriver
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
from FeatureDict import FeatureDict
|
||||||
|
|
||||||
|
class T_SAMPLE_INFO(TypedDict):
|
||||||
|
feature: CFeatures
|
||||||
|
is_buy: bool
|
||||||
|
open_time: CTime
|
||||||
|
|
||||||
|
|
||||||
|
def plot(chan, plot_marker):
|
||||||
|
plot_config = {
|
||||||
|
"plot_kline": True,
|
||||||
|
"plot_bi": True,
|
||||||
|
"plot_seg": True,
|
||||||
|
"plot_zs": True,
|
||||||
|
"plot_bsp": True,
|
||||||
|
"plot_marker": True,
|
||||||
|
"plot_macd": True,
|
||||||
|
}
|
||||||
|
plot_para = {
|
||||||
|
"figure": {
|
||||||
|
"x_range": 4000,
|
||||||
|
},
|
||||||
|
"marker": {
|
||||||
|
"markers": plot_marker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot_driver = CPlotDriver(
|
||||||
|
chan,
|
||||||
|
plot_config=plot_config,
|
||||||
|
plot_para=plot_para,
|
||||||
|
)
|
||||||
|
plot_driver.save2img("buy.png")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
本demo主要演示如何记录策略产出的买卖点的特征
|
||||||
|
然后将这些特征作为样本,训练一个模型(以XGB为demo)
|
||||||
|
用于预测买卖点的准确性
|
||||||
|
|
||||||
|
请注意,demo训练预测都用的是同一份数据,这是不合理的,仅仅是为了演示
|
||||||
|
"""
|
||||||
|
code = "BTC/USDT:USDT"
|
||||||
|
begin_time = "2024-12-1"
|
||||||
|
end_time = "2024-12-4"
|
||||||
|
data_src = DATA_SRC.CCXT
|
||||||
|
lv_list = [KL_TYPE.K_1M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True, # 打开开关!
|
||||||
|
"bi_strict": True,
|
||||||
|
"skip_step": 0,
|
||||||
|
"divergence_rate": float("inf"),
|
||||||
|
"bsp2_follow_1": False,
|
||||||
|
"bsp3_follow_1": False,
|
||||||
|
"min_zs_cnt": 0,
|
||||||
|
"bs1_peak": False,
|
||||||
|
"macd_algo": "peak",
|
||||||
|
"bs_type": '1,2,3a,1p,2s,3b',
|
||||||
|
"print_warning": True,
|
||||||
|
"zs_algo": "normal",
|
||||||
|
"cal_rsi": True,
|
||||||
|
"cal_kdj": True,
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time,
|
||||||
|
end_time=end_time,
|
||||||
|
data_src=data_src,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ,
|
||||||
|
)
|
||||||
|
bsp_dict: Dict[int, T_SAMPLE_INFO] = {} # 存储策略产出的bsp的特征
|
||||||
|
|
||||||
|
# 跑策略,保存买卖点的特征
|
||||||
|
index = 0
|
||||||
|
for chan_snapshot in chan.step_load():
|
||||||
|
last_klu = chan_snapshot[0][-1][-1]
|
||||||
|
bsp_list = chan_snapshot.get_bsp()
|
||||||
|
if not bsp_list:
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1]
|
||||||
|
cur_lv_chan = chan_snapshot[0]
|
||||||
|
if BSP_TYPE.T1 in last_bsp.type or BSP_TYPE.T1P in last_bsp.type:
|
||||||
|
if last_bsp.klu.idx not in bsp_dict and cur_lv_chan[-2].idx == last_bsp.klu.klc.idx and last_bsp.is_buy:
|
||||||
|
# 假如策略是:买卖点分形第三元素出现时交易
|
||||||
|
bsp_dict[last_bsp.klu.idx] = {
|
||||||
|
"feature": last_bsp.features,
|
||||||
|
"is_buy": last_bsp.is_buy,
|
||||||
|
"open_time": last_klu.time,
|
||||||
|
}
|
||||||
|
bsp_dict[last_bsp.klu.idx]['feature'].add_feat(FeatureDict().stragety_feature(last_bsp)) # 开仓K线特征
|
||||||
|
print(index, last_bsp.klu.time, last_bsp.is_buy)
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
# 生成libsvm样本特征
|
||||||
|
bsp_academy = [bsp.klu.idx for bsp in chan.get_bsp()]
|
||||||
|
feature_meta = {} # 特征meta
|
||||||
|
cur_feature_idx = 0
|
||||||
|
plot_marker = {}
|
||||||
|
fid = open("buy_feature.libsvm", "w")
|
||||||
|
for bsp_klu_idx, feature_info in bsp_dict.items():
|
||||||
|
label = int(bsp_klu_idx in bsp_academy) # 以买卖点识别是否准确为label
|
||||||
|
features = [] # List[(idx, value)]
|
||||||
|
for feature_name, value in feature_info['feature'].items():
|
||||||
|
if feature_name not in feature_meta:
|
||||||
|
feature_meta[feature_name] = cur_feature_idx
|
||||||
|
cur_feature_idx += 1
|
||||||
|
features.append((feature_meta[feature_name], value))
|
||||||
|
features.sort(key=lambda x: x[0])
|
||||||
|
feature_str = " ".join([f"{idx}:{value}" for idx, value in features])
|
||||||
|
fid.write(f"{label} {feature_str}\n")
|
||||||
|
plot_marker[feature_info["open_time"].to_str()] = ("√" if label else "×", "down" if feature_info["is_buy"] else "up")
|
||||||
|
fid.close()
|
||||||
|
|
||||||
|
with open("feature.meta", "w") as fid:
|
||||||
|
# meta保存下来,实盘预测时特征对齐用
|
||||||
|
fid.write(json.dumps(feature_meta))
|
||||||
|
|
||||||
|
# 画图检查label是否正确
|
||||||
|
plot(chan, plot_marker)
|
||||||
|
|
||||||
|
# load sample file & train model
|
||||||
|
dtrain = xgb.DMatrix("buy_feature.libsvm?format=libsvm") # load sample
|
||||||
|
param = {'max_depth': 2, 'eta': 0.3, 'objective': 'binary:logistic', 'eval_metric': 'auc'}
|
||||||
|
evals_result = {}
|
||||||
|
bst = xgb.train(
|
||||||
|
param,
|
||||||
|
dtrain=dtrain,
|
||||||
|
num_boost_round=50,
|
||||||
|
evals=[(dtrain, "train")],
|
||||||
|
evals_result=evals_result,
|
||||||
|
verbose_eval=True,
|
||||||
|
)
|
||||||
|
bst.save_model("buy_model.json")
|
||||||
|
|
||||||
|
# load model
|
||||||
|
model = xgb.Booster()
|
||||||
|
model.load_model("buy_model.json")
|
||||||
|
# predict
|
||||||
|
print(model.predict(dtrain))
|
||||||
|
After Width: | Height: | Size: 396 KiB |
@@ -0,0 +1,65 @@
|
|||||||
|
0 0:0.44603754594505807 1:-0.0001811486667662516 2:59.524743175133736 3:97426.94071038318 4:97315.73596354207 5:111.20474684110377 6:53.06684724916587 7:116.2757991838758 8:81.71929134312171 9:68.27533390827654 10:108.60720621281206 11:0
|
||||||
|
0 0:1.247379538270264 1:-0.0016315838788920414 2:66.16623720036569 3:97320.14873373468 4:97177.0429033216 5:143.1058304130711 6:-19.48143826073785 7:325.1745373476179 8:83.39049892283273 9:68.36292057637226 10:113.44565561575368 11:1 12:0 13:97773.2 14:96817.6 15:97295.4 16:96350.1 17:97824.8
|
||||||
|
1 0:1.247379538270264 1:0.0002508939371378695 2:65.99955137268554 3:97668.38672352544 4:97403.1691158755 5:265.2176076499454 6:130.93157364281765 7:268.57206801425554 8:87.9319723917126 9:83.26198613467281 10:97.27194490579217 11:1 12:0 13:97773.2 14:96817.6 15:97295.4 16:96350.1 17:97824.8
|
||||||
|
0 0:3.199393721588649 1:0.0003744877092292898 2:21.074079640548632 3:95863.87921628589 4:96458.33383371163 5:-594.4546174257412 6:-397.2261615974289 7:-394.45691165662447 8:5.337757528818946 9:6.765273511391208 10:2.4827255636744194 11:1 12:0 13:97773.2 14:96817.6 15:97295.4 16:95946.9 17:98243.0
|
||||||
|
0 0:0.20922674318396206 1:0.0073560225573347056 2:38.66503258462948 3:94883.63227998085 4:95449.99306842491 5:-566.3607884440571 6:-548.638593968238 7:-35.4443889516383 8:19.260922248098808 9:15.507024440067795 10:26.768717864160834 11:0
|
||||||
|
1 0:0.377444793735299 1:0.0050471564661697344 2:38.715088949469234 3:93125.69920746422 4:93736.31406890496 5:-610.614861440743 6:-587.0921740516694 7:-47.04537477814711 8:29.323236116266532 9:20.559415605669088 10:46.850877137461424 11:1 12:0 13:95120.0 14:95005.0 15:95062.5 16:93954.1 17:95703.6
|
||||||
|
0 0:0.26417072534132297 1:0.0014251352853243873 2:64.3591110472864 3:97284.37674836183 4:97115.20084539481 5:169.1759029670211 6:104.53617250740008 7:129.27946091924204 8:87.41299416150916 9:81.27377784147006 10:99.69142680158734 11:1 12:0 13:97354.7 14:96560.0 15:96957.35 16:96254.0 17:97681.6
|
||||||
|
0 0:0.5175120963029218 1:0.0002568618441452981 2:69.64235168847529 3:97402.12765483202 4:97139.08359662937 5:263.04405820264947 6:200.50023838818277 7:125.0876396289334 8:91.82298133414622 9:90.23531266206008 10:94.9983186783185 11:1 12:0 13:97354.7 14:96560.0 15:96957.35 16:95393.8 17:97721.0
|
||||||
|
1 0:0.5175120963029218 1:0.0010813157646826631 2:66.21678147245007 3:97548.283869099 4:97318.11304130571 5:230.17082779329212 6:225.9707097756528 7:8.400236035278624 8:75.60802779481162 9:71.88453302149652 10:83.05501734144181 11:1 12:0 13:97354.7 14:96560.0 15:96957.35 16:95393.8 17:97721.0
|
||||||
|
0 0:0.43306731972327345 1:-0.0003412481665619668 2:44.3951837036607 3:97397.92750501819 4:97384.14829053299 5:13.77921448519919 6:46.87563825535643 7:-66.19284754031447 8:35.6206341423178 9:46.89510158456859 10:13.071699257816206 11:0
|
||||||
|
1 0:0.43306731972327345 1:-0.001146311498583817 2:40.74577469382241 3:97327.35648593461 4:97352.25420980874 5:-24.89772387413541 6:7.664147673851571 7:-65.12374309597396 8:26.21408316662358 9:35.884035161353964 10:6.874179177162816 11:0
|
||||||
|
0 0:1.0341179848355766 1:0.00010253886222878471 2:59.29033311349 3:97466.2479486771 4:97422.23843134564 5:44.00951733146212 6:28.261451813313037 7:31.496131036298166 8:77.26109049567188 9:73.25256269690183 10:85.27814609321197 11:0
|
||||||
|
0 0:1.3485000523987711 1:-0.0009764585465710765 2:59.243010431919856 3:97532.12533232666 4:97468.46535334004 5:63.6599789866159 6:44.617473741282936 7:38.08501049066592 8:77.81356734866023 9:77.1511023878328 10:79.1384972703151 11:0
|
||||||
|
0 0:6.939419642380143 1:0.0012308815403255062 2:80.4972415335925 3:98218.17109425244 4:97906.02080196065 5:312.1502922917862 6:201.4247882057245 7:221.45100817212335 8:92.78295097102259 9:87.95835591996456 10:102.43214107313861 11:0
|
||||||
|
1 0:6.939419642380143 1:0.0027491145551800118 2:79.15279123443452 3:98848.34173790009 4:98552.25288337255 5:296.0888545275375 6:251.80407101582196 7:88.56956702343103 8:91.55615416018271 9:86.68800895208415 10:101.29244457637986 11:0
|
||||||
|
0 0:0.4256169230867141 1:-0.0013519585059788464 2:34.1335841055605 3:98297.65046680548 4:98396.91872688392 5:-99.26826007843192 6:-59.05092282834539 7:-80.43467450017306 8:17.49845688814763 9:31.753080965579407 10:-11.010791266715927 11:0
|
||||||
|
0 0:0.4256169230867141 1:-0.000600512887027011 2:32.63667863811605 3:98094.09065522406 4:98238.31464767613 5:-144.22399245206907 6:-113.2938720555649 7:-61.86024079300833 8:16.54721822463559 9:16.948415947749787 10:15.744822778407197 11:0
|
||||||
|
0 0:0.4256169230867141 1:0.0007391443918058525 2:39.80267859067282 3:98062.3903223459 4:98159.05021762295 5:-96.65989527704369 6:-88.97867194565983 7:-15.362446662767724 8:40.685410682037315 9:50.61313973870733 10:20.82995256869728 11:0
|
||||||
|
0 0:0.7672743961225185 1:-0.0028504714162200786 2:25.22309868641929 3:97627.42746519265 4:97862.54954793185 5:-235.12208273919532 6:-162.62089333999248 7:-145.0023787984057 8:9.751983278042198 9:16.23533244555633 10:-3.2147150569860656 11:0
|
||||||
|
0 0:0.7893502569849246 1:0.0014447232930584546 2:29.217593495473693 3:97172.13981200711 4:97507.42977162956 5:-335.28995962244517 6:-264.0864403122722 7:-142.40703862034593 8:22.605066549544702 9:19.729786813565656 10:28.355626021502793 11:0
|
||||||
|
0 0:1.1213416501692153 1:0.0012021577504928874 2:68.22913504510862 3:97390.60448815503 4:97317.31758950917 5:73.2868986458634 6:-34.42927756030649 7:215.43235241233978 8:85.96420507773641 9:74.36174551328838 10:109.16912420663243 11:1 12:0 13:97692.3 14:97007.6 15:97349.95000000001 16:96800.0 17:97724.0
|
||||||
|
0 0:0.5764798837786579 1:-0.00027363171236660454 2:36.323712902189556 3:97121.8300895752 4:97158.67369441592 5:-36.84360484071658 6:12.368488785720265 7:-98.4241872528737 8:26.32152972511674 9:39.57098585612811 10:-0.17738253690599493 11:1 12:0 13:97377.5 14:96871.9 15:97124.7 16:96520.0 17:97437.9
|
||||||
|
0 0:0.40780189795571875 1:-0.0005688199777849944 2:37.19517111975136 3:96797.36346274203 4:96918.80015408239 5:-121.43669134036463 6:-95.29280655773977 7:-52.28776956524973 8:18.843111236185948 9:20.682023359166692 10:15.165286990224459 11:1 12:0 13:97377.5 14:96871.9 15:97124.7 16:96520.0 17:97437.9
|
||||||
|
0 0:5.857095698413566e-10 1:0.0012448887245107743 2:49.12719895211358 3:96927.6217255843 4:96937.98865992992 5:-10.36693434562767 6:-31.282703813136294 7:41.83153893501725 8:52.984359485387145 9:57.61279254372596 10:43.72749336870953 11:1 12:0 13:97377.5 14:96871.9 15:97124.7 16:96520.0 17:97437.9
|
||||||
|
1 0:1.8953093531887237 1:0.0006748067622520928 2:27.48730199300759 3:96296.31835641962 4:96548.31757346772 5:-251.99921704809822 6:-164.81152228956353 7:-174.37538951706938 8:4.531941325411192 9:5.570616349843791 10:2.454591276545994 11:1 12:0 13:97220.6 14:96673.7 15:96947.15 16:96532.0 17:97294.7
|
||||||
|
0 0:1.1079379631884476 1:-0.000569312511388854 2:69.2799642774749 3:96747.25026757993 4:96611.65593701285 5:135.59433056708076 6:63.1563053972247 7:144.87605033971212 8:85.01415572354937 9:76.79459082574746 10:101.45328551915316 11:0
|
||||||
|
1 0:1.1079379631884476 1:0.0012558262101223711 2:67.68015618536629 3:97024.68321059024 4:96852.90853703869 5:171.77467355155386 6:145.38785649713446 7:52.77363410883879 8:81.0061291787602 9:73.92147270529745 10:95.17544212568572 11:0
|
||||||
|
0 0:3.22718969044905 1:-0.0015091992268223245 2:15.211365681353854 3:96441.09610385066 4:96709.79231879656 5:-268.69621494589956 6:-124.5720947930055 7:-288.2482403057881 8:10.079199784034984 9:17.00749014508064 10:-3.777380938056332 11:1 12:0 13:97214.8 14:96802.6 15:97008.70000000001 16:96786.8 17:97266.6
|
||||||
|
0 0:3.22718969044905 1:0.00033987238001937205 2:22.772417787111905 3:95884.88218722428 4:96295.59755477567 5:-410.7153675513837 6:-303.17218362104364 7:-215.08636786068007 8:13.19356599362797 9:13.180100395809225 10:13.220497189265462 11:1 12:0 13:97214.8 14:96802.6 15:97008.70000000001 16:96786.8 17:97266.6
|
||||||
|
0 0:3.22718969044905 1:0.0012706039625186983 2:35.69276924952918 3:95421.25990600487 4:95776.331439466 5:-355.07153346113046 6:-372.4277484098734 7:34.71242989748589 8:29.95492060964639 9:28.310686166745153 10:33.24338949544886 11:1 12:0 13:97214.8 14:96802.6 15:97008.70000000001 16:96786.8 17:97266.6
|
||||||
|
0 0:1.0199713294139432 1:0.0013250518475523701 2:26.66143889540119 3:95031.67850685595 4:95345.7971483744 5:-314.1186415184493 6:-174.54032161932426 7:-279.15663979825007 8:6.843812571648412 9:8.062064237946743 10:4.407309239051749 11:1 12:0 13:97214.8 14:96802.6 15:97008.70000000001 16:96786.8 17:97266.6
|
||||||
|
0 0:0.6682436562246387 1:0.004003786246840404 2:39.332167094734295 3:95007.9103912898 4:95165.83630594939 5:-157.92591465958685 6:-60.18649492326985 7:-195.478839472634 8:20.60367524645121 9:24.151039157419493 10:13.508947424514645 11:2 12:0 13:95714.2 14:95085.0 15:95399.6 16:94390.0 17:95833.1
|
||||||
|
0 0:0.48332841629474 1:0.002721615349995722 2:40.008925547754274 3:94360.57781693808 4:94627.87134282554 5:-267.29352588746406 6:-222.56195060863556 7:-89.463150557657 8:27.142699530285448 9:20.70239625416901 10:40.02330608251832 11:2 12:0 13:95714.2 14:95085.0 15:95399.6 16:94200.0 17:95833.1
|
||||||
|
1 0:0.48332841629474 1:0.0004991491050970545 2:39.93939637567927 3:94264.92191753088 4:94454.49458567762 5:-189.57266814673494 6:-150.8829119659381 7:-77.3795123615937 8:25.04356143473892 9:34.384721085116624 10:6.3612421339835095 11:2 12:0 13:95714.2 14:95085.0 15:95399.6 16:94200.0 17:95833.1
|
||||||
|
0 0:0.5315598533551759 1:0.0015912392166430615 2:67.31474811282479 3:95495.09285050668 4:95378.7609951279 5:116.33185537878308 6:36.181878045025904 7:160.29995466751433 8:82.76928194514065 9:69.84492405095511 10:108.61799773351171 11:1 12:0 13:95540.0 14:94974.2 15:95257.1 16:94639.5 17:96488.8
|
||||||
|
0 0:0.5460971860795277 1:-0.000971746597587782 2:62.24153349347445 3:95998.14089404789 4:95809.93512160034 5:188.2057724475453 6:176.80912036215437 7:22.79330417078188 8:78.04481745718704 9:75.69797076842423 10:82.73851083471266 11:1 12:0 13:95540.0 14:94974.2 15:95257.1 16:94639.5 17:96488.8
|
||||||
|
1 0:0.5460971860795277 1:-0.0012123363527565432 2:60.69201654754337 3:96099.28453747748 4:95951.41917490755 5:147.86536256992258 6:151.9141707314322 7:-8.097616323019224 8:57.3259656587189 9:54.1528301654272 10:63.672236645302306 11:1 12:0 13:95540.0 14:94974.2 15:95257.1 16:94639.5 17:96488.8
|
||||||
|
0 0:2.187687611192262 1:-0.0006946925906464091 2:23.896526097810764 3:95658.57373911676 4:95837.15639131209 5:-178.58265219532768 6:-61.297098419675436 7:-234.5711075513045 8:11.805931636381597 9:16.257485542611672 10:2.9028238239214446 11:0
|
||||||
|
0 0:2.3903953595304044 1:-5.48020854300972e-05 2:20.80541253936086 3:95371.87102720274 4:95651.39039852926 5:-279.519371326518 6:-154.95951153584733 7:-249.11971958134137 8:9.236596235506376 9:11.677163005740411 10:4.355462695038305 11:0
|
||||||
|
0 0:2.3903953595304044 1:0.0004376004165188436 2:22.008074860475432 3:94762.71195959995 4:95153.99872330535 5:-391.2867637054005 6:-272.8084120273478 7:-236.95670335610544 8:19.24366799851255 9:30.182438858302156 10:-2.6338737210666636 11:0
|
||||||
|
0 0:2.3903953595304044 1:0.0008963040263257297 2:29.24947877042777 3:94349.46034804462 4:94830.92393415478 5:-481.46358611015603 6:-377.19803312074947 7:-208.53110597881312 8:15.641722029211692 9:20.085191184009638 10:6.754783719615801 11:0
|
||||||
|
0 0:2.3903953595304044 1:-0.0007467277171849319 2:25.142812991948034 3:94002.15171745444 4:94550.89742778886 5:-548.7457103344204 6:-453.19026377795836 7:-191.11089311292415 8:10.970091260612362 9:13.550969034294896 10:5.808335713247292 11:0
|
||||||
|
0 0:2.3903953595304044 1:-0.0036566299291467446 2:27.14982779700094 3:93640.32709490282 4:94177.20232267522 5:-536.8752277723979 6:-508.25313785998713 7:-57.24417982482157 8:14.566176197123047 9:16.224041874620625 10:11.25044484212789 11:0
|
||||||
|
0 0:2.3903953595304044 1:-0.0013250783709166565 2:29.067091626962053 3:93299.53815453919 4:93786.63985063162 5:-487.10169609243167 6:-499.63965668429717 7:25.075921183730998 8:11.938278933545705 9:15.982206918365444 10:3.8504229639062295 11:0
|
||||||
|
0 0:0.4938743601776918 1:0.0004079011972655826 2:33.76129918461869 3:93097.43081058415 4:93305.65955516233 5:-208.22874457818398 6:-144.93723817751157 7:-126.58301280134481 8:7.708133725004398 9:13.371974661839062 10:-3.6195481486649292 11:1 12:0 13:93726.0 14:93186.5 15:93456.25 16:92897.6 17:94249.3
|
||||||
|
1 0:0.36916768061769023 1:0.0015558165389780664 2:38.58106535375749 3:92939.45229695202 4:93100.84729247168 5:-161.39499551965855 6:-114.36367989144019 7:-94.06263125643673 8:18.894917302012363 9:23.390634232824233 10:9.903483440388626 11:1 12:0 13:93726.0 14:93186.5 15:93456.25 16:92634.7 17:94249.3
|
||||||
|
0 0:1.1338294160219324 1:-0.0013201361234700597 2:77.90279498787345 3:95569.91198317418 4:95065.42991510208 5:504.48206807210227 6:353.13836639331396 7:302.6874033575766 8:91.6744858738154 9:92.01357514029502 10:90.99630734085616 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
0 0:1.1338294160219324 1:0.0019972117116331288 2:79.24382537928139 3:96974.55559299528 4:96292.96668359787 5:681.588909397411 6:643.7387120904143 7:75.70039461399347 8:85.57944299849851 9:87.83461860597477 10:81.06909178354599 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
0 0:1.1338294160219324 1:0.00042536089372721865 2:79.58131577633716 3:97458.42577091457 4:96810.49905042107 5:647.9267204935022 6:637.2654611011565 7:21.32251878469151 8:86.0330045348769 9:81.42952884546888 10:95.23995591369291 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
0 0:1.1338294160219324 1:-0.0015868734318300363 2:72.59155741682025 3:97768.24447715277 4:97148.87561021966 5:619.3688669331023 6:632.9683250567289 7:-27.198916247253237 8:84.7883635317245 9:84.78347881414189 10:84.79813296688974 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
0 0:1.1338294160219324 1:-0.0007825067619343021 2:72.16924091263823 3:98116.44068401486 4:97539.10388420886 5:577.3367998059985 6:603.802084965271 7:-52.93057031854505 8:87.18294490935463 9:86.41495814831642 10:88.71891843143104 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
0 0:1.1338294160219324 1:-1.0118743455026817e-06 2:72.08994834204582 3:98446.16520743757 4:98027.29273083423 5:418.87247660334106 6:435.79009020424866 7:-33.8352272018152 8:82.26649918422902 9:71.84562391812756 10:103.10824971643194 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
0 0:1.1338294160219324 1:-0.0014755621405974195 2:66.00430557414239 3:98527.02834378666 4:98128.13299968641 5:398.89534410025226 6:425.38244921189226 7:-52.97421022328001 8:77.82014803032101 9:76.5101672409638 10:80.44010960903543 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
1 0:1.1338294160219324 1:-0.0020340663293012214 2:65.6863098182121 3:98816.84078322568 4:98501.50387269031 5:315.33691053536313 6:317.27183799727817 7:-3.8698549238300757 8:76.99076843166952 9:73.00904758642194 10:84.95421012216468 11:1 12:0 13:94668.0 14:94120.0 15:94394.0 16:93525.6 17:95480.4
|
||||||
|
1 0:0.9752195430001496 1:-0.0014874081096431372 2:31.873482822906126 3:98312.69479056113 4:98390.16604185701 5:-77.47125129587948 6:32.91841924147791 7:-220.7793410747148 8:23.8432047434842 9:35.92021431062501 10:-0.3108143907974181 11:1 12:0 13:98324.3 14:97681.3 15:98002.8 16:97226.2 17:99323.3
|
||||||
|
0 0:1.3956310565699757 1:0.00011222187173955852 2:69.60184663471395 3:98658.93340625016 4:98546.49672957853 5:112.43667667162663 6:57.516123158529 7:109.84110702619526 8:91.38757238979188 9:85.88795664906657 10:102.3868038712425 11:0
|
||||||
|
0 0:1.3956310565699757 1:0.001553712696499731 2:70.95955068189826 3:98854.71930984483 4:98733.65053065494 5:121.0687791898963 6:104.43086470607162 7:33.275828967649375 8:76.9741928707506 9:67.01431758013705 10:96.89394345197772 11:0
|
||||||
|
0 0:1.3956310565699757 1:0.0004518133042882217 2:66.88310311632566 3:99009.48278874677 4:98864.29302836092 5:145.18976038585242 6:125.70865803995233 7:38.962204691800196 8:81.8879621094812 9:76.58913558059966 10:92.48561516724428 11:0
|
||||||
|
0 0:1.3956310565699757 1:0.0017086861575238595 2:64.6299027323106 3:99103.48989269896 4:98983.90825917918 5:119.58163351977419 6:119.54110863972696 7:0.08104976009445863 8:65.02139439135894 9:60.60695481957485 10:73.85027353492711 11:0
|
||||||
|
0 0:1.8914288242837833 1:0.0005289342126738682 2:65.1631093877596 3:99022.44959799966 4:98899.38557822275 5:123.06401977690984 6:48.63294622111895 7:148.8621471115818 8:87.91467399700292 9:84.1362966012842 10:95.47142878844036 11:1 12:0 13:98797.9 14:98331.5 15:98564.7 16:98100.0 17:99391.2
|
||||||
|
1 0:1.8914288242837833 1:-0.002645658828085297 2:63.76420600595406 3:99427.41954325356 4:99200.37679320115 5:227.04275005240925 6:163.27365186206774 7:127.53819638068302 8:82.92739296364032 9:82.04898985763072 10:84.6841991756595 11:1 12:0 13:98797.9 14:98331.5 15:98564.7 16:98100.0 17:99391.2
|
||||||
|
0 0:0.36049768621543277 1:0.0006273264625182885 2:37.34695376065817 3:98849.23449452299 4:98926.35482756815 5:-77.12033304516808 6:-40.83291559294918 7:-72.57483490443781 8:34.72154925509088 9:49.96379964899127 10:4.237048467290094 11:0
|
||||||
|
0 0:0.49120140664465095 1:-0.002673096446700537 2:30.59980026448028 3:98614.20721813205 4:98725.61273312519 5:-111.40551499313733 6:-61.96156245546172 7:-98.88790507535123 8:11.108645024463446 9:21.85893624743647 10:-10.391937421482602 11:1 12:0 13:99158.3 14:98531.5 15:98844.9 16:98400.1 17:99200.0
|
||||||
|
0 0:0.49120140664465095 1:-0.0012016978564969082 2:32.09633637700354 3:98349.24990947437 4:98519.00521870832 5:-169.75530923395127 6:-134.2757038756312 7:-70.95921071664014 8:16.85988038190567 9:19.902066208580738 10:10.775508728555529 11:1 12:0 13:99158.3 14:98531.5 15:98844.9 16:98400.1 17:99200.0
|
||||||
|
0 0:0.14259582285737354 1:0.0018529496693567003 2:47.07306325816062 3:98142.39136581254 4:98232.77498101033 5:-90.38361519778846 6:-95.43304289425392 7:10.098855392930915 8:41.529125100372745 9:29.77206714715021 10:65.04324100681782 11:1 12:0 13:99158.3 14:98531.5 15:98844.9 16:98400.1 17:99200.0
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"divergence_rate": 0, "open_klu_rate": 1, "klu_rsi": 2, "klu_macd_fast_ema": 3, "klu_macd_slow_ema": 4, "klu_macd_DIF": 5, "klu_macd_DEA": 6, "klu_macd_macd": 7, "klu_kdj_k": 8, "klu_kdj_d": 9, "klu_kdj_j": 10, "zs_count": 11, "bi_in_zs": 12, "zs_high": 13, "zs_low": 14, "zs_mid": 15, "zs_peak_low": 16, "zs_peak_high": 17}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"divergence_rate": 0, "open_klu_rate": 1, "klu_rsi": 2, "klu_macd_fast_ema": 3, "klu_macd_slow_ema": 4, "klu_macd_DIF": 5, "klu_macd_DEA": 6, "klu_macd_macd": 7, "klu_kdj_k": 8, "klu_kdj_d": 9, "klu_kdj_j": 10, "bi_macd_area": 11, "bi_macd_peak": 12, "bi_macd_full_area": 13, "bi_macd_diff": 14, "bi_macd_slop": 15, "bi_macd_amp": 16, "bi_macd_amount": 17, "bi_macd_rsi": 18, "klu_max_high": 19, "klu_max_low": 20, "seg_macd_slope": 21, "seg_macd_amp": 22, "seg_amp": 23, "seg_cal_klu_slope": 24, "seg_cal_amp": 25, "zs_count": 26, "bi_in_zs": 27, "zs_high": 28, "zs_low": 29, "zs_mid": 30, "zs_peak_low": 31, "zs_peak_high": 32}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Read me
|
||||||
|
Training Data
|
||||||
|
Timerange: 20240101-20241130
|
||||||
|
Timeframe: 1m
|
||||||
|
Evaluation Data
|
||||||
|
Timerange: 20241205-20241207
|
||||||
|
Timeframe: 1m
|
||||||
|
Resulting Model Feature: 这个模型识别急跌情况下的b1,其它b1被忽略
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Read me
|
||||||
|
Training Data
|
||||||
|
Timerange: 20220101-20241130
|
||||||
|
Timeframe: 5m
|
||||||
|
Evaluation Data
|
||||||
|
Timerange: 20241205-20241207
|
||||||
|
Timeframe: 5m
|
||||||
|
Resulting Model Feature:
|
||||||
|
After Width: | Height: | Size: 414 KiB |
@@ -0,0 +1,352 @@
|
|||||||
|
0 0:0.7289305597997214 1:-0.0004386385539706451 2:61.6447677010484 3:63456.23433505103 4:63421.122690989905 5:35.111644061122206 6:7.4531148765995185 7:55.31705836904538 8:86.43466907306146 9:83.12028352230514 10:93.06344017457408 11:0
|
||||||
|
0 0:0.7727026976942751 1:-0.00021500685040081304 2:66.12474823703897 3:63576.260876458415 4:63500.618850292034 5:75.64202616638067 6:46.524903369151986 7:58.23424559445738 8:88.80729228222584 9:84.30365390928077 10:97.81456902811601 11:0
|
||||||
|
0 0:0.7727026976942751 1:-0.000831509503526071 2:61.942674650015704 3:63640.26461581274 4:63555.51439839103 5:84.75021742170793 6:68.66876030468863 7:32.162914234038595 8:77.89265901793263 9:84.11213527537308 10:65.45370650305173 11:0
|
||||||
|
0 0:0.7727026976942751 1:0.0006349076953948028 2:67.10625513725186 3:63719.077611493194 4:63630.11127390294 5:88.9663375902528 6:80.16670180894577 7:17.599271562614064 8:76.56238699033861 9:71.13070981948724 10:87.42574133204135 11:0
|
||||||
|
0 0:0.7727026976942751 1:-0.0010385989097061676 2:58.49446563179386 3:63762.277014133295 4:63682.92273373911 5:79.35428039418184 6:82.5297193125734 7:-6.350877836783127 8:65.9960090396722 9:72.59768558976366 10:52.79265593948929 11:0
|
||||||
|
0 0:0.7727026976942751 1:-4.065027939247446e-05 2:69.35319600933248 3:63840.48819762725 4:63774.53193919499 5:65.95625843226298 6:46.340427729288066 7:39.231661405949836 8:85.72275356357554 9:77.89833664347952 10:101.37158740376753 11:0
|
||||||
|
1 0:0.7727026976942751 1:0.00017032607285895367 2:67.99680399770178 3:63914.6946122535 4:63840.396263964045 5:74.29834828945604 6:63.793204841401426 7:21.010286896109235 8:73.27858787202693 9:73.94490179096408 10:71.94596003415262 11:0
|
||||||
|
0 0:0.43374011936024426 1:-0.0001374561449442559 2:59.3879043299678 3:60942.64191432677 4:60899.81874531091 5:42.823169015857275 6:6.157489310321829 7:73.33135941107089 8:75.5132875315105 9:67.0740383278036 10:92.39178593892427 11:1 12:0 13:61016.8 14:60703.3 15:60860.05 16:60589.5 17:61191.1
|
||||||
|
0 0:0.43374011936024426 1:-0.00029982271352593884 2:65.28088586151728 3:61184.669160113954 4:61067.6626194486 5:117.00654066535208 6:82.51817354810335 7:68.97673423449746 8:87.50974370344782 9:86.35597835733124 10:89.81727439568098 11:1 12:0 13:61016.8 14:60703.3 15:60860.05 16:60589.5 17:61191.1
|
||||||
|
0 0:0.43374011936024426 1:0.0011117972055965627 2:74.43412871511298 3:61579.714819281086 4:61423.773304985865 5:155.94151429522026 6:145.45791915824285 7:20.967190273954827 8:85.71691148815107 9:82.99590411668099 10:91.15892623109121 11:1 12:0 13:61016.8 14:60703.3 15:60860.05 16:60589.5 17:61191.1
|
||||||
|
0 0:0.43374011936024426 1:0.0010786840055132501 2:69.60503205573384 3:61686.406662016365 4:61532.9400900363 5:153.46657198006142 6:151.91137124446308 7:3.110401471196667 8:86.92717002035859 9:84.99815391870378 10:90.78520222366822 11:1 12:0 13:61016.8 14:60703.3 15:60860.05 16:60589.5 17:61191.1
|
||||||
|
1 0:0.43374011936024426 1:0.0013812713850120382 2:66.96333508914313 3:61726.64012067128 4:61602.96008621148 5:123.68003445980139 6:136.0925426316812 7:-24.825016343759614 8:71.43547310979412 9:69.12490958117763 10:76.05660016702709 11:1 12:0 13:61016.8 14:60703.3 15:60860.05 16:60589.5 17:61191.1
|
||||||
|
0 0:0.5278266236522186 1:-2.7518020256453212e-05 2:63.450290217753675 3:61538.6503904428 4:61379.92118726807 5:158.72920317473472 6:113.8715596723295 7:89.71528700481045 8:90.93590241753239 9:82.35961060666062 10:108.08848603927595 11:0
|
||||||
|
0 0:0.5278266236522186 1:-0.0023803752363407656 2:59.64644373001571 3:61642.000942047955 4:61467.165988470435 5:174.83495357751963 6:143.46677259584118 7:62.7363619633569 8:86.5763644585744 9:87.77119930703446 10:84.18669476165428 11:0
|
||||||
|
1 0:0.565547636573315 1:0.0005729330955768044 2:69.60670045750973 3:61809.06265537816 4:61588.58047908605 5:220.48217629211285 6:172.41879121787085 7:96.12677014848401 8:85.88949004081366 9:87.48291363510903 10:82.70264285222291 11:0
|
||||||
|
0 0:0.30829145004187497 1:-0.0032738397439887037 2:55.27323459848644 3:60780.04238007368 4:60734.18368987042 5:45.858690203262086 6:14.701579983480121 7:62.314220439563925 8:72.02705188715176 9:64.19898555155736 10:87.68318455834057 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
0 0:0.30829145004187497 1:0.002130929981151263 2:62.25181188596886 3:60877.32092317001 4:60797.58014728942 5:79.74077588058572 6:45.35331595899493 7:68.77491984318156 8:80.98082304923233 9:73.67099759282058 10:95.60047396205582 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
0 0:0.30829145004187497 1:-0.0004072460354844012 2:60.14143130519757 3:61008.26551520311 4:60901.04974310441 5:107.21577209869429 6:84.66542823851344 7:45.10068772036169 8:88.61907867657885 9:84.93113014803312 10:95.99497573367032 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
0 0:0.30829145004187497 1:0.0003434790502313577 2:59.42933831148132 3:61049.061606291056 4:60972.97012937911 5:76.09147691194812 6:79.67050070031218 7:-7.158047576728109 8:70.69315903022613 9:61.68123080674946 10:88.71701547717946 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
0 0:0.30829145004187497 1:-0.0010176762025486486 2:56.39633972726058 3:61117.66607207201 4:61051.11422613395 5:66.55184593806189 6:67.35119698665339 7:-1.5987020971830077 8:71.39439231151214 9:70.44442322203876 10:73.29433049045886 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
0 0:0.30829145004187497 1:0.0009015365318281117 2:62.51037985382016 3:61176.228198093755 4:61109.75529800906 5:66.47290008469281 6:61.455643348741674 7:10.034513471902272 8:67.1809672655832 9:63.59730095356054 10:74.34829988962854 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
1 0:0.30829145004187497 1:-0.00027183467243115203 2:65.75124462020943 3:61278.860310454205 4:61189.585833057965 5:89.2744773962404 6:72.17268596534208 7:34.20358286179663 8:83.14106494580571 9:74.88839181236514 10:99.64641121268684 11:1 12:0 13:60838.2 14:60508.7 15:60673.45 16:60413.3 17:60972.9
|
||||||
|
0 0:0.8950761330979332 1:-0.0011524587707874752 2:58.36092154878402 3:60575.16200761978 4:60487.47292067568 5:87.68908694409765 6:66.26384858185955 7:42.85047672447621 8:76.78142068178106 9:76.3278026238253 10:77.68865679769254 11:1 12:0 13:60754.9 14:60000.0 15:60377.45 16:59888.0 17:60909.1
|
||||||
|
0 0:0.8950761330979332 1:-0.00015768828967336422 2:64.84687367605414 3:60726.55835758142 4:60640.57984489934 5:85.97851268208615 6:72.57642069062159 7:26.804183982929118 8:82.27150958451224 9:70.20339558674519 10:106.40773758004636 11:1 12:0 13:60754.9 14:60000.0 15:60377.45 16:59888.0 17:60909.1
|
||||||
|
0 0:0.8950761330979332 1:0.0007136470646137693 2:67.07945735844503 3:60822.29146435173 4:60713.335384198435 5:108.95608015329344 6:87.64997767128172 7:42.61220496402345 8:88.61299409737735 9:82.48002977393705 10:100.87892274425798 11:1 12:0 13:60754.9 14:60000.0 15:60377.45 16:59888.0 17:60909.1
|
||||||
|
1 0:0.8950761330979332 1:-0.0007080701972926865 2:64.12587231163056 3:60869.188563234085 4:60752.572585904 5:116.61597733008239 6:97.96558119750554 7:37.30079226515369 8:84.71802254889818 9:85.1770281167962 10:83.80001141310214 11:1 12:0 13:60754.9 14:60000.0 15:60377.45 16:59888.0 17:60909.1
|
||||||
|
0 0:0.3450716305605555 1:0.00164616453471735 2:66.1304808768759 3:61147.14767246859 4:61102.89585668417 5:44.25181578442425 6:41.173621911453175 7:6.156387745942155 8:58.685774870625025 9:55.00858944247672 10:66.04014572692162 11:0
|
||||||
|
0 0:0.10424056760959279 1:0.00028070358680439147 2:63.0577842158383 3:61184.02538990356 4:61151.20726499382 5:32.81812490973971 6:26.033333755933267 7:13.569582307612883 8:65.83341231944175 9:51.06795400565093 10:95.36432894702338 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60860.9 17:61324.4
|
||||||
|
0 0:0.36289885134792277 1:0.0012628196563175202 2:72.6040915848566 3:61292.35907078603 4:61220.9087153053 5:71.45035548073065 6:47.8300608793674 7:47.2405892027265 8:87.88956594746702 9:79.98231732948719 10:103.70406318342668 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60860.9 17:61324.4
|
||||||
|
0 0:0.36289885134792277 1:-0.0005944897621066142 2:69.29446925294407 3:61409.009924572536 4:61316.02777371304 5:92.98215085949778 6:74.30439163288585 7:37.35551845322385 8:77.96254982458524 9:75.4970200264626 10:82.89360942083053 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60860.9 17:61324.4
|
||||||
|
0 0:0.36289885134792277 1:-0.00039319863842780805 2:67.22574794636292 3:61444.324265522344 4:61347.107762099666 5:97.21650342267822 6:82.52682751935075 7:29.379351806654938 8:76.35124108471996 9:76.63860281648293 10:75.77651762119402 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60860.9 17:61324.4
|
||||||
|
0 0:0.2865254484254978 1:-0.003697638450241188 2:45.19198957311576 3:61417.55821723917 4:61389.818704768906 5:27.739512470267073 6:22.118384746805873 7:11.2422554469224 8:64.81302533945846 9:72.30035644715161 10:49.838363124072146 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60860.9 17:61616.0
|
||||||
|
0 0:0.6182985910779694 1:-0.0029212270446166196 2:59.08997683254805 3:61570.36052988433 4:61481.85389702757 5:88.50663285676274 6:50.52036802622949 7:75.97252966106649 8:74.06608696171577 9:69.80782451820897 10:82.58261184872936 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60860.9 17:61616.0
|
||||||
|
0 0:1.0274408515602096 1:0.0004293073840870765 2:70.99171126136113 3:61871.48543474874 4:61700.09473883091 5:171.39069591783482 6:114.5682887056707 7:113.64481442432825 8:92.04348861308029 9:87.52802960666743 10:101.074406625906 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60700.5 17:61985.0
|
||||||
|
0 0:1.0274408515602096 1:0.0004326275125365716 2:68.30775549400185 3:62027.95814047674 4:61830.38492317269 5:197.5732173040451 6:161.0336070620316 7:73.07922048402702 8:89.11343635483193 9:89.09022841522338 10:89.15985223404903 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60700.5 17:61985.0
|
||||||
|
0 0:1.0274408515602096 1:-1.7668270196014116e-05 2:69.77066431994805 3:62093.255236672696 4:61891.37198488743 5:201.8832517852643 6:175.64951736813333 7:52.46746883426192 8:91.22713262521867 9:90.46894492044451 10:92.74350803476696 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60700.5 17:61985.0
|
||||||
|
0 0:0.31350696793950766 1:0.00014428186905939442 2:67.90350936434663 3:62256.9875505977 4:62153.94980732523 5:103.03774327247083 6:85.2235226606859 7:35.628441223569865 8:76.86544057145254 9:75.32272950868074 10:79.95086269699613 11:1 12:0 13:61247.4 14:61031.8 15:61139.600000000006 16:60700.5 17:61985.0
|
||||||
|
1 0:0.06986414514186423 1:-0.0005079216550875018 2:60.11998328589556 3:62312.853838176474 4:62268.016465213324 5:44.83737296314939 6:40.867524058368645 7:7.939697809561494 8:74.36944172710145 9:59.30094484021174 10:104.50643550088085 11:2 12:0 13:62309.8 14:62133.3 15:62221.55 16:61801.8 17:62442.8
|
||||||
|
0 0:3.559237904685462 1:-0.0003340433772269089 2:55.41861482918926 3:61907.665526456214 4:61906.03610347463 5:1.6294229815830477 6:-17.461533843162748 7:38.18191364949159 8:80.88060120726905 9:72.0149172714876 10:98.61196907883195 11:0
|
||||||
|
0 0:4.09731196760904 1:0.0006627289922165389 2:66.07408039020748 3:61949.5458188043 4:61928.011199375294 5:21.534619429003214 6:1.682145151693917 7:39.704948554618596 8:72.8889902896436 9:72.89374858737278 10:72.87947369418524 11:0
|
||||||
|
0 0:4.09731196760904 1:-0.00017048296537436 2:66.31175142081068 3:62114.23933160038 4:62064.10256950701 5:50.136762093367 6:43.887820119973114 7:12.497883946787766 8:73.66744507341413 9:68.29006140387465 10:84.42221241249311 11:0
|
||||||
|
0 0:4.09731196760904 1:-0.00024759678381426793 2:65.84499983995772 3:62145.05423320897 4:62090.66669961628 5:54.38753359268594 6:48.95301180690116 7:10.869043571569563 8:74.80561880440786 9:74.27444787020957 10:75.86796067280443 11:0
|
||||||
|
0 0:0.40812258763706283 1:0.000957530697307649 2:59.98305943575949 3:62140.09176731121 4:62121.75757477773 5:18.334192533482565 6:10.033926094168134 7:16.60053287862886 8:71.37365701588432 9:66.55737167544075 10:81.00622769677148 11:0
|
||||||
|
0 0:0.5721368989596274 1:-0.0002537463724708137 2:61.85242279400396 3:62191.69846136942 4:62155.53107364824 5:36.16738772117969 6:23.127329486012165 7:26.080116470335057 8:77.09284263310465 9:73.96965401206754 10:83.33921987517888 11:0
|
||||||
|
1 0:0.4480852024975704 1:0.0005636118689272996 2:65.3818693569336 3:62246.628684149524 4:62220.44717090601 5:26.181513243514928 6:15.886393990443398 7:20.59023850614306 8:83.86284201593313 9:82.62933449438731 10:86.32985705902476 11:1 12:0 13:62242.4 14:62138.7 15:62190.55 16:62042.4 17:62298.2
|
||||||
|
1 0:0.9099696117855676 1:0.00102703338906503 2:67.1797381713228 3:61964.07984025684 4:61949.25511530214 5:14.824724954698468 6:-1.6978758931070785 7:33.04520169561109 8:74.75408656671478 9:59.241036271287065 10:105.78018715757021 11:0
|
||||||
|
0 0:0.5774348776579153 1:0.0009021911968693965 2:74.35899094506273 3:62028.77113003125 4:61996.03865839498 5:32.73247163627093 6:21.024233153000473 7:23.416476966540912 8:87.44384001323115 9:78.92207079294106 10:104.48737845381137 11:1 12:0 13:62076.9 14:61857.0 15:61966.95 16:61778.9 17:62132.4
|
||||||
|
0 0:0.7801904921331734 1:-0.0013669180170062104 2:65.4746386334879 3:62162.14685720356 4:62110.38968159669 5:51.7571756068719 6:33.936907808709655 7:35.64053559632448 8:76.17492798446793 9:74.03213430082059 10:80.46051535176261 11:1 12:0 13:62076.9 14:61857.0 15:61966.95 16:61778.9 17:62139.8
|
||||||
|
0 0:1.5752018366468912 1:0.0012379756621971752 2:78.4032313514083 3:62453.966000508604 4:62341.767569545176 5:112.19843096342811 6:75.85585664635616 7:72.6851486341439 8:85.39565573424693 9:81.24368362688071 10:93.69959994897937 11:1 12:0 13:62076.9 14:61857.0 15:61966.95 16:61778.9 17:62139.8
|
||||||
|
0 0:0.4262864403573658 1:-0.0004265620846789867 2:71.13159653865279 3:62643.67353059018 4:62533.840486617126 5:109.83304397305619 6:94.34069731269425 7:30.984693320723892 8:80.72948717321407 9:71.91588218806513 10:98.35669714351195 11:1 12:0 13:62076.9 14:61857.0 15:61966.95 16:61778.9 17:62139.8
|
||||||
|
0 0:0.5084658298239532 1:-0.0019875973922722215 2:54.41602270592753 3:62770.50693037593 4:62720.75920052625 5:49.74772984968149 6:38.59698330422496 7:22.301493090913056 8:70.76815965802297 9:78.04292557376695 10:56.218627826535 11:2 12:0 13:62750.0 14:62511.0 15:62630.5 16:62412.0 17:62900.0
|
||||||
|
1 0:2.7715725256531702 1:-0.001065434246592465 2:79.76731046629831 3:63450.04529401442 4:63147.32051659004 5:302.7247774243733 6:208.98089728282895 7:187.48776028308873 8:94.03541052002524 9:90.61814475767281 10:100.86994204473007 11:2 12:0 13:62750.0 14:62511.0 15:62630.5 16:62265.0 17:62961.5
|
||||||
|
1 0:3.0991195084813983 1:0.003895475819032716 2:81.38501913483344 3:63625.86415768583 4:63355.32151000732 5:270.5426476785069 6:149.6547357764492 7:241.77582380411542 8:92.52325683198201 9:88.38029906546521 10:100.80917236501563 11:0
|
||||||
|
1 0:2.610540864850217 1:0.0009268708427700338 2:75.42766438147484 3:62763.417571675935 4:62649.11005947749 5:114.30751219844387 6:58.36883576484659 7:111.87735286719457 8:85.77966923470065 9:79.75813219909003 10:97.8227433059219 11:0
|
||||||
|
0 0:9.662757355709288e-10 1:-0.00012640564721328227 2:61.020463467940694 3:60875.14678204567 4:60819.72863940411 5:55.418142641559825 6:56.49646865315886 7:-2.1566520231980633 8:85.36749523563391 9:80.15043079280719 10:95.80162412128738 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:60930.8
|
||||||
|
0 0:9.662757355709288e-10 1:0.00031366031737166687 2:58.68275750268894 3:60875.24424181707 4:60852.67586679989 5:22.568375017181097 6:24.184175200950396 7:-3.231600367538597 8:74.72070818904214 9:62.98089185560286 10:98.2003408559207 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:60930.8
|
||||||
|
0 0:0.23003677699736627 1:2.623578758192198e-05 2:66.71063908556233 3:60899.232189503615 4:60874.18404037788 5:25.048149125737837 6:13.144881324986951 7:23.80653560150177 8:77.62077380930528 9:64.68435654890399 10:103.49360833010786 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:60934.8
|
||||||
|
0 0:0.23003677699736627 1:0.0006642393229679197 2:63.80052108463751 3:60930.79215377545 4:60898.25591554223 5:32.53623823322414 6:22.169535604622528 7:20.733405257203223 8:66.94273989031774 9:62.603568760956506 10:75.6210821490402 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:60934.8
|
||||||
|
0 0:0.27313003487860615 1:-0.00010644552200065177 2:65.2233161449227 3:60983.179885978294 4:60934.61366098717 5:48.56622499112564 6:34.433093793475 7:28.26626239530127 8:83.92044014275432 9:75.18204667227299 10:101.39722708371696 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:60934.8
|
||||||
|
0 0:0.27313003487860615 1:0.0007205318835358464 2:67.18832308809047 3:61021.80736355899 4:60967.621572899196 5:54.18579065979429 6:43.95400935766948 7:20.46356260424963 8:84.57920001270602 9:81.28882369923676 10:91.15995263964456 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:60934.8
|
||||||
|
0 0:0.6328164089416135 1:0.0012755248236124607 2:67.31277853289077 3:61012.792849237216 4:60955.214014091405 5:57.578835145810444 6:26.590221422428687 7:61.977227446763514 8:88.39232981814925 9:87.33503656608204 10:90.50691632228364 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:61128.1
|
||||||
|
0 0:0.6328164089416135 1:0.0001159401356989238 2:68.19361466474908 3:61138.04948336265 4:61067.92982896199 5:70.11965440065978 6:57.521170489333315 7:25.196967822652937 8:76.99544203946886 9:68.88412785797853 10:93.21807040244951 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:61128.1
|
||||||
|
0 0:0.6328164089416135 1:-0.00034293608814437283 2:62.203332003872816 3:61180.88714281408 4:61109.818677592215 5:71.06846522186243 6:66.07689269652506 7:9.983145050674722 8:67.86308547948681 9:71.38167010167882 10:60.825916235102795 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:61128.1
|
||||||
|
1 0:0.6328164089416135 1:-0.0010135399801535251 2:58.163027762658764 3:61204.52407241035 4:61137.1187439607 5:67.40532844964764 6:68.04148595538962 7:-1.272315011483954 8:67.51257151781884 9:70.82288772300026 10:60.89193910745598 11:1 12:0 13:60912.7 14:60792.2 15:60852.45 16:60309.0 17:61128.1
|
||||||
|
0 0:0.3864091016195042 1:0.001409231125482721 2:73.20117289617278 3:60260.90420503646 4:60216.07713325079 5:44.82707178567216 6:12.688593173019843 7:64.27695722530464 8:66.64515454666397 9:53.575933271540435 10:92.78359709691105 11:0
|
||||||
|
0 0:0.4070117362634691 1:-0.0002432070464312309 2:71.69475294615943 3:60698.32097751702 4:60648.505403426614 5:49.81557409040397 6:24.935305483333842 7:49.76053721414026 8:81.44264763463656 9:69.63366108011115 10:105.06062074368737 11:0
|
||||||
|
0 0:0.5438846312773223 1:-0.0003351211939514149 2:64.18436244180022 3:60733.08453532591 4:60714.595046652124 5:18.489488673782034 6:0.07788207775995204 7:36.823213192044165 8:67.7842544064865 9:52.86801345498845 10:97.61673630948259 11:0
|
||||||
|
0 0:1.1615823554085558 1:-0.0011544115362666486 2:69.26360846011568 3:60939.60705950692 4:60844.79421570343 5:94.81284380349098 6:57.49080010566663 7:74.6440873956487 8:81.41152121467275 9:77.34123153826897 10:89.5521005674803 11:0
|
||||||
|
0 0:1.1615823554085558 1:0.002187918627768856 2:72.74201146562518 3:60995.1068295878 4:60885.769800843125 5:109.33702874467417 6:74.27896582565221 7:70.11612583804393 8:83.0592316499789 9:79.07264678743331 10:91.03240137507007 11:0
|
||||||
|
0 0:1.1615823554085558 1:0.00036118252138083747 2:64.98835595418822 3:61125.108621538566 4:61056.95241365821 5:68.15620788035449 6:66.3367098920993 7:3.6389959765103868 8:82.21618768327848 9:72.3698914924017 10:101.90878006503203 11:0
|
||||||
|
0 0:1.1615823554085558 1:-0.0004231611279940113 2:59.32474036230051 3:61147.91837568523 4:61086.91140349586 5:61.006972189366934 6:63.797917353372064 7:-5.58189032801026 8:64.92408077118593 9:68.4028927024127 10:57.9664569087324 11:0
|
||||||
|
0 0:1.1615823554085558 1:0.0023776513833978948 2:70.84877974700771 3:61197.84391087173 4:61127.96037940349 5:69.88353146823647 6:62.018822709881384 7:15.729417516710171 8:64.8241711507344 9:60.78716664758002 10:72.89818015704316 11:0
|
||||||
|
0 0:1.1615823554085558 1:0.004487474976829644 2:71.20222840152378 3:61346.14975716087 4:61256.78372003616 5:89.36603712470969 6:68.34099485755351 7:42.05008453431236 8:74.85780926217768 9:63.07114135627623 10:98.43114507398059 11:0
|
||||||
|
0 0:1.1615823554085558 1:-0.001176291901359569 2:66.53942803328769 3:61641.11478753251 4:61477.69867620603 5:163.41611132647813 6:130.11055101554413 7:66.611120621868 8:80.78611487086994 9:77.69137417112093 10:86.97559627036796 11:0
|
||||||
|
0 0:0.6226606648666982 1:-0.00041009245574619944 2:72.13374938246619 3:61880.04462856616 4:61717.34545714445 5:162.69917142170743 6:138.2149477822295 7:48.968447278955864 8:80.60681266507734 9:70.89856430320859 10:100.02330938881485 11:0
|
||||||
|
0 0:0.6226606648666982 1:-0.0006826157836830735 2:65.43175230204352 3:62051.7804883238 4:61891.871971867775 5:159.9085164560238 6:151.02560795349916 7:17.765817005049257 8:66.16395652160237 9:65.42394569772793 10:67.64397816935127 11:0
|
||||||
|
0 0:1.9799773891227088 1:-0.0006345429938661076 2:71.37471603353515 3:62600.58207508562 4:62399.433270435235 5:201.14880465038732 6:155.7380824641349 7:90.82144437250486 8:86.38997522234293 9:80.4216046543408 10:98.3267163583472 11:0
|
||||||
|
1 0:1.9799773891227088 1:4.745273707318389e-06 2:76.26179412918223 3:62915.403639911005 4:62727.616446382664 5:187.78719352834014 6:165.12932460810757 7:45.31573784046515 8:78.6612840721264 9:73.90556028080431 10:88.17273165477059 11:0
|
||||||
|
0 0:0.23032607658646376 1:-0.0004266483271564149 2:61.41548067404186 3:62741.46994284145 4:62720.18179452803 5:21.288148313426063 6:10.806936374664136 7:20.962423877523854 8:81.06719532648947 9:78.33951315802881 10:86.52255966341079 11:1 12:0 13:62770.0 14:62611.5 15:62690.75 16:62458.0 17:63055.9
|
||||||
|
0 0:0.5881237701511062 1:-3.1764939447621938e-06 2:76.11829226116785 3:62832.44523066916 4:62774.02296828342 5:58.422262385742215 6:31.659118704686165 7:53.5262873621121 8:91.97069122698507 9:87.0879297577489 10:101.7362141654574 11:1 12:0 13:62770.0 14:62611.5 15:62690.75 16:62458.0 17:63055.9
|
||||||
|
0 0:0.5881237701511062 1:-0.00022004150711021317 2:75.26472548609017 3:63019.51935163927 4:62924.470453113325 5:95.04889852594351 6:75.26629627771555 7:39.56520449645592 8:82.89879753426553 9:83.54920002544176 10:81.59799255191305 11:1 12:0 13:62770.0 14:62611.5 15:62690.75 16:62458.0 17:63055.9
|
||||||
|
0 0:0.9133508863994582 1:-0.0009849588574477484 2:66.21809399922434 3:63164.298187724555 4:63085.6492382618 5:78.64894946275308 6:54.20480845882448 7:48.8882820078572 8:77.16759882695212 9:75.02476807699196 10:81.45326032687242 11:2 12:0 13:63130.4 14:62931.0 15:63030.7 16:62781.0 17:63248.0
|
||||||
|
1 0:0.9133508863994582 1:0.002897963832398936 2:67.76139947396624 3:63218.622084887626 4:63134.202599528486 5:84.4194853591398 6:68.1112417084789 7:32.6164873013218 8:63.88499579673494 9:63.39874407319066 10:64.85749924382351 11:2 12:0 13:63130.4 14:62931.0 15:63030.7 16:62781.0 17:63248.0
|
||||||
|
1 0:0.18686608156103546 1:-0.0006038157980458614 2:56.411546229064776 3:62868.96803921625 4:62846.015129644955 5:22.952909571293276 6:19.087799269877173 7:7.730220602832205 8:54.56624503152561 9:47.64371506046538 10:68.41130497364605 11:0
|
||||||
|
0 0:0.42158445110274645 1:0.001160054040377542 2:71.495348630649 3:62748.85723043912 4:62678.2022317308 5:70.65499870831991 6:49.95712302193926 7:41.395751372761296 8:79.61480416516389 9:73.64548360681621 10:91.55344528185924 11:0
|
||||||
|
1 0:0.42158445110274645 1:0.0037479518302285767 2:70.504208487605 3:62861.893761740714 4:62767.01597018155 5:94.8777915591636 6:74.40187836088695 7:40.95182639655329 8:75.84969660993383 9:71.40141647963432 10:84.74625687053285 11:0
|
||||||
|
0 0:7.658403444185452 1:0.0006627173277245856 2:90.26343890279253 3:63690.59050072088 4:63264.75907629915 5:425.8314244217254 6:274.3392661492758 7:302.98431654489923 8:92.20322932293291 9:93.0883998540786 10:90.43288826064156 11:0
|
||||||
|
0 0:0.2977411516330615 1:-0.0006981478184815447 2:71.00716016822264 3:64335.912039432704 4:64182.469648622675 5:153.44239081002888 6:106.3300249177154 7:94.22473178462695 8:74.49506854668698 9:71.05909754281637 10:81.36701055442819 11:0
|
||||||
|
0 0:0.2977411516330615 1:-0.0006215634711929686 2:68.42036710373463 3:64665.95036283195 4:64540.94546082979 5:125.00490200216154 6:106.16558901141075 7:37.6786259815016 8:85.99960825800684 9:81.39308360793883 10:95.21265755814287 11:0
|
||||||
|
0 0:0.2977411516330615 1:0.001364603571098159 2:71.42708545185317 3:64774.569464235654 4:64639.82764686648 5:134.74181736917672 6:121.41654062854771 7:26.650553481258015 8:82.26168977516247 9:80.49218912420838 10:85.80069107707064 11:0
|
||||||
|
0 0:2.2104141291417854 1:0.004120570007115965 2:79.5338917943606 3:65353.534676908406 4:65127.31810169429 5:226.21657521411544 6:118.08355415137558 7:216.26604212547971 8:89.18693527816248 9:80.98229114036025 10:105.59622355376695 11:0
|
||||||
|
0 0:2.2104141291417854 1:0.0005004482867584682 2:77.22180039947057 3:65692.75381830524 4:65368.49614402038 5:324.2576742848614 6:221.95699909149243 7:204.60135038673798 8:88.50212439172543 9:86.24614095349263 10:93.01409126819104 11:0
|
||||||
|
1 0:0.4102430404262517 1:-0.0009754364626579878 2:68.50186166829884 3:66143.85166775474 4:66037.38546723497 5:106.46620051977516 6:62.105381188520845 7:88.72163866250862 8:72.66518635201966 9:71.08075288802937 10:75.83405328000026 11:1 12:0 13:66066.0 14:65710.0 15:65888.0 16:65520.0 17:66288.0
|
||||||
|
0 0:1.1355164160375546 1:-0.00019887295206389544 2:63.57550867725143 3:65642.0730761431 4:65602.98529863583 5:39.08777750727313 6:-13.653872893624088 7:105.48330080179444 8:86.08605367571556 9:77.36949139649005 10:103.51917823416659 11:0
|
||||||
|
0 0:1.2009763769718242 1:0.002221117491186311 2:63.572803641066436 3:65740.9110923221 4:65666.59164061415 5:74.3194517079537 6:32.483665240547 7:83.67157293481341 8:81.71185268328131 9:80.24060387262816 10:84.65435030458761 11:0
|
||||||
|
0 0:1.2009763769718242 1:0.0011095746731610624 2:63.88439816096779 3:65825.71828376765 4:65732.05675101263 5:93.66153275502438 6:65.78164182449852 7:55.75978186105172 8:80.56250724062326 9:81.14279680869438 10:79.40192810448102 11:0
|
||||||
|
1 0:4.166662999515824 1:0.00044643649071348664 2:87.96493661299776 3:66668.75978178426 4:66238.09248503389 5:430.66729675036913 6:237.1371283132891 7:387.06033687416004 8:91.16108999517624 9:89.37931192856603 10:94.7246461283967 11:0
|
||||||
|
0 0:0.3630991415914267 1:0.0007288520878324769 2:65.79353831773365 3:66805.43171249547 4:66724.90251179568 5:80.52920069979155 6:56.22306708643025 7:48.612267226722594 8:71.34823177365706 9:58.31441700211485 10:97.41586131674148 11:0
|
||||||
|
1 0:0.6590705712752883 1:0.0008444115979711674 2:68.2753900274096 3:67255.11444535159 4:67112.09528708091 5:143.0191582706757 6:118.07842424340959 7:49.881468054532206 8:74.6162085504665 9:72.51695630192225 10:78.81471304755499 11:1 12:0 13:66967.8 14:66724.2 15:66846.0 16:66650.0 17:67136.0
|
||||||
|
0 0:0.8103020117629441 1:0.0008312181799290496 2:71.34512156250346 3:67213.32935881303 4:67139.33306791032 5:73.996290902709 6:46.32682587922989 7:55.33893004695824 8:77.70301874674564 9:64.34991237934102 10:104.40923148155488 11:0
|
||||||
|
0 0:0.8690943461238507 1:1.0354998949664197e-05 2:73.19884715727702 3:67406.08993428727 4:67284.54284361705 5:121.54709067022486 6:91.87003783919664 7:59.35410566205644 8:78.35800031794284 9:78.97236106743138 10:77.12927881896576 11:0
|
||||||
|
0 0:1.08782930661161 1:0.0006443403713231776 2:67.13779214361875 3:67579.28246908625 4:67447.47078656954 5:131.81168251670897 6:126.45372360468664 7:10.715917824044652 8:64.12270152410444 9:65.88389253600062 10:60.60031950031208 11:0
|
||||||
|
1 0:1.3773031314837585 1:-0.0006668933615529381 2:73.54414220781499 3:67963.0850604803 4:67744.9822037393 5:218.10285674099578 6:176.66211302508444 7:82.88148743182268 8:80.64416396171768 9:78.96674338793255 10:83.99900510928794 11:0
|
||||||
|
0 0:1.2784588778109438 1:0.0017510016759587467 2:77.34388022649075 3:67720.07402820507 4:67551.89821431048 5:168.17581389458792 6:104.1779131597759 7:127.99580146962404 8:87.64329898461956 9:86.18774077635558 10:90.55441540114754 11:1 12:0 13:67505.9 14:67090.6 15:67298.25 16:66682.3 17:67673.9
|
||||||
|
1 0:391904490.0062183 1:-0.0009558029110941612 2:67.84296223439851 3:68015.25301743615 4:67917.41879400074 5:97.83422343540587 6:61.79193668230289 7:72.08457350620597 8:80.38812471140454 9:82.97957433536025 10:75.20522546349312 11:1 12:0 13:67505.9 14:67090.6 15:67298.25 16:66682.3 17:68268.0
|
||||||
|
0 0:7.662388136424987e-10 1:0.0020190462881281984 2:63.75183090340611 3:68643.68229689333 4:68533.63710727009 5:110.04518962324073 6:121.54355936708416 7:-22.996739487686852 8:68.37710801966114 9:58.326454737256356 10:88.4784145844707 11:0
|
||||||
|
0 0:7.662388136424987e-10 1:-0.0010458427749694963 2:58.5953182799918 3:68700.06569738963 4:68585.66050912438 5:114.40518826524203 6:117.73047323808183 7:-6.650569945679592 8:77.57679862114988 9:71.02955226530513 10:90.67129133283939 11:0
|
||||||
|
1 0:0.23303503808891476 1:3.046498267835461e-05 2:63.46897574364847 3:68819.50971794128 4:68755.6097450834 5:63.89997285787831 6:48.69354936684118 7:30.412846982074257 8:84.68909114398298 9:76.40152624638488 10:101.26422093917918 11:1 12:0 13:68870.7 14:68528.0 15:68699.35 16:68338.0 17:68896.6
|
||||||
|
1 0:1.0516028371572443 1:0.0004461031577106718 2:70.66191420683545 3:68487.1191437346 4:68435.38156939685 5:51.73757433774881 6:27.100304258058863 7:49.274540159379896 8:82.81490625889387 9:77.61862508919161 10:93.20746859829839 11:0
|
||||||
|
0 0:1.314220351470211 1:7.32547066149e-05 2:65.06110740406886 3:68179.39337736386 4:68170.47129429458 5:8.922083069279324 6:-9.206896605176658 7:36.25795934891197 8:77.38436872861233 9:71.18798319881836 10:89.77713978820026 11:0
|
||||||
|
0 0:0.5486124522477815 1:9.971390906367698e-05 2:62.76142543194528 3:68165.39004573293 4:68147.99749422295 5:17.392551509983605 6:11.459019255095782 7:11.867064509775645 8:71.83955681241767 9:70.67391791799234 10:74.17083460126833 11:0
|
||||||
|
0 0:0.4184011290809962 1:-1.3191471274020267e-05 2:61.73986604438864 3:68193.63886956338 4:68175.68665623218 5:17.952213331198436 6:13.42698505168191 7:9.050456559033051 8:78.83731472307045 9:71.14443505375868 10:94.22307406169398 11:1 12:0 13:68177.5 14:68130.2 15:68153.85 16:68119.0 17:68228.9
|
||||||
|
0 0:0.4184011290809962 1:0.00012311300014647777 2:63.55037253319144 3:68212.61245911465 4:68191.88138553464 5:20.73107358001289 6:17.705102252289656 7:6.051942655446467 8:73.4094685699834 9:75.38165632313441 10:69.4650930636814 11:1 12:0 13:68177.5 14:68130.2 15:68153.85 16:68119.0 17:68228.9
|
||||||
|
0 0:0.7373740757227277 1:0.0004320027648176948 2:72.3390676212577 3:68245.09412884346 4:68214.33928474558 5:30.754844097871683 6:22.779755628650808 7:15.95017693844175 8:84.60724165877923 9:78.94782637056363 10:95.92607223521043 11:1 12:0 13:68177.5 14:68130.2 15:68153.85 16:68119.0 17:68228.9
|
||||||
|
0 0:0.7855922128812651 1:0.0006440620407398516 2:68.17149715393307 3:68273.07169241841 4:68248.52003764102 5:24.55165477738774 6:16.055061793265853 7:16.993185968243772 8:77.71627513995529 9:64.78733957092876 10:103.57414627800833 11:1 12:0 13:68177.5 14:68130.2 15:68153.85 16:68119.0 17:68320.0
|
||||||
|
0 0:0.6968179918686364 1:0.00032769474064561977 2:64.56140870222659 3:68325.806437324 4:68293.23003932452 5:32.57639799948083 6:26.655819103718976 7:11.841157791523713 8:66.42524663356701 9:58.20163970171786 10:82.87246049726532 11:1 12:0 13:68177.5 14:68130.2 15:68153.85 16:68119.0 17:68320.0
|
||||||
|
0 0:0.6968179918686364 1:-0.000155029689648197 2:57.93345039496949 3:68346.57154784127 4:68318.17662859484 5:28.394919246435165 6:27.965263590326582 7:0.8593113122171658 8:61.98874909284011 9:61.12160192327818 10:63.72304343196396 11:1 12:0 13:68177.5 14:68130.2 15:68153.85 16:68119.0 17:68320.0
|
||||||
|
1 0:2.532592608870797 1:0.0009415796607097922 2:72.03888730596412 3:68377.1260006 4:68337.42286382636 5:39.70313677363447 6:37.32139490241018 7:4.763483742448585 8:64.44157509193052 9:50.75510597537797 10:91.81451332503559 11:2 12:0 13:68400.1 14:68272.8 15:68336.45000000001 16:68069.8 17:68435.6
|
||||||
|
0 0:0.37612334333740693 1:0.0009976968372719809 2:61.991788125551125 3:68523.26236647196 4:68517.62007786035 5:5.642288611605181 6:-7.529548705509603 7:26.34367463422957 8:73.867542077165 9:57.26787322982447 10:107.06687977184605 11:1 12:0 13:68639.8 14:68384.3 15:68512.05 16:68333.0 17:68749.0
|
||||||
|
0 0:0.8305132530847126 1:0.00035024182672172585 2:78.53329624736882 3:68651.49539403479 4:68595.85382303626 5:55.64157099853037 6:20.084838429312374 7:71.113465138436 8:83.92785662680075 9:81.13055355300004 10:89.52246277440216 11:1 12:0 13:68639.8 14:68384.3 15:68512.05 16:68333.0 17:68749.0
|
||||||
|
0 0:1.0263223266401857 1:0.0006917207238950401 2:73.03159686863704 3:69052.02857847238 4:68902.10511657855 5:149.92346189383534 6:105.98356284632378 7:87.87979809502312 8:85.51328025309965 9:79.59135082635913 10:97.35713910658069 11:1 12:0 13:68639.8 14:68384.3 15:68512.05 16:68333.0 17:68919.7
|
||||||
|
1 0:0.4621932226006399 1:-0.00014702045746441082 2:67.36976378600994 3:69135.42259400057 4:69054.57975164666 5:80.84284235391533 6:60.534118789289515 7:40.61744712925163 8:71.09093032863376 9:59.78433050365475 10:93.70412997859178 11:1 12:0 13:68639.8 14:68384.3 15:68512.05 16:68333.0 17:68919.7
|
||||||
|
0 0:3.7897891737553517 1:-0.00026779458852275816 2:61.28612025297904 3:68968.06723542252 4:68947.05482943749 5:21.012405985035002 6:-12.467081675376866 7:66.95897532082374 8:79.84066753197283 9:78.15318184793729 10:83.2156389000439 11:0
|
||||||
|
0 0:1.0512398549321076 1:0.004157754010695101 2:64.39963759216045 3:67262.63273341782 4:67246.9178724353 5:15.714860982523533 6:-47.56075691271535 7:126.55123579047776 8:86.0982164949758 9:72.6723129942862 10:112.95002349635499 11:0
|
||||||
|
0 0:1.0512398549321076 1:0.00026612023312132417 2:64.29874184900211 3:67470.57143845342 4:67374.10971346388 5:96.4617249895382 6:47.567106300303124 7:97.78923737847015 8:89.17377773921868 9:84.33361698248987 10:98.85409925267629 11:0
|
||||||
|
0 0:0.703092489543919 1:0.002443179469616 2:73.08975019916377 3:67588.94360302093 4:67494.5432761714 5:94.40032684952894 6:52.02583083082577 7:84.74899203740634 8:87.55036269156362 9:85.10037808441326 10:92.45033190586432 11:1 12:0 13:67380.8 14:67024.0 15:67202.4 16:66920.0 17:67679.5
|
||||||
|
0 0:0.47029717231684876 1:-0.00019669726073187515 2:63.41986200456699 3:67499.83841453277 4:67449.66205825804 5:50.17635627473646 6:22.629141867493683 7:55.09442881448556 8:91.43319583889969 9:87.3018879472138 10:99.69581162227149 11:1 12:0 13:67550.0 14:67278.0 15:67414.0 16:67258.9 17:67688.0
|
||||||
|
0 0:0.47029717231684876 1:0.0013947393747362224 2:63.345590969723396 3:67539.94061927713 4:67484.27839723892 5:55.66222203821235 6:40.692223426020455 7:29.939997224383788 8:80.26486904271113 9:81.42618719880649 10:77.9422327305204 11:1 12:0 13:67550.0 14:67278.0 15:67414.0 16:67258.9 17:67688.0
|
||||||
|
0 0:0.47029717231684876 1:0.000635183242979748 2:67.46462444763516 3:67605.89451503617 4:67540.2920476049 5:65.60246743126481 6:52.95893427995512 7:25.28706630261938 8:69.41908626011568 9:64.38422195981737 10:79.4888148607123 11:1 12:0 13:67550.0 14:67278.0 15:67414.0 16:67258.9 17:67688.0
|
||||||
|
1 0:0.47029717231684876 1:0.00013580899350769667 2:66.12827631666232 3:67667.51645932022 4:67590.65052093397 5:76.86593838625413 6:65.06157020963215 7:23.608736353243955 8:80.71277784768203 9:74.65453987772851 10:92.82925378758907 11:1 12:0 13:67550.0 14:67278.0 15:67414.0 16:67258.9 17:67688.0
|
||||||
|
0 0:0.4235788830011805 1:0.0017636606018639333 2:71.10891749229812 3:67513.80650826449 4:67482.03078811296 5:31.775720151534188 6:9.434886400777845 7:44.681667501512685 8:83.02642526692672 9:66.85867192787366 10:115.36193194503286 11:1 12:0 13:67630.0 14:67401.7 15:67515.85 16:66902.1 17:67718.0
|
||||||
|
0 0:0.4235788830011805 1:0.0004429868536268072 2:68.59285949486866 3:67637.76707017106 4:67569.91067297115 5:67.85639719991013 6:48.526712581758105 7:38.65936923630406 8:86.95748346267273 9:79.34490102664758 10:102.18264833472304 11:1 12:0 13:67630.0 14:67401.7 15:67515.85 16:66902.1 17:67718.0
|
||||||
|
1 0:0.4235788830011805 1:-0.0007380084693851947 2:61.668461493152755 3:67661.92316858402 4:67591.88445899448 5:70.03870958954212 6:56.548849879149905 7:26.979719420784434 8:77.22395699466966 9:81.17157051167504 10:69.3287299606589 11:1 12:0 13:67630.0 14:67401.7 15:67515.85 16:66902.1 17:67718.0
|
||||||
|
1 0:0.7415729693372209 1:-0.00015907090697193872 2:62.68036891600316 3:67176.93681767542 4:67149.57987663028 5:27.356941045145504 6:9.406060820279794 7:35.90176044973142 8:84.66424146210993 9:75.06026247635673 10:103.87219943361632 11:0
|
||||||
|
0 0:0.2454598679428467 1:0.0011678525323486583 2:64.41910396935577 3:66546.49749103442 4:66494.23627868835 5:52.26121234607126 6:34.34539633799327 7:35.83163201615598 8:85.78274594750881 9:76.53592433141284 10:104.27638917970074 11:0
|
||||||
|
0 0:0.2864199870400912 1:-0.0004075217731991072 2:62.529624608938775 3:66637.13021691384 4:66560.89051106582 5:76.23970584801282 6:57.83191589889172 7:36.81557989824219 8:84.00486257966413 9:84.30203460048537 10:83.41051853802168 11:0
|
||||||
|
1 0:1.2514849725861672 1:0.000663819749230279 2:83.6916994264551 3:67114.21387547544 4:66887.2681903759 5:226.94568509954843 6:135.60132531365682 7:182.68871957178322 8:88.883447208667 9:81.52438261168837 10:103.60157640262423 11:1 12:0 13:66670.0 14:66482.0 15:66576.0 16:66331.7 17:66806.2
|
||||||
|
0 0:7.291661093819937 1:0.0007850066710641656 2:58.59628074089212 3:66943.44394871114 4:66966.16750284944 5:-22.723554138297914 6:-53.2071846402093 7:60.96726100382277 8:81.08361324725591 9:73.64491721210797 10:95.96100531755178 11:0
|
||||||
|
0 0:8.252021689144724 1:0.001907899538142439 2:70.27670813562351 3:67060.7908925963 4:67018.7693704859 5:42.02152211040084 6:8.703533658786359 7:66.63597690322896 8:81.79924505784805 9:71.03357577454267 10:103.33058362445882 11:1 12:0 13:66988.1 14:66906.7 15:66947.4 16:66740.0 17:67114.2
|
||||||
|
0 0:8.252021689144724 1:-0.0005180047466451279 2:68.98173381149181 3:67226.42980489031 4:67133.19340684783 5:93.23639804248523 6:64.987549773459 7:56.49769653805248 8:78.85960198922328 9:81.55282115597214 10:73.47316365572556 11:1 12:0 13:66988.1 14:66906.7 15:66947.4 16:66740.0 17:67114.2
|
||||||
|
0 0:8.252021689144724 1:-0.0008274567620535461 2:67.42029652521171 3:67380.49408554114 4:67276.81346293334 5:103.68062260780425 6:91.90865921978599 7:23.54392677603653 8:65.32502740698745 9:57.915734148299144 10:80.14361392436406 11:1 12:0 13:66988.1 14:66906.7 15:66947.4 16:66740.0 17:67114.2
|
||||||
|
0 0:8.252021689144724 1:-0.0010288643761621479 2:64.38798928165204 3:67502.81759644422 4:67383.66697017451 5:119.15062626970757 6:107.78162198375051 7:22.738008571914122 8:67.97270787327797 9:67.95558906312931 10:68.0069454935753 11:1 12:0 13:66988.1 14:66906.7 15:66947.4 16:66740.0 17:67114.2
|
||||||
|
0 0:8.252021689144724 1:0.0011232472324724106 2:74.21993847870661 3:67603.61976370837 4:67460.02261895934 5:143.59714474903012 6:120.9653334411314 7:45.26362261579743 8:77.91375970836302 9:73.69798948752938 10:86.34530015003028 11:1 12:0 13:66988.1 14:66906.7 15:66947.4 16:66740.0 17:67114.2
|
||||||
|
0 0:8.252021689144724 1:-0.00010899969214964671 2:73.41138164449828 3:67703.86058511419 4:67541.48707113953 5:162.37351397465682 6:138.4276662596902 7:47.891695429933236 8:81.52447891440016 9:78.6180834201028 10:87.33726990299488 11:1 12:0 13:66988.1 14:66906.7 15:66947.4 16:66740.0 17:67114.2
|
||||||
|
0 0:1.1918945492825597 1:3.9582710272110456e-05 2:73.36458584964772 3:68014.04334632504 4:67892.43575586964 5:121.6075904554018 6:79.86721411831539 7:83.48075267417283 8:89.0399304860787 9:82.59039007777199 10:101.93901130269217 11:2 12:0 13:67942.0 14:67677.2 15:67809.6 16:67329.2 17:68000.0
|
||||||
|
1 0:1.1982231422182394 1:0.0011005221285118316 2:80.44411441398998 3:68356.50398649779 4:68205.49619120496 5:151.0077952928259 6:109.04579041403795 7:83.9240097575759 8:86.73608116957685 9:81.0524207022599 10:98.10340210421077 11:2 12:0 13:67942.0 14:67677.2 15:67809.6 16:67329.2 17:68266.1
|
||||||
|
0 0:0.460588500833479 1:-0.00024465156311724145 2:59.9214257618592 3:67784.39347676697 4:67725.37144232888 5:59.022034438094124 6:51.12313273154604 7:15.797803413096162 8:87.68649999600261 9:81.8074966864553 10:99.44450661509723 11:0
|
||||||
|
0 0:0.460588500833479 1:0.000760759523473355 2:69.65516135922736 3:67872.28291949161 4:67791.61757754043 5:80.66534195118584 6:64.66229532452785 7:32.00609325331598 8:93.20041540571891 9:91.0044662798639 10:97.59231365742895 11:0
|
||||||
|
0 0:0.5085806547771392 1:-0.0007987559925019529 2:66.83088552080174 3:68054.68132367166 4:67939.26172467979 5:115.41959899186622 6:96.12520992480141 7:38.588778134129626 8:80.6098804923524 9:82.8901254038241 10:76.04939066940901 11:0
|
||||||
|
1 0:1.6434984312502874 1:-0.0012717605069561208 2:66.70913981303009 3:68363.54552870357 4:68208.41143039231 5:155.13409831126046 6:95.11829651798236 7:120.0316035865562 8:85.41180736512777 9:82.93292570279098 10:90.36957068980138 11:1 12:0 13:67750.0 14:67707.8 15:67728.9 16:67500.0 17:68277.0
|
||||||
|
0 0:0.5148820930327258 1:0.0010102791419203945 2:59.92977706662291 3:66896.45513522533 4:66884.74662844956 5:11.708506775772548 6:-0.8550426415228298 7:25.127098834590758 8:70.2619934362282 9:60.05866961074495 10:90.6686410871947 11:0
|
||||||
|
0 0:0.5908612286067627 1:0.0004891981177804561 2:67.86530422528736 3:66995.61767464846 4:66951.32987110126 5:44.287803547194926 6:30.318701204224073 7:27.938204685941706 8:83.63152414801559 9:81.49050980519127 10:87.91355283366423 11:0
|
||||||
|
0 0:0.5908612286067627 1:0.0011574764626565552 2:62.08509624268957 3:67060.34196579337 4:67037.67313461065 5:22.66883118271653 6:27.57972214104288 7:-9.821781916652697 8:47.13704753958204 9:38.612364371279085 10:64.18641387618794 11:0
|
||||||
|
0 0:0.5908612286067627 1:0.0005393461991736544 2:63.14202126546547 3:67092.62902421053 4:67067.96186932582 5:24.667154884707998 6:22.77054725733297 7:3.793215254750052 8:68.726498737371 9:57.621903196907994 10:90.93568981829702 11:0
|
||||||
|
0 0:0.9258539871399826 1:-0.0012548206645946038 2:63.54134681312022 3:67208.126409374 4:67144.42842651464 5:63.69798285936122 6:45.59786217856507 7:36.20024136159229 8:81.49583550488538 9:86.6637403064757 10:71.16002590170473 11:0
|
||||||
|
0 0:1.3864404775420943e-09 1:-0.00025821606635120044 2:65.26861185693454 3:67679.51124812324 4:67604.83722867668 5:74.67401944655285 6:78.7434833005782 7:-8.138927708050716 8:66.27490973103906 9:61.9155983971356 10:74.99353239884599 11:0
|
||||||
|
0 0:1.3864404794643113e-09 1:-0.0008258831788243553 2:54.89092928433833 3:67759.40245286394 4:67706.61084215912 5:52.79161070482223 6:57.80100261834214 7:-10.018783827039812 8:60.682744908655515 9:65.50181042980316 10:51.04461386636024 11:1 12:0 13:67758.0 14:67655.9 15:67706.95 16:67550.0 17:67819.0
|
||||||
|
0 0:0.290916546771352 1:0.00250991786662887 2:64.66131011474326 3:67764.9454621366 4:67738.08680958812 5:26.858652548486134 6:23.42976527667711 7:6.857774543618049 8:54.69525640978867 9:54.1233007053835 10:55.83916781859901 11:1 12:0 13:67758.0 14:67655.9 15:67706.95 16:67550.0 17:67819.0
|
||||||
|
0 0:0.6639975864006266 1:-0.0016401810524519602 2:55.609956423548994 3:67860.13091274099 4:67813.7121040458 5:46.41880869519082 6:34.386579334462766 7:24.064458721456106 8:71.83734610587345 9:77.59646309967144 10:60.319112118277474 11:1 12:0 13:67758.0 14:67655.9 15:67706.95 16:67513.0 17:67994.2
|
||||||
|
0 0:0.9327540856343712 1:0.0011226111495097931 2:75.7058071394477 3:67983.91455003958 4:67893.24361217702 5:90.67093786256737 6:57.03249108284099 7:67.27689355945276 8:77.65474416646593 9:70.62939682150915 10:91.70543885637949 11:1 12:0 13:67758.0 14:67655.9 15:67706.95 16:67513.0 17:67994.2
|
||||||
|
1 0:0.9327540856343712 1:-0.0012829525483304895 2:65.21924088185749 3:68087.83227923143 4:67973.01729525317 5:114.81498397825635 6:87.26325139025462 7:55.10346517600345 8:81.47009725756314 9:78.25192853105291 10:87.9064347105836 11:1 12:0 13:67758.0 14:67655.9 15:67706.95 16:67513.0 17:67994.2
|
||||||
|
0 0:0.3918362989004708 1:-0.00110768533014709 2:65.83607918376646 3:68622.01367098742 4:68508.9609896931 5:113.05268129431352 6:87.42957828158649 7:51.24620602545406 8:85.58448197655093 9:89.99481526015505 10:76.7638154093427 11:0
|
||||||
|
0 0:6.216908496649819e-10 1:-0.0012949410001600488 2:51.579625822213266 3:68674.94143057453 4:68624.52857378688 5:50.41285678764689 6:58.98449639533586 7:-17.143279215377945 8:62.23935025056552 9:71.9644732765667 10:42.789104198563194 11:1 12:0 13:68666.0 14:68453.3 15:68559.65 16:68207.4 17:68820.9
|
||||||
|
0 0:0.2587468562239686 1:-0.0019986115519456996 2:59.96318561034087 3:68788.57005737953 4:68704.96930603658 5:83.60075134295039 6:66.48496224514805 7:34.23157819560467 8:76.91070181530844 9:74.72330989479947 10:81.28548565632639 11:1 12:0 13:68666.0 14:68453.3 15:68559.65 16:68207.4 17:68820.9
|
||||||
|
0 0:0.2587468562239686 1:-0.00025794933179534054 2:62.21363989278441 3:68892.35635208643 4:68803.52038389147 5:88.83596819495142 6:80.34526108884458 7:16.98141421221368 8:68.63245670588292 9:66.20967595300787 10:73.47801821163299 11:1 12:0 13:68666.0 14:68453.3 15:68559.65 16:68207.4 17:68820.9
|
||||||
|
0 0:0.2587468562239686 1:0.003036017949586911 2:69.18519947916045 3:68989.78216508227 4:68888.60525784454 5:101.17690723773558 6:86.70917027357874 7:28.935473928313684 8:73.19699450077678 9:66.4439420488071 10:86.70309940471614 11:1 12:0 13:68666.0 14:68453.3 15:68559.65 16:68207.4 17:68820.9
|
||||||
|
0 0:1.764828657065531 1:0.0025857405448997868 2:77.75460893048104 3:69350.5568667844 4:69154.32555916329 5:196.23130762111396 6:113.00013526746277 7:166.46234470730238 8:88.6236664609823 9:77.35076177589119 10:111.16947583116456 11:1 12:0 13:68666.0 14:68453.3 15:68559.65 16:68207.4 17:69272.1
|
||||||
|
0 0:0.4161866072033057 1:0.003523490173011835 2:72.75930280739325 3:69762.51852312185 4:69643.27275828207 5:119.24576483978308 6:87.00680021892795 7:64.47792924171026 8:83.75092623057604 9:79.70561888655027 10:91.84154091862757 11:1 12:0 13:68666.0 14:68453.3 15:68559.65 16:68207.4 17:69272.1
|
||||||
|
0 0:1.8576163766702343 1:0.007438608943512084 2:88.85341805543923 3:70562.95580457627 4:70256.7410619119 5:306.21474266436417 6:153.53844514476538 7:305.3525950391976 8:88.7800576796999 9:82.23540263607339 10:101.8693677669529 11:2 12:0 13:69902.4 14:69700.0 15:69801.2 16:69389.0 17:70331.0
|
||||||
|
0 0:0.4961470068954063 1:0.0009542848784157478 2:70.07284843867396 3:71458.68330838022 4:71352.3767497536 5:106.3065586266166 6:29.596481605403056 7:153.4201540424271 8:83.93650098760506 9:73.82399692287619 10:104.16150911706279 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:-0.00035171813614415313 2:61.57564716130317 3:71799.61134451674 4:71668.51614748752 5:131.09519702922262 6:127.60837012583241 7:6.973653806780419 8:68.31455267576409 9:70.47701337604896 10:63.98963127519434 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:0.0007097104932419024 2:74.70569814638357 3:72314.97381281339 4:72061.445457429 5:253.52835538439103 6:210.4217204613492 7:86.21326984608368 8:82.8590145308923 9:81.54797069350624 10:85.4811022056644 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:0.0005390220325255394 2:72.67353149834888 3:72537.44734179486 4:72281.50694041926 5:255.94040137559932 6:242.5746245906361 7:26.73155356992646 8:69.52486428930253 9:70.76299780697393 10:67.04859725395974 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:0.0016102882429707113 2:72.89258591211696 3:72607.28359974662 4:72352.72268554464 5:254.5609142019821 6:246.40577955928651 7:16.310269285391144 8:68.7156907961311 9:69.08648897122008 10:67.97409444595314 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:0.0006228179080725457 2:71.77336236319333 3:72752.40616710765 4:72527.00171887179 5:225.40444823585858 6:232.8590822246997 7:-14.909267977682248 8:75.42692709859327 9:67.9697174657388 10:90.34134636430221 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:0.0011854421122823428 2:65.24384031628955 3:72789.2996935734 4:72662.08057358365 5:127.21911998974974 6:143.78999854260303 7:-33.141757105706574 8:72.78194035455688 9:59.268402589539434 10:99.80901588459179 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
0 0:0.4961470068954063 1:-0.000709852561704254 2:59.65015057090547 3:72848.99952430265 4:72727.27846864678 5:121.72105565587117 6:130.83011413608023 7:-18.218116960418115 8:69.78052471564303 9:70.11540823144566 10:69.11075768403776 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
1 0:0.4961470068954063 1:0.0012206838551293443 2:75.03466142163816 3:73162.36085357284 4:72945.47350134564 5:216.88735222720425 6:165.96519190080355 7:101.8443206528014 8:83.14961102923242 9:79.05846468399145 10:91.33190371971438 11:3 12:0 13:71332.8 14:71049.6 15:71191.20000000001 16:70803.0 17:71607.0
|
||||||
|
1 0:0.4216322655927927 1:0.00018450972049543246 2:73.31208960500575 3:72423.69733235848 4:72368.97499578874 5:54.722336569742765 6:18.89886416626903 7:71.64694480694747 8:73.64350314591707 9:59.393354294195476 10:102.14380084936025 11:1 12:0 13:72708.7 14:72101.3 15:72405.0 16:72030.5 17:72984.9
|
||||||
|
0 0:0.7962986870290475 1:0.0017683668032697408 2:82.23299566689563 3:69768.94356148489 4:69631.33981797202 5:137.60374351286737 6:80.78932133157427 7:113.6288443625862 8:89.63841215861362 9:87.0090794950969 10:94.89707748564706 11:1 12:0 13:69721.8 14:69357.1 15:69539.45000000001 16:69100.9 17:69739.0
|
||||||
|
0 0:0.7962986870290475 1:-0.0003531299703399717 2:66.7245914463355 3:70060.24251801457 4:69890.22841642074 5:170.01410159382795 6:151.22395937371365 7:37.58028444022858 8:87.67611564779705 9:82.48536723032294 10:98.0576124827453 11:1 12:0 13:69721.8 14:69357.1 15:69539.45000000001 16:69100.9 17:69739.0
|
||||||
|
0 0:8.800582323348922e-10 1:-0.0006508988671227939 2:58.25705801355898 3:70134.13245389772 4:70035.34055461093 5:98.79189928679261 6:116.88003044019891 7:-36.17626230681259 8:61.64743068061731 9:56.6668023651323 10:71.60868731158735 11:1 12:0 13:69721.8 14:69357.1 15:69539.45000000001 16:69100.9 17:69739.0
|
||||||
|
0 0:0.16789892293460584 1:0.0024115172355902953 2:64.46547473808954 3:70236.82989938589 4:70120.13291911519 5:116.69698027070262 6:107.15789997091659 7:19.078160599572072 8:77.63973830538502 9:67.7290480339037 10:97.46111884834767 11:1 12:0 13:69721.8 14:69357.1 15:69539.45000000001 16:69100.9 17:69739.0
|
||||||
|
1 0:1.5106390234407847 1:-0.00024751402229879893 2:70.38281264503496 3:71174.20895843185 4:70835.94000120851 5:338.26895722333575 6:279.4210619490097 7:117.6957905486521 8:87.0619723725885 9:88.39481185895922 10:84.39629339984705 11:1 12:0 13:69721.8 14:69357.1 15:69539.45000000001 16:69100.9 17:69739.0
|
||||||
|
0 0:1.1888395152608517 1:-0.0008796844635074269 2:60.42652796420359 3:69441.42367774372 4:69368.55885127159 5:72.86482647212688 6:48.81777016078126 7:48.09411262269124 8:84.27935164956304 9:87.67180515891249 10:77.49444463086414 11:0
|
||||||
|
0 0:0.1740450595035686 1:0.0011285951506351042 2:62.260987567499754 3:69558.53154644878 4:69494.22563678458 5:64.3059096641955 6:63.958757161300056 7:0.6943050057908806 8:65.91402028128664 9:62.76040419024895 10:72.22125246336202 11:1 12:0 13:69472.0 14:69470.0 15:69471.0 16:68856.3 17:69634.9
|
||||||
|
0 0:0.1740450595035686 1:-0.00029997961860956117 2:60.69937512969403 3:69614.36478195878 4:69553.3372552883 5:61.027526670484804 6:62.02530660060211 7:-1.9955598602346072 8:77.50855660972043 9:75.11745189405312 10:82.29076604105506 11:1 12:0 13:69472.0 14:69470.0 15:69471.0 16:68856.3 17:69634.9
|
||||||
|
1 0:0.5792239497552861 1:0.0009237656986461463 2:72.87557868507609 3:69732.1718903424 4:69661.85053720015 5:70.32135314225161 6:50.200491088872376 7:40.24172410675847 8:90.35928300445855 9:86.15991360514047 10:98.75802180309466 11:1 12:0 13:69472.0 14:69470.0 15:69471.0 16:68856.3 17:69634.9
|
||||||
|
0 0:0.37363864452434703 1:0.0016249712168775485 2:64.84413699068219 3:68542.36981902257 4:68521.90112210008 5:20.468696922485833 6:-1.8633050899284378 7:44.66400402482854 8:81.86682028703024 9:67.54402541546565 10:110.5124100301594 11:0
|
||||||
|
0 0:0.5427747795906204 1:-0.0003073789895533575 2:66.02938671845224 3:68387.58493414467 4:68299.58872530417 5:87.99620884050091 6:29.49571324162843 7:117.00099119774497 8:92.73833996360764 9:87.66363499436656 10:102.88774990208981 11:0
|
||||||
|
0 0:0.5427747795906204 1:-0.0010208242318334908 2:62.19460397689916 3:68504.11786775014 4:68386.24656212439 5:117.87130562575476 6:78.41938146722407 7:78.90384831706137 8:80.4230445280119 9:86.51681463449512 10:68.23550431504546 11:0
|
||||||
|
0 0:0.5427747795906204 1:0.0006645310548303132 2:70.09346588227085 3:68614.2408198747 4:68495.06744426054 5:119.17337561416207 6:102.03257059627785 7:34.28161003576844 8:62.08932114335958 9:55.89883595945139 10:74.47029151117596 11:0
|
||||||
|
0 0:0.5427747795906204 1:-0.001708309105835935 2:66.51960299493038 3:69033.96717672917 4:68827.18749849923 5:206.77967822994106 6:177.95197405466507 7:57.655408350551966 8:82.21923691000802 9:82.35265220297937 10:81.95240632406532 11:0
|
||||||
|
1 0:0.45161459241896706 1:0.00031462561716416837 2:68.83631100323112 3:69147.73174990862 4:69010.32807006851 5:137.40367984010663 6:112.51305221838042 7:49.78125524345242 8:79.23832229309225 9:82.33916055162447 10:73.0366457760278 11:1 12:0 13:68560.0 14:68220.0 15:68390.0 16:67660.0 17:69348.0
|
||||||
|
0 0:0.5621355718395626 1:-0.0005479261933296735 2:64.3839033012232 3:68990.57264693113 4:68916.57459913485 5:73.99804779628175 6:48.45011320831899 7:51.09586917592553 8:82.00776254910704 9:77.87913203109738 10:90.26502358512636 11:1 12:0 13:68903.0 14:68683.7 15:68793.35 16:68459.8 17:68913.0
|
||||||
|
1 0:0.6474394399815081 1:-0.0006257225433526433 2:63.7173149915538 3:69043.40645135305 4:68953.80785248186 5:89.59859887119092 6:62.56477521091076 7:54.06764732056031 8:82.92025487266997 9:81.2234235726165 10:86.31391747277692 11:1 12:0 13:68903.0 14:68683.7 15:68793.35 16:68459.8 17:68913.0
|
||||||
|
0 0:0.17689026487515938 1:0.0015358565121639273 2:63.25069530332644 3:67922.80272451122 4:67831.06372504815 5:91.73899946306483 6:78.0658873370178 7:27.34622425209406 8:82.84398035284471 9:73.80117289868559 10:100.92959526116294 11:0
|
||||||
|
0 0:0.17689026487515938 1:-0.0010132709119291356 2:58.02417704797202 3:67979.50079092359 4:67885.91625297435 5:93.58453794923844 6:87.26266664214405 7:12.643742614188767 8:73.67183651821014 9:76.87376439959976 10:67.2679807554309 11:0
|
||||||
|
0 0:0.2735362244887891 1:3.371138946625945e-05 2:64.78880555475035 3:68084.1982951665 4:68014.67841653162 5:69.51987863487739 6:48.37630994730113 7:42.28713737515251 8:76.04553737851751 9:72.56304704406702 10:83.01051804741849 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:0.4355799448492986 1:0.0002807965848117075 2:71.83474543388378 3:68215.45929902777 4:68103.28429507256 5:112.17500395521347 6:78.50591862633674 7:67.33817065775347 8:87.28360736829946 9:83.8871287667823 10:94.07656457133379 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:0.4355799448492986 1:-0.0010172003314670895 2:62.685201879130446 3:68306.95719221132 4:68190.47378285104 5:116.48340936028399 6:104.77558617390125 7:23.41564637276548 8:72.83793028903834 9:79.30075435825914 10:59.912282150596724 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:0.4355799448492986 1:0.0012249451326659328 2:72.3516323483137 3:68462.64768563992 4:68354.54209293693 5:108.10559270299564 6:93.86543215687122 7:28.48032109224883 8:76.75218245388062 9:70.74981686607903 10:88.75691362948382 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:0.4355799448492986 1:6.109144225275627e-05 2:68.89483303369813 3:68656.60917457876 4:68551.99687698294 5:104.61229759581329 6:102.79248005313707 7:3.639635085352438 8:75.73228594326397 9:64.98359203794249 10:97.22967375390695 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:0.11737407369525175 1:-0.000435429442287456 2:66.02904197742726 3:68731.15590407912 4:68649.12246210406 5:82.03344197505794 6:78.08156426654594 7:7.903755417024001 8:67.87655927885692 9:57.719057728503074 10:88.1915623795646 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:0.4408088098496325 1:-0.0002899773672664849 2:68.46972529004687 3:68823.94334202663 4:68720.2319564343 5:103.7113855923235 6:88.86975613773518 7:29.68325890917663 8:83.96654165955465 9:74.98981929305593 10:101.91998639255209 11:1 12:0 13:68093.0 14:67614.0 15:67853.5 16:67454.2 17:68168.6
|
||||||
|
0 0:4.1528947317369465 1:-0.0031338755118568698 2:75.8329432714518 3:69502.76654377488 4:69202.37983359268 5:300.3867101821961 6:174.0109280772164 7:252.75156420995944 8:85.68082066716386 9:84.07394724228902 10:88.89456751691353 11:2 12:0 13:68788.0 14:68588.2 15:68688.1 16:68550.0 17:68993.3
|
||||||
|
1 0:0.3011204850306361 1:-0.0025021336298403874 2:66.75410539366604 3:69921.58486262274 4:69714.13762427038 5:207.44723835235345 6:165.3433173257497 7:84.20784205320751 8:85.43447273265713 9:83.52279614441531 10:89.25782590914076 11:2 12:0 13:68788.0 14:68588.2 15:68688.1 16:68550.0 17:68993.3
|
||||||
|
0 0:2.962842025071176 1:0.0022786435468168122 2:83.82077638795975 3:70369.84951576026 4:69974.02979800252 5:395.81971775773854 6:209.68102721427846 7:372.2773810869202 8:91.86832108908479 9:83.97571159433369 10:107.65354007858696 11:0
|
||||||
|
0 0:2.962842025071176 1:0.005276844339309715 2:82.74360138163874 3:71684.52177401242 4:71199.88692456896 5:484.6348494434642 6:371.6051814036523 7:226.0593360796238 8:88.02802517551015 9:82.68773792701913 10:98.7085996724922 11:0
|
||||||
|
0 0:2.962842025071176 1:0.0047633344964416605 2:89.5059469663754 3:72892.07680015136 4:72090.94601637812 5:801.1307837732456 6:615.2583401187663 7:371.7448873089586 8:84.00293741020118 9:89.65931445314376 10:72.69018332431602 11:0
|
||||||
|
0 0:0.3541751117344502 1:0.0006638721564361066 2:73.65931244064018 3:75427.61689904777 4:75174.59926563138 5:253.0176334163989 6:216.56464169789382 7:72.90598343701015 8:83.8094853315836 9:75.5900103628805 10:100.2484352689898 11:1 12:0 13:74801.1 14:73600.0 15:74200.55 16:72721.5 17:75656.1
|
||||||
|
0 0:0.3541751117344502 1:-0.0012747257956828982 2:65.94149360124291 3:75615.12461814916 4:75341.0877514856 5:274.03686666356225 6:245.27219031253412 7:57.52935270205626 8:84.81670799559042 9:81.84807827261879 10:90.75396744153366 11:1 12:0 13:74801.1 14:73600.0 15:74200.55 16:72721.5 17:75656.1
|
||||||
|
1 0:0.10758978461755177 1:-4.20456247585279e-05 2:67.64692017600714 3:75786.24119337468 4:75557.95383087249 5:228.28736250218935 6:221.0250358011077 7:14.524653402163324 8:60.823289526347835 9:55.2116727090899 10:72.04652316086371 11:1 12:0 13:74801.1 14:73600.0 15:74200.55 16:72721.5 17:75656.1
|
||||||
|
0 0:0.6212836432285154 1:-0.0019975549926889487 2:48.84640071758458 3:74974.3964296793 4:74957.2051875445 5:17.191242134795175 6:3.4917290111880264 7:27.399026247214298 8:69.42722454284092 9:79.0893177968342 10:50.103038034854364 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74722.4 17:75195.0
|
||||||
|
0 0:2.1484897368003733 1:0.00207858486115072 2:70.17892186244354 3:74992.31529027953 4:74916.21624159362 5:76.0990486859082 6:6.810865363248881 7:138.57636664531864 8:83.73669498765308 9:73.2916886348482 10:104.62670769326283 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74613.8 17:75195.0
|
||||||
|
0 0:2.962146016194456 1:-0.0020806634990109675 2:70.44143839144795 3:75611.73547021749 4:75325.23326503007 5:286.5022051874257 6:196.247052662327 7:180.51030505019742 8:86.15702349263971 9:89.10144283335401 10:80.26818481121109 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74613.8 17:75195.0
|
||||||
|
0 0:0.07221091863239322 1:0.0008945566033645215 2:71.78719899499852 3:75921.21562958296 4:75717.25954169601 5:203.95608788695245 6:196.44424850845394 7:15.023678756997015 8:80.42000141297376 9:73.18063004375063 10:94.89874415142003 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74613.8 17:75195.0
|
||||||
|
0 0:0.17097980889924044 1:-0.0017187153815193036 2:64.72116543197475 3:76071.1744138064 4:75853.90197082085 5:217.27244298554433 6:210.88758654394354 7:12.769712883201578 8:76.30774110694384 9:79.20237207880574 10:70.51847916322004 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74613.8 17:75195.0
|
||||||
|
0 0:0.17097980889924044 1:-0.0010333446839719488 2:65.59411187603648 3:76188.34448347535 4:75975.2095226975 5:213.1349607778393 6:214.86222311132093 7:-3.454524666963266 8:74.5121350294153 9:79.24859278358832 10:65.03921952106927 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74613.8 17:75195.0
|
||||||
|
0 0:0.17097980889924044 1:0.0008021383388160325 2:65.90098580976871 3:76429.55656537911 4:76241.57510899183 5:187.98145638727874 6:177.19376889998532 7:21.57537497458685 8:78.44847476904735 9:75.16443737497147 10:85.01654955719911 11:1 12:0 13:75071.5 14:74784.8 15:74928.15 16:74613.8 17:75195.0
|
||||||
|
1 0:0.2212815820454684 1:-0.002819229150021348 2:53.907393678169925 3:76476.28499821833 4:76377.47506006395 5:98.8099381543725 6:84.23289370846594 7:29.15408889181313 8:76.33613850722105 9:77.37429220689828 10:74.2598311078666 11:2 12:0 13:76235.6 14:75873.0 15:76054.3 16:75577.8 17:76750.4
|
||||||
|
0 0:0.3297262130703245 1:0.0003605443430067389 2:61.178537259558766 3:75942.74158318157 4:75909.17750459409 5:33.56407858748571 6:21.8698563050173 7:23.38844456493682 8:71.27351686274258 9:63.552777786851536 10:86.71499501452467 11:1 12:0 13:76046.0 14:75803.5 15:75924.75 16:75576.3 17:76350.2
|
||||||
|
0 0:0.8511395704033715 1:-0.0008381987777250863 2:63.09615906311892 3:76045.55449925516 4:75982.88968013434 5:62.66481912082236 6:22.813291157328404 7:79.7030559269879 8:85.99641183321476 9:77.16364588802381 10:103.66194372359666 11:1 12:0 13:76046.0 14:75803.5 15:75924.75 16:75576.3 17:76350.2
|
||||||
|
1 0:0.7054124130546913 1:0.0005484693375459849 2:67.44485582028892 3:76063.00111696549 4:76007.38945494029 5:55.61166202519962 6:24.620290546532537 7:61.98274295733417 8:83.52092047858056 9:75.88744406562807 10:98.78787330448554 11:1 12:0 13:76046.0 14:75803.5 15:75924.75 16:75576.3 17:76350.2
|
||||||
|
0 0:0.9554451763430589 1:0.004179299103504483 2:70.92267809353375 3:76508.09714436183 4:76343.61122141004 5:164.4859229517897 6:98.97407076568228 7:131.0237043722148 8:86.52712467182914 9:83.1387338373039 10:93.30390634087962 11:0
|
||||||
|
1 0:0.9554451763430589 1:0.0015436750901776904 2:63.66166813031982 3:76872.29628669494 4:76694.70387793076 5:177.59240876417607 6:175.18820669875004 7:4.808404130852068 8:71.76845911560554 9:68.74822262783506 10:77.80893209114649 11:0
|
||||||
|
0 0:0.44560717692333046 1:-0.00020154720196199894 2:54.98240946069254 3:76367.65669484333 4:76352.02676326361 5:15.629931579722324 6:10.27290527152678 7:10.71405261639109 8:75.18136505944788 9:72.8724534243463 10:79.79918832965103 11:0
|
||||||
|
0 0:0.811993327006089 1:-7.965931929160431e-05 2:69.27844427205365 3:76440.7562879981 4:76397.08837678074 5:43.66791121735878 6:23.719462735046953 7:39.89689696462365 8:74.31229525607819 9:71.96882467750538 10:78.9992364132238 11:0
|
||||||
|
1 0:0.9721162677640535 1:0.0006980470340177239 2:72.23765547338662 3:76534.1804174557 4:76461.60860114986 5:72.57181630584819 6:48.68958643850465 7:47.76445973468708 8:73.9643203146523 9:71.2625693205775 10:79.3678223028019 11:0
|
||||||
|
0 0:0.5130416268182056 1:0.0011968904342741008 2:75.70489150324345 3:76516.1858320701 4:76440.49676257109 5:75.6890694990143 6:54.454751411523645 7:42.4686361749813 8:80.78454031503098 9:76.07547214583775 10:90.20267665341743 11:0
|
||||||
|
0 0:0.6984650986389694 1:0.0007086202876426357 2:74.36431743453993 3:76621.89837776472 4:76515.86582645925 5:106.0325513054704 6:77.12372733831526 7:57.81764793431029 8:85.21259966543295 9:80.41786230905564 10:94.80207437818757 11:0
|
||||||
|
0 0:0.7503096588399862 1:0.0002432368450489867 2:76.35077822954524 3:76718.75791570544 4:76587.85660409622 5:130.90131160922465 6:99.84668928016671 7:62.10924465811587 8:91.03746745372015 9:86.61693926495093 10:99.87852383125858 11:0
|
||||||
|
0 0:0.7503096588399862 1:-0.00030297789561700093 2:61.07377852143011 3:76807.60187472963 4:76721.94381849279 5:85.65805623684719 6:77.32204035820502 7:16.672031757284344 8:70.19592810693605 9:70.36503938461334 10:69.85770555158149 11:0
|
||||||
|
0 0:4.840051761443731 1:-0.0025639578984321615 2:76.64783437947703 3:79023.91617242956 4:78400.68134753352 5:623.2348248960334 6:505.1832333297172 7:236.10318313263235 8:83.34705999027953 9:81.19156151494863 10:87.65805694094132 11:1 12:0 13:76700.0 14:76655.6 15:76677.8 16:76096.0 17:77121.9
|
||||||
|
0 0:0.18798593266897912 1:0.0017593593020789437 2:75.0068914928981 3:79591.06192321445 4:79458.05444914025 5:133.0074740741984 6:108.38490702866063 7:49.24513409107553 8:58.396731016675986 9:53.84012929836801 10:67.50993445329195 11:2 12:0 13:79547.3 14:79317.2 15:79432.25 16:78700.0 17:79882.8
|
||||||
|
1 0:0.18798593266897912 1:0.001395028194583287 2:68.92049646933245 3:79880.61403686179 4:79714.12747042111 5:166.4865664406825 6:157.96889305882135 7:17.035346763722316 8:60.326594594171105 9:58.71395581129501 10:63.551872159923306 11:2 12:0 13:79547.3 14:79317.2 15:79432.25 16:78700.0 17:79882.8
|
||||||
|
0 0:0.3921839454961069 1:0.0005661179047987551 2:75.27080466010632 3:81030.32591546184 4:80798.35087054421 5:231.9750449176354 6:149.06478454599593 7:165.8205207432789 8:84.61118447435962 9:80.4358229047053 10:92.96190761366825 11:1 12:0 13:80872.3 14:80403.7 15:80638.0 16:79978.2 17:81699.8
|
||||||
|
0 0:0.30099072886434103 1:0.0003327046194568241 2:66.91365356168421 3:81419.17295624905 4:81293.46053671105 5:125.712419538002 6:104.60909095463865 7:42.2066571667267 8:74.6910094698957 9:58.452150757304096 10:107.16872689507892 11:1 12:0 13:80872.3 14:80403.7 15:80638.0 16:79978.2 17:81699.8
|
||||||
|
0 0:0.9152565325408089 1:0.0024879618674806606 2:83.01892958817896 3:81827.39718702855 4:81581.78593658454 5:245.61125044400978 6:169.72709302420742 7:151.76831483960473 8:91.530489670413 9:88.69729583815463 10:97.19687733492978 11:2 12:0 13:81808.8 14:80978.1 15:81393.45000000001 16:80467.0 17:81944.6
|
||||||
|
0 0:0.9152565325408089 1:-0.0007598026701289355 2:58.937481037564496 3:82154.16512373142 4:82035.17218341905 5:118.99294031236786 6:132.48498783891554 7:-26.98409505309536 8:62.530910645073334 9:68.71493579424492 10:50.162860346730156 11:2 12:0 13:81808.8 14:80978.1 15:81393.45000000001 16:80467.0 17:81944.6
|
||||||
|
0 0:0.6129747129114754 1:-0.005343265034683323 2:50.18169969190123 3:81967.79040579082 4:81954.95047758172 5:12.839928209097707 6:-26.564903225538302 7:78.80966286927202 8:48.906171627111945 9:46.97881389233689 10:52.76088709666206 11:2 12:0 13:81808.8 14:80978.1 15:81393.45000000001 16:80467.0 17:82528.0
|
||||||
|
0 0:2.2592697648565876 1:0.002377103510102024 2:80.01159583970738 3:83182.25483558832 4:82694.76110134646 5:487.49373424185615 6:300.17708978782383 7:374.6332889080646 8:90.38481707983041 9:89.44455517282952 10:92.26534089383216 11:2 12:0 13:81808.8 14:80978.1 15:81393.45000000001 16:80467.0 17:82528.0
|
||||||
|
0 0:2.2592697648565876 1:0.002502830159694306 2:82.60294829665321 3:84013.78001318638 4:83375.05774689118 5:638.7222662951972 6:522.0118480484279 7:233.42083649353867 8:85.64423130275239 9:84.45622505969418 10:88.02024378886884 11:2 12:0 13:81808.8 14:80978.1 15:81393.45000000001 16:80467.0 17:82528.0
|
||||||
|
0 0:0.584112041475272 1:0.006757979776275451 2:73.7522970056251 3:85405.03233995332 4:84975.96135171092 5:429.070988242398 6:319.6570806480555 7:218.827815188685 8:81.82129081657827 9:84.02087598380568 10:77.42212048212346 11:3 12:0 13:84899.9 14:84248.6 15:84574.25 16:83897.2 17:84961.5
|
||||||
|
0 0:0.584112041475272 1:-0.0023899614740502916 2:69.13560030662637 3:86500.24482524976 4:85988.37275693814 5:511.87206831161166 6:472.70616245368865 7:78.33181171584602 8:77.07073279104873 9:72.54905387078828 10:86.11409063156961 11:3 12:0 13:84899.9 14:84248.6 15:84574.25 16:83897.2 17:84961.5
|
||||||
|
0 0:0.584112041475272 1:-0.00047260171834310756 2:68.39850717718842 3:86859.4158715003 4:86410.63886846497 5:448.77700303532765 6:465.94646176689713 7:-34.338917463138955 8:64.92619307998493 9:66.10845840420839 10:62.561662431538 11:3 12:0 13:84899.9 14:84248.6 15:84574.25 16:83897.2 17:84961.5
|
||||||
|
0 0:0.584112041475272 1:0.005812523345754134 2:79.33898267770093 3:87373.28946634133 4:86871.74051417793 5:501.5489521634008 6:440.479131988945 7:122.1396403489116 8:77.5410724314063 9:67.80466807011535 10:97.01388115398822 11:3 12:0 13:84899.9 14:84248.6 15:84574.25 16:83897.2 17:84961.5
|
||||||
|
0 0:1.9082262452282468 1:0.008511543901054784 2:75.63639049117776 3:88140.3131759499 4:87716.42147267057 5:423.89170327932516 6:241.202873222666 7:365.3776601133183 8:85.558176464221 9:73.76472116069995 10:109.14508707126313 11:3 12:0 13:84899.9 14:84248.6 15:84574.25 16:83897.2 17:84961.5
|
||||||
|
0 0:1.3094438393967482 1:0.0036210267582817255 2:78.25476212320017 3:88920.05880312869 4:88683.20357171682 5:236.8552314118715 6:113.59883573523095 7:246.5127913532811 8:88.0403456246858 9:77.21114038848017 10:109.69875609709703 11:4 12:0 13:88499.9 14:86657.4 15:87578.65 16:86497.9 17:89800.0
|
||||||
|
1 0:1.3094438393967482 1:-0.002345543356406861 2:63.98353130141358 3:89378.38330643068 4:89036.33943244127 5:342.04387398941617 6:266.88969679337345 7:150.30835439208545 8:76.8429611345666 9:78.05252146691146 10:74.42384046987686 11:4 12:0 13:88499.9 14:86657.4 15:87578.65 16:86497.9 17:89800.0
|
||||||
|
0 0:0.5688959043539753 1:0.006370056253699044 2:62.83025256700797 3:86813.57462725168 4:86688.89326503733 5:124.6813622143527 6:20.609019250930892 7:208.14468592684364 8:87.0585655936588 9:74.23401553734168 10:112.70766570629306 11:0
|
||||||
|
0 0:0.5688959043539753 1:0.0011293351667882685 2:60.97146395551443 3:87144.61623163785 4:86908.72874541457 5:235.88748622327694 6:138.71588272869775 7:194.34320698915838 8:81.81168906350096 9:80.2021247964137 10:85.03081759767548 11:0
|
||||||
|
0 0:0.5688959043539753 1:0.00041354938155573073 2:61.79312019803465 3:87375.05449555023 4:87090.50311168609 5:284.55138386413455 6:208.620895468063 7:151.8609767921431 8:81.17813137203512 9:77.19160793104362 10:89.15117825401813 11:0
|
||||||
|
0 0:0.5688959043539753 1:0.003344738851341765 2:69.72776801160273 3:87841.55049602695 4:87499.80662069147 5:341.74387533547997 6:244.07014433754725 7:195.34746199586544 8:86.98422071765367 9:74.40463351195667 10:112.14339512904766 11:0
|
||||||
|
0 0:0.5688959043539753 1:0.0007017828438313842 2:68.70249727402857 3:88337.55995975046 4:87883.9341573954 5:453.62580235506175 6:365.1586336841932 7:176.9343373417371 8:92.81032805494017 9:89.06411600161641 10:100.3027521615877 11:0
|
||||||
|
0 0:0.5688959043539753 1:-0.005742536985123597 2:63.177620268331474 3:89101.56715869416 4:88555.04243027764 5:546.5247284165234 6:508.45147670835314 7:76.14650341634058 8:78.8355310413258 9:86.42747824479589 10:63.651636634385596 11:0
|
||||||
|
1 0:4.80435037323525e-10 1:-0.002858737587720032 2:59.12981859436772 3:89471.98901307791 4:89163.46727821016 5:308.5217348677543 6:326.8999893180644 7:-36.75650890062025 8:79.71762891432824 9:81.12020001645746 10:76.9124867100698 11:0
|
||||||
|
0 0:0.5848000192197015 1:0.0012707535557208607 2:69.55122914868278 3:87605.02419737144 4:87492.86373240233 5:112.1604649691144 6:52.30667926325623 7:119.70757141171634 8:84.9001889338609 9:75.6692467245847 10:103.36207335241332 11:0
|
||||||
|
0 0:1.7622657719597334 1:-0.0035840816417477784 2:74.34132210248842 3:88643.71285274911 4:88236.60310656938 5:407.1097461797326 6:226.74333987833361 7:360.732812602798 8:85.71755888472777 9:78.2095335369662 10:100.73360958025091 11:0
|
||||||
|
0 0:1.7622657719597334 1:0.011572569515550326 2:79.81930656189142 3:89529.98370417758 4:88930.81022418696 5:599.1734799906117 6:456.1373026179423 7:286.07235474533877 8:86.99080267639442 9:84.25814689714585 10:92.45611423489157 11:0
|
||||||
|
0 0:1.7702839341569003 1:0.007993744886378568 2:81.42554623040826 3:90292.04893431124 4:89494.56183625848 5:797.487098052763 6:616.3000396546962 7:362.37411679613365 8:87.59831522127878 9:85.86366767300217 10:91.06761031783202 11:0
|
||||||
|
0 0:1.7702839341569003 1:-0.002721190659749994 2:68.64752456701251 3:91173.55667620346 4:90391.51020845017 5:782.0464677532873 6:761.4628446087546 7:41.16724628906536 8:80.54443011556674 9:79.74231083574205 10:82.14866867521613 11:0
|
||||||
|
0 0:1.7702839341569003 1:0.00030568223305735064 2:73.32734912689685 3:91844.85767051694 4:91004.77666546979 5:840.0810050471482 6:791.710455415361 7:96.74109926357437 8:88.3747301935052 9:85.23430296051943 10:94.65558465947672 11:0
|
||||||
|
1 0:1.7702839341569003 1:0.0058952398202534355 2:76.66521652741383 3:92256.84094649888 4:91388.35452918588 5:868.4864173130045 6:818.1925228671143 7:100.58778889178029 8:90.80584026458556 9:87.93243872139536 10:96.55264335096598 11:0
|
||||||
|
0 0:0.7699608273223219 1:-0.0010932634411158664 2:59.85558768222003 3:90099.51224546212 4:89911.9389450954 5:187.57330036671192 6:75.53881026332115 7:224.06898020678153 8:88.49284300955043 9:84.89242503695561 10:95.69367895474005 11:0
|
||||||
|
1 0:0.7699608273223219 1:0.0011039311908726602 2:60.37784493499365 3:90175.66971420661 4:89976.63242892268 5:199.0372852839355 6:118.67472513926953 7:160.72512028933193 8:82.63976187663043 9:84.24514893872237 10:79.42898775244657 11:0
|
||||||
|
1 0:0.24796716166070598 1:-0.0008895612443815748 2:60.25098551248252 3:91218.62547204334 4:91088.29203739905 5:130.33343464428617 6:84.92294579834072 7:90.8209776918909 8:81.50632692652262 9:71.84607460685493 10:100.82683156585801 11:1 12:0 13:91474.0 14:90500.0 15:90987.0 16:90370.0 17:91489.4
|
||||||
|
0 0:0.45820800937979766 1:0.0015084158154704 2:55.354601347256526 3:88955.8481604949 4:88956.40285461654 5:-0.5546941216307459 6:-86.2751602178502 7:171.4409321924389 8:63.2542316922064 9:56.77482511109693 10:76.21304485442533 11:0
|
||||||
|
1 0:0.6134773207920051 1:-0.00024425117497093224 2:61.874412706529654 3:89238.72725457113 4:89106.35005294016 5:132.37720163096674 6:17.609321538844547 7:229.5357601842444 8:86.60152526153512 9:77.66689189258169 10:104.47079199944196 11:0
|
||||||
|
0 0:0.9929381344766076 1:-6.61131835290117e-05 2:77.37768128786398 3:88745.83954475737 4:88412.20106796805 5:333.6384767893178 6:203.82950789894718 7:259.6179377807412 8:87.909014661776 9:87.53388973070187 10:88.65926452392426 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:88501.7
|
||||||
|
0 0:0.9929381344766076 1:0.0011779921504515125 2:70.83420175612522 3:89137.06084377083 4:88837.28037509006 5:299.7804686807649 6:296.5733807775974 7:6.414175806335038 8:71.80048060172538 9:65.80213989502316 10:83.79716201512983 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:88501.7
|
||||||
|
0 0:0.9929381344766076 1:0.0017571586599065365 2:68.64705523592269 3:89300.42323669206 4:89051.00880392294 5:249.4144327691174 6:259.4771080896143 7:-20.125350640993815 8:78.24677128631315 9:68.37615727746288 10:97.98799930401367 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:88501.7
|
||||||
|
0 0:0.9929381344766076 1:0.0 2:64.0924229840294 3:89385.51850232558 4:89202.60711564076 5:182.91138668482017 6:208.81919334618186 7:-51.81561332272338 8:65.7992140507638 9:61.94398689780685 10:73.50966835667768 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:88501.7
|
||||||
|
0 0:0.9929381344766076 1:-0.003349768029390596 2:72.47764200130398 3:89888.23929964937 4:89565.2450513268 5:322.994248322575 6:240.40015562799914 7:165.18818538915173 8:83.32698806359126 9:82.07364194054736 10:85.83368030967904 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:88501.7
|
||||||
|
0 0:0.6810660837940268 1:-0.005556852313465013 2:60.5244231471247 3:90056.19031397151 4:89812.76445086027 5:243.42586311124614 6:137.44593927758254 7:211.9598476673272 8:81.49945164799954 9:79.94329023346465 10:84.6117744770693 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:90780.0
|
||||||
|
0 0:0.6810660837940268 1:0.0031934411884657963 2:72.6587553877461 3:90510.55252174273 4:90135.35914915557 5:375.19337258716405 6:259.9814037785112 7:230.42393761730568 8:90.3108579531703 9:84.52528882302865 10:101.88199621345362 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:90780.0
|
||||||
|
0 0:0.6810660837940268 1:0.0005643803792505534 2:70.14336467138203 3:91028.28316156907 4:90611.45263357155 5:416.8305279975175 6:372.09184232612154 7:89.47737134279191 8:90.5329624379673 9:85.66218447399234 10:100.27451836591723 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:90780.0
|
||||||
|
1 0:3.997500139451534e-10 1:-0.0014804704363790494 2:63.54459401196565 3:91440.01632509391 4:91139.74138659451 5:300.2749384993949 6:314.6859970716165 7:-28.822117144443155 8:71.48871787787841 9:72.91910960419179 10:68.62793442525168 11:1 12:0 13:88497.3 14:87437.1 15:87967.20000000001 16:87111.0 17:90780.0
|
||||||
|
0 0:0.22253735028155905 1:0.003403171433242234 2:61.04165134651618 3:90627.86652954597 4:90600.93984201488 5:26.926687531085918 6:17.13716497073272 7:19.579045120706397 8:65.18812648564 9:58.426194929887515 10:78.71198959714496 11:1 12:0 13:90846.0 14:90422.0 15:90634.0 16:90415.1 17:90949.9
|
||||||
|
1 0:1.2762249712961928 1:0.0024053285255970468 2:75.30550500994462 3:90980.68000265883 4:90813.23580381359 5:167.4441988452454 6:86.28711048191029 7:162.31417672667024 8:87.94384842827664 9:76.9676913701065 10:109.89616254461694 11:1 12:0 13:90846.0 14:90422.0 15:90634.0 16:90415.1 17:90949.9
|
||||||
|
0 0:0.2524801143921269 1:-0.0012213249945810581 2:58.540580960051756 3:90672.58099798975 4:90625.32760832329 5:47.253389666453586 6:28.553079183641216 7:37.40062096562474 8:74.8175085493754 9:63.28974398513026 10:97.87303767786568 11:1 12:0 13:90792.5 14:90502.1 15:90647.3 16:90350.1 17:91000.0
|
||||||
|
0 0:0.49729640275115966 1:0.0018432359177105305 2:71.74766902052211 3:90830.53909848985 4:90736.35062299883 5:94.18847549102793 6:57.35548705618753 7:73.6659768696808 8:80.21478596191552 9:71.22092196437094 10:98.20251395700467 11:1 12:0 13:90792.5 14:90502.1 15:90647.3 16:90350.1 17:91000.0
|
||||||
|
1 0:1.555248545041293 1:-0.0016743933848447248 2:73.99012031364464 3:91446.28439053215 4:91131.62637231089 5:314.6580182212638 6:199.46625058349812 7:230.3835352755313 8:85.38414335689201 9:86.85364867723729 10:82.44513271620144 11:1 12:0 13:90792.5 14:90502.1 15:90647.3 16:90350.1 17:91000.0
|
||||||
|
1 0:1.433011136921745 1:-0.002575383393202448 2:72.45824936980686 3:91562.46349741983 4:91063.73885037086 5:498.72464704896265 6:291.2003996100536 7:415.04849487781814 8:88.80873506008831 9:85.91141726546016 10:94.60337064934458 11:0
|
||||||
|
0 0:0.1394423655426296 1:-0.0002842987279818836 2:62.26181051068596 3:91315.2825460754 4:91203.6301180919 5:111.65242798349936 6:98.73699841212763 7:25.830859142743464 8:71.69523865373793 9:79.6618958461507 10:55.761924268912395 11:1 12:0 13:91538.3 14:90966.9 15:91252.6 16:90280.0 17:92084.7
|
||||||
|
0 0:0.1394423655426296 1:-0.0010426233580316 2:64.39413134056204 3:91546.48005565854 4:91423.62587727912 5:122.85417837942077 6:105.06021673886748 7:35.58792328110658 8:70.11457787818715 9:62.612622048362624 10:85.11848953783618 11:1 12:0 13:91538.3 14:90966.9 15:91252.6 16:90280.0 17:92084.7
|
||||||
|
0 0:0.08802824777883121 1:0.0018086729134887776 2:68.46038901545913 3:91643.82134737278 4:91562.86476204453 5:80.95658532825473 6:62.03971256964398 7:37.8337455172215 8:79.08243236463863 9:63.098538347096394 10:111.05022039972312 11:1 12:0 13:91538.3 14:90966.9 15:91252.6 16:90280.0 17:92084.7
|
||||||
|
0 0:0.10433210567784994 1:0.0023764589998170075 2:64.53120569027124 3:91758.06780669653 4:91656.75001911742 5:101.31778757911525 6:83.997845173155 7:34.639884811920496 8:71.80734977847072 9:69.44527778362345 10:76.53149376816526 11:1 12:0 13:91538.3 14:90966.9 15:91252.6 16:90280.0 17:92084.7
|
||||||
|
1 0:0.10433210567784994 1:-0.00019998000199973677 2:61.54996163583123 3:91919.44631007858 4:91801.40332457001 5:118.04298550856765 6:111.00484365169703 7:14.076283713741248 8:74.84228372663954 9:75.3610514385554 10:73.80474830280778 11:1 12:0 13:91538.3 14:90966.9 15:91252.6 16:90280.0 17:92084.7
|
||||||
|
0 0:0.6626155991044717 1:-0.0003580425994975053 2:63.96404524687051 3:92229.00273574657 4:92131.37786185899 5:97.62487388758746 6:74.31117114788614 7:46.627405479402626 8:71.41600690892939 9:64.02810177572628 10:86.19181717533561 11:1 12:0 13:92459.2 14:91500.0 15:91979.6 16:91334.4 17:93985.9
|
||||||
|
0 0:0.6626155991044717 1:-0.0007038513189655231 2:65.29099993632042 3:92423.95616048042 4:92283.02140731683 5:140.93475316358672 6:113.96634373125963 7:53.936818864654185 8:81.71231622919444 9:78.88116903688817 10:87.374610613807 11:1 12:0 13:92459.2 14:91500.0 15:91979.6 16:91334.4 17:93985.9
|
||||||
|
0 0:0.09276542104735572 1:-0.0005399841561535648 2:63.87918682467162 3:92560.15762066885 4:92466.48921441544 5:93.6684062534041 6:86.27346757356958 7:14.789877359669049 8:67.02538763284679 9:50.94373393584482 10:99.18869502685072 11:1 12:0 13:92459.2 14:91500.0 15:91979.6 16:91334.4 17:93985.9
|
||||||
|
0 0:0.2829638110407676 1:0.0005722048278168674 2:72.18305831826778 3:92832.25336817323 4:92687.95942402269 5:144.29394415054412 6:121.73704732806797 7:45.113793644952295 8:85.13389239132994 9:85.10273592275561 10:85.19620532847858 11:1 12:0 13:92459.2 14:91500.0 15:91979.6 16:91334.4 17:93985.9
|
||||||
|
0 0:0.36354160875118624 1:-0.00013946567481539572 2:67.7275326607428 3:93108.0665461701 4:92928.3910844074 5:179.67546176270116 6:166.68429211984795 7:25.982339285706416 8:78.00194894878216 9:84.00947650855137 10:65.98689382924371 11:1 12:0 13:92459.2 14:91500.0 15:91979.6 16:91334.4 17:93985.9
|
||||||
|
0 0:0.36354160875118624 1:-0.001620026305377632 2:66.43567791766714 3:93251.35868850799 4:93052.67012772185 5:198.68856078613317 6:182.59653404523044 7:32.18405348180545 8:70.68644701502085 9:78.53368102395832 10:54.99197899714588 11:1 12:0 13:92459.2 14:91500.0 15:91979.6 16:91334.4 17:93985.9
|
||||||
|
0 0:1.0549808985144373 1:-0.0009021830694937205 2:57.91064528691919 3:93502.39121540924 4:93399.28134560854 5:103.1098698006972 6:79.15647220135001 7:47.90679519869437 8:71.69609106960056 9:75.6415606497373 10:63.805151909327066 11:2 12:0 13:93560.1 14:92982.2 15:93271.15 16:92831.7 17:93712.5
|
||||||
|
0 0:2.0040236454811544 1:0.002931305899971519 2:70.1802536674862 3:93737.1060029948 4:93579.29549029283 5:157.81051270196622 6:109.907953084799 7:95.80511923433443 8:77.81415376852209 9:70.10195496301733 10:93.2385513795316 11:2 12:0 13:93560.1 14:92982.2 15:93271.15 16:92831.7 17:93712.5
|
||||||
|
0 0:2.7283538530333598 1:0.001832430196922651 2:73.76838167743693 3:93974.10172507331 4:93734.04854116881 5:240.05318390449975 6:160.98472448061017 7:158.13691884777916 8:87.19813765971168 9:79.80262986051363 10:101.98915325810776 11:2 12:0 13:93560.1 14:92982.2 15:93271.15 16:92831.7 17:93712.5
|
||||||
|
0 0:2.7283538530333598 1:-8.461955050125558e-06 2:69.56906994079132 3:94187.77677100936 4:93910.13137186266 5:277.64539914669876 6:219.49653415551626 7:116.29772998236501 8:84.82241923001364 9:82.24377814941536 10:89.9797013912102 11:2 12:0 13:93560.1 14:92982.2 15:93271.15 16:92831.7 17:93712.5
|
||||||
|
1 0:0.09333401229765471 1:0.0006068973087534646 2:60.81515890187208 3:94531.0239399099 4:94376.02696533312 5:154.99697457677394 6:147.6171980078813 7:14.759553137785247 8:77.34440095339596 9:67.23769496703113 10:97.55781292612562 11:2 12:0 13:93560.1 14:92982.2 15:93271.15 16:92831.7 17:93712.5
|
||||||
|
0 0:0.9710876562488003 1:0.0004914574984181166 2:74.54404818293597 3:94542.73802496208 4:94369.36838748184 5:173.36963748023845 6:92.10733762856238 7:162.52459970335215 8:89.90741886695406 9:89.46441969325868 10:90.79341721434483 11:0
|
||||||
|
0 0:1.7199692169877376 1:-0.0004849173968295827 2:74.37646092896551 3:95054.67719233817 4:94808.38750401336 5:246.2896883248177 6:100.21636258075556 7:292.14665148812423 8:88.55955003038892 9:85.86695580719275 10:93.94473847678128 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
0 0:2.014585208339958 1:-0.003214206876917392 2:74.34301873034912 3:96018.57191878253 4:95484.27452370005 5:534.2973950824817 6:381.5689203073896 7:305.45694955018416 8:86.19402591345315 9:87.78725172180854 10:83.00757429674232 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
0 0:2.014585208339958 1:0.007052063920551226 2:78.89006494235532 3:96639.38722624723 4:96086.30501770579 5:553.0822085414402 6:492.6386759192662 7:120.88706524434804 8:78.39868113446977 9:74.2440862621722 10:86.7078708790649 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
0 0:2.014585208339958 1:0.0011303171747805017 2:74.89407153676733 3:97306.87057947036 4:96709.38141021413 5:597.4891692562232 6:571.3889057476905 7:52.2005270170655 8:85.01346677709628 9:81.2061609340746 10:92.62807846313964 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
0 0:2.014585208339958 1:0.004004302277880558 2:79.32307964886022 3:97774.62565831131 4:97588.18199278416 5:186.44366552715655 6:129.7139384608966 7:113.45945413251991 8:85.58892429784919 9:78.1944152754863 10:100.37794234257495 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
0 0:0.6312567061751195 1:-0.0012596327850185455 2:66.10599616479925 3:97970.42538198744 4:97671.1666107216 5:299.25877126584237 6:252.5165224269055 7:93.48449767787372 8:82.00545456763402 9:82.10061397544759 10:81.81513575200688 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
1 0:0.6312567061751195 1:-0.0037027110398641276 2:62.26620331108969 3:98305.77692217931 4:98013.26088410532 5:292.51603807399806 6:270.0978473058095 7:44.836381536377075 8:67.95047309065271 9:68.0205956475814 10:67.81022797679532 11:1 12:0 13:94626.8 14:94008.7 15:94317.75 16:93750.3 17:94940.0
|
||||||
|
0 0:0.7026729548950675 1:0.00019470523452851002 2:62.33950162867218 3:98369.773555216 4:98295.81018335595 5:73.96337186005258 6:20.087299387561366 7:107.75214494498242 8:82.44159529484574 9:80.13222307682658 10:87.06033973088407 11:0
|
||||||
|
0 0:0.9918431317511824 1:-0.0008074596774194135 2:70.46459715269634 3:98750.90144931455 4:98546.66341203445 5:204.23803728009807 6:128.1904079024323 7:152.09525875533154 8:75.66557865717077 9:75.64187703106646 10:75.71298190937938 11:0
|
||||||
|
1 0:0.6968324196566822 1:0.00018406203795905284 2:68.45728292077374 3:99171.65545433354 4:99040.35193177128 5:131.30352256225888 6:77.87526172400175 7:106.85652167651426 8:85.63674553520747 9:81.91418443127245 10:93.08186774307751 11:1 12:0 13:98767.0 14:98443.0 15:98605.0 16:97877.1 17:99414.0
|
||||||
|
0 0:0.16469368763813444 1:0.0012267096384329028 2:65.5577518511194 3:99107.89574260893 4:98988.02144898108 5:119.8742936278577 6:97.19404034297574 7:45.36050656976391 8:85.30422648527116 9:71.33332885284432 10:113.24602175012484 11:0
|
||||||
|
1 0:0.23578787766534304 1:-0.003461482844220334 2:53.24590475215271 3:99274.70386693816 4:99129.1304494204 5:145.57341751776403 6:131.9928070665183 7:27.161220902491436 8:68.28821883866351 9:78.5968596206404 10:47.67093727470973 11:0
|
||||||
|
1 0:0.2517916481282 1:-0.0008599861592815777 2:54.28834941433768 3:98748.6867135477 4:98701.67375200789 5:47.012961539803655 6:40.480139971438476 7:13.065643136730358 8:72.42332602623728 9:70.19837299699779 10:76.87323208471625 11:1 12:0 13:98835.0 14:98627.2 15:98731.1 16:98314.4 17:98850.0
|
||||||
|
0 0:0.949897547327267 1:0.0011803444163603876 2:72.50868570047804 3:98042.13893981153 4:97924.3831542549 5:117.7557855566265 6:69.73851281699547 7:96.03454547926208 8:79.7858810404768 9:74.52078677570518 10:90.31606957002003 11:0
|
||||||
|
0 0:0.949897547327267 1:0.0012536637153756083 2:70.45091210483807 3:98283.7808882602 4:98143.85668873992 5:139.92419952027558 6:117.03026088785323 7:45.787877264844695 8:72.9111341502205 9:61.36136253970748 10:96.01067737124656 11:0
|
||||||
|
1 0:0.949897547327267 1:-0.0007434808495359372 2:61.27782759178805 3:98437.68211880502 4:98284.00225060733 5:153.6798681976943 6:143.25928042365055 7:20.841175548087506 8:75.12080760952567 9:74.8575524400456 10:75.6473179484858 11:0
|
||||||
|
0 0:1.0863285867295422 1:2.0665704333701527e-05 2:69.00615889182757 3:96524.48929828314 4:96441.94536863687 5:82.54392964627186 6:44.93962329758697 7:75.20861269736979 8:84.35710522885708 9:78.49285736991911 10:96.08560094673302 11:0
|
||||||
|
0 0:1.0863285867295422 1:-0.0006326892907274679 2:65.78526812112511 3:96717.95851560643 4:96584.46383110278 5:133.49468450364657 6:103.25887436425538 7:60.47162027878238 8:89.3951458754922 9:89.63963477233355 10:88.90616808180954 11:0
|
||||||
|
0 0:1.276224519215689 1:0.0019740688446270916 2:84.58591158613923 3:97255.50592441532 4:96991.4659498672 5:264.03997454812634 6:175.2120219478316 7:177.65590520058947 8:95.51763352796127 9:91.42999054364768 10:103.69291949658844 11:0
|
||||||
|
0 0:1.276224519215689 1:0.0007298712800231797 2:75.68285648307032 3:97871.66211617076 4:97504.70330683285 5:366.9588093379134 6:307.57089346310937 7:118.77583174960807 8:88.86587723769051 9:87.6287552950341 10:91.34012112300337 11:0
|
||||||
|
1 0:1.850944455782219 1:-0.00028534365697237317 2:72.72410134467823 3:98493.45008028422 4:98349.64497712905 5:143.80510315517313 6:85.74729112277726 7:116.11562406479175 8:81.92504862483159 9:83.33246110610273 10:79.11022366228931 11:1 12:0 13:97782.0 14:97355.9 15:97568.95 16:96929.9 17:98429.7
|
||||||
|
1 0:0.2981545848927614 1:7.372782635622337e-05 2:65.32002699868971 3:94748.70643991182 4:94635.81509612693 5:112.89134378489689 6:69.17861651929563 7:87.42545453120252 8:85.88342261567202 9:84.76420939876887 10:88.1218490494783 11:0
|
||||||
|
0 0:0.9689662536151736 1:-0.0018679608094496214 2:55.43219114332549 3:92402.03079817319 4:92407.71129309433 5:-5.680494921136415 6:-99.49424254117821 7:187.6274952400836 8:70.85932870659184 9:60.249545505390984 10:92.07889510899355 11:0
|
||||||
|
0 0:1.3638292149040097 1:-0.0008183559923448947 2:66.53686340261805 3:92771.74178720303 4:92585.65468849812 5:186.08709870491293 6:54.0433570158621 7:264.08748337810164 8:84.82107250887627 9:73.78864660951996 10:106.88592430758888 11:1 12:0 13:92739.0 14:91875.5 15:92307.25 16:91809.9 17:92994.4
|
||||||
|
0 0:1.3638292149040097 1:-0.0006623863028356788 2:64.67972094398843 3:93017.26659934787 4:92752.17595426424 5:265.0906450836337 6:148.29457276450563 7:233.59214463825617 8:86.47393293595903 9:82.52831565256612 10:94.36516750274481 11:1 12:0 13:92739.0 14:91875.5 15:92307.25 16:91809.9 17:92994.4
|
||||||
|
0 0:1.3638292149040097 1:-0.0029225765604074905 2:65.38359859274291 3:93946.55420903416 4:93528.46161762753 5:418.092591406632 6:309.2205072729711 7:217.7441682673218 8:88.55267243536429 9:88.81009143833336 10:88.03783442942614 11:1 12:0 13:92739.0 14:91875.5 15:92307.25 16:91809.9 17:92994.4
|
||||||
|
0 0:1.1521964212971305 1:0.00040532153397306064 2:77.15993975998894 3:94412.8783069633 4:94109.63456033583 5:303.2437466274714 6:244.21492551607707 7:118.05764222278867 8:89.34876005492463 9:88.6272778758655 10:90.79172441304286 11:2 12:0 13:93465.0 14:93167.2 15:93316.1 16:92903.4 17:93939.0
|
||||||
|
0 0:1.1521964212971305 1:1.580701114710426e-05 2:76.04911579223455 3:94611.02715914183 4:94295.41347530807 5:315.6136838337552 6:282.74263481332196 7:65.7420980408665 8:87.83697902481973 9:86.42656278916834 10:90.65781149612252 11:2 12:0 13:93465.0 14:93167.2 15:93316.1 16:92903.4 17:93939.0
|
||||||
|
0 0:1.1521964212971305 1:0.0033235489558971106 2:77.60093684733903 3:95173.3345517946 4:94780.70501677459 5:392.6295350200089 6:315.239769642591 7:154.77953075483583 8:87.5892619430619 9:78.57429800503911 10:105.61918981910748 11:2 12:0 13:93465.0 14:93167.2 15:93316.1 16:92903.4 17:93939.0
|
||||||
|
0 0:1.1521964212971305 1:0.0002038632077876351 2:69.84664585667724 3:95708.27382494965 4:95294.68043842596 5:413.5933865236875 6:380.97502920774906 7:65.23671463187691 8:84.0961927802407 9:82.53024294240451 10:87.22809245591307 11:2 12:0 13:93465.0 14:93167.2 15:93316.1 16:92903.4 17:93939.0
|
||||||
|
0 0:0.22615254365788995 1:0.002066536447510537 2:66.22770737445695 3:96142.59575081246 4:95884.91687984468 5:257.6788709677785 6:242.14150380834909 7:31.074734318858816 8:81.78275750757624 9:81.70507096565129 10:81.93813059142613 11:2 12:0 13:93465.0 14:93167.2 15:93316.1 16:92903.4 17:93939.0
|
||||||
|
1 0:0.8410976074006647 1:-0.0021408740359896874 2:66.76759745287616 3:96854.77913944206 4:96585.35468686094 5:269.42445258112275 6:217.77368112161986 7:103.30154291900578 8:88.79298679110451 9:91.4421872571362 10:83.49458585904114 11:3 12:0 13:96389.7 14:95927.2 15:96158.45 16:95356.8 17:96607.9
|
||||||
|
0 0:0.526478030959085 1:0.000762336199675554 2:68.03800787025195 3:95459.28394326963 4:95319.0483503864 5:140.23559288324032 6:92.27293129278807 7:95.92532318090448 8:89.87358015727588 9:86.03408186315703 10:97.55257674551356 11:1 12:0 13:95521.5 14:94863.8 15:95192.65 16:94768.0 17:96284.0
|
||||||
|
0 0:0.526478030959085 1:7.940255843392316e-05 2:68.70891500108357 3:95533.02578186762 4:95376.06971055074 5:156.95607131687575 6:114.48282124255692 7:84.94650014863765 8:89.76433083380067 9:88.75901955646776 10:91.77495338846649 11:1 12:0 13:95521.5 14:94863.8 15:95192.65 16:94768.0 17:96284.0
|
||||||
|
0 0:0.526478030959085 1:-0.000441976971332047 2:70.62681224307185 3:95727.97180658096 4:95544.49191419821 5:183.4798923827475 6:159.12179254847612 7:48.71619966854274 8:78.29959683891056 9:85.04267901366542 10:64.81343248940084 11:1 12:0 13:95521.5 14:94863.8 15:95192.65 16:94768.0 17:96284.0
|
||||||
|
1 0:0.8050722616990454 1:0.0009066670526291964 2:74.96028002495004 3:96401.40018971311 4:96137.54004852058 5:263.8601411925338 6:197.34428373092646 7:133.03171492321462 8:79.85704134801713 9:78.06642144994905 10:83.43828114415331 11:1 12:0 13:95521.5 14:94863.8 15:95192.65 16:94768.0 17:96284.0
|
||||||
|
1 0:1.80050506797843 1:-0.0012396798929598034 2:78.93175616420424 3:98080.3023159576 4:97699.13332449224 5:381.16899146535434 6:264.7203369232112 7:232.89730908428623 8:92.8870901192802 9:92.84382866090927 10:92.9736130360221 11:0
|
||||||
|
0 0:0.6521658268009465 1:0.0006805446835932835 2:64.6183066132913 3:96772.22912901083 4:96740.43927998589 5:31.789849024935393 6:9.469418128507638 7:44.64086179285551 8:79.02294705931656 9:71.04443048107258 10:94.97998021580455 11:0
|
||||||
|
0 0:0.8667508131374885 1:0.001590716729742103 2:72.03307715888255 3:96909.34788192506 4:96831.32411468895 5:78.02376723611087 6:46.37510614231933 7:63.29732218758308 8:79.37629809523006 9:71.64522583619782 10:94.83844261329452 11:0
|
||||||
|
0 0:0.08938519461468615 1:-0.00041677094558401615 2:53.89697800549618 3:96626.23447850425 4:96599.78364541708 5:26.45083308717585 6:23.00779941904986 7:6.886067336251983 8:74.01377721815423 9:66.86297940208468 10:88.31537285029333 11:0
|
||||||
|
0 0:0.29341218834922705 1:0.0010393494603139145 2:61.80933010141555 3:96682.12945748867 4:96647.19847419242 5:34.93098329624627 6:23.62902162933134 7:22.603923333829854 8:86.577940432156 9:79.4271187594588 10:100.87958377755041 11:0
|
||||||
|
0 0:0.29341218834922705 1:0.0005581626113741136 2:60.275971539931454 3:96716.0468676549 4:96674.12686258947 5:41.92000506543263 6:32.14881867527593 7:19.5423727803134 8:77.06775063003884 9:76.77583006844156 10:77.65159175323339 11:0
|
||||||
|
0 0:0.7855140836132714 1:0.0006880750507287414 2:68.1369713013947 3:96795.46186553175 4:96732.1471299472 5:63.31473558454309 6:33.057471522791346 7:60.51452812350348 8:76.70563293530176 9:60.306792800011635 10:109.50331320588202 11:0
|
||||||
|
0 0:0.19073417129022527 1:-0.00020610078946907407 2:61.63417724450724 3:96950.2256931182 4:96900.47970160311 5:49.74599151509756 6:43.974897319233115 7:11.542188391728885 8:76.83856638155723 9:69.38461737385892 10:91.74646439695385 11:0
|
||||||
|
1 0:0.23986809902012743 1:0.00010711059890282423 2:65.82929882294374 3:97010.73425004362 4:96960.24632073448 5:50.487929309136234 6:45.10377612686424 7:10.768306364543989 8:72.58211832334145 9:63.11176750537697 10:91.52281995927042 11:0
|
||||||
|
0 0:0.4092636823636797 1:0.0008436037425329065 2:64.17711354085944 3:96422.49736427453 4:96355.06019176554 5:67.43717250898771 6:47.13561466657387 7:40.603115684827685 8:81.31234694275597 9:71.66883747461603 10:100.59936587903584 11:0
|
||||||
|
0 0:0.9174627804639611 1:0.0019177445589032306 2:79.15110474810984 3:96699.05732014644 4:96591.94431033469 5:107.11300981175737 6:56.879166658831764 7:100.4676863058512 8:84.37080941280887 9:86.83779353150413 10:79.43684117541835 11:1 12:0 13:96535.0 14:96324.8 15:96429.9 16:96249.1 17:96585.0
|
||||||
|
0 0:0.9174627804639611 1:0.0012814724385721748 2:70.04266235083006 3:97074.45475057779 4:97031.6351661553 5:42.819584422482876 6:13.037192558066238 7:59.56478372883328 8:78.42121505757052 9:61.334926861500335 10:112.59379144971089 11:1 12:0 13:96535.0 14:96324.8 15:96429.9 16:96249.1 17:96585.0
|
||||||
|
0 0:0.5815263347959447 1:-0.0013033187495516982 2:58.83268781833281 3:97394.562569417 4:97328.50161041434 5:66.06095900265791 6:38.217968511252245 7:55.68598098281133 8:82.55587880569081 9:83.88142144243182 10:79.9047935322088 11:2 12:0 13:97433.0 14:97096.1 15:97264.55 16:97000.0 17:97481.3
|
||||||
|
0 0:1.1952540421950948 1:-0.0004895337880512281 2:75.0964721911391 3:97544.47673920581 4:97389.10031569256 5:155.37642351325485 6:91.16109000647194 7:128.43066701356582 8:87.92953611041787 9:91.24263068413843 10:81.30334696297675 11:2 12:0 13:97433.0 14:97096.1 15:97264.55 16:96852.7 17:97632.8
|
||||||
|
1 0:1.2761570176164585 1:-0.002804621870141712 2:58.83483973448876 3:97720.67899187346 4:97606.18844316294 5:114.4905487105134 6:51.57594148381584 7:125.82921445339511 8:79.66387326590922 9:80.58350763711704 10:77.82460452349358 11:2 12:0 13:97433.0 14:97096.1 15:97264.55 16:96852.7 17:97933.0
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
import json
|
||||||
|
from typing import Dict, TypedDict
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py"))
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py/Debug"))
|
||||||
|
import xgboost as xgb
|
||||||
|
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE, BSP_TYPE, MACD_ALGO
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Plot.PlotDriver import CPlotDriver
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
from FeatureDict import FeatureDict
|
||||||
|
class T_SAMPLE_INFO(TypedDict):
|
||||||
|
feature: CFeatures
|
||||||
|
is_buy: bool
|
||||||
|
open_time: CTime
|
||||||
|
|
||||||
|
|
||||||
|
def plot(chan, plot_marker):
|
||||||
|
plot_config = {
|
||||||
|
"plot_kline": True,
|
||||||
|
"plot_bi": True,
|
||||||
|
"plot_seg": True,
|
||||||
|
"plot_zs": True,
|
||||||
|
"plot_bsp": True,
|
||||||
|
"plot_marker": True,
|
||||||
|
"plot_macd": True,
|
||||||
|
}
|
||||||
|
plot_para = {
|
||||||
|
"figure": {
|
||||||
|
"x_range": 4000,
|
||||||
|
},
|
||||||
|
"marker": {
|
||||||
|
"markers": plot_marker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot_driver = CPlotDriver(
|
||||||
|
chan,
|
||||||
|
plot_config=plot_config,
|
||||||
|
plot_para=plot_para,
|
||||||
|
)
|
||||||
|
plot_driver.save2img("sell.png")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
本demo主要演示如何记录策略产出的买卖点的特征
|
||||||
|
然后将这些特征作为样本,训练一个模型(以XGB为demo)
|
||||||
|
用于预测买卖点的准确性
|
||||||
|
|
||||||
|
请注意,demo训练预测都用的是同一份数据,这是不合理的,仅仅是为了演示
|
||||||
|
"""
|
||||||
|
code = "BTC/USDT:USDT"
|
||||||
|
begin_time = "2024-12-1"
|
||||||
|
end_time = "2024-12-4"
|
||||||
|
data_src = DATA_SRC.CCXT
|
||||||
|
lv_list = [KL_TYPE.K_1M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True, # 打开开关!
|
||||||
|
"bi_strict": True,
|
||||||
|
"skip_step": 0,
|
||||||
|
"divergence_rate": float("inf"),
|
||||||
|
"bsp2_follow_1": False,
|
||||||
|
"bsp3_follow_1": False,
|
||||||
|
"min_zs_cnt": 0,
|
||||||
|
"bs1_peak": False,
|
||||||
|
"macd_algo": "peak",
|
||||||
|
"bs_type": '1,2,3a,1p,2s,3b',
|
||||||
|
"print_warning": True,
|
||||||
|
"zs_algo": "normal",
|
||||||
|
"cal_rsi": True,
|
||||||
|
"cal_kdj": True,
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time,
|
||||||
|
end_time=end_time,
|
||||||
|
data_src=data_src,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ,
|
||||||
|
)
|
||||||
|
|
||||||
|
bsp_dict: Dict[int, T_SAMPLE_INFO] = {} # 存储策略产出的bsp的特征
|
||||||
|
|
||||||
|
# 跑策略,保存买卖点的特征
|
||||||
|
index = 0
|
||||||
|
for chan_snapshot in chan.step_load():
|
||||||
|
last_klu = chan_snapshot[0][-1][-1]
|
||||||
|
bsp_list = chan_snapshot.get_bsp()
|
||||||
|
if not bsp_list:
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1]
|
||||||
|
cur_lv_chan = chan_snapshot[0]
|
||||||
|
if BSP_TYPE.T1 in last_bsp.type or BSP_TYPE.T1P in last_bsp.type:
|
||||||
|
if last_bsp.klu.idx not in bsp_dict and cur_lv_chan[-2].idx == last_bsp.klu.klc.idx and not last_bsp.is_buy:
|
||||||
|
# 假如策略是:买卖点分形第三元素出现时交易
|
||||||
|
bsp_dict[last_bsp.klu.idx] = {
|
||||||
|
"feature": last_bsp.features,
|
||||||
|
"is_buy": last_bsp.is_buy,
|
||||||
|
"open_time": last_klu.time,
|
||||||
|
}
|
||||||
|
bsp_dict[last_bsp.klu.idx]['feature'].add_feat(FeatureDict().stragety_feature(last_bsp)) # 开仓K线特征
|
||||||
|
print(index, last_bsp.klu.time, last_bsp.is_buy)
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
# 生成libsvm样本特征
|
||||||
|
bsp_academy = [bsp.klu.idx for bsp in chan.get_bsp()]
|
||||||
|
feature_meta = {} # 特征meta
|
||||||
|
cur_feature_idx = 0
|
||||||
|
plot_marker = {}
|
||||||
|
fid = open("sell_feature.libsvm", "w")
|
||||||
|
for bsp_klu_idx, feature_info in bsp_dict.items():
|
||||||
|
label = int(bsp_klu_idx in bsp_academy) # 以买卖点识别是否准确为label
|
||||||
|
features = [] # List[(idx, value)]
|
||||||
|
for feature_name, value in feature_info['feature'].items():
|
||||||
|
if feature_name not in feature_meta:
|
||||||
|
feature_meta[feature_name] = cur_feature_idx
|
||||||
|
cur_feature_idx += 1
|
||||||
|
features.append((feature_meta[feature_name], value))
|
||||||
|
features.sort(key=lambda x: x[0])
|
||||||
|
feature_str = " ".join([f"{idx}:{value}" for idx, value in features])
|
||||||
|
fid.write(f"{label} {feature_str}\n")
|
||||||
|
plot_marker[feature_info["open_time"].to_str()] = ("√" if label else "×", "down" if feature_info["is_buy"] else "up")
|
||||||
|
fid.close()
|
||||||
|
|
||||||
|
with open("feature.meta", "w") as fid:
|
||||||
|
# meta保存下来,实盘预测时特征对齐用
|
||||||
|
fid.write(json.dumps(feature_meta))
|
||||||
|
|
||||||
|
# 画图检查label是否正确
|
||||||
|
plot(chan, plot_marker)
|
||||||
|
|
||||||
|
# load sample file & train model
|
||||||
|
dtrain = xgb.DMatrix("sell_feature.libsvm?format=libsvm") # load sample
|
||||||
|
param = {'max_depth': 2, 'eta': 0.3, 'objective': 'binary:logistic', 'eval_metric': 'auc'}
|
||||||
|
evals_result = {}
|
||||||
|
bst = xgb.train(
|
||||||
|
param,
|
||||||
|
dtrain=dtrain,
|
||||||
|
num_boost_round=50,
|
||||||
|
evals=[(dtrain, "train")],
|
||||||
|
evals_result=evals_result,
|
||||||
|
verbose_eval=True,
|
||||||
|
)
|
||||||
|
bst.save_model("sell_model.json")
|
||||||
|
|
||||||
|
# load model
|
||||||
|
model = xgb.Booster()
|
||||||
|
model.load_model("sell_model.json")
|
||||||
|
# predict
|
||||||
|
print(model.predict(dtrain))
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from Common.CEnum import AUTYPE, BSP_TYPE, DATA_SRC, FX_TYPE, KL_TYPE
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
一个极其弱智的策略,只交易一类买卖点,底分型形成后就开仓,直到一类卖点顶分型形成后平仓
|
||||||
|
只用做展示如何自己实现策略,做回测用~
|
||||||
|
"""
|
||||||
|
code = "sz.000001"
|
||||||
|
begin_time = "2021-01-01"
|
||||||
|
end_time = None
|
||||||
|
data_src = DATA_SRC.BAO_STOCK
|
||||||
|
lv_list = [KL_TYPE.K_DAY]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True, # 打开开关!
|
||||||
|
"divergence_rate": 0.8,
|
||||||
|
"min_zs_cnt": 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time,
|
||||||
|
end_time=end_time,
|
||||||
|
data_src=data_src,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ,
|
||||||
|
)
|
||||||
|
|
||||||
|
is_hold = False
|
||||||
|
last_buy_price = None
|
||||||
|
for chan_snapshot in chan.step_load(): # 每增加一根K线,返回当前静态精算结果
|
||||||
|
bsp_list = chan_snapshot.get_bsp() # 获取买卖点列表
|
||||||
|
if not bsp_list: # 为空
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1] # 最后一个买卖点
|
||||||
|
if BSP_TYPE.T1 not in last_bsp.type and BSP_TYPE.T1P not in last_bsp.type: # 假如只做1类买卖点
|
||||||
|
continue
|
||||||
|
cur_lv_chan = chan_snapshot[0]
|
||||||
|
if last_bsp.klu.klc.idx != cur_lv_chan[-2].idx:
|
||||||
|
continue
|
||||||
|
if cur_lv_chan[-2].fx == FX_TYPE.BOTTOM and last_bsp.is_buy and not is_hold: # 底分型形成后开仓
|
||||||
|
last_buy_price = cur_lv_chan[-1][-1].close # 开仓价格为最后一根K线close
|
||||||
|
print(f'{cur_lv_chan[-1][-1].time}:buy price = {last_buy_price}')
|
||||||
|
is_hold = True
|
||||||
|
elif cur_lv_chan[-2].fx == FX_TYPE.TOP and not last_bsp.is_buy and is_hold: # 顶分型形成后平仓
|
||||||
|
sell_price = cur_lv_chan[-1][-1].close
|
||||||
|
print(f'{cur_lv_chan[-1][-1].time}:sell price = {sell_price}, profit rate = {(sell_price-last_buy_price)/last_buy_price*100:.2f}%')
|
||||||
|
is_hold = False
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py"))
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py/Debug"))
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from Common.CEnum import AUTYPE, BSP_TYPE, DATA_SRC, FX_TYPE, KL_TYPE
|
||||||
|
from DataAPI.ccxt import CCXT
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
一个极其弱智的策略,只交易一类买卖点,底分型形成后就开仓,直到一类卖点顶分型形成后平仓
|
||||||
|
只用做展示如何自己实现策略,做回测用~
|
||||||
|
相比于strategy_demo.py,本代码演示如何从CChan外部喂K线来触发内部缠论计算
|
||||||
|
"""
|
||||||
|
code = "BTC/USDT"
|
||||||
|
begin_time = "2025-02-01"
|
||||||
|
end_time = None
|
||||||
|
data_src_type = DATA_SRC.CCXT
|
||||||
|
lv_list = [KL_TYPE.K_60M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True,
|
||||||
|
"divergence_rate": 0.8,
|
||||||
|
"min_zs_cnt": 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time, # 已经没啥用了这一行
|
||||||
|
end_time=end_time, # 已经没啥用了这一行
|
||||||
|
data_src=data_src_type, # 已经没啥用了这一行
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ, # 已经没啥用了这一行
|
||||||
|
)
|
||||||
|
CCXT.do_init()
|
||||||
|
data_src = CCXT(code, k_type=KL_TYPE.K_60M, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ) # 初始化数据源类
|
||||||
|
|
||||||
|
is_hold = False
|
||||||
|
last_buy_price = None
|
||||||
|
for klu in data_src.get_kl_data(): # 获取单根K线
|
||||||
|
chan.trigger_load({KL_TYPE.K_60M: [klu]}) # 喂给CChan新增k线
|
||||||
|
bsp_list = chan.get_bsp()
|
||||||
|
if not bsp_list:
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1]
|
||||||
|
print(klu.time, last_bsp.is_buy)
|
||||||
|
if BSP_TYPE.T1 not in last_bsp.type and BSP_TYPE.T1P not in last_bsp.type:
|
||||||
|
continue
|
||||||
|
cur_lv_chan = chan[0]
|
||||||
|
if last_bsp.klu.klc.idx != cur_lv_chan[-2].idx:
|
||||||
|
continue
|
||||||
|
if cur_lv_chan[-2].fx == FX_TYPE.BOTTOM and last_bsp.is_buy and not is_hold:
|
||||||
|
last_buy_price = cur_lv_chan[-1][-1].close
|
||||||
|
print(f'{cur_lv_chan[-1][-1].time}:buy price = {last_buy_price}')
|
||||||
|
is_hold = True
|
||||||
|
elif cur_lv_chan[-2].fx == FX_TYPE.TOP and not last_bsp.is_buy and is_hold:
|
||||||
|
sell_price = cur_lv_chan[-1][-1].close
|
||||||
|
print(f'{cur_lv_chan[-1][-1].time}:sell price = {sell_price}, profit rate = {(sell_price-last_buy_price)/last_buy_price*100:.2f}%')
|
||||||
|
is_hold = False
|
||||||
|
CCXT.do_close()
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
import copy
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from Common.CEnum import AUTYPE, DATA_FIELD, DATA_SRC, KL_TYPE
|
||||||
|
from DataAPI.BaoStockAPI import CBaoStock
|
||||||
|
from KLine.KLine_Unit import CKLine_Unit
|
||||||
|
|
||||||
|
|
||||||
|
def combine_60m_klu_form_15m(klu_15m_lst: List[CKLine_Unit]) -> CKLine_Unit:
|
||||||
|
return CKLine_Unit(
|
||||||
|
{
|
||||||
|
DATA_FIELD.FIELD_TIME: klu_15m_lst[-1].time,
|
||||||
|
DATA_FIELD.FIELD_OPEN: klu_15m_lst[0].open,
|
||||||
|
DATA_FIELD.FIELD_CLOSE: klu_15m_lst[-1].close,
|
||||||
|
DATA_FIELD.FIELD_HIGH: max(klu.high for klu in klu_15m_lst),
|
||||||
|
DATA_FIELD.FIELD_LOW: min(klu.low for klu in klu_15m_lst),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
代码不能直接跑,仅用于展示如何实现小级别K线更新直接刷新CChan结果
|
||||||
|
"""
|
||||||
|
code = "sz.000001"
|
||||||
|
begin_time = "2023-09-10"
|
||||||
|
end_time = None
|
||||||
|
data_src_type = DATA_SRC.BAO_STOCK
|
||||||
|
lv_list = [KL_TYPE.K_60M, KL_TYPE.K_15M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True,
|
||||||
|
})
|
||||||
|
|
||||||
|
# 快照
|
||||||
|
chan_snapshot = CChan(
|
||||||
|
code=code,
|
||||||
|
data_src=data_src_type,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
)
|
||||||
|
CBaoStock.do_init()
|
||||||
|
data_src = CBaoStock(code, k_type=KL_TYPE.K_15M, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ) # 获取最小级别
|
||||||
|
|
||||||
|
klu_15m_lst_tmp: List[CKLine_Unit] = [] # 存储用于合成当前60M K线的15M k线
|
||||||
|
|
||||||
|
for klu_15m in data_src.get_kl_data(): # 获取单根15分钟K线
|
||||||
|
klu_15m_lst_tmp.append(klu_15m)
|
||||||
|
klu_60m = combine_60m_klu_form_15m(klu_15m_lst_tmp) # 合成60分钟K线
|
||||||
|
|
||||||
|
"""
|
||||||
|
拷贝一份chan_snapshot
|
||||||
|
如果是用序列化方式,这里可以采用pickle.load()
|
||||||
|
"""
|
||||||
|
chan: CChan = copy.deepcopy(chan_snapshot)
|
||||||
|
chan.trigger_load({KL_TYPE.K_60M: [klu_60m], KL_TYPE.K_15M: klu_15m_lst_tmp})
|
||||||
|
|
||||||
|
"""
|
||||||
|
策略开始:
|
||||||
|
这里基于chan实现你的策略
|
||||||
|
"""
|
||||||
|
for kl_type, ele_manager in chan.kl_datas.items():
|
||||||
|
# 打印当前每一级别分别有多少K线
|
||||||
|
print(klu_15m.time, kl_type, sum(len(klc) for klc in ele_manager))
|
||||||
|
# 策略结束:
|
||||||
|
|
||||||
|
if len(klu_15m_lst_tmp) == 4: # 已经完成4根15分钟K线了,说明这个最新的60分钟K线和里面的4根15分钟K线在将来不会再变化
|
||||||
|
"""
|
||||||
|
把当前完整chan重新保存成chan_snapshot
|
||||||
|
如果是序列化方式,这里可以采用pickle.dump()
|
||||||
|
"""
|
||||||
|
chan_snapshot = chan
|
||||||
|
klu_15m_lst_tmp = [] # 清空1分钟K线,用于下一个五分钟周期的合成
|
||||||
|
|
||||||
|
CBaoStock.do_close()
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE
|
||||||
|
from DataAPI.BaoStockAPI import CBaoStock
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
本demo演示当你要用多级别trigger load的时候,如何巧妙的解决时间对齐的问题:
|
||||||
|
解决方案就是喂第一根最大级别的时候,直接把所有的次级别全部喂进去
|
||||||
|
之后每次只需要喂一根最大级别即可,复用框架内置的K线时间对齐能力
|
||||||
|
从而避免了在trigger_load入参那里进行K线对齐,自己去找出最大级别那根K线下所有次级别的K线
|
||||||
|
"""
|
||||||
|
code = "sz.000001"
|
||||||
|
begin_time = "2023-06-01"
|
||||||
|
end_time = None
|
||||||
|
data_src = DATA_SRC.BAO_STOCK
|
||||||
|
lv_list = [KL_TYPE.K_DAY, KL_TYPE.K_30M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True,
|
||||||
|
"divergence_rate": 0.8,
|
||||||
|
"min_zs_cnt": 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time, # 已经没啥用了这一行
|
||||||
|
end_time=end_time, # 已经没啥用了这一行
|
||||||
|
data_src=data_src, # 已经没啥用了这一行
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ, # 已经没啥用了这一行
|
||||||
|
)
|
||||||
|
CBaoStock.do_init()
|
||||||
|
data_src_day = CBaoStock(code, k_type=KL_TYPE.K_DAY, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ)
|
||||||
|
data_src_30m = CBaoStock(code, k_type=KL_TYPE.K_30M, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ)
|
||||||
|
kl_30m_all = list(data_src_30m.get_kl_data())
|
||||||
|
|
||||||
|
for _idx, klu in enumerate(data_src_day.get_kl_data()):
|
||||||
|
# 本质是每喂一根日线的时候,这根日线之前的都要喂过,提前喂多点不要紧,框架会自动根据日线来截取需要的30M K线
|
||||||
|
# 30M一口气全部喂完,后续就不用关注时间对齐的问题了
|
||||||
|
if _idx == 0:
|
||||||
|
chan.trigger_load({KL_TYPE.K_DAY: [klu], KL_TYPE.K_30M: kl_30m_all})
|
||||||
|
else:
|
||||||
|
chan.trigger_load({KL_TYPE.K_DAY: [klu]})
|
||||||
|
|
||||||
|
if _idx == 4: # demo只检查4根日线
|
||||||
|
break
|
||||||
|
# 检查时间对齐
|
||||||
|
print("当前所有日线:", [klu.time.to_str() for klu in chan[0].klu_iter()])
|
||||||
|
print("当前所有30M K线:", [klu.time.to_str() for klu in chan[1].klu_iter()], "\n")
|
||||||
|
|
||||||
|
CBaoStock.do_close()
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
import json
|
||||||
|
from typing import Dict, TypedDict
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py"))
|
||||||
|
import xgboost as xgb
|
||||||
|
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE, BSP_TYPE
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Plot.PlotDriver import CPlotDriver
|
||||||
|
|
||||||
|
|
||||||
|
class T_SAMPLE_INFO(TypedDict):
|
||||||
|
feature: CFeatures
|
||||||
|
is_buy: bool
|
||||||
|
open_time: CTime
|
||||||
|
|
||||||
|
|
||||||
|
def plot(chan, plot_marker):
|
||||||
|
plot_config = {
|
||||||
|
"plot_kline": True,
|
||||||
|
"plot_bi": True,
|
||||||
|
"plot_seg": True,
|
||||||
|
"plot_zs": True,
|
||||||
|
"plot_bsp": True,
|
||||||
|
"plot_marker": True,
|
||||||
|
"plot_macd": True,
|
||||||
|
}
|
||||||
|
plot_para = {
|
||||||
|
"figure": {
|
||||||
|
"x_range": 400,
|
||||||
|
},
|
||||||
|
"marker": {
|
||||||
|
"markers": plot_marker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot_driver = CPlotDriver(
|
||||||
|
chan,
|
||||||
|
plot_config=plot_config,
|
||||||
|
plot_para=plot_para,
|
||||||
|
)
|
||||||
|
plot_driver.save2img("label.png")
|
||||||
|
|
||||||
|
|
||||||
|
def stragety_feature(last_klu):
|
||||||
|
return {
|
||||||
|
"open_klu_rate": (last_klu.close - last_klu.open)/last_klu.open,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
本demo主要演示如何记录策略产出的买卖点的特征
|
||||||
|
然后将这些特征作为样本,训练一个模型(以XGB为demo)
|
||||||
|
用于预测买卖点的准确性
|
||||||
|
|
||||||
|
请注意,demo训练预测都用的是同一份数据,这是不合理的,仅仅是为了演示
|
||||||
|
"""
|
||||||
|
code = "BTC/USDT"
|
||||||
|
begin_time = "2024-12-1"
|
||||||
|
end_time = None
|
||||||
|
data_src = DATA_SRC.CCXT
|
||||||
|
lv_list = [KL_TYPE.K_1M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True, # 打开开关!
|
||||||
|
"bi_strict": True,
|
||||||
|
"skip_step": 0,
|
||||||
|
"divergence_rate": float("inf"),
|
||||||
|
"bsp2_follow_1": False,
|
||||||
|
"bsp3_follow_1": False,
|
||||||
|
"min_zs_cnt": 0,
|
||||||
|
"bs1_peak": False,
|
||||||
|
"macd_algo": "peak",
|
||||||
|
"bs_type": '1,2,3a,1p,2s,3b',
|
||||||
|
"print_warning": True,
|
||||||
|
"zs_algo": "normal",
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time,
|
||||||
|
end_time=end_time,
|
||||||
|
data_src=data_src,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ,
|
||||||
|
)
|
||||||
|
|
||||||
|
bsp_dict: Dict[int, T_SAMPLE_INFO] = {} # 存储策略产出的bsp的特征
|
||||||
|
|
||||||
|
# 跑策略,保存买卖点的特征
|
||||||
|
index = 0
|
||||||
|
for chan_snapshot in chan.step_load():
|
||||||
|
last_klu = chan_snapshot[0][-1][-1]
|
||||||
|
bsp_list = chan_snapshot.get_bsp()
|
||||||
|
if not bsp_list:
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1]
|
||||||
|
cur_lv_chan = chan_snapshot[0]
|
||||||
|
if last_bsp.klu.idx not in bsp_dict and cur_lv_chan[-2].idx == last_bsp.klu.klc.idx and last_bsp.is_buy:
|
||||||
|
# 假如策略是:买卖点分形第三元素出现时交易
|
||||||
|
bsp_dict[last_bsp.klu.idx] = {
|
||||||
|
"feature": last_bsp.features,
|
||||||
|
"is_buy": last_bsp.is_buy,
|
||||||
|
"open_time": last_klu.time,
|
||||||
|
}
|
||||||
|
bsp_dict[last_bsp.klu.idx]['feature'].add_feat(stragety_feature(last_klu)) # 开仓K线特征
|
||||||
|
print(index, last_bsp.klu.time, last_bsp.is_buy)
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
# 生成libsvm样本特征
|
||||||
|
bsp_academy = [bsp.klu.idx for bsp in chan.get_bsp()]
|
||||||
|
feature_meta = {} # 特征meta
|
||||||
|
cur_feature_idx = 0
|
||||||
|
plot_marker = {}
|
||||||
|
fid = open("feature.libsvm", "w")
|
||||||
|
for bsp_klu_idx, feature_info in bsp_dict.items():
|
||||||
|
label = int(bsp_klu_idx in bsp_academy) # 以买卖点识别是否准确为label
|
||||||
|
features = [] # List[(idx, value)]
|
||||||
|
for feature_name, value in feature_info['feature'].items():
|
||||||
|
if feature_name not in feature_meta:
|
||||||
|
feature_meta[feature_name] = cur_feature_idx
|
||||||
|
cur_feature_idx += 1
|
||||||
|
features.append((feature_meta[feature_name], value))
|
||||||
|
features.sort(key=lambda x: x[0])
|
||||||
|
feature_str = " ".join([f"{idx}:{value}" for idx, value in features])
|
||||||
|
fid.write(f"{label} {feature_str}\n")
|
||||||
|
plot_marker[feature_info["open_time"].to_str()] = ("√" if label else "×", "down" if feature_info["is_buy"] else "up")
|
||||||
|
fid.close()
|
||||||
|
|
||||||
|
with open("feature.meta", "w") as fid:
|
||||||
|
# meta保存下来,实盘预测时特征对齐用
|
||||||
|
fid.write(json.dumps(feature_meta))
|
||||||
|
|
||||||
|
# 画图检查label是否正确
|
||||||
|
plot(chan, plot_marker)
|
||||||
|
|
||||||
|
# load sample file & train model
|
||||||
|
dtrain = xgb.DMatrix("feature.libsvm?format=libsvm") # load sample
|
||||||
|
param = {'max_depth': 2, 'eta': 0.3, 'objective': 'binary:logistic', 'eval_metric': 'auc'}
|
||||||
|
evals_result = {}
|
||||||
|
bst = xgb.train(
|
||||||
|
param,
|
||||||
|
dtrain=dtrain,
|
||||||
|
num_boost_round=50,
|
||||||
|
evals=[(dtrain, "train")],
|
||||||
|
evals_result=evals_result,
|
||||||
|
verbose_eval=True,
|
||||||
|
)
|
||||||
|
bst.save_model("buy_model.json")
|
||||||
|
|
||||||
|
# load model
|
||||||
|
model = xgb.Booster()
|
||||||
|
model.load_model("buy_model.json")
|
||||||
|
# predict
|
||||||
|
print(model.predict(dtrain))
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
|
||||||
|
import json
|
||||||
|
from typing import Dict, TypedDict
|
||||||
|
|
||||||
|
import xgboost as xgb
|
||||||
|
from strategy_demo5 import stragety_feature
|
||||||
|
|
||||||
|
from BuySellPoint.BS_Point import CBS_Point
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE
|
||||||
|
from Common.CTime import CTime
|
||||||
|
|
||||||
|
|
||||||
|
class T_SAMPLE_INFO(TypedDict):
|
||||||
|
feature: CFeatures
|
||||||
|
is_buy: bool
|
||||||
|
open_time: CTime
|
||||||
|
|
||||||
|
|
||||||
|
def predict_bsp(model: xgb.Booster, last_bsp: CBS_Point, meta: Dict[str, int]):
|
||||||
|
missing = -9999999
|
||||||
|
feature_arr = [missing] * len(meta)
|
||||||
|
for feat_name, feat_value in last_bsp.features.items():
|
||||||
|
if feat_name in meta:
|
||||||
|
feature_arr[meta[feat_name]] = feat_value
|
||||||
|
feature_arr = [feature_arr]
|
||||||
|
dtest = xgb.DMatrix(feature_arr, missing=missing)
|
||||||
|
return model.predict(dtest)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
本demo主要演示如何在实盘中把策略产出的买卖点,对接到demo5中训练好的离线模型上
|
||||||
|
"""
|
||||||
|
code = "BTC/USDT"
|
||||||
|
begin_time = "2023-11-30"
|
||||||
|
end_time = None
|
||||||
|
data_src = DATA_SRC.CCXT
|
||||||
|
lv_list = [KL_TYPE.K_DAY]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True, # 打开开关!
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time,
|
||||||
|
end_time=end_time,
|
||||||
|
data_src=data_src,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ,
|
||||||
|
)
|
||||||
|
|
||||||
|
model = xgb.Booster()
|
||||||
|
model.load_model("model.json")
|
||||||
|
meta = json.load(open("feature.meta", "r"))
|
||||||
|
|
||||||
|
treated_bsp_idx = set()
|
||||||
|
for chan_snapshot in chan.step_load():
|
||||||
|
# 策略逻辑要对齐demo5
|
||||||
|
last_klu = chan_snapshot[0][-1][-1]
|
||||||
|
bsp_list = chan_snapshot.get_bsp()
|
||||||
|
if not bsp_list:
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1]
|
||||||
|
|
||||||
|
cur_lv_chan = chan_snapshot[0]
|
||||||
|
if last_bsp.klu.idx in treated_bsp_idx or cur_lv_chan[-2].idx != last_bsp.klu.klc.idx:
|
||||||
|
continue
|
||||||
|
|
||||||
|
last_bsp.features.add_feat(stragety_feature(last_klu)) # 开仓K线特征
|
||||||
|
# 买卖点打分,应该和demo5最后的predict结果完全一致才对
|
||||||
|
print(last_bsp.klu.time, predict_bsp(model, last_bsp, meta))
|
||||||
|
treated_bsp_idx.add(last_bsp.klu.idx)
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
import json
|
||||||
|
from typing import Dict, TypedDict
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py"))
|
||||||
|
sys.path.append(os.path.abspath("/Users/jack/Project/chan.py/Debug"))
|
||||||
|
import xgboost as xgb
|
||||||
|
from BuySellPoint.BS_Point import CBS_Point
|
||||||
|
from Chan import CChan
|
||||||
|
from ChanConfig import CChanConfig
|
||||||
|
from ChanModel.Features import CFeatures
|
||||||
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE, BSP_TYPE, MACD_ALGO
|
||||||
|
from Common.CTime import CTime
|
||||||
|
from Plot.PlotDriver import CPlotDriver
|
||||||
|
from Bi.Bi import CBi
|
||||||
|
from FeatureDict import FeatureDict
|
||||||
|
class T_SAMPLE_INFO(TypedDict):
|
||||||
|
feature: CFeatures
|
||||||
|
is_buy: bool
|
||||||
|
open_time: CTime
|
||||||
|
|
||||||
|
|
||||||
|
def plot(chan, plot_marker):
|
||||||
|
plot_config = {
|
||||||
|
"plot_kline": True,
|
||||||
|
"plot_bi": True,
|
||||||
|
"plot_seg": True,
|
||||||
|
"plot_zs": True,
|
||||||
|
"plot_bsp": True,
|
||||||
|
"plot_marker": True,
|
||||||
|
"plot_macd": True,
|
||||||
|
}
|
||||||
|
plot_para = {
|
||||||
|
"figure": {
|
||||||
|
"x_range": 4000,
|
||||||
|
},
|
||||||
|
"marker": {
|
||||||
|
"markers": plot_marker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plot_driver = CPlotDriver(
|
||||||
|
chan,
|
||||||
|
plot_config=plot_config,
|
||||||
|
plot_para=plot_para,
|
||||||
|
)
|
||||||
|
plot_driver.save2img("eval.png")
|
||||||
|
|
||||||
|
def predict_bsp(last_bsp: CBS_Point):
|
||||||
|
model = xgb.Booster()
|
||||||
|
if last_bsp.is_buy:
|
||||||
|
model.load_model("buy_model.json")
|
||||||
|
else:
|
||||||
|
model.load_model("sell_model.json")
|
||||||
|
meta = json.load(open("feature.meta", "r"))
|
||||||
|
missing = -9999999
|
||||||
|
feature_arr = [missing] * len(meta)
|
||||||
|
for feat_name, feat_value in last_bsp.features.items():
|
||||||
|
if feat_name in meta:
|
||||||
|
feature_arr[meta[feat_name]] = feat_value
|
||||||
|
feature_arr = [feature_arr]
|
||||||
|
dtest = xgb.DMatrix(feature_arr, missing=missing)
|
||||||
|
return model.predict(dtest)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""
|
||||||
|
本demo主要演示如何记录策略产出的买卖点的特征
|
||||||
|
然后将这些特征作为样本,训练一个模型(以XGB为demo)
|
||||||
|
用于预测买卖点的准确性
|
||||||
|
|
||||||
|
请注意,demo训练预测都用的是同一份数据,这是不合理的,仅仅是为了演示
|
||||||
|
"""
|
||||||
|
code = "BTC/USDT:USDT"
|
||||||
|
begin_time = "2024-12-1"
|
||||||
|
end_time = "2024-12-20"
|
||||||
|
data_src = DATA_SRC.CCXT
|
||||||
|
lv_list = [KL_TYPE.K_1M]
|
||||||
|
|
||||||
|
config = CChanConfig({
|
||||||
|
"trigger_step": True, # 打开开关!
|
||||||
|
"bi_strict": True,
|
||||||
|
"skip_step": 0,
|
||||||
|
"divergence_rate": float("inf"),
|
||||||
|
"bsp2_follow_1": False,
|
||||||
|
"bsp3_follow_1": False,
|
||||||
|
"min_zs_cnt": 0,
|
||||||
|
"bs1_peak": False,
|
||||||
|
"macd_algo": "peak",
|
||||||
|
"bs_type": '1,2,3a,1p,2s,3b',
|
||||||
|
"print_warning": True,
|
||||||
|
"zs_algo": "normal",
|
||||||
|
"cal_rsi": True,
|
||||||
|
"cal_kdj": True,
|
||||||
|
})
|
||||||
|
|
||||||
|
chan = CChan(
|
||||||
|
code=code,
|
||||||
|
begin_time=begin_time,
|
||||||
|
end_time=end_time,
|
||||||
|
data_src=data_src,
|
||||||
|
lv_list=lv_list,
|
||||||
|
config=config,
|
||||||
|
autype=AUTYPE.QFQ,
|
||||||
|
)
|
||||||
|
|
||||||
|
bsp_dict: Dict[int, T_SAMPLE_INFO] = {} # 存储策略产出的bsp的特征
|
||||||
|
|
||||||
|
# 跑策略,保存买卖点的特征
|
||||||
|
index = 0
|
||||||
|
evals_count = 0
|
||||||
|
eval_klu_list = []
|
||||||
|
for chan_snapshot in chan.step_load():
|
||||||
|
last_klu = chan_snapshot[0][-1][-1]
|
||||||
|
bsp_list = chan_snapshot.get_bsp()
|
||||||
|
if not bsp_list:
|
||||||
|
continue
|
||||||
|
last_bsp = bsp_list[-1]
|
||||||
|
cur_lv_chan = chan_snapshot[0]
|
||||||
|
if BSP_TYPE.T1 in last_bsp.type or BSP_TYPE.T1P in last_bsp.type:
|
||||||
|
if last_bsp.klu.idx not in bsp_dict and cur_lv_chan[-2].idx == last_bsp.klu.klc.idx:
|
||||||
|
# 假如策略是:买卖点分形第三元素出现时交易
|
||||||
|
bsp_dict[last_bsp.klu.idx] = {
|
||||||
|
"feature": last_bsp.features,
|
||||||
|
"is_buy": last_bsp.is_buy,
|
||||||
|
"open_time": last_klu.time,
|
||||||
|
}
|
||||||
|
bsp_dict[last_bsp.klu.idx]['feature'].add_feat(FeatureDict().stragety_feature(last_bsp)) # 开仓K线特征
|
||||||
|
score = predict_bsp(last_bsp)
|
||||||
|
ok = ""
|
||||||
|
if score > 0.5:
|
||||||
|
ok = "OK"
|
||||||
|
evals_count = evals_count + 1
|
||||||
|
eval_klu_list.append(last_bsp.klu.idx)
|
||||||
|
print(index, last_bsp.klu.time, last_bsp.is_buy, score, ok)
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
# 生成libsvm样本特征
|
||||||
|
bsp_academy = [bsp.klu.idx for bsp in chan.get_bsp()]
|
||||||
|
feature_meta = {} # 特征meta
|
||||||
|
cur_feature_idx = 0
|
||||||
|
plot_marker = {}
|
||||||
|
fid = open("eval_feature.libsvm", "w")
|
||||||
|
label_count = 0
|
||||||
|
for bsp_klu_idx, feature_info in bsp_dict.items():
|
||||||
|
label = int(bsp_klu_idx in bsp_academy) # 以买卖点识别是否准确为label
|
||||||
|
features = [] # List[(idx, value)]
|
||||||
|
for feature_name, value in feature_info['feature'].items():
|
||||||
|
if feature_name not in feature_meta:
|
||||||
|
feature_meta[feature_name] = cur_feature_idx
|
||||||
|
cur_feature_idx += 1
|
||||||
|
features.append((feature_meta[feature_name], value))
|
||||||
|
features.sort(key=lambda x: x[0])
|
||||||
|
feature_str = " ".join([f"{idx}:{value}" for idx, value in features])
|
||||||
|
fid.write(f"{label} {feature_str}\n")
|
||||||
|
plot_marker[feature_info["open_time"].to_str()] = ("√ "+ feature_info["open_time"].to_str() if label else "×", "down" if feature_info["is_buy"] else "up")
|
||||||
|
if label:
|
||||||
|
label_count = label_count + 1
|
||||||
|
fid.close()
|
||||||
|
print("Evals count: ", evals_count, "Lable count: ", label_count)
|
||||||
|
with open("feature.meta", "w") as fid:
|
||||||
|
# meta保存下来,实盘预测时特征对齐用
|
||||||
|
fid.write(json.dumps(feature_meta))
|
||||||
|
|
||||||
|
# 画图检查label是否正确
|
||||||
|
plot(chan, plot_marker)
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 262 KiB |
|
After Width: | Height: | Size: 260 KiB |
|
After Width: | Height: | Size: 187 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 268 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 196 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 194 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 308 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 232 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 277 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 28 KiB |