hikyuu 2.6.8.5__py3-none-win_amd64.whl → 2.7.0__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.
Files changed (201) hide show
  1. hikyuu/__init__.py +31 -16
  2. hikyuu/__init__.pyi +610 -590
  3. hikyuu/analysis/__init__.pyi +584 -563
  4. hikyuu/analysis/analysis.pyi +585 -564
  5. hikyuu/core.py +2 -0
  6. hikyuu/core.pyi +586 -565
  7. hikyuu/cpp/__init__.pyi +2 -2
  8. hikyuu/cpp/boost_date_time-mt.dll +0 -0
  9. hikyuu/cpp/boost_serialization-mt.dll +0 -0
  10. hikyuu/cpp/boost_system-mt.dll +0 -0
  11. hikyuu/cpp/boost_wserialization-mt.dll +0 -0
  12. hikyuu/cpp/core310.pyd +0 -0
  13. hikyuu/cpp/core310.pyi +501 -104
  14. hikyuu/cpp/core311.pyd +0 -0
  15. hikyuu/cpp/core311.pyi +501 -104
  16. hikyuu/cpp/core312.pyd +0 -0
  17. hikyuu/cpp/core312.pyi +501 -104
  18. hikyuu/cpp/core313.pyd +0 -0
  19. hikyuu/cpp/core313.pyi +501 -104
  20. hikyuu/cpp/hikyuu.dll +0 -0
  21. hikyuu/cpp/hikyuu.lib +0 -0
  22. hikyuu/cpp/i18n/zh_CN/hikyuu.mo +0 -0
  23. hikyuu/data/clickhouse_upgrade/createdb.sql +105 -105
  24. hikyuu/data/common.py +3 -3
  25. hikyuu/data/common_clickhouse.py +1 -1
  26. hikyuu/data/download_block.py +351 -0
  27. hikyuu/data/em_block_to_clickhouse.py +26 -74
  28. hikyuu/data/em_block_to_mysql.py +25 -75
  29. hikyuu/data/em_block_to_sqlite.py +26 -78
  30. hikyuu/data/hku_config_template.py +3 -3
  31. hikyuu/data/pytdx_to_clickhouse.py +15 -11
  32. hikyuu/data/pytdx_to_h5.py +6 -2
  33. hikyuu/data/pytdx_to_mysql.py +5 -1
  34. hikyuu/data/pytdx_weight_to_clickhouse.py +1 -1
  35. hikyuu/data/pytdx_weight_to_mysql.py +1 -1
  36. hikyuu/data/pytdx_weight_to_sqlite.py +1 -1
  37. hikyuu/data/zh_bond10_to_clickhouse.py +1 -1
  38. hikyuu/draw/drawplot/__init__.pyi +8 -8
  39. hikyuu/draw/drawplot/bokeh_draw.pyi +600 -580
  40. hikyuu/draw/drawplot/common.pyi +1 -1
  41. hikyuu/draw/drawplot/echarts_draw.pyi +602 -582
  42. hikyuu/draw/drawplot/matplotlib_draw.py +4 -74
  43. hikyuu/draw/drawplot/matplotlib_draw.pyi +612 -592
  44. hikyuu/draw/elder.pyi +11 -11
  45. hikyuu/draw/kaufman.pyi +18 -18
  46. hikyuu/draw/volume.pyi +10 -10
  47. hikyuu/examples/notebook/Demo/Demo1.ipynb +48 -33
  48. hikyuu/extend.py +0 -8
  49. hikyuu/extend.pyi +594 -574
  50. hikyuu/fetcher/stock/zh_block_em.py +12 -40
  51. hikyuu/gui/HikyuuTDX.py +99 -31
  52. hikyuu/gui/data/CollectSpotThread.py +1 -1
  53. hikyuu/gui/data/EscapetimeThread.py +8 -14
  54. hikyuu/gui/data/ImportBlockInfoTask.py +3 -10
  55. hikyuu/gui/data/MainWindow.py +1196 -717
  56. hikyuu/gui/data/SchedImportThread.py +2 -2
  57. hikyuu/gui/data/UsePytdxImportToH5Thread.py +3 -3
  58. hikyuu/gui/data/UseQmtImportToH5Thread.py +2 -2
  59. hikyuu/gui/data/UseTdxImportToH5Thread.py +3 -3
  60. hikyuu/gui/data/tool.py +32 -25
  61. hikyuu/gui/dataserver.py +5 -3
  62. hikyuu/gui/images/liandongxiaopu.png +0 -0
  63. hikyuu/hub.pyi +6 -6
  64. hikyuu/include/hikyuu/DataType.h +4 -16
  65. hikyuu/include/hikyuu/KData.h +6 -3
  66. hikyuu/include/hikyuu/KDataPrivatedBufferImp.h +1 -1
  67. hikyuu/include/hikyuu/KDataSharedBufferImp.h +1 -1
  68. hikyuu/include/hikyuu/KQuery.h +2 -2
  69. hikyuu/include/hikyuu/Stock.h +4 -1
  70. hikyuu/include/hikyuu/StockManager.h +13 -3
  71. hikyuu/include/hikyuu/config.h +0 -3
  72. hikyuu/include/hikyuu/data_driver/BaseInfoDriver.h +8 -0
  73. hikyuu/include/hikyuu/data_driver/BlockInfoDriver.h +6 -0
  74. hikyuu/include/hikyuu/data_driver/KDataDriver.h +26 -1
  75. hikyuu/include/hikyuu/data_driver/base_info/mysql/MySQLBaseInfoDriver.h +1 -1
  76. hikyuu/include/hikyuu/data_driver/base_info/sqlite/SQLiteBaseInfoDriver.h +1 -1
  77. hikyuu/include/hikyuu/data_driver/block_info/mysql/MySQLBlockInfoDriver.h +2 -1
  78. hikyuu/include/hikyuu/data_driver/block_info/qianlong/QLBlockInfoDriver.h +2 -1
  79. hikyuu/include/hikyuu/data_driver/block_info/sqlite/SQLiteBlockInfoDriver.h +2 -1
  80. hikyuu/include/hikyuu/data_driver/kdata/DoNothingKDataDriver.h +1 -1
  81. hikyuu/include/hikyuu/data_driver/kdata/cvs/KDataTempCsvDriver.h +1 -1
  82. hikyuu/include/hikyuu/data_driver/kdata/hdf5/H5KDataDriver.h +1 -1
  83. hikyuu/include/hikyuu/data_driver/kdata/mysql/MySQLKDataDriver.h +1 -1
  84. hikyuu/include/hikyuu/data_driver/kdata/sqlite/SQLiteKDataDriver.h +1 -1
  85. hikyuu/include/hikyuu/data_driver/kdata/tdx/TdxKDataDriver.h +1 -1
  86. hikyuu/include/hikyuu/hikyuu.h +1 -1
  87. hikyuu/include/hikyuu/indicator/build_in.h +1 -0
  88. hikyuu/include/hikyuu/indicator/crt/CYCLE.h +4 -4
  89. hikyuu/include/hikyuu/indicator/crt/HSL.h +2 -2
  90. hikyuu/include/hikyuu/indicator/crt/QUANTILE_TRUNC.h +30 -0
  91. hikyuu/include/hikyuu/indicator/crt/TURNOVER.h +1 -0
  92. hikyuu/include/hikyuu/indicator/crt/ZSCORE.h +2 -2
  93. hikyuu/include/hikyuu/indicator/imp/IQuantileTrunc.h +25 -0
  94. hikyuu/include/hikyuu/misc.h +38 -0
  95. hikyuu/include/hikyuu/plugin/dataserver.h +2 -1
  96. hikyuu/include/hikyuu/plugin/device.h +10 -0
  97. hikyuu/include/hikyuu/plugin/extind.h +37 -0
  98. hikyuu/include/hikyuu/plugin/interface/DataServerPluginInterface.h +2 -2
  99. hikyuu/include/hikyuu/plugin/interface/DevicePluginInterface.h +2 -0
  100. hikyuu/include/hikyuu/plugin/interface/ExtendIndicatorsPluginInterface.h +12 -0
  101. hikyuu/include/hikyuu/plugin/interface/plugins.h +0 -5
  102. hikyuu/include/hikyuu/python/pybind_utils.h +0 -12
  103. hikyuu/include/hikyuu/strategy/RunSystemInStrategy.h +3 -0
  104. hikyuu/include/hikyuu/trade_manage/Performance.h +4 -4
  105. hikyuu/include/hikyuu/trade_manage/TradeManagerBase.h +10 -1
  106. hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCapitalFundsMM.h +0 -4
  107. hikyuu/include/hikyuu/trade_sys/multifactor/MultiFactorBase.h +36 -3
  108. hikyuu/include/hikyuu/trade_sys/multifactor/NormalizeBase.h +125 -0
  109. hikyuu/include/hikyuu/trade_sys/multifactor/ScoresFilterBase.h +125 -0
  110. hikyuu/include/hikyuu/trade_sys/multifactor/build_in.h +3 -0
  111. hikyuu/include/hikyuu/trade_sys/multifactor/buildin_norm.h +36 -0
  112. hikyuu/include/hikyuu/trade_sys/multifactor/buildin_scfilter.h +51 -0
  113. hikyuu/include/hikyuu/trade_sys/multifactor/filter/GroupSCFilter.h +24 -0
  114. hikyuu/include/hikyuu/trade_sys/multifactor/filter/IgnoreLessOrEqualValueSCFilter.h +24 -0
  115. hikyuu/include/hikyuu/trade_sys/multifactor/filter/IgnoreNanSCFilter.h +24 -0
  116. hikyuu/include/hikyuu/trade_sys/multifactor/filter/MinAmountPercentSCFilter.h +25 -0
  117. hikyuu/include/hikyuu/trade_sys/multifactor/filter/PriceSCFilter.h +24 -0
  118. hikyuu/include/hikyuu/trade_sys/multifactor/filter/TopNSCFilter.h +24 -0
  119. hikyuu/include/hikyuu/trade_sys/multifactor/imp/EqualWeightMultiFactor.h +1 -1
  120. hikyuu/include/hikyuu/trade_sys/multifactor/imp/ICIRMultiFactor.h +1 -1
  121. hikyuu/include/hikyuu/trade_sys/multifactor/imp/ICMultiFactor.h +1 -1
  122. hikyuu/include/hikyuu/trade_sys/multifactor/imp/WeightMultiFactor.h +1 -1
  123. hikyuu/include/hikyuu/trade_sys/multifactor/normalize/NormMinMax.h +23 -0
  124. hikyuu/include/hikyuu/trade_sys/multifactor/normalize/NormQuantile.h +28 -0
  125. hikyuu/include/hikyuu/trade_sys/multifactor/normalize/NormQuantileUniform.h +28 -0
  126. hikyuu/include/hikyuu/trade_sys/multifactor/normalize/NormZScore.h +25 -0
  127. hikyuu/include/hikyuu/trade_sys/multifactor/normalize/__init__.py +1 -0
  128. hikyuu/include/hikyuu/trade_sys/multifactor/normalize/quantile_trunc.h +16 -0
  129. hikyuu/include/hikyuu/trade_sys/portfolio/Portfolio.h +7 -0
  130. hikyuu/include/hikyuu/trade_sys/portfolio/imp/SimplePortfolio.h +7 -0
  131. hikyuu/include/hikyuu/trade_sys/portfolio/imp/WithoutAFPortfolio.h +7 -0
  132. hikyuu/include/hikyuu/trade_sys/selector/SelectorBase.h +49 -0
  133. hikyuu/include/hikyuu/trade_sys/selector/build_in.h +1 -0
  134. hikyuu/include/hikyuu/trade_sys/selector/crt/SE_MultiFactor2.h +40 -0
  135. hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +0 -3
  136. hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector2.h +49 -0
  137. hikyuu/include/hikyuu/trade_sys/selector/imp/logic/OperatorSelector.h +1 -1
  138. hikyuu/include/hikyuu/trade_sys/selector/imp/logic/OperatorValueSelector.h +1 -1
  139. hikyuu/include/hikyuu/trade_sys/signal/imp/BandSignal2.h +0 -4
  140. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddValueSignal.h +2 -2
  141. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivValueSignal.h +2 -2
  142. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulValueSignal.h +2 -2
  143. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorSignal.h +1 -1
  144. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorValueSignal.h +4 -4
  145. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubValueSignal.h +2 -2
  146. hikyuu/include/hikyuu/trade_sys/slippage/build_in.h +5 -1
  147. hikyuu/include/hikyuu/trade_sys/slippage/crt/SP_LogNormal.h +22 -0
  148. hikyuu/include/hikyuu/trade_sys/slippage/crt/SP_Normal.h +22 -0
  149. hikyuu/include/hikyuu/trade_sys/slippage/crt/SP_TruncNormal.h +25 -0
  150. hikyuu/include/hikyuu/trade_sys/slippage/crt/SP_Uniform.h +23 -0
  151. hikyuu/include/hikyuu/trade_sys/slippage/imp/LogNormalSlippage.h +28 -0
  152. hikyuu/include/hikyuu/trade_sys/slippage/imp/NormalSlippage.h +28 -0
  153. hikyuu/include/hikyuu/trade_sys/slippage/imp/TruncNormalSlippage.h +28 -0
  154. hikyuu/include/hikyuu/trade_sys/slippage/imp/UniformSlippage.h +24 -0
  155. hikyuu/include/hikyuu/trade_sys/system/System.h +14 -1
  156. hikyuu/include/hikyuu/utilities/SpendTimer.h +17 -7
  157. hikyuu/include/hikyuu/utilities/arithmetic.h +45 -0
  158. hikyuu/include/hikyuu/utilities/db_connect/mysql/MySQLConnect.h +1 -1
  159. hikyuu/include/hikyuu/utilities/db_connect/mysql/MySQLStatement.h +1 -1
  160. hikyuu/include/hikyuu/utilities/db_connect/sqlite/SQLiteConnect.h +1 -1
  161. hikyuu/include/hikyuu/utilities/db_connect/sqlite/SQLiteStatement.h +1 -1
  162. hikyuu/include/hikyuu/utilities/plugin/PluginLoader.h +4 -1
  163. hikyuu/include/hikyuu/version.h +5 -5
  164. hikyuu/plugin/backtest.dll +0 -0
  165. hikyuu/plugin/clickhousedriver.dll +0 -0
  166. hikyuu/plugin/dataserver.dll +0 -0
  167. hikyuu/plugin/dataserver_parquet.dll +0 -0
  168. hikyuu/plugin/device.dll +0 -0
  169. hikyuu/plugin/extind.dll +0 -0
  170. hikyuu/plugin/hkuextra.dll +0 -0
  171. hikyuu/plugin/import2hdf5.dll +0 -0
  172. hikyuu/plugin/tmreport.dll +0 -0
  173. hikyuu/trade_manage/__init__.pyi +600 -580
  174. hikyuu/trade_manage/broker.pyi +3 -3
  175. hikyuu/trade_manage/broker_easytrader.pyi +1 -1
  176. hikyuu/trade_manage/trade.py +0 -2
  177. hikyuu/trade_manage/trade.pyi +600 -580
  178. hikyuu/util/__init__.pyi +2 -2
  179. hikyuu/util/singleton.pyi +1 -1
  180. {hikyuu-2.6.8.5.dist-info → hikyuu-2.7.0.dist-info}/METADATA +36 -33
  181. {hikyuu-2.6.8.5.dist-info → hikyuu-2.7.0.dist-info}/RECORD +185 -168
  182. {hikyuu-2.6.8.5.dist-info → hikyuu-2.7.0.dist-info}/top_level.txt +2 -2
  183. hikyuu/cpp/core39.pyd +0 -0
  184. hikyuu/cpp/core39.pyi +0 -14381
  185. hikyuu/data_driver/__init__.py +0 -49
  186. hikyuu/data_driver/jqdata_data_driver.py +0 -277
  187. hikyuu/data_driver/pytdx_data_driver.py +0 -292
  188. hikyuu/fetcher/stock/zh_stock_a_huatai.py +0 -51
  189. hikyuu/fetcher/stock/zh_stock_a_pytdx.py +0 -129
  190. hikyuu/gui/data/CollectToMemThread.py +0 -123
  191. hikyuu/gui/data/CollectToMySQLThread.py +0 -178
  192. hikyuu/gui/start_huatai_insight.py +0 -510
  193. hikyuu/include/hikyuu/plugin/hkuviews.h +0 -36
  194. hikyuu/include/hikyuu/plugin/interface/HkuViewsPluginInterface.h +0 -34
  195. hikyuu/include/hikyuu/views/arrow_common.h +0 -38
  196. hikyuu/include/hikyuu/views/arrow_views.h +0 -117
  197. hikyuu/plugin/hkuviews.dll +0 -0
  198. hikyuu/tools/update_block_info.py +0 -168
  199. /hikyuu/include/hikyuu/{views → trade_sys/multifactor/filter}/__init__.py +0 -0
  200. {hikyuu-2.6.8.5.dist-info → hikyuu-2.7.0.dist-info}/WHEEL +0 -0
  201. {hikyuu-2.6.8.5.dist-info → hikyuu-2.7.0.dist-info}/entry_points.txt +0 -0
