hikyuu 2.0.9__cp39-none-win_amd64.whl → 2.1.0__cp39-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 (63) hide show
  1. hikyuu/analysis/analysis.py +6 -5
  2. hikyuu/cpp/boost_date_time-mt.dll +0 -0
  3. hikyuu/cpp/boost_serialization-mt.dll +0 -0
  4. hikyuu/cpp/boost_wserialization-mt.dll +0 -0
  5. hikyuu/cpp/core39.pyd +0 -0
  6. hikyuu/cpp/hikyuu.dll +0 -0
  7. hikyuu/cpp/sqlite3.dll +0 -0
  8. hikyuu/data/common.py +1 -4
  9. hikyuu/draw/drawplot/matplotlib_draw.py +3 -2
  10. hikyuu/flat/Spot.py +0 -139
  11. hikyuu/flat/SpotList.py +1 -59
  12. hikyuu/gui/HikyuuTDX.py +6 -5
  13. hikyuu/gui/data/UseTdxImportToH5Thread.py +1 -1
  14. hikyuu/hub.py +1 -1
  15. hikyuu/include/hikyuu/Block.h +2 -2
  16. hikyuu/include/hikyuu/config.h +3 -0
  17. hikyuu/include/hikyuu/global/agent/hikyuu/__init__.py +1 -0
  18. hikyuu/include/hikyuu/global/agent/hikyuu/flat/__init__.py +1 -0
  19. hikyuu/include/hikyuu/global/agent/spot_generated.h +3 -225
  20. hikyuu/include/hikyuu/indicator/crt/BLOCKSETNUM.h +1 -9
  21. hikyuu/include/hikyuu/indicator/crt/INSUM.h +2 -5
  22. hikyuu/include/hikyuu/trade_sys/allocatefunds/AllocateFundsBase.h +5 -5
  23. hikyuu/include/hikyuu/trade_sys/condition/ConditionBase.h +1 -1
  24. hikyuu/include/hikyuu/trade_sys/environment/EnvironmentBase.h +5 -5
  25. hikyuu/include/hikyuu/trade_sys/moneymanager/MoneyManagerBase.h +1 -1
  26. hikyuu/include/hikyuu/trade_sys/profitgoal/ProfitGoalBase.h +1 -1
  27. hikyuu/include/hikyuu/trade_sys/selector/SelectorBase.h +24 -1
  28. hikyuu/include/hikyuu/trade_sys/selector/build_in.h +1 -0
  29. hikyuu/include/hikyuu/trade_sys/selector/crt/SE_Fixed.h +5 -2
  30. hikyuu/include/hikyuu/trade_sys/selector/crt/SE_MultiFactor.h +2 -5
  31. hikyuu/include/hikyuu/trade_sys/selector/crt/SE_Operator.h +43 -0
  32. hikyuu/include/hikyuu/trade_sys/selector/imp/FixedSelector.h +1 -0
  33. hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +9 -2
  34. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorAddSelector.h +19 -0
  35. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorAddValueSelector.h +19 -0
  36. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorDivSelector.h +19 -0
  37. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorDivValueSelector.h +19 -0
  38. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorInvertDivValueSelector.h +19 -0
  39. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorInvertSubValueSelector.h +19 -0
  40. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorMulSelector.h +19 -0
  41. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorMulValueSelector.h +19 -0
  42. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorSelector.h +99 -0
  43. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorSubSelector.h +19 -0
  44. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorSubValueSelector.h +19 -0
  45. hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorValueSelector.h +77 -0
  46. hikyuu/include/hikyuu/trade_sys/signal/SignalBase.h +5 -5
  47. hikyuu/include/hikyuu/trade_sys/slippage/SlippageBase.h +1 -1
  48. hikyuu/include/hikyuu/trade_sys/stoploss/StoplossBase.h +6 -6
  49. hikyuu/include/hikyuu/trade_sys/system/System.h +21 -13
  50. hikyuu/include/hikyuu/utilities/os.h +5 -0
  51. hikyuu/include/hikyuu/utilities/thread/MQStealThreadPool.h +2 -2
  52. hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +2 -2
  53. hikyuu/include/hikyuu/utilities/thread/StealThreadPool.h +2 -2
  54. hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +2 -2
  55. hikyuu/include/hikyuu/version.h +5 -5
  56. {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/METADATA +2 -2
  57. {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/RECORD +61 -48
  58. {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/top_level.txt +2 -0
  59. hikyuu/cpp/boost_atomic-mt.dll +0 -0
  60. hikyuu/cpp/boost_filesystem-mt.dll +0 -0
  61. {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/LICENSE +0 -0
  62. {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/WHEEL +0 -0
  63. {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/entry_points.txt +0 -0
@@ -23,14 +23,11 @@ Indicator HKU_API INSUM(const Block& block, const KQuery& query, const Indicator
23
23
 
24
24
  /**
25
25
  * 返回板块各成分该指标相应输出按计算类型得到的计算值.计算类型:0-累加,1-平均数,2-最大值,3-最小值.
26
- * @param category 板块类别
27
- * @param category 板块名称
28
- * @param query 指定范围
26
+ * @param block 指定板块
29
27
  * @param ind 指定指标
30
28
  * @param mode 计算类型:0-累加,1-平均数,2-最大值,3-最小值.
31
29
  * @return Indicator
32
30
  */
33
- Indicator HKU_API INSUM(const string& category, const string& name, const KQuery& query,
34
- const Indicator& ind, int mode);
31
+ Indicator HKU_API INSUM(const Block& block, const Indicator& ind, int mode);
35
32
 
36
33
  } // namespace hku
@@ -175,11 +175,11 @@ private: \
175
175
  #define ALLOCATEFUNDS_NO_PRIVATE_MEMBER_SERIALIZATION
176
176
  #endif
177
177
 
178
- #define ALLOCATEFUNDS_IMP(classname) \
179
- public: \
180
- virtual AFPtr _clone() override { \
181
- return AFPtr(new classname()); \
182
- } \
178
+ #define ALLOCATEFUNDS_IMP(classname) \
179
+ public: \
180
+ virtual AFPtr _clone() override { \
181
+ return std::make_shared<classname>(); \
182
+ } \
183
183
  virtual SystemWeightList _allocateWeight(const Datetime&, const SystemWeightList&) override;
184
184
 
185
185
  typedef shared_ptr<AllocateFundsBase> AllocateFundsPtr;
@@ -180,7 +180,7 @@ typedef shared_ptr<ConditionBase> CNPtr;
180
180
  #define CONDITION_IMP(classname) \
181
181
  public: \
182
182
  virtual ConditionPtr _clone() { \
183
- return ConditionPtr(new classname()); \
183
+ return std::make_shared<classname>(); \
184
184
  } \
185
185
  virtual void _calculate();
186
186
 
@@ -151,11 +151,11 @@ private: \
151
151
  typedef shared_ptr<EnvironmentBase> EnvironmentPtr;
152
152
  typedef shared_ptr<EnvironmentBase> EVPtr;
153
153
 
154
- #define ENVIRONMENT_IMP(classname) \
155
- public: \
156
- virtual EnvironmentPtr _clone() { \
157
- return EnvironmentPtr(new classname()); \
158
- } \
154
+ #define ENVIRONMENT_IMP(classname) \
155
+ public: \
156
+ virtual EnvironmentPtr _clone() { \
157
+ return std::make_shared<classname>(); \
158
+ } \
159
159
  virtual void _calculate();
160
160
 
161
161
  /**
@@ -209,7 +209,7 @@ typedef shared_ptr<MoneyManagerBase> MMPtr;
209
209
  #define MONEY_MANAGER_IMP(classname) \
210
210
  public: \
211
211
  virtual MoneyManagerPtr _clone() override { \
212
- return MoneyManagerPtr(new classname()); \
212
+ return std::make_shared<classname>(); \
213
213
  } \
214
214
  virtual double _getBuyNumber(const Datetime& datetime, const Stock& stock, price_t price, \
215
215
  price_t risk, SystemPart from) override;
@@ -141,7 +141,7 @@ private: \
141
141
  #define PROFITGOAL_IMP(classname) \
142
142
  public: \
143
143
  virtual ProfitGoalPtr _clone() override { \
144
- return ProfitGoalPtr(new classname()); \
144
+ return std::make_shared<classname>(); \
145
145
  } \
146
146
  virtual price_t getGoal(const Datetime&, price_t) override; \
147
147
  virtual void _calculate() override;
@@ -61,6 +61,20 @@ public:
61
61
  */
62
62
  void addStockList(const StockList& stkList, const SystemPtr& protoSys);
63
63
 
64
+ /**
65
+ * 直接加入已有系统策略示例
66
+ * @note 应该已经绑定 stock
67
+ * @param sys
68
+ */
69
+ void addSystem(const SYSPtr& sys);
70
+
71
+ /**
72
+ * 直接加入已有系统策略示例
73
+ * @note 应该已经绑定 stock
74
+ * @param sys
75
+ */
76
+ void addSystemList(const SystemList& sys);
77
+
64
78
  /**
65
79
  * @brief 获取原型系统列表
66
80
  * @return const SystemList&
@@ -101,9 +115,18 @@ public:
101
115
 
102
116
  virtual bool isMatchAF(const AFPtr& af) = 0;
103
117
 
118
+ /** 用于逻辑运算的子类中添加原型系统,一般不需要子类实现 */
119
+ virtual void _addSystem(const SYSPtr& sys) {}
120
+
121
+ /** 用于逻辑运算的子类中添加原型系统,一般不需要子类实现 */
122
+ virtual void _removeAll() {}
123
+
104
124
  /* 仅供PF调用,由PF通知其实际运行的系统列表,并启动计算 */
105
125
  void calculate(const SystemList& pf_realSysList, const KQuery& query);
106
126
 
127
+ /* 仅供PF调用,建立实际系统到原型系统映射 */
128
+ virtual void bindRealToProto(const SYSPtr& real, const SYSPtr& proto) {}
129
+
107
130
  void calculate_proto(const KQuery& query);
108
131
 
109
132
  private:
@@ -175,7 +198,7 @@ private: \
175
198
  #define SELECTOR_IMP(classname) \
176
199
  public: \
177
200
  virtual SelectorPtr _clone() override { \
178
- return SelectorPtr(new classname()); \
201
+ return std::make_shared<classname>(); \
179
202
  } \
180
203
  virtual SystemWeightList getSelected(Datetime date) override; \
181
204
  virtual bool isMatchAF(const AFPtr& af) override; \
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include "crt/SE_Fixed.h"
13
13
  #include "crt/SE_MultiFactor.h"
14
+ #include "crt/SE_Operator.h"
14
15
  #include "crt/SE_Signal.h"
15
16
 
16
17
  #endif /* TRADE_SYS_SELECTOR_BUILD_IN_H_ */
@@ -15,20 +15,23 @@ namespace hku {
15
15
 
16
16
  /**
17
17
  * @brief 固定选择器,每天都选择指定的交易系统
18
+ * @param weight 固定权重
18
19
  * @return SelectorPtr
19
20
  * @ingroup Selector
20
21
  */
21
- SelectorPtr HKU_API SE_Fixed();
22
+ SelectorPtr HKU_API SE_Fixed(double weight = 1.0);
22
23
 
23
24
  /**
24
25
  * @brief 固定选择器,每天都选择指定的交易系统
25
26
  * @details 对指定的每个股票以原型系统创建相应的交易系统
26
27
  * @param stock_list 指定的股票列表
27
28
  * @param sys 原型系统
29
+ * @param weight 固定权重
28
30
  * @return SelectorPtr
29
31
  * @ingroup Selector
30
32
  */
31
- SelectorPtr HKU_API SE_Fixed(const StockList& stock_list, const SystemPtr& sys);
33
+ SelectorPtr HKU_API SE_Fixed(const StockList& stock_list, const SystemPtr& sys,
34
+ double weight = 1.0);
32
35
 
33
36
  } /* namespace hku */
34
37
 
@@ -24,9 +24,7 @@ SelectorPtr HKU_API SE_MultiFactor(const MFPtr& mf, int topn = 10);
24
24
  /**
25
25
  * 基于 MultiFactor 选股算法
26
26
  * @param src_inds 原始因子公式
27
- * @param stks 证券列表
28
- * @param query 查询条件
29
- * @param topn 只选取时间截面中前 topn 个系统
27
+ * @param topn 只选取时间截面中前 topn 个系统,小于等于0时代表不限制
30
28
  * @param ic_n ic 对应的 ic_n 日收益率
31
29
  * @param ic_rolling_n 计算滚动 IC (即 IC 的 n 日移动平均)周期
32
30
  * @param ref_stk 参照对比证券,未指定时,默认使用 sh000300 沪深300指数
@@ -34,8 +32,7 @@ SelectorPtr HKU_API SE_MultiFactor(const MFPtr& mf, int topn = 10);
34
32
  * @return SelectorPtr
35
33
  * @ingroup Selector
36
34
  */
37
- SelectorPtr HKU_API SE_MultiFactor(const IndicatorList& src_inds, const StockList& stks,
38
- const KQuery& query, int topn = 10, int ic_n = 5,
35
+ SelectorPtr HKU_API SE_MultiFactor(const IndicatorList& src_inds, int topn = 10, int ic_n = 5,
39
36
  int ic_rolling_n = 120, const Stock& ref_stk = Stock(),
40
37
  const string& mode = "MF_ICIRWeight");
41
38
 
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SelectorBase.h"
11
+
12
+ namespace hku {
13
+
14
+ HKU_API SelectorPtr operator+(const SelectorPtr& se1, const SelectorPtr& se2);
15
+ HKU_API SelectorPtr operator-(const SelectorPtr& se1, const SelectorPtr& se2);
16
+ HKU_API SelectorPtr operator*(const SelectorPtr& se1, const SelectorPtr& se2);
17
+ HKU_API SelectorPtr operator/(const SelectorPtr& se1, const SelectorPtr& se2);
18
+
19
+ inline SelectorPtr operator&(const SelectorPtr& se1, const SelectorPtr& se2) {
20
+ return se1 * se2;
21
+ }
22
+
23
+ inline SelectorPtr operator|(const SelectorPtr& se1, const SelectorPtr& se2) {
24
+ return se1 + se2;
25
+ }
26
+
27
+ HKU_API SelectorPtr operator+(const SelectorPtr& se, double value);
28
+ inline SelectorPtr operator+(double value, const SelectorPtr& se) {
29
+ return se + value;
30
+ }
31
+
32
+ HKU_API SelectorPtr operator-(const SelectorPtr& se, double value);
33
+ HKU_API SelectorPtr operator-(double value, const SelectorPtr& se);
34
+
35
+ HKU_API SelectorPtr operator*(const SelectorPtr& se, double value);
36
+ inline SelectorPtr operator*(double value, const SelectorPtr& se) {
37
+ return se * value;
38
+ }
39
+
40
+ HKU_API SelectorPtr operator/(const SelectorPtr& se, double value);
41
+ HKU_API SelectorPtr operator/(double value, const SelectorPtr& se);
42
+
43
+ } // namespace hku
@@ -19,6 +19,7 @@ class FixedSelector : public SelectorBase {
19
19
 
20
20
  public:
21
21
  FixedSelector();
22
+ FixedSelector(double weight);
22
23
  virtual ~FixedSelector();
23
24
  };
24
25
 
@@ -25,18 +25,25 @@ public:
25
25
  virtual bool isMatchAF(const AFPtr& af) override;
26
26
  virtual void _calculate() override;
27
27
 
28
+ void setIndicators(const IndicatorList& inds) {
29
+ HKU_ASSERT(!inds.empty());
30
+ m_inds = inds;
31
+ }
32
+
28
33
  private:
34
+ IndicatorList m_inds;
29
35
  MFPtr m_mf;
30
36
  unordered_map<Stock, SYSPtr> m_stk_sys_dict;
31
37
 
32
38
  //============================================
33
- // 序列化支持
34
- //============================================
39
+ // 序列化支持
40
+ //============================================
35
41
  #if HKU_SUPPORT_SERIALIZATION
36
42
  friend class boost::serialization::access;
37
43
  template <class Archive>
38
44
  void serialize(Archive& ar, const unsigned int version) {
39
45
  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SelectorBase);
46
+ ar& BOOST_SERIALIZATION_NVP(m_inds);
40
47
  ar& BOOST_SERIALIZATION_NVP(m_mf);
41
48
  }
42
49
  #endif
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorAddSelector : public OperatorSelector {
15
+ OPERATOR_SELECTOR_IMP(OperatorAddSelector, "SE_Add")
16
+ OPERATOR_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorValueSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorAddValueSelector : public OperatorValueSelector {
15
+ OPERATOR_VALUE_SELECTOR_IMP(OperatorAddValueSelector, "SE_AddValue")
16
+ OPERATOR_VALUE_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorDivSelector : public OperatorSelector {
15
+ OPERATOR_SELECTOR_IMP(OperatorDivSelector, "SE_Div")
16
+ OPERATOR_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorValueSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorDivValueSelector : public OperatorValueSelector {
15
+ OPERATOR_VALUE_SELECTOR_IMP(OperatorDivValueSelector, "SE_DivValue")
16
+ OPERATOR_VALUE_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorValueSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorInvertDivValueSelector : public OperatorValueSelector {
15
+ OPERATOR_VALUE_SELECTOR_IMP(OperatorInvertDivValueSelector, "SE_DivValue")
16
+ OPERATOR_VALUE_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorValueSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorInvertSubValueSelector : public OperatorValueSelector {
15
+ OPERATOR_VALUE_SELECTOR_IMP(OperatorInvertSubValueSelector, "SE_SubValue")
16
+ OPERATOR_VALUE_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorMulSelector : public OperatorSelector {
15
+ OPERATOR_SELECTOR_IMP(OperatorMulSelector, "SE_Multi")
16
+ OPERATOR_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorValueSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorMulValueSelector : public OperatorValueSelector {
15
+ OPERATOR_VALUE_SELECTOR_IMP(OperatorMulValueSelector, "SE_MultiValue")
16
+ OPERATOR_VALUE_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SelectorBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorSelector : public SelectorBase {
15
+ public:
16
+ OperatorSelector();
17
+ OperatorSelector(const string& name);
18
+ OperatorSelector(const string& name, const SelectorPtr& se1, const SelectorPtr& se2);
19
+ virtual ~OperatorSelector();
20
+
21
+ virtual void _reset() override;
22
+ virtual SelectorPtr _clone() override;
23
+ virtual bool isMatchAF(const AFPtr& af) override;
24
+ virtual void _calculate() override;
25
+ virtual SystemWeightList getSelected(Datetime date) override {
26
+ return SystemWeightList();
27
+ }
28
+
29
+ virtual void _addSystem(const SYSPtr& sys) override;
30
+ virtual void _removeAll() override;
31
+
32
+ protected:
33
+ virtual void bindRealToProto(const SYSPtr& real, const SYSPtr& proto) override {
34
+ m_real_to_proto[real] = proto;
35
+ }
36
+
37
+ SystemWeightList getUnionSelected(Datetime date,
38
+ const std::function<double(double, double)>&& func);
39
+
40
+ SystemWeightList getIntersectionSelected(Datetime date,
41
+ const std::function<double(double, double)>&& func);
42
+
43
+ protected:
44
+ static void sortSystemWeightList(SystemWeightList& swlist);
45
+
46
+ void cloneRebuild(const SelectorPtr& se1, const SelectorPtr& se2);
47
+
48
+ protected:
49
+ SelectorPtr m_se1;
50
+ SelectorPtr m_se2;
51
+ std::unordered_set<SYSPtr> m_se1_set; // se1 的原型系统实例集合
52
+ std::unordered_set<SYSPtr> m_se2_set; // se2 的原型系统实例集合
53
+ std::unordered_map<SYSPtr, SYSPtr> m_real_to_proto;
54
+
55
+ private:
56
+ static std::unordered_set<System*> findIntersection(const SelectorPtr& se1,
57
+ const SelectorPtr& se2);
58
+
59
+ private:
60
+ //============================================
61
+ // 序列化支持
62
+ //============================================
63
+ #if HKU_SUPPORT_SERIALIZATION
64
+ friend class boost::serialization::access;
65
+ template <class Archive>
66
+ void serialize(Archive& ar, const unsigned int version) {
67
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SelectorBase);
68
+ ar& BOOST_SERIALIZATION_NVP(m_se1);
69
+ ar& BOOST_SERIALIZATION_NVP(m_se2);
70
+ }
71
+ #endif
72
+ };
73
+
74
+ #define OPERATOR_SELECTOR_IMP(classname, name) \
75
+ public: \
76
+ classname() : OperatorSelector(name) {} \
77
+ classname(const SelectorPtr& se1, const SelectorPtr& se2) \
78
+ : OperatorSelector(name, se1, se2) {} \
79
+ virtual ~classname() {} \
80
+ \
81
+ virtual SystemWeightList getSelected(Datetime date) override; \
82
+ \
83
+ virtual SelectorPtr _clone() override { \
84
+ HKU_THROW("OperatorSelector Could't support clone!"); \
85
+ }
86
+
87
+ #if HKU_SUPPORT_SERIALIZATION
88
+ #define OPERATOR_SELECTOR_SERIALIZATION \
89
+ private: \
90
+ friend class boost::serialization::access; \
91
+ template <class Archive> \
92
+ void serialize(Archive& ar, const unsigned int version) { \
93
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(OperatorSelector); \
94
+ }
95
+ #else
96
+ #define OPERATOR_SELECTOR_SERIALIZATION
97
+ #endif
98
+
99
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorSubSelector : public OperatorSelector {
15
+ OPERATOR_SELECTOR_IMP(OperatorSubSelector, "SE_Sub")
16
+ OPERATOR_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "OperatorValueSelector.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorSubValueSelector : public OperatorValueSelector {
15
+ OPERATOR_VALUE_SELECTOR_IMP(OperatorSubValueSelector, "SE_SubValue")
16
+ OPERATOR_VALUE_SELECTOR_SERIALIZATION
17
+ };
18
+
19
+ } // namespace hku
@@ -0,0 +1,77 @@
1
+ /*
2
+ * Copyright (c) 2024 hikyuu.org
3
+ *
4
+ * Created on: 2024-05-27
5
+ * Author: fasiondog
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "../SelectorBase.h"
11
+
12
+ namespace hku {
13
+
14
+ class HKU_API OperatorValueSelector : public SelectorBase {
15
+ public:
16
+ OperatorValueSelector();
17
+ OperatorValueSelector(const string& name);
18
+ OperatorValueSelector(const string& name, const SelectorPtr& se, double value);
19
+ virtual ~OperatorValueSelector();
20
+
21
+ virtual void _reset() override;
22
+ virtual SelectorPtr _clone() override;
23
+ virtual bool isMatchAF(const AFPtr& af) override;
24
+ virtual void _calculate() override;
25
+ virtual SystemWeightList getSelected(Datetime date) override {
26
+ return SystemWeightList();
27
+ }
28
+
29
+ protected:
30
+ SelectorPtr m_se;
31
+ double m_value{0.0};
32
+
33
+ private:
34
+ //============================================
35
+ // 序列化支持
36
+ //============================================
37
+ #if HKU_SUPPORT_SERIALIZATION
38
+ friend class boost::serialization::access;
39
+ template <class Archive>
40
+ void serialize(Archive& ar, const unsigned int version) {
41
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SelectorBase);
42
+ ar& BOOST_SERIALIZATION_NVP(m_se);
43
+ ar& BOOST_SERIALIZATION_NVP(m_value);
44
+ }
45
+ #endif
46
+ };
47
+
48
+ #define OPERATOR_VALUE_SELECTOR_IMP(classname, name) \
49
+ public: \
50
+ classname() : OperatorValueSelector(name) {} \
51
+ classname(const SelectorPtr& se, double value) : OperatorValueSelector(name, se, value) {} \
52
+ virtual ~classname() {} \
53
+ \
54
+ virtual SystemWeightList getSelected(Datetime date) override; \
55
+ \
56
+ virtual SelectorPtr _clone() override { \
57
+ auto p = std::make_shared<classname>(); \
58
+ if (m_se) { \
59
+ p->m_se = m_se->clone(); \
60
+ } \
61
+ p->m_value = m_value; \
62
+ return p; \
63
+ }
64
+
65
+ #if HKU_SUPPORT_SERIALIZATION
66
+ #define OPERATOR_VALUE_SELECTOR_SERIALIZATION \
67
+ private: \
68
+ friend class boost::serialization::access; \
69
+ template <class Archive> \
70
+ void serialize(Archive& ar, const unsigned int version) { \
71
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(OperatorValueSelector); \
72
+ }
73
+ #else
74
+ #define OPERATOR_VALUE_SELECTOR_SERIALIZATION
75
+ #endif
76
+
77
+ } // namespace hku