hikyuu 2.6.2__py3-none-win_amd64.whl → 2.6.5__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hikyuu/__init__.py +1 -1
- hikyuu/__init__.pyi +28 -13
- hikyuu/analysis/__init__.pyi +20 -0
- hikyuu/analysis/analysis.pyi +21 -1
- hikyuu/core.pyi +22 -2
- hikyuu/cpp/core310.pyd +0 -0
- hikyuu/cpp/core310.pyi +499 -50
- hikyuu/cpp/core311.pyd +0 -0
- hikyuu/cpp/core311.pyi +499 -50
- hikyuu/cpp/core312.pyd +0 -0
- hikyuu/cpp/core312.pyi +499 -50
- hikyuu/cpp/core313.pyd +0 -0
- hikyuu/cpp/core313.pyi +499 -50
- hikyuu/cpp/core39.pyd +0 -0
- hikyuu/cpp/core39.pyi +499 -50
- hikyuu/cpp/hikyuu.dll +0 -0
- hikyuu/cpp/hikyuu.lib +0 -0
- hikyuu/data/common.py +1 -1
- hikyuu/data/common_mysql.py +19 -0
- hikyuu/data/common_pytdx.py +2 -0
- hikyuu/data/common_sqlite3.py +1 -0
- hikyuu/data/hku_config_template.py +14 -0
- hikyuu/data/mysql_upgrade/0028.sql +95 -0
- hikyuu/data/pytdx_to_h5.py +53 -13
- hikyuu/data/pytdx_to_mysql.py +42 -9
- hikyuu/data/pytdx_to_taos.py +736 -0
- hikyuu/data/sqlite_upgrade/0028.sql +97 -0
- hikyuu/draw/__init__.pyi +1 -1
- hikyuu/draw/drawplot/__init__.pyi +1 -1
- hikyuu/draw/drawplot/bokeh_draw.pyi +24 -9
- hikyuu/draw/drawplot/echarts_draw.pyi +24 -9
- hikyuu/draw/drawplot/matplotlib_draw.py +26 -4
- hikyuu/draw/drawplot/matplotlib_draw.pyi +24 -9
- hikyuu/draw/kaufman.py +2 -2
- hikyuu/draw/kaufman.pyi +2 -2
- hikyuu/examples/notebook/001-overview.ipynb +65 -100
- hikyuu/examples/notebook/004-IndicatorOverview.ipynb +34 -32
- hikyuu/examples/notebook/007-SystemDetails.ipynb +64 -50
- hikyuu/examples/notebook/010-Portfolio.ipynb +120 -124
- hikyuu/extend.py +1 -1
- hikyuu/extend.pyi +24 -9
- hikyuu/fetcher/stock/zh_block_em.py +349 -5
- hikyuu/fetcher/stock/zh_stock_a_pytdx.py +2 -1
- hikyuu/gui/HikyuuTDX.py +47 -24
- hikyuu/gui/data/ImportBlockInfoTask.py +1 -1
- hikyuu/gui/data/ImportHistoryFinanceTask.py +48 -44
- hikyuu/gui/data/ImportPytdxTimeToH5Task.py +3 -1
- hikyuu/gui/data/ImportPytdxToH5Task.py +4 -2
- hikyuu/gui/data/ImportPytdxTransToH5Task.py +3 -1
- hikyuu/gui/data/ImportWeightToSqliteTask.py +2 -1
- hikyuu/gui/data/ImportZhBond10Task.py +1 -1
- hikyuu/gui/data/MainWindow.py +123 -106
- hikyuu/gui/data/UsePytdxImportToH5Thread.py +7 -3
- hikyuu/gui/data/UseQmtImportToH5Thread.py +1 -0
- hikyuu/gui/data/UseTdxImportToH5Thread.py +2 -1
- hikyuu/hub.pyi +6 -6
- hikyuu/include/hikyuu/Block.h +20 -0
- hikyuu/include/hikyuu/KQuery.h +8 -0
- hikyuu/include/hikyuu/MarketInfo.h +6 -0
- hikyuu/include/hikyuu/Stock.h +1 -1
- hikyuu/include/hikyuu/StockManager.h +6 -0
- hikyuu/include/hikyuu/data_driver/BaseInfoDriver.h +35 -0
- hikyuu/include/hikyuu/indicator/Indicator.h +5 -0
- hikyuu/include/hikyuu/indicator/IndicatorImp.h +8 -3
- hikyuu/include/hikyuu/indicator/build_in.h +1 -0
- hikyuu/include/hikyuu/indicator/crt/BARSLASTCOUNT.h +33 -0
- hikyuu/include/hikyuu/indicator/crt/INSUM.h +5 -10
- hikyuu/include/hikyuu/indicator/crt/RSI.h +2 -18
- hikyuu/include/hikyuu/indicator/imp/IBarsLastCount.h +27 -0
- hikyuu/include/hikyuu/plugin/backtest.h +3 -2
- hikyuu/include/hikyuu/plugin/device.h +6 -3
- hikyuu/include/hikyuu/plugin/extind.h +150 -0
- hikyuu/include/hikyuu/plugin/interface/BackTestPluginInterface.h +2 -1
- hikyuu/include/hikyuu/plugin/interface/DevicePluginInterface.h +1 -0
- hikyuu/include/hikyuu/plugin/interface/ExtendIndicatorsPluginInterface.h +26 -0
- hikyuu/include/hikyuu/plugin/interface/TMReportPluginInterface.h +80 -0
- hikyuu/include/hikyuu/plugin/interface/plugins.h +4 -0
- hikyuu/include/hikyuu/strategy/BrokerTradeManager.h +7 -5
- hikyuu/include/hikyuu/strategy/Strategy.h +22 -9
- hikyuu/include/hikyuu/trade_manage/OrderBrokerBase.h +11 -4
- hikyuu/include/hikyuu/trade_manage/Performance.h +17 -9
- hikyuu/include/hikyuu/trade_manage/PositionExtInfo.h +92 -0
- hikyuu/include/hikyuu/trade_manage/PositionRecord.h +7 -1
- hikyuu/include/hikyuu/trade_manage/TradeManager.h +8 -5
- hikyuu/include/hikyuu/trade_manage/TradeManagerBase.h +66 -5
- hikyuu/include/hikyuu/trade_manage/TradeRecord.h +9 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/MultiFactorBase.h +8 -5
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_EqualWeight.h +4 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_ICIRWeight.h +4 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_ICWeight.h +4 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_Weight.h +4 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/imp/EqualWeightMultiFactor.h +2 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/imp/ICIRMultiFactor.h +2 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/imp/ICMultiFactor.h +2 -1
- hikyuu/include/hikyuu/trade_sys/multifactor/imp/WeightMultiFactor.h +1 -1
- hikyuu/include/hikyuu/trade_sys/selector/crt/SE_Optimal.h +8 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/optimal/OptimalEvaluateSelector.h +28 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/optimal/OptimalSelectorBase.h +1 -0
- hikyuu/include/hikyuu/trade_sys/system/TradeRequest.h +7 -4
- hikyuu/include/hikyuu/trade_sys/system/imp/WalkForwardTradeManager.h +17 -13
- hikyuu/include/hikyuu/utilities/DllLoader.h +226 -0
- hikyuu/include/hikyuu/utilities/datetime/Datetime.h +20 -0
- hikyuu/include/hikyuu/utilities/datetime/TimeDelta.h +6 -0
- hikyuu/include/hikyuu/utilities/plugin/PluginLoader.h +10 -10
- hikyuu/include/hikyuu/utilities/thread/{MQStealThreadPool.h → GlobalMQStealThreadPool.h} +12 -12
- hikyuu/include/hikyuu/utilities/thread/GlobalMQThreadPool.h +271 -0
- hikyuu/include/hikyuu/utilities/thread/{StealThreadPool.h → GlobalStealThreadPool.h} +11 -10
- hikyuu/include/hikyuu/utilities/thread/GlobalThreadPool.h +224 -0
- hikyuu/include/hikyuu/utilities/thread/InterruptFlag.h +16 -0
- hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +40 -77
- hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +31 -59
- hikyuu/include/hikyuu/utilities/thread/ThreadSafeQueue.h +4 -0
- hikyuu/include/hikyuu/utilities/thread/algorithm.h +9 -9
- hikyuu/include/hikyuu/utilities/thread/thread.h +4 -0
- hikyuu/include/hikyuu/version.h +4 -4
- hikyuu/plugin/backtest.dll +0 -0
- hikyuu/plugin/dataserver.dll +0 -0
- hikyuu/plugin/device.dll +0 -0
- hikyuu/plugin/extind.dll +0 -0
- hikyuu/plugin/import2hdf5.dll +0 -0
- hikyuu/plugin/tmreport.dll +0 -0
- hikyuu/trade_manage/__init__.pyi +23 -8
- hikyuu/trade_manage/broker.py +8 -8
- hikyuu/trade_manage/broker.pyi +4 -4
- hikyuu/trade_manage/broker_easytrader.py +3 -3
- hikyuu/trade_manage/broker_easytrader.pyi +2 -2
- hikyuu/trade_manage/broker_mail.py +2 -2
- hikyuu/trade_manage/broker_mail.pyi +2 -2
- hikyuu/trade_manage/trade.pyi +23 -8
- hikyuu/util/singleton.pyi +1 -1
- {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/METADATA +4 -3
- {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/RECORD +136 -121
- {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/LICENSE +0 -0
- {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/WHEEL +0 -0
- {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/entry_points.txt +0 -0
- {hikyuu-2.6.2.dist-info → hikyuu-2.6.5.dist-info}/top_level.txt +0 -0
hikyuu/trade_manage/broker.py
CHANGED
|
@@ -46,7 +46,7 @@ class OrderBrokerWrap(OrderBrokerBase):
|
|
|
46
46
|
super(OrderBrokerWrap, self).__init__(name)
|
|
47
47
|
self._broker = broker
|
|
48
48
|
|
|
49
|
-
def _buy(self, datetime, market, code, price, num, stoploss, goal_price, part_from):
|
|
49
|
+
def _buy(self, datetime, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
50
50
|
"""
|
|
51
51
|
实现 OrderBrokerBase 的 _buy 接口
|
|
52
52
|
:param str market: 证券市场
|
|
@@ -54,11 +54,11 @@ class OrderBrokerWrap(OrderBrokerBase):
|
|
|
54
54
|
:param float price: 买入价格
|
|
55
55
|
:param int num: 买入数量
|
|
56
56
|
"""
|
|
57
|
-
self._broker.buy(market, code, price, num, stoploss, goal_price, part_from)
|
|
57
|
+
self._broker.buy(market, code, price, num, stoploss, goal_price, part_from, remark)
|
|
58
58
|
|
|
59
|
-
def _sell(self, datetime, market, code, price, num, stoploss, goal_price, part_from):
|
|
59
|
+
def _sell(self, datetime, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
60
60
|
"""实现 OrderBrokerBase 的 _sell 接口"""
|
|
61
|
-
self._broker.sell(market, code, price, num, stoploss, goal_price, part_from)
|
|
61
|
+
self._broker.sell(market, code, price, num, stoploss, goal_price, part_from, remark)
|
|
62
62
|
|
|
63
63
|
def _get_asset_info(self):
|
|
64
64
|
try:
|
|
@@ -77,11 +77,11 @@ class TestOrderBroker:
|
|
|
77
77
|
def __init__(self):
|
|
78
78
|
pass
|
|
79
79
|
|
|
80
|
-
def buy(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
81
|
-
print(f"买入:{market}{code}, 价格: {price}, 数量: {num} 预期止损价: {stoploss}, 预期目标价: {goal_price}, 信号来源: {part_from}")
|
|
80
|
+
def buy(self, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
81
|
+
print(f"买入:{market}{code}, 价格: {price}, 数量: {num} 预期止损价: {stoploss}, 预期目标价: {goal_price}, 信号来源: {part_from}, 备注: {remark}")
|
|
82
82
|
|
|
83
|
-
def sell(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
84
|
-
print(f"卖出:{market}{code}, 价格: {price}, 数量: {num}, 信号来源: {part_from}")
|
|
83
|
+
def sell(self, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
84
|
+
print(f"卖出:{market}{code}, 价格: {price}, 数量: {num}, 信号来源: {part_from}, 备注: {remark}")
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
def crtOB(broker, name="NO_NAME"):
|
hikyuu/trade_manage/broker.pyi
CHANGED
|
@@ -16,7 +16,7 @@ class OrderBrokerWrap(hikyuu.cpp.core39.OrderBrokerBase):
|
|
|
16
16
|
订单代理包装类,用户可以参考自定义自己的订单代理,加入额外的处理
|
|
17
17
|
|
|
18
18
|
"""
|
|
19
|
-
def _buy(self, datetime, market, code, price, num, stoploss, goal_price, part_from):
|
|
19
|
+
def _buy(self, datetime, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
22
|
实现 OrderBrokerBase 的 _buy 接口
|
|
@@ -28,7 +28,7 @@ class OrderBrokerWrap(hikyuu.cpp.core39.OrderBrokerBase):
|
|
|
28
28
|
"""
|
|
29
29
|
def _get_asset_info(self):
|
|
30
30
|
...
|
|
31
|
-
def _sell(self, datetime, market, code, price, num, stoploss, goal_price, part_from):
|
|
31
|
+
def _sell(self, datetime, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
32
32
|
"""
|
|
33
33
|
实现 OrderBrokerBase 的 _sell 接口
|
|
34
34
|
"""
|
|
@@ -38,9 +38,9 @@ class TestOrderBroker:
|
|
|
38
38
|
"""
|
|
39
39
|
def __init__(self):
|
|
40
40
|
...
|
|
41
|
-
def buy(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
41
|
+
def buy(self, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
42
42
|
...
|
|
43
|
-
def sell(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
43
|
+
def sell(self, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
44
44
|
...
|
|
45
45
|
def crtOB(broker, name = 'NO_NAME'):
|
|
46
46
|
"""
|
|
@@ -17,13 +17,13 @@ class EasyTraderOrderBroker:
|
|
|
17
17
|
self.user = user
|
|
18
18
|
self.buffer = {}
|
|
19
19
|
|
|
20
|
-
def buy(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
20
|
+
def buy(self, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
21
21
|
# self.user.buy(code, price=price, amount=num)
|
|
22
22
|
market_code = f"{market}{code}"
|
|
23
23
|
print(f"计划买入:{market_code} {price} {num}")
|
|
24
24
|
self.buffer[market_code] = (num, stoploss, goal_price)
|
|
25
25
|
|
|
26
|
-
def sell(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
26
|
+
def sell(self, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
27
27
|
# self.user.sell(code, price=price, amount=num)
|
|
28
28
|
market_code = f"{market}{code}"
|
|
29
29
|
print(f"计划卖出:{market_code} {price} {num}")
|
|
@@ -59,5 +59,5 @@ class EasyTraderOrderBroker:
|
|
|
59
59
|
number=v['可用余额'], stoploss=stoploss, goal_price=goal_price, cost_price=v['成本价']))
|
|
60
60
|
|
|
61
61
|
ret = dict(datetime=str(Datetime.now()), cash=cash, positions=positions)
|
|
62
|
-
print(ret)
|
|
62
|
+
# print(ret)
|
|
63
63
|
return ret
|
|
@@ -11,11 +11,11 @@ class EasyTraderOrderBroker:
|
|
|
11
11
|
"""
|
|
12
12
|
def __init__(self, user):
|
|
13
13
|
...
|
|
14
|
-
def buy(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
14
|
+
def buy(self, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
15
15
|
...
|
|
16
16
|
def get_asset_info(self):
|
|
17
17
|
"""
|
|
18
18
|
以下只适用于华泰
|
|
19
19
|
"""
|
|
20
|
-
def sell(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
20
|
+
def sell(self, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
21
21
|
...
|
|
@@ -72,7 +72,7 @@ class MailOrderBroker:
|
|
|
72
72
|
smtpObj.login(self._sender, self._pwd)
|
|
73
73
|
smtpObj.sendmail(self._sender, self._receivers, message.as_string())
|
|
74
74
|
|
|
75
|
-
def buy(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
75
|
+
def buy(self, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
76
76
|
"""执行买入操作,向指定的邮箱发送邮件,格式如下::
|
|
77
77
|
|
|
78
78
|
邮件标题:【Hkyuu提醒】买入 证券代码
|
|
@@ -86,7 +86,7 @@ class MailOrderBroker:
|
|
|
86
86
|
title = "【Hkyuu提醒】买入 {}".format(code)
|
|
87
87
|
self._sendmail(title, action)
|
|
88
88
|
|
|
89
|
-
def sell(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
89
|
+
def sell(self, market, code, price, num, stoploss, goal_price, part_from, remark=""):
|
|
90
90
|
"""执行卖出操作,向指定的邮箱发送邮件,格式如下::
|
|
91
91
|
|
|
92
92
|
邮件标题:【Hkyuu提醒】卖出 证券代码
|
|
@@ -29,7 +29,7 @@ class MailOrderBroker:
|
|
|
29
29
|
:param str msg: 邮件内容
|
|
30
30
|
|
|
31
31
|
"""
|
|
32
|
-
def buy(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
32
|
+
def buy(self, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
33
33
|
"""
|
|
34
34
|
执行买入操作,向指定的邮箱发送邮件,格式如下::
|
|
35
35
|
|
|
@@ -41,7 +41,7 @@ class MailOrderBroker:
|
|
|
41
41
|
:param int num: 买入数量
|
|
42
42
|
|
|
43
43
|
"""
|
|
44
|
-
def sell(self, market, code, price, num, stoploss, goal_price, part_from):
|
|
44
|
+
def sell(self, market, code, price, num, stoploss, goal_price, part_from, remark = ''):
|
|
45
45
|
"""
|
|
46
46
|
执行卖出操作,向指定的邮箱发送邮件,格式如下::
|
|
47
47
|
|
hikyuu/trade_manage/trade.pyi
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
from datetime import date
|
|
3
3
|
from datetime import datetime
|
|
4
|
-
from datetime import time
|
|
5
4
|
from datetime import timedelta
|
|
6
|
-
from datetime import timezone
|
|
7
|
-
from datetime import tzinfo
|
|
8
5
|
from hikyuu import core
|
|
9
6
|
from hikyuu import cpp
|
|
10
7
|
import hikyuu.cpp.core39
|
|
@@ -26,6 +23,7 @@ from hikyuu.cpp.core39 import AllocateFundsBase
|
|
|
26
23
|
from hikyuu.cpp.core39 import BACKSET
|
|
27
24
|
from hikyuu.cpp.core39 import BARSCOUNT
|
|
28
25
|
from hikyuu.cpp.core39 import BARSLAST
|
|
26
|
+
from hikyuu.cpp.core39 import BARSLASTCOUNT
|
|
29
27
|
from hikyuu.cpp.core39 import BARSSINCE
|
|
30
28
|
from hikyuu.cpp.core39 import BARSSINCEN
|
|
31
29
|
from hikyuu.cpp.core39 import BETWEEN
|
|
@@ -178,6 +176,7 @@ from hikyuu.cpp.core39 import PositionRecord
|
|
|
178
176
|
from hikyuu.cpp.core39 import PositionRecordList
|
|
179
177
|
from hikyuu.cpp.core39 import ProfitGoalBase
|
|
180
178
|
from hikyuu.cpp.core39 import Query
|
|
179
|
+
from hikyuu.cpp.core39 import RANK
|
|
181
180
|
from hikyuu.cpp.core39 import RECOVER_BACKWARD
|
|
182
181
|
from hikyuu.cpp.core39 import RECOVER_EQUAL_BACKWARD
|
|
183
182
|
from hikyuu.cpp.core39 import RECOVER_EQUAL_FORWARD
|
|
@@ -195,6 +194,7 @@ from hikyuu.cpp.core39 import ROUNDDOWN
|
|
|
195
194
|
from hikyuu.cpp.core39 import ROUNDUP
|
|
196
195
|
from hikyuu.cpp.core39 import RSI
|
|
197
196
|
from hikyuu.cpp.core39 import SAFTYLOSS
|
|
197
|
+
from hikyuu.cpp.core39 import SE_EvaluateOptimal
|
|
198
198
|
from hikyuu.cpp.core39 import SE_Fixed
|
|
199
199
|
from hikyuu.cpp.core39 import SE_MaxFundsOptimal
|
|
200
200
|
from hikyuu.cpp.core39 import SE_MultiFactor
|
|
@@ -227,8 +227,8 @@ from hikyuu.cpp.core39 import SPEARMAN
|
|
|
227
227
|
from hikyuu.cpp.core39 import SP_FixedPercent
|
|
228
228
|
from hikyuu.cpp.core39 import SP_FixedValue
|
|
229
229
|
from hikyuu.cpp.core39 import SQRT
|
|
230
|
-
from hikyuu.cpp.core39 import STDEV as STD
|
|
231
230
|
from hikyuu.cpp.core39 import STDEV
|
|
231
|
+
from hikyuu.cpp.core39 import STDEV as STD
|
|
232
232
|
from hikyuu.cpp.core39 import STDP
|
|
233
233
|
from hikyuu.cpp.core39 import ST_FixedPercent
|
|
234
234
|
from hikyuu.cpp.core39 import ST_Indicator
|
|
@@ -439,12 +439,28 @@ from hikyuu.cpp.core39 import TradeRequest
|
|
|
439
439
|
from hikyuu.cpp.core39 import TransList
|
|
440
440
|
from hikyuu.cpp.core39 import TransRecord
|
|
441
441
|
from hikyuu.cpp.core39 import UPNDAY
|
|
442
|
+
from hikyuu.cpp.core39 import UTCOffset
|
|
442
443
|
from hikyuu.cpp.core39 import VAR
|
|
443
444
|
from hikyuu.cpp.core39 import VARP
|
|
444
445
|
from hikyuu.cpp.core39 import VIGOR
|
|
445
446
|
from hikyuu.cpp.core39 import WEAVE
|
|
446
447
|
from hikyuu.cpp.core39 import WEEK
|
|
447
448
|
from hikyuu.cpp.core39 import WINNER
|
|
449
|
+
from hikyuu.cpp.core39 import WITHDAY
|
|
450
|
+
from hikyuu.cpp.core39 import WITHHALFYEAR
|
|
451
|
+
from hikyuu.cpp.core39 import WITHHOUR
|
|
452
|
+
from hikyuu.cpp.core39 import WITHHOUR2
|
|
453
|
+
from hikyuu.cpp.core39 import WITHHOUR4
|
|
454
|
+
from hikyuu.cpp.core39 import WITHKTYPE
|
|
455
|
+
from hikyuu.cpp.core39 import WITHMIN
|
|
456
|
+
from hikyuu.cpp.core39 import WITHMIN15
|
|
457
|
+
from hikyuu.cpp.core39 import WITHMIN30
|
|
458
|
+
from hikyuu.cpp.core39 import WITHMIN5
|
|
459
|
+
from hikyuu.cpp.core39 import WITHMIN60
|
|
460
|
+
from hikyuu.cpp.core39 import WITHMONTH
|
|
461
|
+
from hikyuu.cpp.core39 import WITHQUARTER
|
|
462
|
+
from hikyuu.cpp.core39 import WITHWEEK
|
|
463
|
+
from hikyuu.cpp.core39 import WITHYEAR
|
|
448
464
|
from hikyuu.cpp.core39 import WMA
|
|
449
465
|
from hikyuu.cpp.core39 import YEAR
|
|
450
466
|
from hikyuu.cpp.core39 import ZHBOND10
|
|
@@ -484,6 +500,7 @@ from hikyuu.cpp.core39 import hikyuu_init
|
|
|
484
500
|
from hikyuu.cpp.core39 import inner_analysis_sys_list
|
|
485
501
|
from hikyuu.cpp.core39 import inner_combinate_ind_analysis
|
|
486
502
|
from hikyuu.cpp.core39 import inner_combinate_ind_analysis_with_block
|
|
503
|
+
from hikyuu.cpp.core39 import is_valid_license
|
|
487
504
|
from hikyuu.cpp.core39 import isinf
|
|
488
505
|
from hikyuu.cpp.core39 import isnan
|
|
489
506
|
from hikyuu.cpp.core39 import open_ostream_to_python
|
|
@@ -544,8 +561,8 @@ from hikyuu.util.mylog import class_logger
|
|
|
544
561
|
from hikyuu.util.mylog import hku_benchmark
|
|
545
562
|
from hikyuu.util.mylog import hku_debug
|
|
546
563
|
from hikyuu.util.mylog import hku_debug as hku_trace
|
|
547
|
-
from hikyuu.util.mylog import hku_debug_if as hku_trace_if
|
|
548
564
|
from hikyuu.util.mylog import hku_debug_if
|
|
565
|
+
from hikyuu.util.mylog import hku_debug_if as hku_trace_if
|
|
549
566
|
from hikyuu.util.mylog import hku_error
|
|
550
567
|
from hikyuu.util.mylog import hku_error_if
|
|
551
568
|
from hikyuu.util.mylog import hku_fatal
|
|
@@ -569,7 +586,7 @@ from pathlib import Path
|
|
|
569
586
|
import pickle as pickle
|
|
570
587
|
import sys as sys
|
|
571
588
|
import traceback as traceback
|
|
572
|
-
__all__ = ['ABS', 'ACOS', 'AD', 'ADVANCE', 'AF_EqualWeight', 'AF_FixedWeight', 'AF_FixedWeightList', 'AF_MultiFactor', 'ALIGN', 'AMA', 'AMO', 'ASIN', 'ATAN', 'ATR', 'AVEDEV', 'AllocateFundsBase', 'BACKSET', 'BARSCOUNT', 'BARSLAST', 'BARSSINCE', 'BARSSINCEN', 'BASE_DIR', 'BETWEEN', 'BLOCKSETNUM', 'BUSINESS', 'Block', 'BlockInfoDriver', 'BorrowRecord', 'BrokerPositionRecord', 'CAPITAL', 'CEILING', 'CLOSE', 'CN_Bool', 'CN_OPLine', 'CONST', 'CONTEXT', 'CONTEXT_K', 'CORR', 'COS', 'COST', 'COUNT', 'CROSS', 'CVAL', 'CYCLE', 'C_AMO', 'C_CLOSE', 'C_HIGH', 'C_KDATA', 'C_LOW', 'C_OPEN', 'C_VOL', 'ConditionBase', 'Constant', 'CostRecord', 'DATE', 'DAY', 'DEBUG', 'DECLINE', 'DEVSQ', 'DIFF', 'DIRECT', 'DISCARD', 'DMA', 'DOWNNDAY', 'DROPNA', 'DataDriverFactory', 'Datetime', 'DatetimeList', 'DatetimeList_to_df', 'DatetimeList_to_np', 'Datetime_date', 'Datetime_datetime', 'Days', 'EMA', 'ERROR', 'EVERY', 'EV_Bool', 'EV_TwoLine', 'EXIST', 'EXP', 'EnvironmentBase', 'FATAL', 'FILTER', 'FINANCE', 'FLOOR', 'FundsRecord', 'HHV', 'HHVBARS', 'HIGH', 'HKUCheckError', 'HKUException', 'HOUR', 'HSL', 'Hours', 'IC', 'ICIR', 'IF', 'INBLOCK', 'INDEXA', 'INDEXADV', 'INDEXC', 'INDEXDEC', 'INDEXH', 'INDEXL', 'INDEXO', 'INDEXV', 'INFO', 'INSUM', 'INTPART', 'IR', 'ISINF', 'ISINFA', 'ISLASTBAR', 'ISNA', 'IndParam', 'Indicator', 'IndicatorImp', 'JUMPDOWN', 'JUMPUP', 'KALMAN', 'KDATA', 'KDATA_PART', 'KDJ', 'KData', 'KDataDriver', 'KDataToHdf5Importer', 'KData_getitem', 'KData_iter', 'KData_to_df', 'KData_to_np', 'KRecord', 'KRecordList', 'LAST', 'LASTVALUE', 'LIUTONGPAN', 'LLV', 'LLVBARS', 'LN', 'LOG', 'LOG_LEVEL', 'LONGCROSS', 'LOW', 'LoanRecord', 'LoggingContext', 'MA', 'MACD', 'MAX', '
|
|
589
|
+
__all__ = ['ABS', 'ACOS', 'AD', 'ADVANCE', 'AF_EqualWeight', 'AF_FixedWeight', 'AF_FixedWeightList', 'AF_MultiFactor', 'ALIGN', 'AMA', 'AMO', 'ASIN', 'ATAN', 'ATR', 'AVEDEV', 'AllocateFundsBase', 'BACKSET', 'BARSCOUNT', 'BARSLAST', 'BARSLASTCOUNT', 'BARSSINCE', 'BARSSINCEN', 'BASE_DIR', 'BETWEEN', 'BLOCKSETNUM', 'BUSINESS', 'Block', 'BlockInfoDriver', 'BorrowRecord', 'BrokerPositionRecord', 'CAPITAL', 'CEILING', 'CLOSE', 'CN_Bool', 'CN_OPLine', 'CONST', 'CONTEXT', 'CONTEXT_K', 'CORR', 'COS', 'COST', 'COUNT', 'CROSS', 'CVAL', 'CYCLE', 'C_AMO', 'C_CLOSE', 'C_HIGH', 'C_KDATA', 'C_LOW', 'C_OPEN', 'C_VOL', 'ConditionBase', 'Constant', 'CostRecord', 'DATE', 'DAY', 'DEBUG', 'DECLINE', 'DEVSQ', 'DIFF', 'DIRECT', 'DISCARD', 'DMA', 'DOWNNDAY', 'DROPNA', 'DataDriverFactory', 'Datetime', 'DatetimeList', 'DatetimeList_to_df', 'DatetimeList_to_np', 'Datetime_date', 'Datetime_datetime', 'Days', 'EMA', 'ERROR', 'EVERY', 'EV_Bool', 'EV_TwoLine', 'EXIST', 'EXP', 'EnvironmentBase', 'FATAL', 'FILTER', 'FINANCE', 'FLOOR', 'FundsRecord', 'HHV', 'HHVBARS', 'HIGH', 'HKUCheckError', 'HKUException', 'HOUR', 'HSL', 'Hours', 'IC', 'ICIR', 'IF', 'INBLOCK', 'INDEXA', 'INDEXADV', 'INDEXC', 'INDEXDEC', 'INDEXH', 'INDEXL', 'INDEXO', 'INDEXV', 'INFO', 'INSUM', 'INTPART', 'IR', 'ISINF', 'ISINFA', 'ISLASTBAR', 'ISNA', 'IndParam', 'Indicator', 'IndicatorImp', 'JUMPDOWN', 'JUMPUP', 'KALMAN', 'KDATA', 'KDATA_PART', 'KDJ', 'KData', 'KDataDriver', 'KDataToHdf5Importer', 'KData_getitem', 'KData_iter', 'KData_to_df', 'KData_to_np', 'KRecord', 'KRecordList', 'LAST', 'LASTVALUE', 'LIUTONGPAN', 'LLV', 'LLVBARS', 'LN', 'LOG', 'LOG_LEVEL', 'LONGCROSS', 'LOW', 'LoanRecord', 'LoggingContext', 'MA', 'MACD', 'MAX', 'MDD', 'MF_EqualWeight', 'MF_ICIRWeight', 'MF_ICWeight', 'MF_Weight', 'MIN', 'MINUTE', 'MM_FixedCapital', 'MM_FixedCapitalFunds', 'MM_FixedCount', 'MM_FixedCountTps', 'MM_FixedPercent', 'MM_FixedRisk', 'MM_FixedUnits', 'MM_Nothing', 'MM_WilliamsFixedRisk', 'MOD', 'MONTH', 'MRR', 'MarketInfo', 'Microseconds', 'Milliseconds', 'Minutes', 'MoneyManagerBase', 'MultiFactorBase', 'NDAY', 'NOT', 'OFF', 'OPEN', 'OrderBrokerBase', 'PF_Simple', 'PF_WithoutAF', 'PG_FixedHoldDays', 'PG_FixedPercent', 'PG_NoGoal', 'POS', 'POW', 'PRICELIST', 'Parameter', 'Parameter_items', 'Parameter_iter', 'Parameter_keys', 'Parameter_to_dict', 'Path', 'Performance', 'Performance_to_df', 'Portfolio', 'PositionList_to_df', 'PositionList_to_np', 'PositionRecord', 'PositionRecordList', 'ProfitGoalBase', 'Query', 'RANK', 'RECOVER_BACKWARD', 'RECOVER_EQUAL_BACKWARD', 'RECOVER_EQUAL_FORWARD', 'RECOVER_FORWARD', 'REF', 'REPLACE', 'RESULT', 'REVERSE', 'ROC', 'ROCP', 'ROCR', 'ROCR100', 'ROUND', 'ROUNDDOWN', 'ROUNDUP', 'RSI', 'SAFTYLOSS', 'SE_EvaluateOptimal', 'SE_Fixed', 'SE_MaxFundsOptimal', 'SE_MultiFactor', 'SE_PerformanceOptimal', 'SE_Signal', 'SGN', 'SG_Add', 'SG_AllwaysBuy', 'SG_And', 'SG_Band', 'SG_Bool', 'SG_Buy', 'SG_Cross', 'SG_CrossGold', 'SG_Cycle', 'SG_Div', 'SG_Flex', 'SG_Mul', 'SG_OneSide', 'SG_Or', 'SG_Sell', 'SG_Single', 'SG_Single2', 'SG_Sub', 'SIN', 'SLICE', 'SLOPE', 'SMA', 'SPEARMAN', 'SP_FixedPercent', 'SP_FixedValue', 'SQRT', 'STD', 'STDEV', 'STDP', 'ST_FixedPercent', 'ST_Indicator', 'ST_Saftyloss', 'SUM', 'SUMBARS', 'SYS_Simple', 'SYS_WalkForward', 'ScoreRecord', 'ScoreRecordList', 'Seconds', 'SelectorBase', 'SignalBase', 'SlippageBase', 'SpotRecord', 'Stock', 'StockManager', 'StockTypeInfo', 'StockWeight', 'StockWeightList', 'StoplossBase', 'Strategy', 'StrategyContext', 'System', 'SystemPart', 'SystemWeight', 'SystemWeightList', 'TAN', 'TA_ACCBANDS', 'TA_ACOS', 'TA_AD', 'TA_ADD', 'TA_ADOSC', 'TA_ADX', 'TA_ADXR', 'TA_APO', 'TA_AROON', 'TA_AROONOSC', 'TA_ASIN', 'TA_ATAN', 'TA_ATR', 'TA_AVGDEV', 'TA_AVGPRICE', 'TA_BBANDS', 'TA_BETA', 'TA_BOP', 'TA_CCI', 'TA_CDL2CROWS', 'TA_CDL3BLACKCROWS', 'TA_CDL3INSIDE', 'TA_CDL3LINESTRIKE', 'TA_CDL3OUTSIDE', 'TA_CDL3STARSINSOUTH', 'TA_CDL3WHITESOLDIERS', 'TA_CDLABANDONEDBABY', 'TA_CDLADVANCEBLOCK', 'TA_CDLBELTHOLD', 'TA_CDLBREAKAWAY', 'TA_CDLCLOSINGMARUBOZU', 'TA_CDLCONCEALBABYSWALL', 'TA_CDLCOUNTERATTACK', 'TA_CDLDARKCLOUDCOVER', 'TA_CDLDOJI', 'TA_CDLDOJISTAR', 'TA_CDLDRAGONFLYDOJI', 'TA_CDLENGULFING', 'TA_CDLEVENINGDOJISTAR', 'TA_CDLEVENINGSTAR', 'TA_CDLGAPSIDESIDEWHITE', 'TA_CDLGRAVESTONEDOJI', 'TA_CDLHAMMER', 'TA_CDLHANGINGMAN', 'TA_CDLHARAMI', 'TA_CDLHARAMICROSS', 'TA_CDLHIGHWAVE', 'TA_CDLHIKKAKE', 'TA_CDLHIKKAKEMOD', 'TA_CDLHOMINGPIGEON', 'TA_CDLIDENTICAL3CROWS', 'TA_CDLINNECK', 'TA_CDLINVERTEDHAMMER', 'TA_CDLKICKING', 'TA_CDLKICKINGBYLENGTH', 'TA_CDLLADDERBOTTOM', 'TA_CDLLONGLEGGEDDOJI', 'TA_CDLLONGLINE', 'TA_CDLMARUBOZU', 'TA_CDLMATCHINGLOW', 'TA_CDLMATHOLD', 'TA_CDLMORNINGDOJISTAR', 'TA_CDLMORNINGSTAR', 'TA_CDLONNECK', 'TA_CDLPIERCING', 'TA_CDLRICKSHAWMAN', 'TA_CDLRISEFALL3METHODS', 'TA_CDLSEPARATINGLINES', 'TA_CDLSHOOTINGSTAR', 'TA_CDLSHORTLINE', 'TA_CDLSPINNINGTOP', 'TA_CDLSTALLEDPATTERN', 'TA_CDLSTICKSANDWICH', 'TA_CDLTAKURI', 'TA_CDLTASUKIGAP', 'TA_CDLTHRUSTING', 'TA_CDLTRISTAR', 'TA_CDLUNIQUE3RIVER', 'TA_CDLUPSIDEGAP2CROWS', 'TA_CDLXSIDEGAP3METHODS', 'TA_CEIL', 'TA_CMO', 'TA_CORREL', 'TA_COS', 'TA_COSH', 'TA_DEMA', 'TA_DIV', 'TA_DX', 'TA_EMA', 'TA_EXP', 'TA_FLOOR', 'TA_HT_DCPERIOD', 'TA_HT_DCPHASE', 'TA_HT_PHASOR', 'TA_HT_SINE', 'TA_HT_TRENDLINE', 'TA_HT_TRENDMODE', 'TA_IMI', 'TA_KAMA', 'TA_LINEARREG', 'TA_LINEARREG_ANGLE', 'TA_LINEARREG_INTERCEPT', 'TA_LINEARREG_SLOPE', 'TA_LN', 'TA_LOG10', 'TA_MA', 'TA_MACD', 'TA_MACDEXT', 'TA_MACDFIX', 'TA_MAMA', 'TA_MAVP', 'TA_MAX', 'TA_MAXINDEX', 'TA_MEDPRICE', 'TA_MFI', 'TA_MIDPOINT', 'TA_MIDPRICE', 'TA_MIN', 'TA_MININDEX', 'TA_MINMAX', 'TA_MINMAXINDEX', 'TA_MINUS_DI', 'TA_MINUS_DM', 'TA_MOM', 'TA_MULT', 'TA_NATR', 'TA_OBV', 'TA_PLUS_DI', 'TA_PLUS_DM', 'TA_PPO', 'TA_ROC', 'TA_ROCP', 'TA_ROCR', 'TA_ROCR100', 'TA_RSI', 'TA_SAR', 'TA_SAREXT', 'TA_SIN', 'TA_SINH', 'TA_SMA', 'TA_SQRT', 'TA_STDDEV', 'TA_STOCH', 'TA_STOCHF', 'TA_STOCHRSI', 'TA_SUB', 'TA_SUM', 'TA_T3', 'TA_TAN', 'TA_TANH', 'TA_TEMA', 'TA_TRANGE', 'TA_TRIMA', 'TA_TRIX', 'TA_TSF', 'TA_TYPPRICE', 'TA_ULTOSC', 'TA_VAR', 'TA_WCLPRICE', 'TA_WILLR', 'TA_WMA', 'TC_FixedA', 'TC_FixedA2015', 'TC_FixedA2017', 'TC_TestStub', 'TC_Zero', 'TIME', 'TIMELINE', 'TIMELINEVOL', 'TR', 'TRACE', 'TURNOVER', 'TimeDelta', 'TimeDelta_timedelta', 'TimeLineList', 'TimeLineRecord', 'TimeLine_to_df', 'TimeLine_to_np', 'TradeCostBase', 'TradeList_to_df', 'TradeList_to_np', 'TradeManager', 'TradeRecord', 'TradeRecordList', 'TradeRequest', 'TransList', 'TransList_to_df', 'TransList_to_np', 'TransRecord', 'UPNDAY', 'UTCOffset', 'VALUE', 'VAR', 'VARP', 'VIGOR', 'VOL', 'WARN', 'WEAVE', 'WEEK', 'WINNER', 'WITHDAY', 'WITHHALFYEAR', 'WITHHOUR', 'WITHHOUR2', 'WITHHOUR4', 'WITHKTYPE', 'WITHMIN', 'WITHMIN15', 'WITHMIN30', 'WITHMIN5', 'WITHMIN60', 'WITHMONTH', 'WITHQUARTER', 'WITHWEEK', 'WITHYEAR', 'WMA', 'YEAR', 'ZHBOND10', 'ZONGGUBEN', 'ZSCORE', 'active_device', 'add_class_logger_handler', 'backtest', 'batch_calculate_inds', 'can_upgrade', 'capture_multiprocess_all_logger', 'class_logger', 'close_ostream_to_python', 'close_spend_time', 'combinate_ind', 'combinate_index', 'concat_to_df', 'constant', 'core', 'cpp', 'crtBrokerTM', 'crtSEOptimal', 'crtTM', 'crt_pf_strategy', 'crt_sys_strategy', 'current_path', 'date', 'datetime', 'df_to_ind', 'dll_directory', 'extend', 'fetch_trial_license', 'find_optimal_system', 'find_optimal_system_multi', 'get_block', 'get_business_name', 'get_data_from_buffer_server', 'get_date_range', 'get_kdata', 'get_last_version', 'get_log_level', 'get_stock', 'get_system_part_enum', 'get_system_part_name', 'get_version', 'get_version_git', 'get_version_with_build', 'hikyuu_init', 'hku_benchmark', 'hku_catch', 'hku_check', 'hku_check_ignore', 'hku_check_throw', 'hku_debug', 'hku_debug_if', 'hku_error', 'hku_error_if', 'hku_fatal', 'hku_fatal_if', 'hku_info', 'hku_info_if', 'hku_logger', 'hku_to_async', 'hku_trace', 'hku_trace_if', 'hku_warn', 'hku_warn_if', 'in_interactive_session', 'in_ipython_frontend', 'indicator', 'indicator_getitem', 'indicator_iter', 'indicator_to_df', 'inner_analysis_sys_list', 'inner_combinate_ind_analysis', 'inner_combinate_ind_analysis_with_block', 'is_valid_license', 'isinf', 'isnan', 'list_getitem', 'new_Query_init', 'new_path', 'np', 'old_Query_init', 'open_ostream_to_python', 'open_spend_time', 'os', 'pd', 'pickle', 'pyind', 'remove_license', 'roundDown', 'roundEx', 'roundUp', 'run_in_strategy', 'set_log_level', 'set_my_logger_file', 'set_python_in_interactive', 'set_python_in_jupyter', 'spend_time', 'start_data_server', 'start_spot_agent', 'stop_data_server', 'stop_spot_agent', 'sys', 'talib_wrap', 'timedelta', 'timeout', 'toPriceList', 'traceback', 'util', 'view_license', 'with_trace']
|
|
573
590
|
def Performance_to_df(per):
|
|
574
591
|
"""
|
|
575
592
|
将 Performance 统计结果转换为 DataFrame 格式
|
|
@@ -600,8 +617,6 @@ HIGH: hikyuu.cpp.core39.Indicator # value = Indicator{...
|
|
|
600
617
|
INFO: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.INFO: 2>
|
|
601
618
|
KDATA: hikyuu.cpp.core39.Indicator # value = Indicator{...
|
|
602
619
|
LOW: hikyuu.cpp.core39.Indicator # value = Indicator{...
|
|
603
|
-
MAXYEAR: int = 9999
|
|
604
|
-
MINYEAR: int = 1
|
|
605
620
|
OFF: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.OFF: 6>
|
|
606
621
|
OPEN: hikyuu.cpp.core39.Indicator # value = Indicator{...
|
|
607
622
|
TRACE: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.TRACE: 0>
|
hikyuu/util/singleton.pyi
CHANGED
|
@@ -12,7 +12,7 @@ class SingletonType(type):
|
|
|
12
12
|
self.name = name
|
|
13
13
|
|
|
14
14
|
"""
|
|
15
|
-
_instance_lock: typing.ClassVar[_thread.lock] # value = <unlocked _thread.lock object at
|
|
15
|
+
_instance_lock: typing.ClassVar[_thread.lock] # value = <unlocked _thread.lock object at 0x00000254A5054300>
|
|
16
16
|
@classmethod
|
|
17
17
|
def __call__(cls, *args, **kwargs):
|
|
18
18
|
...
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hikyuu
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.5
|
|
4
4
|
Summary: Hikyuu Quant Framework for System Trading Analysis and backtester
|
|
5
5
|
Home-page: http://hikyuu.org/
|
|
6
6
|
Author: fasiondog
|
|
@@ -31,7 +31,7 @@ Requires-Dist: click
|
|
|
31
31
|
Requires-Dist: numpy
|
|
32
32
|
Requires-Dist: matplotlib
|
|
33
33
|
Requires-Dist: seaborn
|
|
34
|
-
Requires-Dist: pandas>=0.
|
|
34
|
+
Requires-Dist: pandas>=1.0.4
|
|
35
35
|
Requires-Dist: pytdx
|
|
36
36
|
Requires-Dist: PyQt5
|
|
37
37
|
Requires-Dist: tables
|
|
@@ -49,6 +49,7 @@ Requires-Dist: pyecharts
|
|
|
49
49
|
Requires-Dist: pipdeptree
|
|
50
50
|
Requires-Dist: h5py
|
|
51
51
|
Requires-Dist: tdqm
|
|
52
|
+
Requires-Dist: taospy
|
|
52
53
|
|
|
53
54
|

|
|
54
55
|
|
|
@@ -113,7 +114,7 @@ Hikyuu Quant Framework是一款基于C++/Python的开源量化交易研究框架
|
|
|
113
114
|
|
|
114
115
|
# 想要更多了解Hikyuu?请使用以下方式联系:
|
|
115
116
|
|
|
116
|
-
## [
|
|
117
|
+
## [VIP捐赠-附属功能](https://hikyuu.readthedocs.io/zh-cn/latest/vip/vip-plan.html)
|
|
117
118
|
|
|
118
119
|
## **加入知识星球**
|
|
119
120
|
|