@@ -13,10 +13,13 @@
13
13
  #include "../../KData.h"
14
14
  #include "../../utilities/Parameter.h"
15
15
  #include "hikyuu/trade_sys/allocatefunds/AllocateFundsBase.h"
16
+ #include "hikyuu/trade_sys/multifactor/MultiFactorBase.h"
16
17
  #include "SystemWeight.h"
17
18
 
18
19
  namespace hku {
19
20
 
21
+ class HKU_API Portfolio;
22
+
20
23
  /**
21
24
  * 交易对象选择模块
22
25
  * @ingroup Selector
@@ -44,6 +47,15 @@ public:
44
47
  /** 设置算法名称 */
45
48
  void name(const string& name);
46
49
 
50
+ using PFPtr = shared_ptr<Portfolio>;
51
+ PFPtr getPF() const {
52
+ return m_pf.lock();
53
+ }
54
+
55
+ void setPF(const PFPtr& pf) {
56
+ m_pf = pf;
57
+ }
58
+
47
59
  /**
48
60
  * 添加备选股票及其交易策略原型
49
61
  * @param stock 备选股票
@@ -132,6 +144,25 @@ public:
132
144
 
133
145
  virtual string str() const;
134
146
 
147
+ public:
148
+ //------------------------------------------------------------------------
149
+ // 和 MF 相关的 Selector 才有用,放在这里主要为了 SEPtr 可以直接获取 MF 相关信息
150
+ // 非 MF 相关的 Selecter 无用
151
+ //------------------------------------------------------------------------
152
+ MFPtr getMF() const {
153
+ return m_mf;
154
+ }
155
+
156
+ ScoresFilterPtr getScoresFilter() const {
157
+ return m_sc_filter;
158
+ }
159
+
160
+ /** 设置截面评分记录过滤,仅用于 MF 相关的 Selector,从 MF 获取 Score 列表时进行过滤 */
161
+ void setScoresFilter(const ScoresFilterPtr& filter);
162
+
163
+ /** 在已有过滤基础上追加过滤,仅用于 MF 相关的 Selector,从 MF 获取 Score 列表时进行过滤 */
164
+ void addScoresFilter(const ScoresFilterPtr& filter);
165
+
135
166
  protected:
136
167
  virtual bool isPythonObject() const {
137
168
  return false;
@@ -140,6 +171,10 @@ protected:
140
171
  private:
141
172
  void initParam();
142
173
 
174
+ protected:
175
+ ScoresFilterPtr m_sc_filter;
176
+ MFPtr m_mf;
177
+
143
178
  protected:
144
179
  string m_name;
145
180
  bool m_calculated{false}; // 是否已计算过
@@ -150,6 +185,8 @@ protected:
150
185
  SystemList m_pro_sys_list; // 原型系统列表
151
186
  SystemList m_real_sys_list; // PF组合中实际运行的系统,有PF执行时设定,顺序与原型列表一一对应
152
187
 
188
+ std::weak_ptr<Portfolio> m_pf; // 仅存储不序列化,对 PF 的引用
189
+
153
190
  //============================================
154
191
  // 序列化支持
155
192
  //============================================
@@ -161,6 +198,8 @@ private:
161
198
  ar& BOOST_SERIALIZATION_NVP(m_name);
162
199
  ar& BOOST_SERIALIZATION_NVP(m_params);
163
200
  ar& BOOST_SERIALIZATION_NVP(m_pro_sys_list);
201
+ ar& BOOST_SERIALIZATION_NVP(m_sc_filter);
202
+ ar& BOOST_SERIALIZATION_NVP(m_mf);
164
203
  }
165
204
 
166
205
  template <class Archive>
@@ -168,6 +207,8 @@ private:
168
207
  ar& BOOST_SERIALIZATION_NVP(m_name);
169
208
  ar& BOOST_SERIALIZATION_NVP(m_params);
170
209
  ar& BOOST_SERIALIZATION_NVP(m_pro_sys_list);
210
+ ar& BOOST_SERIALIZATION_NVP(m_sc_filter);
211
+ ar& BOOST_SERIALIZATION_NVP(m_mf);
171
212
  }
