hikyuu 2.0.9__cp38-none-win_amd64.whl → 2.1.0__cp38-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hikyuu/analysis/analysis.py +6 -5
- hikyuu/cpp/boost_date_time-mt.dll +0 -0
- hikyuu/cpp/boost_serialization-mt.dll +0 -0
- hikyuu/cpp/boost_wserialization-mt.dll +0 -0
- hikyuu/cpp/core38.pyd +0 -0
- hikyuu/cpp/hikyuu.dll +0 -0
- hikyuu/cpp/sqlite3.dll +0 -0
- hikyuu/data/common.py +1 -4
- hikyuu/draw/drawplot/matplotlib_draw.py +3 -2
- hikyuu/flat/Spot.py +0 -139
- hikyuu/flat/SpotList.py +1 -59
- hikyuu/gui/HikyuuTDX.py +6 -5
- hikyuu/gui/data/UseTdxImportToH5Thread.py +1 -1
- hikyuu/hub.py +1 -1
- hikyuu/include/hikyuu/Block.h +2 -2
- hikyuu/include/hikyuu/config.h +3 -0
- hikyuu/include/hikyuu/global/agent/hikyuu/__init__.py +1 -0
- hikyuu/include/hikyuu/global/agent/hikyuu/flat/__init__.py +1 -0
- hikyuu/include/hikyuu/global/agent/spot_generated.h +3 -225
- hikyuu/include/hikyuu/indicator/crt/BLOCKSETNUM.h +1 -9
- hikyuu/include/hikyuu/indicator/crt/INSUM.h +2 -5
- hikyuu/include/hikyuu/trade_sys/allocatefunds/AllocateFundsBase.h +5 -5
- hikyuu/include/hikyuu/trade_sys/condition/ConditionBase.h +1 -1
- hikyuu/include/hikyuu/trade_sys/environment/EnvironmentBase.h +5 -5
- hikyuu/include/hikyuu/trade_sys/moneymanager/MoneyManagerBase.h +1 -1
- hikyuu/include/hikyuu/trade_sys/profitgoal/ProfitGoalBase.h +1 -1
- hikyuu/include/hikyuu/trade_sys/selector/SelectorBase.h +24 -1
- hikyuu/include/hikyuu/trade_sys/selector/build_in.h +1 -0
- hikyuu/include/hikyuu/trade_sys/selector/crt/SE_Fixed.h +5 -2
- hikyuu/include/hikyuu/trade_sys/selector/crt/SE_MultiFactor.h +2 -5
- hikyuu/include/hikyuu/trade_sys/selector/crt/SE_Operator.h +43 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/FixedSelector.h +1 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +9 -2
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorAddSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorAddValueSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorDivSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorDivValueSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorInvertDivValueSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorInvertSubValueSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorMulSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorMulValueSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorSelector.h +99 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorSubSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorSubValueSelector.h +19 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/OperatorValueSelector.h +77 -0
- hikyuu/include/hikyuu/trade_sys/signal/SignalBase.h +5 -5
- hikyuu/include/hikyuu/trade_sys/slippage/SlippageBase.h +1 -1
- hikyuu/include/hikyuu/trade_sys/stoploss/StoplossBase.h +6 -6
- hikyuu/include/hikyuu/trade_sys/system/System.h +21 -13
- hikyuu/include/hikyuu/utilities/os.h +5 -0
- hikyuu/include/hikyuu/utilities/thread/MQStealThreadPool.h +2 -2
- hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +2 -2
- hikyuu/include/hikyuu/utilities/thread/StealThreadPool.h +2 -2
- hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +2 -2
- hikyuu/include/hikyuu/version.h +5 -5
- {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/METADATA +2 -2
- {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/RECORD +61 -48
- {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/top_level.txt +2 -0
- hikyuu/cpp/boost_atomic-mt.dll +0 -0
- hikyuu/cpp/boost_filesystem-mt.dll +0 -0
- {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/LICENSE +0 -0
- {hikyuu-2.0.9.dist-info → hikyuu-2.1.0.dist-info}/WHEEL +0 -0
- {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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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; \
|
|
@@ -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
|
|
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,
|
|
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
|
|
@@ -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
|