8 #ifndef INDICATORIMP_H_ 9 #define INDICATORIMP_H_ 12 #include "../utilities/Parameter.h" 13 #include "../utilities/util.h" 15 #if HKU_SUPPORT_SERIALIZATION 16 #include <boost/serialization/string.hpp> 17 #include <boost/serialization/vector.hpp> 18 #include <boost/serialization/shared_ptr.hpp> 19 #include <boost/serialization/assume_abstract.hpp> 20 #include <boost/serialization/base_object.hpp> 25 #define MAX_RESULT_NUM 6 52 void setDiscard(
size_t discard);
55 return m_pBuffer[0] ? m_pBuffer[0]->size() : 0;
59 return (*m_pBuffer[num])[pos];
63 PriceList getResultAsPriceList(
size_t result_num);
73 #if CHECK_ACCESS_BOUND 74 if ((m_pBuffer[num] == NULL) || pos>= m_pBuffer[num]->size()) {
75 throw(std::out_of_range(
"Try to access value out of bounds! " 76 + name() +
" [IndicatorImp::_set]"));
78 (*m_pBuffer[num])[pos] = val;
80 (*m_pBuffer[num])[pos] = val;
90 void _readyBuffer(
size_t len,
size_t result_num);
92 string name()
const {
return m_name; }
93 void name(
const string& name) { m_name =
name; }
96 string long_name()
const;
103 virtual bool check() {
return false;}
108 virtual IndicatorImpPtr operator()(
const Indicator& ind);
116 #if HKU_SUPPORT_SERIALIZATION 118 friend class boost::serialization::access;
119 template<
class Archive>
120 void save(Archive & ar,
const unsigned int version)
const {
123 ar & bs::make_nvp<string>(
"m_name", name_str);
124 ar & BOOST_SERIALIZATION_NVP(m_params);
125 ar & BOOST_SERIALIZATION_NVP(m_discard);
126 ar & BOOST_SERIALIZATION_NVP(m_result_num);
127 size_t act_result_num = 0;
129 while (i < m_result_num) {
133 ar & BOOST_SERIALIZATION_NVP(act_result_num);
135 for (
size_t i = 0; i < act_result_num; ++i) {
136 std::stringstream buf;
137 buf <<
"result_" << i;
138 ar & bs::make_nvp<PriceList>(buf.str().c_str(), *m_pBuffer[i]);
142 template<
class Archive>
143 void load(Archive & ar,
const unsigned int version) {
145 ar & BOOST_SERIALIZATION_NVP(m_name);
146 ar & BOOST_SERIALIZATION_NVP(m_params);
147 ar & BOOST_SERIALIZATION_NVP(m_discard);
148 ar & BOOST_SERIALIZATION_NVP(m_result_num);
149 size_t act_result_num = 0;
150 ar & BOOST_SERIALIZATION_NVP(act_result_num);
151 for (
size_t i = 0; i < act_result_num; ++i) {
153 std::stringstream buf;
154 buf <<
"result_" << i;
155 ar & bs::make_nvp<PriceList>(buf.str().c_str(), *m_pBuffer[i]);
159 BOOST_SERIALIZATION_SPLIT_MEMBER()
163 #if HKU_SUPPORT_SERIALIZATION 167 #if HKU_SUPPORT_SERIALIZATION 168 #define INDICATOR_IMP_NO_PRIVATE_MEMBER_SERIALIZATION private:\ 169 friend class boost::serialization::access; \ 170 template<class Archive> \ 171 void serialize(Archive & ar, const unsigned int version) { \ 172 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(IndicatorImp); \ 175 #define INDICATOR_IMP_NO_PRIVATE_MEMBER_SERIALIZATION 178 #define INDICATOR_IMP(classname) public: \ 179 virtual bool check(); \ 180 virtual void _calculate(const Indicator& data); \ 181 virtual IndicatorImpPtr operator()(const Indicator& ind) { \ 182 IndicatorImpPtr p = make_shared<classname>(); \ 183 p->setParameter(m_params); \ size_t size() const
Definition: IndicatorImp.h:54
shared_ptr< IndicatorImp > IndicatorImpPtr
Definition: IndicatorImp.h:189
virtual void _calculate(const Indicator &data)
Definition: IndicatorImp.h:105
指标实现类,定义新指标时,应从此类继承
Definition: IndicatorImp.h:33
vector< price_t > PriceList
Definition: DataType.h:66
string m_name
Definition: IndicatorImp.h:111
size_t getResultNumber() const
Definition: IndicatorImp.h:44
#define GBToUTF8(s)
Definition: util.h:55
指标类,具体由IndicatorImp实现,实现新指标时应继承IndicatorImp
Definition: Indicator.h:38
void load(Archive &ar, hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:34
Definition: Block_serialization.h:18
size_t m_discard
Definition: IndicatorImp.h:112
shared_ptr< IndicatorImp > IndicatorImpPtr
Definition: IndicatorImp.h:107
size_t m_result_num
Definition: IndicatorImp.h:113
#define HKU_API
Definition: DataType.h:12
void save(Archive &ar, const hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:20
HKU_API std::ostream & operator<<(std::ostream &os, const Block &blk)
Definition: Block.cpp:13
string name() const
Definition: IndicatorImp.h:92
double price_t
Definition: DataType.h:53
#define MAX_RESULT_NUM
Definition: IndicatorImp.h:25
void name(const string &name)
Definition: IndicatorImp.h:93
virtual bool check()
Definition: IndicatorImp.h:103
#define PARAMETER_SUPPORT
Definition: Parameter.h:233
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
void _set(price_t val, size_t pos, size_t num=0)
使用IndicatorImp(const Indicator&...)构造函数后,计算结果使用该函数, 未做越界保护 ...
Definition: IndicatorImp.h:72
size_t discard() const
Definition: IndicatorImp.h:48