172
213
 
173
214
  BOOST_SERIALIZATION_SPLIT_MEMBER()
@@ -238,6 +279,14 @@ inline const SystemList& SelectorBase::getProtoSystemList() const {
238
279
  return m_pro_sys_list;
239
280
  }
240
281
 
282
+ inline void SelectorBase::setScoresFilter(const ScoresFilterPtr& filter) {
283
+ m_sc_filter = filter;
284
+ }
285
+
286
+ inline void SelectorBase::addScoresFilter(const ScoresFilterPtr& filter) {
287
+ m_sc_filter = m_sc_filter | filter;
288
+ }
289
+
241
290
  } /* namespace hku */
242
291
 
243
292
  #if FMT_VERSION >= 90000
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include "crt/SE_Fixed.h"
13
13
  #include "crt/SE_MultiFactor.h"
14
+ #include "crt/SE_MultiFactor2.h"
14
15
  #include "crt/SE_Logic.h"
15
16
  #include "crt/SE_Optimal.h"
16
17
  #include "crt/SE_Signal.h"
@@ -0,0 +1,40 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-03-30
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "hikyuu/trade_sys/multifactor/MultiFactorBase.h"
11
+ #include "hikyuu/trade_sys/multifactor/buildin_scfilter.h"
12
+ #include "../SelectorBase.h"
13
+
14
+ namespace hku {
15
+
16
+ /**
17
+ * 基于 MultiFactor 选股算法
18
+ * @return SelectorPtr
19
+ * @ingroup Selector
20
+ */
21
+ SelectorPtr HKU_API SE_MultiFactor2(const MFPtr& mf,
22
+ const ScoresFilterPtr& filter = SCFilter_IgnoreNan());
23
+
24
+ /**
25
+ * 基于 MultiFactor 选股算法
26
+ * @param src_inds 原始因子公式
27
+ * @param ic_n ic 对应的 ic_n 日收益率
28
+ * @param ic_rolling_n 计算滚动 IC (即 IC 的 n 日移动平均)周期
29
+ * @param ref_stk 参照对比证券,未指定时,默认使用 sh000300 沪深300指数
30
+ * @param spearman 默认使用 spearman 计算相关系数,否则为 pearson
31
+ * @param mode "MF_ICIRWeight" | "MF_ICWeight" | "MF_EqualWeight" 因子合成算法名称
32
+ * @return SelectorPtr
33
+ * @ingroup Selector
34
+ */
35
+ SelectorPtr HKU_API SE_MultiFactor2(const IndicatorList& src_inds, int ic_n = 5,
36
+ int ic_rolling_n = 120, const Stock& ref_stk = Stock(),
37
+ bool spearman = true, const string& mode = "MF_ICIRWeight",
38
+ const ScoresFilterPtr& filter = SCFilter_IgnoreNan());
39
+
40
+ } // namespace hku
@@ -7,7 +7,6 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include "hikyuu/trade_sys/multifactor/MultiFactorBase.h"
11
10
  #include "../SelectorBase.h"
