hikyuu 2.7.0__py3-none-manylinux2014_aarch64.whl → 2.7.5__py3-none-manylinux2014_aarch64.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 +28 -8
- hikyuu/__init__.pyi +26 -14
- hikyuu/analysis/__init__.pyi +7 -1
- hikyuu/analysis/analysis.pyi +8 -2
- hikyuu/core.pyi +9 -3
- hikyuu/cpp/core310.pyi +172 -68
- hikyuu/cpp/core310.so +0 -0
- hikyuu/cpp/core311.pyi +172 -68
- hikyuu/cpp/core311.so +0 -0
- hikyuu/cpp/core312.pyi +172 -68
- hikyuu/cpp/core312.so +0 -0
- hikyuu/cpp/core313.pyi +172 -68
- hikyuu/cpp/core313.so +0 -0
- hikyuu/cpp/i18n/zh_CN/hikyuu.mo +0 -0
- hikyuu/cpp/i18n/zh_CN/hikyuu_plugin.mo +0 -0
- hikyuu/cpp/libboost_atomic.so +0 -0
- hikyuu/cpp/libboost_atomic.so.1.90.0 +0 -0
- hikyuu/cpp/{libboost_charconv-mt.so → libboost_charconv.so} +0 -0
- hikyuu/cpp/{libboost_charconv-mt.so.1.88.0 → libboost_charconv.so.1.90.0} +0 -0
- hikyuu/cpp/libboost_chrono.so +0 -0
- hikyuu/cpp/libboost_chrono.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_container.so +0 -0
- hikyuu/cpp/libboost_container.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_date_time.so +0 -0
- hikyuu/cpp/libboost_date_time.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_locale.so +0 -0
- hikyuu/cpp/libboost_locale.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_random.so +0 -0
- hikyuu/cpp/libboost_random.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_serialization.so +0 -0
- hikyuu/cpp/libboost_serialization.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_thread.so +0 -0
- hikyuu/cpp/libboost_thread.so.1.90.0 +0 -0
- hikyuu/cpp/libboost_wserialization.so +0 -0
- hikyuu/cpp/libboost_wserialization.so.1.90.0 +0 -0
- hikyuu/cpp/libhikyuu.so +0 -0
- hikyuu/cpp/libmimalloc.so +0 -0
- hikyuu/cpp/libmimalloc.so.3 +0 -0
- hikyuu/cpp/libmimalloc.so.3.1 +0 -0
- hikyuu/cpp/libsqlite3.so +0 -0
- hikyuu/data/clickhouse_upgrade/0001.sql +2 -0
- hikyuu/data/clickhouse_upgrade/0002.sql +9 -0
- hikyuu/data/common_clickhouse.py +1 -3
- hikyuu/data/common_mysql.py +1 -1
- hikyuu/data/download_block.py +1 -1
- hikyuu/data/em_block_to_mysql.py +16 -4
- hikyuu/data/em_block_to_sqlite.py +16 -4
- hikyuu/data/hku_config_template.py +31 -4
- hikyuu/data/mysql_upgrade/0029.sql +2 -0
- hikyuu/data/mysql_upgrade/0030.sql +3 -0
- hikyuu/data/pytdx_to_clickhouse.py +86 -32
- hikyuu/data/pytdx_to_h5.py +73 -28
- hikyuu/data/pytdx_to_mysql.py +65 -21
- hikyuu/data/pytdx_weight_to_clickhouse.py +2 -0
- hikyuu/data/pytdx_weight_to_mysql.py +2 -0
- hikyuu/data/pytdx_weight_to_sqlite.py +2 -0
- hikyuu/data/sqlite_upgrade/0029.sql +4 -0
- hikyuu/data/sqlite_upgrade/0030.sql +5 -0
- hikyuu/data/tdx_to_clickhouse.py +2 -2
- hikyuu/data/tdx_to_h5.py +11 -11
- hikyuu/data/tdx_to_mysql.py +2 -2
- hikyuu/draw/__init__.pyi +1 -1
- hikyuu/draw/drawplot/__init__.pyi +1 -1
- hikyuu/draw/drawplot/bokeh_draw.pyi +17 -9
- hikyuu/draw/drawplot/echarts_draw.pyi +17 -9
- hikyuu/draw/drawplot/matplotlib_draw.py +23 -9
- hikyuu/draw/drawplot/matplotlib_draw.pyi +17 -9
- hikyuu/examples/notebook/001-overview.ipynb +112 -78
- hikyuu/examples/notebook/004-IndicatorOverview.ipynb +52 -65
- hikyuu/examples/notebook/006-TradeManager.ipynb +402 -291
- hikyuu/examples/notebook/008-Pickle.ipynb +25 -17
- hikyuu/examples/notebook/009-RealData.ipynb +36 -38
- hikyuu/examples/notebook/Demo/Demo2.ipynb +146 -116
- hikyuu/extend.pyi +10 -4
- hikyuu/gui/HikyuuTDX.py +42 -3
- hikyuu/gui/data/MainWindow.py +189 -129
- hikyuu/gui/data/UseTdxImportToH5Thread.py +4 -2
- hikyuu/gui/start_qmt.py +1 -1
- hikyuu/hub.pyi +6 -6
- hikyuu/include/hikyuu/Block.h +9 -9
- hikyuu/include/hikyuu/HistoryFinanceInfo.h +3 -3
- hikyuu/include/hikyuu/KData.h +51 -28
- hikyuu/include/hikyuu/KDataImp.h +12 -7
- hikyuu/include/hikyuu/KDataPrivatedBufferImp.h +13 -7
- hikyuu/include/hikyuu/KDataSharedBufferImp.h +8 -6
- hikyuu/include/hikyuu/KQuery.h +11 -11
- hikyuu/include/hikyuu/KRecord.h +1 -1
- hikyuu/include/hikyuu/MarketInfo.h +10 -10
- hikyuu/include/hikyuu/Stock.h +30 -30
- hikyuu/include/hikyuu/StockManager.h +28 -12
- hikyuu/include/hikyuu/StockTypeInfo.h +9 -9
- hikyuu/include/hikyuu/StockWeight.h +9 -9
- hikyuu/include/hikyuu/StrategyContext.h +4 -4
- hikyuu/include/hikyuu/TimeLineRecord.h +1 -1
- hikyuu/include/hikyuu/TransRecord.h +1 -1
- hikyuu/include/hikyuu/data_driver/BaseInfoDriver.h +2 -1
- hikyuu/include/hikyuu/data_driver/BlockInfoDriver.h +6 -0
- hikyuu/include/hikyuu/data_driver/KDataDriver.h +6 -7
- hikyuu/include/hikyuu/data_driver/kdata/mysql/MySQLKDataDriver.h +5 -1
- hikyuu/include/hikyuu/data_driver/kdata/sqlite/SQLiteKDataDriver.h +1 -1
- hikyuu/include/hikyuu/global/sysinfo.h +24 -5
- hikyuu/include/hikyuu/indicator/IndParam.h +1 -1
- hikyuu/include/hikyuu/indicator/Indicator.h +56 -27
- hikyuu/include/hikyuu/indicator/Indicator2InImp.h +0 -4
- hikyuu/include/hikyuu/indicator/IndicatorImp.h +147 -74
- hikyuu/include/hikyuu/indicator/crt/CONTEXT.h +11 -1
- hikyuu/include/hikyuu/indicator/crt/IC.h +19 -14
- hikyuu/include/hikyuu/indicator/crt/ICIR.h +4 -7
- hikyuu/include/hikyuu/indicator/imp/IAbs.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IAcos.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IAd.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/IAdvance.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/IAma.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/IAsin.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IAtan.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IAtr.h +2 -3
- hikyuu/include/hikyuu/indicator/imp/IBackset.h +2 -4
- hikyuu/include/hikyuu/indicator/imp/IBlockSetNum.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/ICeil.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IContext.h +0 -3
- hikyuu/include/hikyuu/indicator/imp/ICorr.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/ICos.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ICost.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/ICount.h +2 -1
- hikyuu/include/hikyuu/indicator/imp/ICval.h +1 -4
- hikyuu/include/hikyuu/indicator/imp/ICycle.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/IDecline.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/IDevsq.h +4 -1
- hikyuu/include/hikyuu/indicator/imp/IDiff.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IDma.h +2 -0
- hikyuu/include/hikyuu/indicator/imp/IDropna.h +0 -4
- hikyuu/include/hikyuu/indicator/imp/IEma.h +3 -1
- hikyuu/include/hikyuu/indicator/imp/IEvery.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IExist.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IExp.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IFilter.h +4 -5
- hikyuu/include/hikyuu/indicator/imp/IFinance.h +1 -2
- hikyuu/include/hikyuu/indicator/imp/IFloor.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IHhvbars.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IHighLine.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IHsl.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/IIc.h +3 -6
- hikyuu/include/hikyuu/indicator/imp/IInBlock.h +1 -2
- hikyuu/include/hikyuu/indicator/imp/IIntpart.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IIsInf.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IIsInfa.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IIsLastBar.h +0 -1
- hikyuu/include/hikyuu/indicator/imp/IIsNa.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IJumpDown.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IJumpUp.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IKData.h +1 -2
- hikyuu/include/hikyuu/indicator/imp/ILiuTongPan.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/ILn.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ILog.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ILowLine.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/ILowLineBars.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IMa.h +6 -1
- hikyuu/include/hikyuu/indicator/imp/IMacd.h +2 -0
- hikyuu/include/hikyuu/indicator/imp/INot.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IPow.h +3 -1
- hikyuu/include/hikyuu/indicator/imp/IQuantileTrunc.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IRecover.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/IRef.h +3 -1
- hikyuu/include/hikyuu/indicator/imp/IResult.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IReverse.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IRoc.h +6 -1
- hikyuu/include/hikyuu/indicator/imp/IRocp.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IRocr.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IRocr100.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IRound.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IRoundDown.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IRoundUp.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ISaftyLoss.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ISign.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ISin.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ISlope.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/ISma.h +2 -0
- hikyuu/include/hikyuu/indicator/imp/ISpearman.h +3 -0
- hikyuu/include/hikyuu/indicator/imp/ISqrt.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/IStdev.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IStdp.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/ISum.h +6 -1
- hikyuu/include/hikyuu/indicator/imp/ITan.h +1 -0
- hikyuu/include/hikyuu/indicator/imp/ITime.h +1 -2
- hikyuu/include/hikyuu/indicator/imp/ITimeLine.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/ITr.h +1 -2
- hikyuu/include/hikyuu/indicator/imp/IVar.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IVarp.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IVigor.h +0 -2
- hikyuu/include/hikyuu/indicator/imp/IWma.h +5 -1
- hikyuu/include/hikyuu/indicator/imp/IZongGuBen.h +1 -2
- hikyuu/include/hikyuu/indicator_talib/imp/TaAdosc.h +0 -2
- hikyuu/include/hikyuu/indicator_talib/imp/TaSar.h +0 -2
- hikyuu/include/hikyuu/indicator_talib/imp/TaSarext.h +0 -4
- hikyuu/include/hikyuu/indicator_talib/imp/TaStoch.h +0 -3
- hikyuu/include/hikyuu/indicator_talib/imp/TaStochf.h +0 -2
- hikyuu/include/hikyuu/indicator_talib/imp/TaUltosc.h +0 -2
- hikyuu/include/hikyuu/indicator_talib/imp/ta_defines.h +2 -4
- hikyuu/include/hikyuu/indicator_talib/imp/ta_imp.h +70 -90
- hikyuu/include/hikyuu/plugin/KDataToClickHouseImporter.h +40 -0
- hikyuu/include/hikyuu/plugin/KDataToMySQLImporter.h +40 -0
- hikyuu/include/hikyuu/plugin/checkdata.h +20 -0
- hikyuu/include/hikyuu/plugin/extind.h +3 -0
- hikyuu/include/hikyuu/plugin/hkuextra.h +4 -0
- hikyuu/include/hikyuu/plugin/interface/CheckDataPluginInterface.h +25 -0
- hikyuu/include/hikyuu/plugin/interface/HkuExtraPluginInterface.h +4 -0
- hikyuu/include/hikyuu/plugin/interface/ImportKDataToClickHousePluginInterface.h +44 -0
- hikyuu/include/hikyuu/plugin/interface/ImportKDataToMySQLPluginInterface.h +42 -0
- hikyuu/include/hikyuu/plugin/interface/plugins.h +6 -0
- hikyuu/include/hikyuu/python/convert_any.h +9 -6
- hikyuu/include/hikyuu/python/pybind_utils.h +22 -5
- hikyuu/include/hikyuu/strategy/Strategy.h +1 -1
- hikyuu/include/hikyuu/trade_manage/TradeCostBase.h +5 -3
- hikyuu/include/hikyuu/trade_manage/TradeManagerBase.h +9 -3
- hikyuu/include/hikyuu/trade_manage/TradeRecord.h +2 -1
- hikyuu/include/hikyuu/trade_sys/allocatefunds/AllocateFundsBase.h +8 -4
- hikyuu/include/hikyuu/trade_sys/allocatefunds/build_in.h +1 -0
- hikyuu/include/hikyuu/trade_sys/allocatefunds/crt/AF_FixedAmount.h +26 -0
- hikyuu/include/hikyuu/trade_sys/allocatefunds/imp/FixAmountFunds.h +18 -0
- hikyuu/include/hikyuu/trade_sys/condition/ConditionBase.h +5 -3
- hikyuu/include/hikyuu/trade_sys/environment/EnvironmentBase.h +6 -3
- hikyuu/include/hikyuu/trade_sys/moneymanager/MoneyManagerBase.h +5 -3
- hikyuu/include/hikyuu/trade_sys/multifactor/MultiFactorBase.h +23 -20
- hikyuu/include/hikyuu/trade_sys/multifactor/NormalizeBase.h +6 -4
- hikyuu/include/hikyuu/trade_sys/multifactor/ScoresFilterBase.h +5 -3
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_EqualWeight.h +3 -3
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_ICIRWeight.h +4 -4
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_ICWeight.h +4 -4
- hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_Weight.h +4 -4
- hikyuu/include/hikyuu/trade_sys/portfolio/Portfolio.h +16 -13
- hikyuu/include/hikyuu/trade_sys/profitgoal/ProfitGoalBase.h +13 -13
- hikyuu/include/hikyuu/trade_sys/selector/SelectorBase.h +12 -3
- hikyuu/include/hikyuu/trade_sys/selector/crt/SE_MultiFactor.h +1 -1
- hikyuu/include/hikyuu/trade_sys/selector/crt/SE_MultiFactor2.h +1 -1
- hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +1 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector2.h +1 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/optimal/OptimalSelectorBase.h +0 -2
- hikyuu/include/hikyuu/trade_sys/selector/imp/optimal/PerformanceOptimalSelector.h +0 -4
- hikyuu/include/hikyuu/trade_sys/signal/SignalBase.h +5 -3
- hikyuu/include/hikyuu/trade_sys/slippage/SlippageBase.h +5 -3
- hikyuu/include/hikyuu/trade_sys/stoploss/StoplossBase.h +5 -3
- hikyuu/include/hikyuu/trade_sys/system/System.h +6 -4
- hikyuu/include/hikyuu/utilities/Log.h +6 -7
- hikyuu/include/hikyuu/utilities/LruCache.h +299 -0
- hikyuu/include/hikyuu/utilities/Parameter.h +17 -0
- hikyuu/include/hikyuu/utilities/arithmetic.h +2 -2
- hikyuu/include/hikyuu/utilities/config.h +28 -0
- hikyuu/include/hikyuu/utilities/omp_macro.h +25 -0
- hikyuu/include/hikyuu/utilities/plugin/PluginBase.h +17 -2
- hikyuu/include/hikyuu/utilities/plugin/PluginManager.h +46 -22
- hikyuu/include/hikyuu/utilities/thread/GlobalStealThreadPool.h +71 -19
- hikyuu/include/hikyuu/utilities/thread/GlobalThreadPool.h +1 -5
- hikyuu/include/hikyuu/utilities/thread/MQStealThreadPool.h +286 -0
- hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +1 -0
- hikyuu/include/hikyuu/utilities/thread/StealThreadPool.h +297 -0
- hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +1 -4
- hikyuu/include/hikyuu/utilities/thread/WorkStealQueue.h +9 -8
- hikyuu/include/hikyuu/utilities/thread/algorithm.h +350 -14
- hikyuu/include/hikyuu/version.h +4 -4
- hikyuu/plugin/libbacktest.so +0 -0
- hikyuu/plugin/libcheckdata.so +0 -0
- hikyuu/plugin/libclickhousedriver.so +0 -0
- hikyuu/plugin/libdataserver.so +0 -0
- hikyuu/plugin/libdataserver_parquet.so +0 -0
- hikyuu/plugin/libdevice.so +0 -0
- hikyuu/plugin/libextind.so +0 -0
- hikyuu/plugin/libhkuextra.so +0 -0
- hikyuu/plugin/libimport2ch.so +0 -0
- hikyuu/plugin/libimport2hdf5.so +0 -0
- hikyuu/plugin/libimport2mysql.so +0 -0
- hikyuu/plugin/libtmreport.so +0 -0
- hikyuu/test/Indicator.py +1 -2
- hikyuu/trade_manage/__init__.pyi +14 -8
- hikyuu/trade_manage/trade.pyi +14 -8
- hikyuu/trade_sys/trade_sys.py +54 -5
- hikyuu/util/__init__.pyi +2 -2
- hikyuu/util/singleton.pyi +1 -1
- {hikyuu-2.7.0.dist-info → hikyuu-2.7.5.dist-info}/METADATA +10 -4
- {hikyuu-2.7.0.dist-info → hikyuu-2.7.5.dist-info}/RECORD +282 -252
- hikyuu/cpp/libboost_chrono-mt.so +0 -0
- hikyuu/cpp/libboost_chrono-mt.so.1.88.0 +0 -0
- hikyuu/cpp/libboost_date_time-mt.so +0 -0
- hikyuu/cpp/libboost_date_time-mt.so.1.88.0 +0 -0
- hikyuu/cpp/libboost_serialization-mt.so +0 -0
- hikyuu/cpp/libboost_serialization-mt.so.1.88.0 +0 -0
- hikyuu/cpp/libboost_system-mt.so +0 -0
- hikyuu/cpp/libboost_system-mt.so.1.88.0 +0 -0
- hikyuu/cpp/libboost_thread-mt.so +0 -0
- hikyuu/cpp/libboost_thread-mt.so.1.88.0 +0 -0
- hikyuu/cpp/libboost_wserialization-mt.so +0 -0
- hikyuu/cpp/libboost_wserialization-mt.so.1.88.0 +0 -0
- hikyuu/data/pytdx_to_taos.py +0 -736
- {hikyuu-2.7.0.dist-info → hikyuu-2.7.5.dist-info}/WHEEL +0 -0
- {hikyuu-2.7.0.dist-info → hikyuu-2.7.5.dist-info}/entry_points.txt +0 -0
- {hikyuu-2.7.0.dist-info → hikyuu-2.7.5.dist-info}/top_level.txt +0 -0
hikyuu/include/hikyuu/KData.h
CHANGED
|
@@ -22,33 +22,34 @@ class HKU_API Indicator;
|
|
|
22
22
|
class HKU_API KData {
|
|
23
23
|
public:
|
|
24
24
|
KData();
|
|
25
|
-
KData(const KData&);
|
|
25
|
+
KData(const KData&) noexcept;
|
|
26
26
|
KData(const Stock& stock, const KQuery& query);
|
|
27
|
+
explicit KData(KDataImpPtr imp);
|
|
27
28
|
virtual ~KData() {}
|
|
28
29
|
|
|
29
|
-
KData& operator=(const KData&);
|
|
30
|
+
KData& operator=(const KData&) noexcept;
|
|
30
31
|
|
|
31
32
|
// 移动语义对 KData 没有实际用处,而且会导致 KData 可能存在空 imp 的情况
|
|
32
33
|
// 主要是 boost::any_cast 需要,予以保留,但使用时不要到 KData 执行 std::move
|
|
33
34
|
KData(KData&&);
|
|
34
35
|
KData& operator=(KData&&);
|
|
35
36
|
|
|
36
|
-
size_t size() const;
|
|
37
|
-
bool empty() const;
|
|
37
|
+
size_t size() const noexcept;
|
|
38
|
+
bool empty() const noexcept;
|
|
38
39
|
|
|
39
|
-
bool operator==(const KData&) const;
|
|
40
|
-
bool operator!=(const KData&) const;
|
|
40
|
+
bool operator==(const KData&) const noexcept;
|
|
41
|
+
bool operator!=(const KData&) const noexcept;
|
|
41
42
|
|
|
42
43
|
DatetimeList getDatetimeList() const;
|
|
43
44
|
|
|
44
45
|
/** 获取指定位置的KRecord,未作越界检查 */
|
|
45
|
-
const KRecord& getKRecord(size_t pos) const;
|
|
46
|
+
const KRecord& getKRecord(size_t pos) const noexcept;
|
|
46
47
|
|
|
47
48
|
/** 按日期查询KRecord */
|
|
48
|
-
const KRecord& getKRecord(Datetime datetime) const;
|
|
49
|
+
const KRecord& getKRecord(Datetime datetime) const noexcept;
|
|
49
50
|
|
|
50
51
|
/** 同getKRecord @see getKRecord */
|
|
51
|
-
const KRecord& operator[](size_t pos) const {
|
|
52
|
+
const KRecord& operator[](size_t pos) const noexcept {
|
|
52
53
|
return getKRecord(pos);
|
|
53
54
|
}
|
|
54
55
|
|
|
@@ -68,6 +69,8 @@ public:
|
|
|
68
69
|
*/
|
|
69
70
|
KData getKData(const Datetime& start, const Datetime& end) const;
|
|
70
71
|
|
|
72
|
+
KData getKData(const KQuery& query) const;
|
|
73
|
+
|
|
71
74
|
/**
|
|
72
75
|
* 获取相同时间范围内的其他类型K线数据,如日线下对应的分钟线数据
|
|
73
76
|
* @param ktype
|
|
@@ -81,10 +84,25 @@ public:
|
|
|
81
84
|
* @param end 结束索引
|
|
82
85
|
* @return KData
|
|
83
86
|
*/
|
|
84
|
-
KData
|
|
87
|
+
KData getSubKData(int64_t start, int64_t end = Null<int64_t>()) const;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 特殊用途!谨慎!按当前K线范围,获取指定日期范围的其他类型的按日期查询的 Query 条件
|
|
91
|
+
* @note
|
|
92
|
+
* 1. 指定日期范围必须在当前K线数据范围内,否则截断在 K 线范围内
|
|
93
|
+
* 2. start_datetime/end_datetime 的精度应和当前 KData 一致
|
|
94
|
+
* 3. 如果原截止条件为 Null<Datetime>()且未指定end_datetime, 则返回的查询条件为
|
|
95
|
+
* Null<Datetime>()
|
|
96
|
+
* @param start_datetime
|
|
97
|
+
* @param end_datetime
|
|
98
|
+
* @param ktype
|
|
99
|
+
* @return KData
|
|
100
|
+
*/
|
|
101
|
+
KQuery getOtherQueryByDate(const Datetime& start_datetime, const Datetime& end_datetime,
|
|
102
|
+
const KQuery::KType& ktype) const;
|
|
85
103
|
|
|
86
104
|
/** 按日期查询对应的索引位置,注:是 KData 中的位置,不是在 Stock 中原始K记录的位置 */
|
|
87
|
-
size_t getPos(const Datetime& datetime) const;
|
|
105
|
+
size_t getPos(const Datetime& datetime) const noexcept;
|
|
88
106
|
|
|
89
107
|
/** 按日期获取在原始 K 线记录中的位置 */
|
|
90
108
|
size_t getPosInStock(Datetime datetime) const;
|
|
@@ -128,8 +146,10 @@ public:
|
|
|
128
146
|
Indicator amo() const;
|
|
129
147
|
|
|
130
148
|
public:
|
|
131
|
-
const KRecord* data() const;
|
|
132
|
-
KRecord* data(); // 谨慎使用(用于强制调整数据)
|
|
149
|
+
const KRecord* data() const noexcept;
|
|
150
|
+
KRecord* data() noexcept; // 谨慎使用(用于强制调整数据)
|
|
151
|
+
|
|
152
|
+
KDataImpPtr getImp() const noexcept;
|
|
133
153
|
|
|
134
154
|
// 常量迭代器定义
|
|
135
155
|
class const_iterator {
|
|
@@ -192,7 +212,8 @@ public:
|
|
|
192
212
|
|
|
193
213
|
private:
|
|
194
214
|
std::shared_ptr<KDataImp>& get_null_kdata_imp() {
|
|
195
|
-
static std::shared_ptr<KDataImp> instance =
|
|
215
|
+
static std::shared_ptr<KDataImp> instance =
|
|
216
|
+
std::make_shared<KDataImp>(); // 第一次调用时初始化
|
|
196
217
|
return instance;
|
|
197
218
|
}
|
|
198
219
|
|
|
@@ -249,22 +270,20 @@ KData HKU_API getKData(const string& market_code, int64_t start = 0, int64_t end
|
|
|
249
270
|
const KQuery::KType& ktype = KQuery::DAY,
|
|
250
271
|
KQuery::RecoverType recoverType = KQuery::NO_RECOVER);
|
|
251
272
|
|
|
252
|
-
inline KData::KData(const KData& x) : m_imp(x.m_imp) {}
|
|
273
|
+
inline KData::KData(const KData& x) noexcept : m_imp(x.m_imp) {}
|
|
253
274
|
|
|
254
275
|
inline KData::KData(KData&& x) : m_imp(std::move(x.m_imp)) {
|
|
255
276
|
x.m_imp = get_null_kdata_imp();
|
|
256
277
|
}
|
|
257
278
|
|
|
258
|
-
inline KData& KData::operator=(const KData& x) {
|
|
259
|
-
|
|
260
|
-
return *this;
|
|
279
|
+
inline KData& KData::operator=(const KData& x) noexcept {
|
|
280
|
+
HKU_IF_RETURN(this == &x, *this);
|
|
261
281
|
m_imp = x.m_imp;
|
|
262
282
|
return *this;
|
|
263
283
|
}
|
|
264
284
|
|
|
265
285
|
inline KData& KData::operator=(KData&& x) {
|
|
266
|
-
|
|
267
|
-
return *this;
|
|
286
|
+
HKU_IF_RETURN(this == &x, *this);
|
|
268
287
|
m_imp = std::move(x.m_imp);
|
|
269
288
|
x.m_imp = get_null_kdata_imp();
|
|
270
289
|
return *this;
|
|
@@ -274,24 +293,24 @@ inline DatetimeList KData::getDatetimeList() const {
|
|
|
274
293
|
return m_imp->getDatetimeList();
|
|
275
294
|
}
|
|
276
295
|
|
|
277
|
-
inline const KRecord& KData::getKRecord(size_t pos) const {
|
|
296
|
+
inline const KRecord& KData::getKRecord(size_t pos) const noexcept {
|
|
278
297
|
return m_imp->getKRecord(pos); // 不会抛出异常
|
|
279
298
|
}
|
|
280
299
|
|
|
281
|
-
inline const KRecord& KData::getKRecord(Datetime datetime) const {
|
|
300
|
+
inline const KRecord& KData::getKRecord(Datetime datetime) const noexcept {
|
|
282
301
|
size_t pos = getPos(datetime);
|
|
283
302
|
return pos != Null<size_t>() ? getKRecord(pos) : KRecord::NullKRecord;
|
|
284
303
|
}
|
|
285
304
|
|
|
286
|
-
inline size_t KData::getPos(const Datetime& datetime) const {
|
|
305
|
+
inline size_t KData::getPos(const Datetime& datetime) const noexcept {
|
|
287
306
|
return m_imp->getPos(datetime);
|
|
288
307
|
}
|
|
289
308
|
|
|
290
|
-
inline size_t KData::size() const {
|
|
309
|
+
inline size_t KData::size() const noexcept {
|
|
291
310
|
return m_imp->size();
|
|
292
311
|
}
|
|
293
312
|
|
|
294
|
-
inline bool KData::empty() const {
|
|
313
|
+
inline bool KData::empty() const noexcept {
|
|
295
314
|
return m_imp->empty();
|
|
296
315
|
}
|
|
297
316
|
|
|
@@ -323,18 +342,22 @@ inline size_t KData::lastPos() const {
|
|
|
323
342
|
return m_imp->lastPos();
|
|
324
343
|
}
|
|
325
344
|
|
|
326
|
-
inline bool KData::operator!=(const KData& other) const {
|
|
345
|
+
inline bool KData::operator!=(const KData& other) const noexcept {
|
|
327
346
|
return !(*this == other);
|
|
328
347
|
}
|
|
329
348
|
|
|
330
|
-
inline const KRecord* KData::data() const {
|
|
349
|
+
inline const KRecord* KData::data() const noexcept {
|
|
331
350
|
return m_imp->data();
|
|
332
351
|
}
|
|
333
352
|
|
|
334
|
-
inline KRecord* KData::data() {
|
|
353
|
+
inline KRecord* KData::data() noexcept {
|
|
335
354
|
return m_imp->data();
|
|
336
355
|
}
|
|
337
356
|
|
|
357
|
+
inline KDataImpPtr KData::getImp() const noexcept {
|
|
358
|
+
return m_imp;
|
|
359
|
+
}
|
|
360
|
+
|
|
338
361
|
} /* namespace hku */
|
|
339
362
|
|
|
340
363
|
#if FMT_VERSION >= 90000
|
hikyuu/include/hikyuu/KDataImp.h
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
namespace hku {
|
|
13
13
|
|
|
14
|
-
class HKU_API KDataImp {
|
|
14
|
+
class HKU_API KDataImp : public enable_shared_from_this<KDataImp> {
|
|
15
15
|
public:
|
|
16
16
|
KDataImp() = default;
|
|
17
17
|
KDataImp(const Stock& stock, const KQuery& query);
|
|
@@ -25,11 +25,11 @@ public:
|
|
|
25
25
|
return m_stock;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
virtual bool empty() const {
|
|
28
|
+
virtual bool empty() const noexcept {
|
|
29
29
|
return true;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
virtual size_t size() const {
|
|
32
|
+
virtual size_t size() const noexcept {
|
|
33
33
|
return 0;
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -45,11 +45,11 @@ public:
|
|
|
45
45
|
return 0;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
virtual size_t getPos(const Datetime& datetime) const {
|
|
48
|
+
virtual size_t getPos(const Datetime& datetime) const noexcept {
|
|
49
49
|
return Null<size_t>();
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
virtual const KRecord& getKRecord(size_t pos) const {
|
|
52
|
+
virtual const KRecord& getKRecord(size_t pos) const noexcept {
|
|
53
53
|
return KRecord::NullKRecord;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -61,11 +61,11 @@ public:
|
|
|
61
61
|
return KRecord::NullKRecord;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
virtual const KRecord* data() const {
|
|
64
|
+
virtual const KRecord* data() const noexcept {
|
|
65
65
|
return nullptr;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
virtual KRecord* data() {
|
|
68
|
+
virtual KRecord* data() noexcept {
|
|
69
69
|
return nullptr;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -73,6 +73,11 @@ public:
|
|
|
73
73
|
return DatetimeList();
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
typedef shared_ptr<KDataImp> KDataImpPtr;
|
|
77
|
+
virtual KDataImpPtr getOtherFromSelf(const KQuery& query) const {
|
|
78
|
+
return std::make_shared<KDataImp>(m_stock, query);
|
|
79
|
+
}
|
|
80
|
+
|
|
76
81
|
protected:
|
|
77
82
|
KQuery m_query;
|
|
78
83
|
Stock m_stock;
|
|
@@ -17,11 +17,11 @@ public:
|
|
|
17
17
|
KDataPrivatedBufferImp(const Stock& stock, const KQuery& query);
|
|
18
18
|
virtual ~KDataPrivatedBufferImp() override;
|
|
19
19
|
|
|
20
|
-
virtual bool empty() const override {
|
|
20
|
+
virtual bool empty() const noexcept override {
|
|
21
21
|
return m_buffer.empty();
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
virtual size_t size() const override {
|
|
24
|
+
virtual size_t size() const noexcept override {
|
|
25
25
|
return m_buffer.size();
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -29,9 +29,9 @@ public:
|
|
|
29
29
|
virtual size_t endPos() const override;
|
|
30
30
|
virtual size_t lastPos() const override;
|
|
31
31
|
|
|
32
|
-
virtual size_t getPos(const Datetime& datetime) const override;
|
|
32
|
+
virtual size_t getPos(const Datetime& datetime) const noexcept override;
|
|
33
33
|
|
|
34
|
-
virtual const KRecord& getKRecord(size_t pos) const override {
|
|
34
|
+
virtual const KRecord& getKRecord(size_t pos) const noexcept override {
|
|
35
35
|
return m_buffer[pos];
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -43,24 +43,30 @@ public:
|
|
|
43
43
|
return m_buffer.back();
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
virtual const KRecord* data() const override {
|
|
46
|
+
virtual const KRecord* data() const noexcept override {
|
|
47
47
|
return m_buffer.data();
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
virtual KRecord* data() override {
|
|
50
|
+
virtual KRecord* data() noexcept override {
|
|
51
51
|
return m_buffer.data();
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
virtual DatetimeList getDatetimeList() const override;
|
|
55
55
|
|
|
56
|
+
virtual KDataImpPtr getOtherFromSelf(const KQuery& query) const override;
|
|
57
|
+
|
|
56
58
|
private:
|
|
57
59
|
void _getPosInStock() const;
|
|
60
|
+
void _recover();
|
|
58
61
|
void _recoverForward();
|
|
59
62
|
void _recoverBackward();
|
|
60
63
|
void _recoverEqualForward();
|
|
61
64
|
void _recoverEqualBackward();
|
|
62
65
|
void _recoverForUpDay();
|
|
63
66
|
|
|
67
|
+
KDataImpPtr _getOtherFromSelfByIndex(const KQuery& query) const;
|
|
68
|
+
KDataImpPtr _getOtherFromSelfByDate(const KQuery& query) const;
|
|
69
|
+
|
|
64
70
|
private:
|
|
65
71
|
KRecordList m_buffer;
|
|
66
72
|
mutable size_t m_start{0};
|
|
@@ -68,6 +74,6 @@ private:
|
|
|
68
74
|
mutable bool m_have_pos_in_stock{false};
|
|
69
75
|
};
|
|
70
76
|
|
|
71
|
-
typedef shared_ptr<KDataPrivatedBufferImp> KDataPrivatedBufferImpPtr;
|
|
77
|
+
// typedef shared_ptr<KDataPrivatedBufferImp> KDataPrivatedBufferImpPtr;
|
|
72
78
|
|
|
73
79
|
} /* namespace hku */
|
|
@@ -17,11 +17,11 @@ public:
|
|
|
17
17
|
KDataSharedBufferImp(const Stock& stock, const KQuery& query);
|
|
18
18
|
virtual ~KDataSharedBufferImp() override;
|
|
19
19
|
|
|
20
|
-
virtual bool empty() const override {
|
|
20
|
+
virtual bool empty() const noexcept override {
|
|
21
21
|
return m_size == 0;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
virtual size_t size() const override {
|
|
24
|
+
virtual size_t size() const noexcept override {
|
|
25
25
|
return m_size;
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -37,9 +37,9 @@ public:
|
|
|
37
37
|
return m_end == 0 ? 0 : m_end - 1;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
virtual size_t getPos(const Datetime& datetime) const override;
|
|
40
|
+
virtual size_t getPos(const Datetime& datetime) const noexcept override;
|
|
41
41
|
|
|
42
|
-
virtual const KRecord& getKRecord(size_t pos) const override;
|
|
42
|
+
virtual const KRecord& getKRecord(size_t pos) const noexcept override;
|
|
43
43
|
|
|
44
44
|
virtual const KRecord& front() const override {
|
|
45
45
|
return m_data[0];
|
|
@@ -49,16 +49,18 @@ public:
|
|
|
49
49
|
return m_data[m_size - 1];
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
virtual const KRecord* data() const override {
|
|
52
|
+
virtual const KRecord* data() const noexcept override {
|
|
53
53
|
return m_data;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
virtual KRecord* data() override {
|
|
56
|
+
virtual KRecord* data() noexcept override {
|
|
57
57
|
return m_data;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
virtual DatetimeList getDatetimeList() const override;
|
|
61
61
|
|
|
62
|
+
virtual KDataImpPtr getOtherFromSelf(const KQuery& query) const override;
|
|
63
|
+
|
|
62
64
|
private:
|
|
63
65
|
size_t m_start{0};
|
|
64
66
|
size_t m_end{0};
|
hikyuu/include/hikyuu/KQuery.h
CHANGED
|
@@ -58,20 +58,20 @@ public:
|
|
|
58
58
|
static bool isValidKType(const string& ktype);
|
|
59
59
|
|
|
60
60
|
/** 判断是否为有效 ktype */
|
|
61
|
-
static bool isBaseKType(const string& ktype);
|
|
61
|
+
static bool isBaseKType(const string& ktype) noexcept;
|
|
62
62
|
|
|
63
63
|
/** 判断是否为扩展 ktype */
|
|
64
64
|
static bool isExtraKType(const string& ktype);
|
|
65
65
|
|
|
66
66
|
/** 获取所有的 KType */
|
|
67
|
-
static vector<KType> getBaseKTypeList();
|
|
67
|
+
static vector<KType> getBaseKTypeList() noexcept;
|
|
68
68
|
|
|
69
69
|
/** 获取所有扩展 KType */
|
|
70
70
|
static vector<KType> getExtraKTypeList();
|
|
71
71
|
|
|
72
72
|
static int32_t getKTypeInMin(const KType& ktype);
|
|
73
73
|
|
|
74
|
-
static int32_t getBaseKTypeInMin(const KType& ktype);
|
|
74
|
+
static int32_t getBaseKTypeInMin(const KType& ktype) noexcept;
|
|
75
75
|
|
|
76
76
|
static int64_t getKTypeInSeconds(const KType& ktype);
|
|
77
77
|
|
|
@@ -129,14 +129,14 @@ public:
|
|
|
129
129
|
/**
|
|
130
130
|
* 按索引方式查询时,返回指定的起始索引,否则返回Null<int64_t>()
|
|
131
131
|
*/
|
|
132
|
-
int64_t start() const {
|
|
132
|
+
int64_t start() const noexcept {
|
|
133
133
|
return m_queryType != INDEX ? Null<int64_t>() : m_start;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
/**
|
|
137
137
|
* 按索引方式查询时,返回指定的结束索引,否则返回Null<int64_t>()
|
|
138
138
|
*/
|
|
139
|
-
int64_t end() const {
|
|
139
|
+
int64_t end() const noexcept {
|
|
140
140
|
return m_queryType != INDEX ? Null<int64_t>() : m_end;
|
|
141
141
|
}
|
|
142
142
|
|
|
@@ -151,23 +151,23 @@ public:
|
|
|
151
151
|
Datetime endDatetime() const;
|
|
152
152
|
|
|
153
153
|
/** 获取查询条件类型 */
|
|
154
|
-
QueryType queryType() const {
|
|
154
|
+
QueryType queryType() const noexcept {
|
|
155
155
|
return m_queryType;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
/** 获取K线数据类型 */
|
|
159
159
|
// KType kType() const { return m_dataType; }
|
|
160
|
-
const string& kType() const {
|
|
160
|
+
const string& kType() const noexcept {
|
|
161
161
|
return m_dataType;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
/** 获取复权类型 */
|
|
165
|
-
RecoverType recoverType() const {
|
|
165
|
+
RecoverType recoverType() const noexcept {
|
|
166
166
|
return m_recoverType;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
/** 设置复权类型 */
|
|
170
|
-
void recoverType(RecoverType recoverType) {
|
|
170
|
+
void recoverType(RecoverType recoverType) noexcept {
|
|
171
171
|
m_recoverType = recoverType;
|
|
172
172
|
}
|
|
173
173
|
|
|
@@ -261,8 +261,8 @@ HKU_API std::ostream& operator<<(std::ostream& os, const KQuery& query);
|
|
|
261
261
|
// 关系比较函数, 不直接在类中定义是为了支持 Null<>() == d,Null可以放在左边
|
|
262
262
|
//
|
|
263
263
|
///////////////////////////////////////////////////////////////////////////////
|
|
264
|
-
bool HKU_API operator==(const KQuery&, const KQuery&);
|
|
265
|
-
bool HKU_API operator!=(const KQuery&, const KQuery&);
|
|
264
|
+
bool HKU_API operator==(const KQuery&, const KQuery&) noexcept;
|
|
265
|
+
bool HKU_API operator!=(const KQuery&, const KQuery&) noexcept;
|
|
266
266
|
|
|
267
267
|
/**
|
|
268
268
|
* 提供KQuery的Null值
|
hikyuu/include/hikyuu/KRecord.h
CHANGED
|
@@ -40,51 +40,51 @@ public:
|
|
|
40
40
|
MarketInfo(const MarketInfo&) = default;
|
|
41
41
|
MarketInfo& operator=(const MarketInfo&) = default;
|
|
42
42
|
|
|
43
|
-
MarketInfo(MarketInfo&&);
|
|
43
|
+
MarketInfo(MarketInfo&&) noexcept;
|
|
44
44
|
MarketInfo& operator=(MarketInfo&&) noexcept;
|
|
45
45
|
|
|
46
46
|
/** 获取市场简称 */
|
|
47
|
-
const string& market() const {
|
|
47
|
+
const string& market() const noexcept {
|
|
48
48
|
return m_market;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/** 获取市场名称 */
|
|
52
|
-
const string& name() const {
|
|
52
|
+
const string& name() const noexcept {
|
|
53
53
|
return m_name;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/** 获取市场描述 */
|
|
57
|
-
const string& description() const {
|
|
57
|
+
const string& description() const noexcept {
|
|
58
58
|
return m_description;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/** 获取该市场对应的指数代码 */
|
|
62
|
-
const string& code() const {
|
|
62
|
+
const string& code() const noexcept {
|
|
63
63
|
return m_code;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/** 获取市场数据的最后更新日期 */
|
|
67
|
-
Datetime lastDate() const {
|
|
67
|
+
Datetime lastDate() const noexcept {
|
|
68
68
|
return m_lastDate;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/** 开市时间1 */
|
|
72
|
-
TimeDelta openTime1() const {
|
|
72
|
+
TimeDelta openTime1() const noexcept {
|
|
73
73
|
return m_openTime1;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/** 闭市时间1 */
|
|
77
|
-
TimeDelta closeTime1() const {
|
|
77
|
+
TimeDelta closeTime1() const noexcept {
|
|
78
78
|
return m_closeTime1;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
/** 开市时间2 */
|
|
82
|
-
TimeDelta openTime2() const {
|
|
82
|
+
TimeDelta openTime2() const noexcept {
|
|
83
83
|
return m_openTime2;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/** 闭市时间2 */
|
|
87
|
-
TimeDelta closeTime2() const {
|
|
87
|
+
TimeDelta closeTime2() const noexcept {
|
|
88
88
|
return m_closeTime2;
|
|
89
89
|
}
|
|
90
90
|
|
hikyuu/include/hikyuu/Stock.h
CHANGED
|
@@ -58,8 +58,8 @@ private:
|
|
|
58
58
|
public:
|
|
59
59
|
Stock();
|
|
60
60
|
|
|
61
|
-
Stock(const Stock&);
|
|
62
|
-
Stock(Stock&&);
|
|
61
|
+
Stock(const Stock&) noexcept;
|
|
62
|
+
Stock(Stock&&) noexcept;
|
|
63
63
|
Stock(const string& market, const string& code, const string& name);
|
|
64
64
|
|
|
65
65
|
Stock(const string& market, const string& code, const string& name, uint32_t type, bool valid,
|
|
@@ -69,7 +69,7 @@ public:
|
|
|
69
69
|
int precision, size_t minTradeNumber, size_t maxTradeNumber);
|
|
70
70
|
virtual ~Stock();
|
|
71
71
|
Stock& operator=(const Stock&);
|
|
72
|
-
Stock& operator=(Stock&&);
|
|
72
|
+
Stock& operator=(Stock&&) noexcept;
|
|
73
73
|
bool operator==(const Stock&) const;
|
|
74
74
|
bool operator!=(const Stock&) const;
|
|
75
75
|
|
|
@@ -77,52 +77,52 @@ public:
|
|
|
77
77
|
* 获取内部id,一般用于作为map的键值使用,该id实际为m_data的内存地址
|
|
78
78
|
* @note 非数据库中的stockid
|
|
79
79
|
*/
|
|
80
|
-
uint64_t id() const;
|
|
80
|
+
uint64_t id() const noexcept;
|
|
81
81
|
|
|
82
82
|
/** 获取所属市场简称,市场简称是市场的唯一标识 */
|
|
83
|
-
const string& market() const;
|
|
83
|
+
const string& market() const noexcept;
|
|
84
84
|
|
|
85
85
|
/** 获取证券代码 */
|
|
86
|
-
const string& code() const;
|
|
86
|
+
const string& code() const noexcept;
|
|
87
87
|
|
|
88
88
|
/** 市场简称+证券代码,如: sh000001 */
|
|
89
|
-
const string& market_code() const;
|
|
89
|
+
const string& market_code() const noexcept;
|
|
90
90
|
|
|
91
91
|
/** 获取证券名称 */
|
|
92
|
-
const string& name() const;
|
|
92
|
+
const string& name() const noexcept;
|
|
93
93
|
|
|
94
94
|
/** 获取证券类型 */
|
|
95
|
-
uint32_t type() const;
|
|
95
|
+
uint32_t type() const noexcept;
|
|
96
96
|
|
|
97
97
|
/** 该证券当前是否有效 */
|
|
98
|
-
bool valid() const;
|
|
98
|
+
bool valid() const noexcept;
|
|
99
99
|
|
|
100
100
|
/** 获取证券起始日期 */
|
|
101
|
-
const Datetime& startDatetime() const;
|
|
101
|
+
const Datetime& startDatetime() const noexcept;
|
|
102
102
|
|
|
103
103
|
/** 获取证券最后日期 */
|
|
104
|
-
const Datetime& lastDatetime() const;
|
|
104
|
+
const Datetime& lastDatetime() const noexcept;
|
|
105
105
|
|
|
106
106
|
/** 获取最小跳动量 */
|
|
107
|
-
price_t tick() const;
|
|
107
|
+
price_t tick() const noexcept;
|
|
108
108
|
|
|
109
109
|
/** 最小跳动量价值 */
|
|
110
|
-
price_t tickValue() const;
|
|
110
|
+
price_t tickValue() const noexcept;
|
|
111
111
|
|
|
112
112
|
/** 每单位价值 = tickValue / tick */
|
|
113
|
-
price_t unit() const;
|
|
113
|
+
price_t unit() const noexcept;
|
|
114
114
|
|
|
115
115
|
/** 获取价格精度 */
|
|
116
|
-
int precision() const;
|
|
116
|
+
int precision() const noexcept;
|
|
117
117
|
|
|
118
118
|
/** 获取最小交易数量,同minTradeNumber */
|
|
119
|
-
double atom() const;
|
|
119
|
+
double atom() const noexcept;
|
|
120
120
|
|
|
121
121
|
/** 获取最小交易数量 */
|
|
122
|
-
double minTradeNumber() const;
|
|
122
|
+
double minTradeNumber() const noexcept;
|
|
123
123
|
|
|
124
124
|
/** 获取最大交易量 */
|
|
125
|
-
double maxTradeNumber() const;
|
|
125
|
+
double maxTradeNumber() const noexcept;
|
|
126
126
|
|
|
127
127
|
void market(const string& market_);
|
|
128
128
|
void code(const string& code_);
|
|
@@ -213,9 +213,6 @@ public:
|
|
|
213
213
|
*/
|
|
214
214
|
DatetimeList getTradingCalendar(const KQuery& query) const;
|
|
215
215
|
|
|
216
|
-
/** 设置权息信息, 仅供初始化时调用 */
|
|
217
|
-
void setWeightList(const StockWeightList&);
|
|
218
|
-
|
|
219
216
|
/**
|
|
220
217
|
* 判断是否在交易时间段内,忽略日期仅判断时分秒
|
|
221
218
|
* @param time 时间
|
|
@@ -238,12 +235,12 @@ public:
|
|
|
238
235
|
void releaseKDataBuffer(KQuery::KType) const;
|
|
239
236
|
|
|
240
237
|
/** 指定类型的K线数据是否被缓存 */
|
|
241
|
-
bool isBuffer(KQuery::KType) const;
|
|
238
|
+
bool isBuffer(KQuery::KType) const noexcept;
|
|
242
239
|
|
|
243
|
-
bool isPreload(KQuery::KType ktype) const;
|
|
240
|
+
bool isPreload(KQuery::KType ktype) const noexcept;
|
|
244
241
|
|
|
245
242
|
/** 是否为Null */
|
|
246
|
-
bool isNull() const;
|
|
243
|
+
bool isNull() const noexcept;
|
|
247
244
|
|
|
248
245
|
/** (临时函数)只用于更新缓存中的K线数据 **/
|
|
249
246
|
void realtimeUpdate(KRecord, const KQuery::KType& ktype = KQuery::DAY);
|
|
@@ -265,10 +262,13 @@ private:
|
|
|
265
262
|
bool _getIndexRangeByIndex(const KQuery&, size_t& out_start, size_t& out_end) const;
|
|
266
263
|
|
|
267
264
|
// 以下函数属于基础操作添加了读锁
|
|
268
|
-
size_t _getCountFromBuffer(const KQuery::KType& ktype) const;
|
|
269
265
|
const KRecord& _getKRecordFromBuffer(size_t pos, const KQuery::KType& ktype) const;
|
|
270
266
|
KRecordList _getKRecordListFromBuffer(size_t start_ix, size_t end_ix,
|
|
271
267
|
KQuery::KType ktype) const;
|
|
268
|
+
|
|
269
|
+
bool _getIndexRangeFromBuffer(const KQuery& query, size_t& out_start, size_t& out_end) const;
|
|
270
|
+
bool _getIndexRangeByIndexFromBuffer(const KQuery& query, size_t& out_start,
|
|
271
|
+
size_t& out_end) const;
|
|
272
272
|
bool _getIndexRangeByDateFromBuffer(const KQuery&, size_t&, size_t&) const;
|
|
273
273
|
|
|
274
274
|
KRecordList _getKRecordList(const KQuery& query) const;
|
|
@@ -296,12 +296,12 @@ struct HKU_API Stock::Data {
|
|
|
296
296
|
Datetime m_lastDate; // 证券最后日期
|
|
297
297
|
|
|
298
298
|
StockWeightList m_weightList; // 权息信息列表
|
|
299
|
-
std::
|
|
299
|
+
std::shared_mutex m_weight_mutex;
|
|
300
300
|
|
|
301
301
|
mutable vector<HistoryFinanceInfo>
|
|
302
302
|
m_history_finance; // 历史财务信息 [财务报告日期, 字段1, 字段2, ...]
|
|
303
303
|
mutable std::atomic_bool m_history_finance_ready{false};
|
|
304
|
-
mutable std::
|
|
304
|
+
mutable std::shared_mutex m_history_finance_mutex;
|
|
305
305
|
|
|
306
306
|
price_t m_tick;
|
|
307
307
|
price_t m_tickValue;
|
|
@@ -347,7 +347,7 @@ inline bool operator<(const Stock& s1, const Stock& s2) {
|
|
|
347
347
|
return s1.id() < s2.id();
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
inline uint64_t Stock::id() const {
|
|
350
|
+
inline uint64_t Stock::id() const noexcept {
|
|
351
351
|
return isNull() ? 0 : (int64_t)m_data.get();
|
|
352
352
|
}
|
|
353
353
|
|
|
@@ -355,7 +355,7 @@ inline bool Stock::operator!=(const Stock& stock) const {
|
|
|
355
355
|
return !(*this == stock);
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
inline bool Stock::isNull() const {
|
|
358
|
+
inline bool Stock::isNull() const noexcept {
|
|
359
359
|
return !m_data || !m_kdataDriver;
|
|
360
360
|
}
|
|
361
361
|
|