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/extend.py
CHANGED
|
@@ -9,7 +9,7 @@ from .core import *
|
|
|
9
9
|
import os
|
|
10
10
|
os.environ["NUMEXPR_MAX_THREADS"] = str(os.cpu_count())
|
|
11
11
|
|
|
12
|
-
from datetime import
|
|
12
|
+
from datetime import datetime, timedelta, date # NOQA: E402
|
|
13
13
|
import numpy as np # NOQA: E402
|
|
14
14
|
import pandas as pd # NOQA: E402
|
|
15
15
|
|
hikyuu/extend.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
|
import hikyuu.cpp.core39
|
|
9
6
|
from hikyuu.cpp.core39 import ABS
|
|
10
7
|
from hikyuu.cpp.core39 import ACOS
|
|
@@ -24,6 +21,7 @@ from hikyuu.cpp.core39 import AllocateFundsBase
|
|
|
24
21
|
from hikyuu.cpp.core39 import BACKSET
|
|
25
22
|
from hikyuu.cpp.core39 import BARSCOUNT
|
|
26
23
|
from hikyuu.cpp.core39 import BARSLAST
|
|
24
|
+
from hikyuu.cpp.core39 import BARSLASTCOUNT
|
|
27
25
|
from hikyuu.cpp.core39 import BARSSINCE
|
|
28
26
|
from hikyuu.cpp.core39 import BARSSINCEN
|
|
29
27
|
from hikyuu.cpp.core39 import BETWEEN
|
|
@@ -173,6 +171,7 @@ from hikyuu.cpp.core39 import PositionRecord
|
|
|
173
171
|
from hikyuu.cpp.core39 import PositionRecordList
|
|
174
172
|
from hikyuu.cpp.core39 import ProfitGoalBase
|
|
175
173
|
from hikyuu.cpp.core39 import Query
|
|
174
|
+
from hikyuu.cpp.core39 import RANK
|
|
176
175
|
from hikyuu.cpp.core39 import RECOVER_BACKWARD
|
|
177
176
|
from hikyuu.cpp.core39 import RECOVER_EQUAL_BACKWARD
|
|
178
177
|
from hikyuu.cpp.core39 import RECOVER_EQUAL_FORWARD
|
|
@@ -190,6 +189,7 @@ from hikyuu.cpp.core39 import ROUNDDOWN
|
|
|
190
189
|
from hikyuu.cpp.core39 import ROUNDUP
|
|
191
190
|
from hikyuu.cpp.core39 import RSI
|
|
192
191
|
from hikyuu.cpp.core39 import SAFTYLOSS
|
|
192
|
+
from hikyuu.cpp.core39 import SE_EvaluateOptimal
|
|
193
193
|
from hikyuu.cpp.core39 import SE_Fixed
|
|
194
194
|
from hikyuu.cpp.core39 import SE_MaxFundsOptimal
|
|
195
195
|
from hikyuu.cpp.core39 import SE_MultiFactor
|
|
@@ -433,22 +433,38 @@ from hikyuu.cpp.core39 import TradeRequest
|
|
|
433
433
|
from hikyuu.cpp.core39 import TransList
|
|
434
434
|
from hikyuu.cpp.core39 import TransRecord
|
|
435
435
|
from hikyuu.cpp.core39 import UPNDAY
|
|
436
|
+
from hikyuu.cpp.core39 import UTCOffset
|
|
436
437
|
from hikyuu.cpp.core39 import VAR
|
|
437
438
|
from hikyuu.cpp.core39 import VARP
|
|
438
439
|
from hikyuu.cpp.core39 import VIGOR
|
|
439
440
|
from hikyuu.cpp.core39 import WEAVE
|
|
440
441
|
from hikyuu.cpp.core39 import WEEK
|
|
441
442
|
from hikyuu.cpp.core39 import WINNER
|
|
443
|
+
from hikyuu.cpp.core39 import WITHDAY
|
|
444
|
+
from hikyuu.cpp.core39 import WITHHALFYEAR
|
|
445
|
+
from hikyuu.cpp.core39 import WITHHOUR
|
|
446
|
+
from hikyuu.cpp.core39 import WITHHOUR2
|
|
447
|
+
from hikyuu.cpp.core39 import WITHHOUR4
|
|
448
|
+
from hikyuu.cpp.core39 import WITHKTYPE
|
|
449
|
+
from hikyuu.cpp.core39 import WITHMIN
|
|
450
|
+
from hikyuu.cpp.core39 import WITHMIN15
|
|
451
|
+
from hikyuu.cpp.core39 import WITHMIN30
|
|
452
|
+
from hikyuu.cpp.core39 import WITHMIN5
|
|
453
|
+
from hikyuu.cpp.core39 import WITHMIN60
|
|
454
|
+
from hikyuu.cpp.core39 import WITHMONTH
|
|
455
|
+
from hikyuu.cpp.core39 import WITHQUARTER
|
|
456
|
+
from hikyuu.cpp.core39 import WITHWEEK
|
|
457
|
+
from hikyuu.cpp.core39 import WITHYEAR
|
|
442
458
|
from hikyuu.cpp.core39 import WMA
|
|
443
459
|
from hikyuu.cpp.core39 import YEAR
|
|
444
460
|
from hikyuu.cpp.core39 import ZHBOND10
|
|
445
461
|
from hikyuu.cpp.core39 import ZONGGUBEN
|
|
446
462
|
from hikyuu.cpp.core39 import ZSCORE
|
|
447
|
-
from hikyuu.cpp.core39 import __add__ as __old_TimeDelta_add__
|
|
448
463
|
from hikyuu.cpp.core39 import __add__ as __old_Datetime_add__
|
|
449
|
-
from hikyuu.cpp.core39 import
|
|
450
|
-
from hikyuu.cpp.core39 import __init__ as __old_TimeDelta_init__
|
|
464
|
+
from hikyuu.cpp.core39 import __add__ as __old_TimeDelta_add__
|
|
451
465
|
from hikyuu.cpp.core39 import __init__ as old_Query_init
|
|
466
|
+
from hikyuu.cpp.core39 import __init__ as __old_TimeDelta_init__
|
|
467
|
+
from hikyuu.cpp.core39 import __init__ as __old_Datetime_init__
|
|
452
468
|
from hikyuu.cpp.core39 import __sub__ as __old_TimeDelta_sub__
|
|
453
469
|
from hikyuu.cpp.core39 import __sub__ as __old_Datetime_sub__
|
|
454
470
|
from hikyuu.cpp.core39 import active_device
|
|
@@ -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
|
|
@@ -506,7 +523,7 @@ import numpy as np
|
|
|
506
523
|
import os as os
|
|
507
524
|
import pandas as pd
|
|
508
525
|
import sys as sys
|
|
509
|
-
__all__ = ['ABS', 'ACOS', 'AD', 'ADVANCE', 'AF_EqualWeight', 'AF_FixedWeight', 'AF_FixedWeightList', 'AF_MultiFactor', 'ALIGN', 'AMA', 'ASIN', 'ATAN', 'ATR', 'AVEDEV', 'AllocateFundsBase', 'BACKSET', 'BARSCOUNT', 'BARSLAST', 'BARSSINCE', 'BARSSINCEN', 'BETWEEN', 'BLOCKSETNUM', 'BUSINESS', 'Block', 'BlockInfoDriver', 'BorrowRecord', 'BrokerPositionRecord', 'CEILING', 'CN_Bool', 'CN_OPLine', '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', '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_PART', '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', 'LoanRecord', 'MA', 'MACD', 'MAX', '
|
|
526
|
+
__all__ = ['ABS', 'ACOS', 'AD', 'ADVANCE', 'AF_EqualWeight', 'AF_FixedWeight', 'AF_FixedWeightList', 'AF_MultiFactor', 'ALIGN', 'AMA', 'ASIN', 'ATAN', 'ATR', 'AVEDEV', 'AllocateFundsBase', 'BACKSET', 'BARSCOUNT', 'BARSLAST', 'BARSLASTCOUNT', 'BARSSINCE', 'BARSSINCEN', 'BETWEEN', 'BLOCKSETNUM', 'BUSINESS', 'Block', 'BlockInfoDriver', 'BorrowRecord', 'BrokerPositionRecord', 'CEILING', 'CN_Bool', 'CN_OPLine', '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', '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_PART', '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', 'LoanRecord', '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', 'OrderBrokerBase', 'PF_Simple', 'PF_WithoutAF', 'PG_FixedHoldDays', 'PG_FixedPercent', 'PG_NoGoal', 'POS', 'POW', 'PRICELIST', 'Parameter', 'Parameter_items', 'Parameter_iter', 'Parameter_keys', 'Parameter_to_dict', 'Performance', 'Portfolio', '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', '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', 'TradeManager', 'TradeRecord', 'TradeRecordList', 'TradeRequest', 'TransList', 'TransList_to_df', 'TransList_to_np', 'TransRecord', 'UPNDAY', 'UTCOffset', 'VAR', 'VARP', 'VIGOR', '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', 'backtest', 'batch_calculate_inds', 'can_upgrade', 'close_ostream_to_python', 'close_spend_time', 'combinate_ind', 'combinate_index', 'constant', 'crtBrokerTM', 'crtSEOptimal', 'crtTM', 'crt_pf_strategy', 'crt_sys_strategy', 'date', 'datetime', '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', 'inner_analysis_sys_list', 'inner_combinate_ind_analysis', 'inner_combinate_ind_analysis_with_block', 'is_valid_license', 'isinf', 'isnan', 'new_Query_init', 'np', 'old_Query_init', 'open_ostream_to_python', 'open_spend_time', 'os', 'pd', 'remove_license', 'roundDown', 'roundEx', 'roundUp', 'run_in_strategy', 'set_log_level', 'set_python_in_interactive', 'set_python_in_jupyter', 'start_data_server', 'start_spot_agent', 'stop_data_server', 'stop_spot_agent', 'sys', 'timedelta', 'toPriceList', 'view_license']
|
|
510
527
|
def DatetimeList_to_df(data):
|
|
511
528
|
"""
|
|
512
529
|
仅在安装了pandas模块时生效,转换为pandas.DataFrame
|
|
@@ -626,8 +643,6 @@ DEBUG: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.DEBUG: 1>
|
|
|
626
643
|
ERROR: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.ERROR: 4>
|
|
627
644
|
FATAL: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.FATAL: 5>
|
|
628
645
|
INFO: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.INFO: 2>
|
|
629
|
-
MAXYEAR: int = 9999
|
|
630
|
-
MINYEAR: int = 1
|
|
631
646
|
OFF: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.OFF: 6>
|
|
632
647
|
TRACE: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.TRACE: 0>
|
|
633
648
|
WARN: hikyuu.cpp.core39.LOG_LEVEL # value = <LOG_LEVEL.WARN: 3>
|
|
@@ -6,8 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
import requests
|
|
8
8
|
import math
|
|
9
|
+
import time
|
|
10
|
+
import random
|
|
9
11
|
import akshare as ak
|
|
10
12
|
import pandas as pd
|
|
13
|
+
import re
|
|
14
|
+
from functools import lru_cache
|
|
11
15
|
from hikyuu.util import *
|
|
12
16
|
|
|
13
17
|
em_num_per_page = 100
|
|
@@ -42,6 +46,7 @@ def get_hybk_names():
|
|
|
42
46
|
continue
|
|
43
47
|
tmp = [(v['f12'], v['f14']) for v in data_json["data"]["diff"]]
|
|
44
48
|
ret.extend(tmp)
|
|
49
|
+
time.sleep(random.uniform(1, 3))
|
|
45
50
|
return ret
|
|
46
51
|
|
|
47
52
|
|
|
@@ -73,6 +78,7 @@ def get_hybk_cons_code(blk_code):
|
|
|
73
78
|
if data_json["data"] is None:
|
|
74
79
|
continue
|
|
75
80
|
tmp = [v['f12'] for v in data_json["data"]['diff']]
|
|
81
|
+
time.sleep(random.uniform(1, 3))
|
|
76
82
|
ret.extend(tmp)
|
|
77
83
|
return ret
|
|
78
84
|
|
|
@@ -90,15 +96,350 @@ def get_all_hybk_info(code_market_dict, sep=""):
|
|
|
90
96
|
return ret
|
|
91
97
|
|
|
92
98
|
|
|
99
|
+
def get_tqdm(enable: bool = True):
|
|
100
|
+
"""
|
|
101
|
+
返回适用于当前环境的 tqdm 对象。
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
enable (bool): 是否启用进度条。默认为 True。
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
tqdm 对象。
|
|
108
|
+
"""
|
|
109
|
+
if not enable:
|
|
110
|
+
# 如果进度条被禁用,返回一个不显示进度条的 tqdm 对象
|
|
111
|
+
return lambda iterable, *args, **kwargs: iterable
|
|
112
|
+
|
|
113
|
+
try:
|
|
114
|
+
# 尝试检查是否在 jupyter notebook 环境中,有利于退出进度条
|
|
115
|
+
# noinspection PyUnresolvedReferences
|
|
116
|
+
shell = get_ipython().__class__.__name__
|
|
117
|
+
if shell == "ZMQInteractiveShell":
|
|
118
|
+
from tqdm.notebook import tqdm
|
|
119
|
+
else:
|
|
120
|
+
from tqdm import tqdm
|
|
121
|
+
except (NameError, ImportError):
|
|
122
|
+
# 如果不在 Jupyter 环境中,就使用标准 tqdm
|
|
123
|
+
from tqdm import tqdm
|
|
124
|
+
|
|
125
|
+
return tqdm
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def fetch_paginated_data(url: str, base_params: dict, timeout: int = 15):
|
|
129
|
+
"""
|
|
130
|
+
东方财富-分页获取数据并合并结果
|
|
131
|
+
https://quote.eastmoney.com/f1.html?newcode=0.000001
|
|
132
|
+
:param url: 股票代码
|
|
133
|
+
:type url: str
|
|
134
|
+
:param base_params: 基础请求参数
|
|
135
|
+
:type base_params: dict
|
|
136
|
+
:param timeout: 请求超时时间
|
|
137
|
+
:type timeout: str
|
|
138
|
+
:return: 合并后的数据
|
|
139
|
+
:rtype: pandas.DataFrame
|
|
140
|
+
"""
|
|
141
|
+
# 复制参数以避免修改原始参数
|
|
142
|
+
params = base_params.copy()
|
|
143
|
+
# 获取第一页数据,用于确定分页信息
|
|
144
|
+
r = requests.get(url, params=params, timeout=timeout)
|
|
145
|
+
data_json = r.json()
|
|
146
|
+
# 计算分页信息
|
|
147
|
+
per_page_num = len(data_json["data"]["diff"])
|
|
148
|
+
total_page = math.ceil(data_json["data"]["total"] / per_page_num)
|
|
149
|
+
# 存储所有页面数据
|
|
150
|
+
temp_list = []
|
|
151
|
+
# 添加第一页数据
|
|
152
|
+
temp_list.append(pd.DataFrame(data_json["data"]["diff"]))
|
|
153
|
+
# 获取进度条
|
|
154
|
+
tqdm = get_tqdm()
|
|
155
|
+
# 获取剩余页面数据
|
|
156
|
+
for page in tqdm(range(2, total_page + 1), leave=False):
|
|
157
|
+
params.update({"pn": page})
|
|
158
|
+
r = requests.get(url, params=params, timeout=timeout)
|
|
159
|
+
data_json = r.json()
|
|
160
|
+
inner_temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
161
|
+
temp_list.append(inner_temp_df)
|
|
162
|
+
time.sleep(random.uniform(1, 3))
|
|
163
|
+
# 合并所有数据
|
|
164
|
+
temp_df = pd.concat(temp_list, ignore_index=True)
|
|
165
|
+
temp_df["f3"] = pd.to_numeric(temp_df["f3"], errors="coerce")
|
|
166
|
+
temp_df.sort_values(by=["f3"], ascending=False, inplace=True, ignore_index=True)
|
|
167
|
+
temp_df.reset_index(inplace=True)
|
|
168
|
+
temp_df["index"] = temp_df["index"].astype(int) + 1
|
|
169
|
+
return temp_df
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def stock_board_concept_name_em() -> pd.DataFrame:
|
|
173
|
+
"""
|
|
174
|
+
from akshare
|
|
175
|
+
东方财富网-行情中心-沪深京板块-概念板块-名称
|
|
176
|
+
https://quote.eastmoney.com/center/boardlist.html#concept_board
|
|
177
|
+
:return: 概念板块-名称
|
|
178
|
+
:rtype: pandas.DataFrame
|
|
179
|
+
"""
|
|
180
|
+
url = "https://59.push2.eastmoney.com/api/qt/clist/get"
|
|
181
|
+
params = {
|
|
182
|
+
"pn": "1",
|
|
183
|
+
"pz": "100",
|
|
184
|
+
"po": "1",
|
|
185
|
+
"np": "1",
|
|
186
|
+
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
187
|
+
"fltt": "2",
|
|
188
|
+
"invt": "2",
|
|
189
|
+
"fid": "f12",
|
|
190
|
+
"fs": "m:90 t:3 f:!50",
|
|
191
|
+
"fields": "f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",
|
|
192
|
+
}
|
|
193
|
+
temp_df = fetch_paginated_data(url, params)
|
|
194
|
+
temp_df.columns = [
|
|
195
|
+
"排名",
|
|
196
|
+
"最新价",
|
|
197
|
+
"涨跌幅",
|
|
198
|
+
"涨跌额",
|
|
199
|
+
"换手率",
|
|
200
|
+
"_",
|
|
201
|
+
"板块代码",
|
|
202
|
+
"板块名称",
|
|
203
|
+
"_",
|
|
204
|
+
"_",
|
|
205
|
+
"_",
|
|
206
|
+
"_",
|
|
207
|
+
"总市值",
|
|
208
|
+
"_",
|
|
209
|
+
"_",
|
|
210
|
+
"_",
|
|
211
|
+
"_",
|
|
212
|
+
"_",
|
|
213
|
+
"_",
|
|
214
|
+
"上涨家数",
|
|
215
|
+
"下跌家数",
|
|
216
|
+
"_",
|
|
217
|
+
"_",
|
|
218
|
+
"领涨股票",
|
|
219
|
+
"_",
|
|
220
|
+
"_",
|
|
221
|
+
"领涨股票-涨跌幅",
|
|
222
|
+
]
|
|
223
|
+
temp_df = temp_df[
|
|
224
|
+
[
|
|
225
|
+
"排名",
|
|
226
|
+
"板块名称",
|
|
227
|
+
"板块代码",
|
|
228
|
+
"最新价",
|
|
229
|
+
"涨跌额",
|
|
230
|
+
"涨跌幅",
|
|
231
|
+
"总市值",
|
|
232
|
+
"换手率",
|
|
233
|
+
"上涨家数",
|
|
234
|
+
"下跌家数",
|
|
235
|
+
"领涨股票",
|
|
236
|
+
"领涨股票-涨跌幅",
|
|
237
|
+
]
|
|
238
|
+
]
|
|
239
|
+
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
|
240
|
+
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
|
241
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
242
|
+
temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
|
|
243
|
+
temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
|
|
244
|
+
temp_df["上涨家数"] = pd.to_numeric(temp_df["上涨家数"], errors="coerce")
|
|
245
|
+
temp_df["下跌家数"] = pd.to_numeric(temp_df["下跌家数"], errors="coerce")
|
|
246
|
+
temp_df["领涨股票-涨跌幅"] = pd.to_numeric(
|
|
247
|
+
temp_df["领涨股票-涨跌幅"], errors="coerce"
|
|
248
|
+
)
|
|
249
|
+
return temp_df
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
@lru_cache()
|
|
253
|
+
def __stock_board_concept_name_em() -> pd.DataFrame:
|
|
254
|
+
"""
|
|
255
|
+
东方财富网-行情中心-沪深京板块-概念板块-名称
|
|
256
|
+
https://quote.eastmoney.com/center/boardlist.html#concept_board
|
|
257
|
+
:return: 概念板块-名称
|
|
258
|
+
:rtype: pandas.DataFrame
|
|
259
|
+
"""
|
|
260
|
+
url = "https://79.push2.eastmoney.com/api/qt/clist/get"
|
|
261
|
+
params = {
|
|
262
|
+
"pn": "1",
|
|
263
|
+
"pz": "100",
|
|
264
|
+
"po": "1",
|
|
265
|
+
"np": "1",
|
|
266
|
+
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
267
|
+
"fltt": "2",
|
|
268
|
+
"invt": "2",
|
|
269
|
+
"fid": "f12",
|
|
270
|
+
"fs": "m:90 t:3 f:!50",
|
|
271
|
+
"fields": "f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",
|
|
272
|
+
}
|
|
273
|
+
temp_df = fetch_paginated_data(url, params)
|
|
274
|
+
temp_df.columns = [
|
|
275
|
+
"排名",
|
|
276
|
+
"最新价",
|
|
277
|
+
"涨跌幅",
|
|
278
|
+
"涨跌额",
|
|
279
|
+
"换手率",
|
|
280
|
+
"_",
|
|
281
|
+
"板块代码",
|
|
282
|
+
"板块名称",
|
|
283
|
+
"_",
|
|
284
|
+
"_",
|
|
285
|
+
"_",
|
|
286
|
+
"_",
|
|
287
|
+
"总市值",
|
|
288
|
+
"_",
|
|
289
|
+
"_",
|
|
290
|
+
"_",
|
|
291
|
+
"_",
|
|
292
|
+
"_",
|
|
293
|
+
"_",
|
|
294
|
+
"上涨家数",
|
|
295
|
+
"下跌家数",
|
|
296
|
+
"_",
|
|
297
|
+
"_",
|
|
298
|
+
"领涨股票",
|
|
299
|
+
"_",
|
|
300
|
+
"_",
|
|
301
|
+
"领涨股票-涨跌幅",
|
|
302
|
+
]
|
|
303
|
+
temp_df = temp_df[
|
|
304
|
+
[
|
|
305
|
+
"排名",
|
|
306
|
+
"板块名称",
|
|
307
|
+
"板块代码",
|
|
308
|
+
"最新价",
|
|
309
|
+
"涨跌额",
|
|
310
|
+
"涨跌幅",
|
|
311
|
+
"总市值",
|
|
312
|
+
"换手率",
|
|
313
|
+
"上涨家数",
|
|
314
|
+
"下跌家数",
|
|
315
|
+
"领涨股票",
|
|
316
|
+
"领涨股票-涨跌幅",
|
|
317
|
+
]
|
|
318
|
+
]
|
|
319
|
+
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
|
320
|
+
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
|
321
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
322
|
+
temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
|
|
323
|
+
temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
|
|
324
|
+
temp_df["上涨家数"] = pd.to_numeric(temp_df["上涨家数"], errors="coerce")
|
|
325
|
+
temp_df["下跌家数"] = pd.to_numeric(temp_df["下跌家数"], errors="coerce")
|
|
326
|
+
temp_df["领涨股票-涨跌幅"] = pd.to_numeric(
|
|
327
|
+
temp_df["领涨股票-涨跌幅"], errors="coerce"
|
|
328
|
+
)
|
|
329
|
+
return temp_df
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def stock_board_concept_cons_em(symbol: str = "融资融券") -> pd.DataFrame:
|
|
333
|
+
"""
|
|
334
|
+
东方财富-沪深板块-概念板块-板块成份
|
|
335
|
+
https://quote.eastmoney.com/center/boardlist.html#boards-BK06551
|
|
336
|
+
:param symbol: 板块名称或者板块代码
|
|
337
|
+
:type symbol: str
|
|
338
|
+
:return: 板块成份
|
|
339
|
+
:rtype: pandas.DataFrame
|
|
340
|
+
"""
|
|
341
|
+
if re.match(pattern=r"^BK\d+", string=symbol):
|
|
342
|
+
stock_board_code = symbol
|
|
343
|
+
else:
|
|
344
|
+
stock_board_concept_em_map = __stock_board_concept_name_em()
|
|
345
|
+
stock_board_code = stock_board_concept_em_map[
|
|
346
|
+
stock_board_concept_em_map["板块名称"] == symbol
|
|
347
|
+
]["板块代码"].values[0]
|
|
348
|
+
url = "https://29.push2.eastmoney.com/api/qt/clist/get"
|
|
349
|
+
params = {
|
|
350
|
+
"pn": "1",
|
|
351
|
+
"pz": "100",
|
|
352
|
+
"po": "1",
|
|
353
|
+
"np": "1",
|
|
354
|
+
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
355
|
+
"fltt": "2",
|
|
356
|
+
"invt": "2",
|
|
357
|
+
"fid": "f12",
|
|
358
|
+
"fs": f"b:{stock_board_code} f:!50",
|
|
359
|
+
"fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,"
|
|
360
|
+
"f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",
|
|
361
|
+
}
|
|
362
|
+
temp_df = fetch_paginated_data(url, params)
|
|
363
|
+
temp_df.columns = [
|
|
364
|
+
"序号",
|
|
365
|
+
"_",
|
|
366
|
+
"最新价",
|
|
367
|
+
"涨跌幅",
|
|
368
|
+
"涨跌额",
|
|
369
|
+
"成交量",
|
|
370
|
+
"成交额",
|
|
371
|
+
"振幅",
|
|
372
|
+
"换手率",
|
|
373
|
+
"市盈率-动态",
|
|
374
|
+
"_",
|
|
375
|
+
"_",
|
|
376
|
+
"代码",
|
|
377
|
+
"_",
|
|
378
|
+
"名称",
|
|
379
|
+
"最高",
|
|
380
|
+
"最低",
|
|
381
|
+
"今开",
|
|
382
|
+
"昨收",
|
|
383
|
+
"_",
|
|
384
|
+
"_",
|
|
385
|
+
"_",
|
|
386
|
+
"市净率",
|
|
387
|
+
"_",
|
|
388
|
+
"_",
|
|
389
|
+
"_",
|
|
390
|
+
"_",
|
|
391
|
+
"_",
|
|
392
|
+
"_",
|
|
393
|
+
"_",
|
|
394
|
+
"_",
|
|
395
|
+
"_",
|
|
396
|
+
"_",
|
|
397
|
+
]
|
|
398
|
+
temp_df = temp_df[
|
|
399
|
+
[
|
|
400
|
+
"序号",
|
|
401
|
+
"代码",
|
|
402
|
+
"名称",
|
|
403
|
+
"最新价",
|
|
404
|
+
"涨跌幅",
|
|
405
|
+
"涨跌额",
|
|
406
|
+
"成交量",
|
|
407
|
+
"成交额",
|
|
408
|
+
"振幅",
|
|
409
|
+
"最高",
|
|
410
|
+
"最低",
|
|
411
|
+
"今开",
|
|
412
|
+
"昨收",
|
|
413
|
+
"换手率",
|
|
414
|
+
"市盈率-动态",
|
|
415
|
+
"市净率",
|
|
416
|
+
]
|
|
417
|
+
]
|
|
418
|
+
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
|
419
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
420
|
+
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
|
421
|
+
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
|
422
|
+
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
|
423
|
+
temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
|
|
424
|
+
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
|
425
|
+
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
|
426
|
+
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
|
|
427
|
+
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
|
|
428
|
+
temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
|
|
429
|
+
temp_df["市盈率-动态"] = pd.to_numeric(temp_df["市盈率-动态"], errors="coerce")
|
|
430
|
+
temp_df["市净率"] = pd.to_numeric(temp_df["市净率"], errors="coerce")
|
|
431
|
+
return temp_df
|
|
432
|
+
|
|
433
|
+
|
|
93
434
|
@hku_catch(ret={}, trace=True)
|
|
94
435
|
def get_all_gnbk_info(code_market_dict, sep=""):
|
|
95
436
|
"""获取所有概念版本列表"""
|
|
96
|
-
blk_names =
|
|
437
|
+
blk_names = stock_board_concept_name_em()['板块名称']
|
|
97
438
|
ret = {}
|
|
98
|
-
for blk_name in blk_names:
|
|
99
|
-
stk_codes =
|
|
439
|
+
for i, blk_name in enumerate(blk_names):
|
|
440
|
+
stk_codes = stock_board_concept_cons_em(blk_name)
|
|
100
441
|
stk_codes = stk_codes['代码'].to_list()
|
|
101
|
-
hku_info(f"获取概念板块{blk_name}成分: {len(stk_codes)}")
|
|
442
|
+
hku_info(f"{i} 获取概念板块{blk_name}成分: {len(stk_codes)}")
|
|
102
443
|
ret[blk_name] = [
|
|
103
444
|
f"{code_market_dict[stk_code]}{sep}{stk_code}" for stk_code in stk_codes if stk_code in code_market_dict]
|
|
104
445
|
return ret
|
|
@@ -133,6 +474,7 @@ def get_dybk_names():
|
|
|
133
474
|
data_json = r.json()
|
|
134
475
|
if data_json["data"] is not None:
|
|
135
476
|
ret.extend([(v["f12"], v["f14"]) for v in data_json["data"]["diff"]])
|
|
477
|
+
time.sleep(random.uniform(1, 3))
|
|
136
478
|
return ret
|
|
137
479
|
|
|
138
480
|
|
|
@@ -179,6 +521,7 @@ def get_all_dybk_info(code_market_dict, sep=""):
|
|
|
179
521
|
stk_json = stk_json["data"]["diff"]
|
|
180
522
|
ret[blk_name].extend(
|
|
181
523
|
[f"{code_market_dict[v['f12']]}{sep}{v['f12']}" for v in stk_json if v["f12"] in code_market_dict])
|
|
524
|
+
time.sleep(random.uniform(1, 3))
|
|
182
525
|
hku_info(f'获取地域板块{blk_name}成分: {len(ret[blk_name])}')
|
|
183
526
|
|
|
184
527
|
return ret
|
|
@@ -214,5 +557,6 @@ def get_all_zsbk_info(code_market_dict, sep=""):
|
|
|
214
557
|
|
|
215
558
|
|
|
216
559
|
if __name__ == "__main__":
|
|
217
|
-
blks =
|
|
560
|
+
blks = get_hybk_names()
|
|
561
|
+
# blks = get_hybk_cons_code('BK0480')
|
|
218
562
|
print(blks)
|
|
@@ -64,7 +64,7 @@ def parse_one_result(quotes):
|
|
|
64
64
|
return result
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
@
|
|
67
|
+
@hku_catch(ret=[], trace=True)
|
|
68
68
|
def request_data(api, stklist, parse_one_result):
|
|
69
69
|
"""请求失败将抛出异常"""
|
|
70
70
|
quotes_list = api.get_security_quotes(stklist)
|
|
@@ -103,6 +103,7 @@ def inner_get_spot(stocklist, ip, port, batch_func=None):
|
|
|
103
103
|
batch_func(phase_result)
|
|
104
104
|
else:
|
|
105
105
|
err_list.extend(tmplist)
|
|
106
|
+
api.disconnect()
|
|
106
107
|
return result, err_list
|
|
107
108
|
|
|
108
109
|
|