12
11
 
13
12
  namespace hku {
@@ -39,7 +38,6 @@ private:
39
38
 
40
39
  private:
41
40
  IndicatorList m_inds;
42
- MFPtr m_mf;
43
41
  unordered_map<Stock, SYSPtr> m_stk_sys_dict;
44
42
 
45
43
  //============================================
@@ -51,7 +49,6 @@ private:
51
49
  void serialize(Archive& ar, const unsigned int version) {
52
50
  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SelectorBase);
53
51
  ar& BOOST_SERIALIZATION_NVP(m_inds);
54
- ar& BOOST_SERIALIZATION_NVP(m_mf);
55
52
  }
56
53
  #endif
57
54
  };
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-xx-xx
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SelectorBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class MultiFactorSelector2 : public SelectorBase {
15
+ public:
16
+ MultiFactorSelector2();
17
+ MultiFactorSelector2(const MFPtr& mf);
18
+ virtual ~MultiFactorSelector2();
19
+
20
+ virtual void _checkParam(const string& name) const override;
21
+ virtual void _reset() override;
22
+ virtual SelectorPtr _clone() override;
23
+ virtual SystemWeightList _getSelected(Datetime date) override;
24
+ virtual bool isMatchAF(const AFPtr& af) override;
25
+ virtual void _calculate() override;
26
+
27
+ void setIndicators(const IndicatorList& inds) {
28
+ HKU_ASSERT(!inds.empty());
29
+ m_inds = inds;
30
+ }
31
+
32
+ private:
33
+ IndicatorList m_inds;
34
+ unordered_map<Stock, SYSPtr> m_stk_sys_dict;
35
+
36
+ //============================================
37
+ // 序列化支持
38
+ //============================================
39
+ #if HKU_SUPPORT_SERIALIZATION
40
+ friend class boost::serialization::access;
41
+ template <class Archive>
42
+ void serialize(Archive& ar, const unsigned int version) {
43
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SelectorBase);
44
+ ar& BOOST_SERIALIZATION_NVP(m_inds);
45
+ }
46
+ #endif
47
+ };
48
+
49
+ } // namespace hku
@@ -85,7 +85,7 @@ public: \
85
85
  classname() : OperatorSelector(name) {} \
86
86
  classname(const SelectorPtr& se1, const SelectorPtr& se2) \
87
87
  : OperatorSelector(name, se1, se2) {} \
88
- virtual ~classname() {} \
88
+ virtual ~classname() override {} \
89
89
  \
90
90
  virtual SystemWeightList _getSelected(Datetime date) override; \
91
91
  \
@@ -66,7 +66,7 @@ private:
66
66
  public: \
67
67
  classname() : OperatorValueSelector(name) {} \
68
68
  classname(const SelectorPtr& se, double value) : OperatorValueSelector(name, se, value) {} \
69
- virtual ~classname() {} \
69
+ virtual ~classname() override {} \
70
70
  \
71
71
  virtual SystemWeightList _getSelected(Datetime date) override; \
72
72
  \
@@ -6,8 +6,6 @@
6
6
  */
7
7
 
8
8
  #pragma once
9
- #ifndef TRADE_SYS_SIGNAL_IMP_BANDSIGNAL_H_
10
- #define TRADE_SYS_SIGNAL_IMP_BANDSIGNAL_H_
11
9
 
12
10
  #include "../../../indicator/Indicator.h"
13
11
  #include "../SignalBase.h"
@@ -43,5 +41,3 @@ private:
43
41
  #endif
44
42
  };
45
43
  } // namespace hku
46
-
47
- #endif
@@ -12,8 +12,8 @@
12
12
  namespace hku {
13
13
 
14
14
  class AddValueSignal : public OperatorValueSignal {
15
- OPERATOR_SIGNAL_IMP(AddValueSignal, "SG_AddValue")
16
- OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
15
+ OPERATOR_VALUE_SIGNAL_IMP(AddValueSignal, "SG_AddValue")
16
+ OPERATOR_VALUE_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
17
17
  };
18
18
 
19
19
  } /* namespace hku */
@@ -12,8 +12,8 @@
12
12
  namespace hku {
13
13
 
14
14
  class DivValueSignal : public OperatorValueSignal {
15
- OPERATOR_SIGNAL_IMP(DivValueSignal, "SG_DivValue")
16
- OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
15
+ OPERATOR_VALUE_SIGNAL_IMP(DivValueSignal, "SG_DivValue")
16
+ OPERATOR_VALUE_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
17
17
 
18
18
  public:
19
19
  DivValueSignal(double value, const SignalPtr& sg);
@@ -12,8 +12,8 @@
12
12
  namespace hku {
13
13
 
14
14
  class MulValueSignal : public OperatorValueSignal {
15
- OPERATOR_SIGNAL_IMP(MulValueSignal, "SG_MulValue")
16
- OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
15
+ OPERATOR_VALUE_SIGNAL_IMP(MulValueSignal, "SG_MulValue")
16
+ OPERATOR_VALUE_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
17
17
  };
18
18
 
19
19
  } /* namespace hku */
@@ -48,7 +48,7 @@ protected:
48
48
  public: \
49
49
  classname() : OperatorSignal(name) {} \
50
50
  classname(const SignalPtr& sg1, const SignalPtr& sg2) : OperatorSignal(name, sg1, sg2) {} \
51
- virtual ~classname() {} \
51
+ virtual ~classname() override {} \
52
52
  virtual SignalPtr _clone() override { \
53
53
  return make_shared<classname>(m_sg1, m_sg2); \
54
54
  } \
@@ -42,18 +42,18 @@ protected:
42
42
  #endif
43
43
  };
44
44
 
45
- #define OPERATOR_SIGNAL_IMP(classname, name) \
45
+ #define OPERATOR_VALUE_SIGNAL_IMP(classname, name) \
46
46
  public: \
47
47
  classname() : OperatorValueSignal(name) {} \
48
48
  classname(const SignalPtr& sg, double value) : OperatorValueSignal(name, sg, value) {} \
49
- virtual ~classname() {} \
49
+ virtual ~classname() override {} \
50
50
  virtual SignalPtr _clone() override { \
51
51
  return make_shared<classname>(m_sg, m_value); \
52
52
  } \
53
53
  virtual void _calculate(const KData&) override;
54
54
 
55
55
  #if HKU_SUPPORT_SERIALIZATION
56
- #define OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION \
56
+ #define OPERATOR_VALUE_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION \
57
57
  private: \
58
58
  friend class boost::serialization::access; \
59
59
  template <class Archive> \
@@ -62,7 +62,7 @@ private: \
62
62
  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(OperatorValueSignal); \
63
63
  }
64
64
  #else
65
- #define OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
65
+ #define OPERATOR_VALUE_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
66
66
  #endif
67
67
 
68
68
  } /* namespace hku */
@@ -12,8 +12,8 @@
12
12
  namespace hku {
13
13
 
14
14
  class SubValueSignal : public OperatorValueSignal {
15
- OPERATOR_SIGNAL_IMP(SubValueSignal, "SG_AddValue")
16
- OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
15
+ OPERATOR_VALUE_SIGNAL_IMP(SubValueSignal, "SG_AddValue")
16
+ OPERATOR_VALUE_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
17
17
 
18
18
  public:
19
19
  SubValueSignal(double value, const SignalPtr& sg);
@@ -11,5 +11,9 @@
11
11
 
12
12
  #include "crt/SP_FixedPercent.h"
13
13
  #include "crt/SP_FixedValue.h"
14
+ #include "crt/SP_Uniform.h"
15
+ #include "crt/SP_Normal.h"
16
+ #include "crt/SP_LogNormal.h"
17
+ #include "crt/SP_TruncNormal.h"
14
18
 
15
- #endif /* SLIPPAGE_BUILD_IN_H_ */
19
+ #endif /* SLIPPAGE_BUILD_IN_H_ */
@@ -0,0 +1,22 @@
1
+ /*
2
+ * SP_LogNormal.h
3
+ *
4
+ * Created on: 2025年10月25日
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ /**
15
+ * 对数正态分布随机价格移滑价差算法, 买入和卖出操作是基于对数正态分布的随机价格偏移
16
+ * @param mean 对数正态分布的均值参数
17
+ * @param stddev 对数正态分布的标准差参数
18
+ * @return 滑点对象指针
19
+ */
20
+ SlippagePtr HKU_API SP_LogNormal(double mean = 0.0, double stddev = 0.05);
21
+
22
+ } /* namespace hku */
@@ -0,0 +1,22 @@
1
+ /*
2
+ * SP_Normal.h
3
+ *
4
+ * Created on: 2025年10月25日
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ /**
15
+ * 正态分布随机价格移滑价差算法, 买入和卖出操作是基于正态分布的随机价格偏移
16
+ * @param mean 正态分布均值
17
+ * @param stddev 正态分布标准差
18
+ * @return 滑点对象指针
19
+ */
20
+ SlippagePtr HKU_API SP_Normal(double mean = 0.0, double stddev = 0.05);
21
+
22
+ } /* namespace hku */
@@ -0,0 +1,25 @@
1
+ /*
2
+ * SP_TruncNormal.h
3
+ *
4
+ * Created on: 2025年10月25日
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ /**
15
+ * 截断正态分布随机价格移滑价差算法, 买入和卖出操作是基于截断正态分布的随机价格偏移
16
+ * @param mean 正态分布均值
17
+ * @param stddev 正态分布标准差
18
+ * @param min_value 截断最小值
19
+ * @param max_value 截断最大值
20
+ * @return 滑点对象指针
21
+ */
22
+ SlippagePtr HKU_API SP_TruncNormal(double mean = 0.0, double stddev = 0.05, double min_value = -0.1,
23
+ double max_value = 0.1);
24
+
25
+ } /* namespace hku */
@@ -0,0 +1,23 @@
1
+ /*
2
+ * SL_FixedValue.h
3
+ *
4
+ * Created on: 2016年5月7日
5
+ * Author: Administrator
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ /**
15
+ * 均匀分布随机价格移滑价差算法, 买入和卖出操作是价格在[min_value,
16
+ * max_value]范围内的均匀分布随机偏移
17
+ * @param min_value 偏移价格下限
18
+ * @param max_value 偏移价格上限
19
+ * @return
20
+ */
21
+ SlippagePtr HKU_API SP_Uniform(double min_value = -0.05, double max_value = 0.05);
22
+
23
+ } /* namespace hku */
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2025 hikyuu.org
3
+ *
4
+ * Created on: 2025-10-25
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class LogNormalSlippage : public SlippageBase {
15
+ SLIPPAGE_IMP(LogNormalSlippage)
16
+ SLIPPAGE_NO_PRIVATE_MEMBER_SERIALIZATION
17
+
18
+ public:
19
+ LogNormalSlippage();
20
+ virtual ~LogNormalSlippage();
21
+ virtual void _checkParam(const string& name) const override;
22
+
23
+ private:
24
+ static std::random_device ms_rd;
25
+ static std::mt19937 ms_gen;
26
+ };
27
+
28
+ } /* namespace hku */
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2025 hikyuu.org
3
+ *
4
+ * Created on: 2025-10-25
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class NormalSlippage : public SlippageBase {
15
+ SLIPPAGE_IMP(NormalSlippage)
16
+ SLIPPAGE_NO_PRIVATE_MEMBER_SERIALIZATION
17
+
18
+ public:
19
+ NormalSlippage();
20
+ virtual ~NormalSlippage();
21
+ virtual void _checkParam(const string& name) const override;
22
+
23
+ private:
24
+ static std::random_device ms_rd;
25
+ static std::mt19937 ms_gen;
26
+ };
27
+
28
+ } /* namespace hku */
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (c) 2025 hikyuu.org
3
+ *
4
+ * Created on: 2025-10-25
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class TruncNormalSlippage : public SlippageBase {
15
+ SLIPPAGE_IMP(TruncNormalSlippage)
16
+ SLIPPAGE_NO_PRIVATE_MEMBER_SERIALIZATION
17
+
18
+ public:
19
+ TruncNormalSlippage();
20
+ virtual ~TruncNormalSlippage();
21
+ virtual void _checkParam(const string& name) const override;
22
+
23
+ private:
24
+ static std::random_device ms_rd;
25
+ static std::mt19937 ms_gen;
26
+ };
27
+
28
+ } /* namespace hku */
@@ -0,0 +1,24 @@
1
+ /*
2
+ * Copyright (c) 2025 hikyuu.org
3
+ *
4
+ * Created on: 2025-10-25
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SlippageBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class UniformSlippage : public SlippageBase {
15
+ SLIPPAGE_IMP(UniformSlippage)
16
+ SLIPPAGE_NO_PRIVATE_MEMBER_SERIALIZATION
17
+
18
+ public:
19
+ UniformSlippage();
20
+ virtual ~UniformSlippage();
21
+ virtual void _checkParam(const string& name) const override;
22
+ };
23
+
24
+ } /* namespace hku */
@@ -9,6 +9,7 @@
9
9
  #ifndef SYSTEMBASE_H_
10
10
  #define SYSTEMBASE_H_
11
11
 
12
+ #include <nlohmann/json.hpp>
12
13
  // #include "../../KData.h"
13
14
  // #include "../../utilities/Parameter.h"
14
15
  // #include "../../trade_manage/TradeManager.h"
@@ -25,6 +26,8 @@
25
26
 
26
27
  namespace hku {
27
28
 
29
+ using json = nlohmann::json;
30
+
28
31
  class HKU_API Portfolio;
29
32
  class HKU_API AllocateFundsBase;
30
33
  class HKU_API WalkForwardSystem;
@@ -180,6 +183,11 @@ public:
180
183
  */
181
184
  void setTO(const KData& kdata);
182
185
 
186
+ /**
187
+ * 回测完成后,返回最后一天交易记录,以及需要延迟的买入和卖出延迟请求
188
+ */
189
+ json lastSuggestion() const;
190
+
183
191
  /**
184
192
  * @brief 不指定stock的方式下run,需要事先通过setStock设定stock
185
193
  * @param query 查询条件
@@ -212,6 +220,9 @@ public:
212
220
  */
213
221
  virtual TradeRecord runMoment(const Datetime& datetime);
214
222
 
223
+ virtual TradeRecord runMomentOnOpen(const Datetime& datetime);
224
+ virtual TradeRecord runMomentOnClose(const Datetime& datetime);
225
+
215
226
  // 运行前准备工作, 失败将抛出异常
216
227
  virtual void readyForRun();
217
228
 
@@ -318,7 +329,9 @@ private:
318
329
 
319
330
  TradeRecord _processRequest(const KRecord& today, const KRecord& src_today);
320
331
 
321
- TradeRecord _runMoment(const KRecord& record, const KRecord& src_record);
332
+ TradeRecord _runMoment(const KRecord& today, const KRecord& src_today);
333
+ TradeRecord _runMomentOnOpen(const KRecord& today, const KRecord& src_today);
334
+ TradeRecord _runMomentOnClose(const KRecord& today, const KRecord& src_today);
322
335
 
323
336
  // Portfolio | AllocateFunds 指示立即进行强制卖出,以便对 buy_delay 的系统进行资金调整
324
337
  TradeRecord _sellForce(const Datetime& date, double num, Part from, bool on_open);