Hikyuu
ConditionBase.h
浏览该文件的文档.
1 /*
2  * ConditionBase.h
3  *
4  * Created on: 2013-3-3
5  * Author: fasiondog
6  */
7 
8 #ifndef CONDITIONBASE_H_
9 #define CONDITIONBASE_H_
10 
11 #include <set>
12 #include "../../utilities/Parameter.h"
13 #include "../../utilities/util.h"
14 #include "../../KData.h"
15 #include "../../trade_manage/TradeManager.h"
16 #include "../signal/SignalBase.h"
17 
18 #if HKU_SUPPORT_SERIALIZATION
19 #include <boost/serialization/shared_ptr.hpp>
20 #include <boost/serialization/assume_abstract.hpp>
21 #include <boost/serialization/base_object.hpp>
22 #include <boost/serialization/set.hpp>
23 #endif
24 
25 namespace hku {
26 
32 class HKU_API ConditionBase: public enable_shared_from_this<ConditionBase> {
34 
35 public:
36  ConditionBase();
37  ConditionBase(const string& name);
38  virtual ~ConditionBase();
39 
41  string name() const;
42 
44  void name(const string& name);
45 
47  void reset();
48 
50  void setTO(const KData& kdata);
51 
53  KData getTO() const;
54 
56  void setTM(const TradeManagerPtr& tm);
57 
59  TradeManagerPtr getTM() const;
60 
62  void setSG(const SGPtr& sg);
63 
65  SGPtr getSG() const;
66 
71  void _addValid(const Datetime& datetime);
72 
73  typedef shared_ptr<ConditionBase> ConditionPtr;
75  ConditionPtr clone();
76 
82  bool isValid(const Datetime& datetime);
83 
85  virtual void _calculate() = 0;
86 
88  virtual void _reset() {}
89 
91  virtual ConditionPtr _clone() = 0;
92 
93 protected:
94  string m_name;
98  std::set<Datetime> m_valid;
99 
100 //============================================
101 // 序列化支持
102 //============================================
103 #if HKU_SUPPORT_SERIALIZATION
104 private:
105  friend class boost::serialization::access;
106  template<class Archive>
107  void save(Archive & ar, const unsigned int version) const {
108  string name(GBToUTF8(m_name));
109  ar & boost::serialization::make_nvp("m_name", name);
110  ar & BOOST_SERIALIZATION_NVP(m_params);
111  ar & BOOST_SERIALIZATION_NVP(m_valid);
112  // m_kdata/m_tm/m_sg是系统运行时临时设置,不需要序列化
113  }
114 
115  template<class Archive>
116  void load(Archive & ar, const unsigned int version) {
117  string name;
118  ar & boost::serialization::make_nvp("m_name", name);
119  m_name = UTF8ToGB(name);
120  ar & BOOST_SERIALIZATION_NVP(m_params);
121  ar & BOOST_SERIALIZATION_NVP(m_valid);
122  // m_kdata/m_tm/m_sg是系统运行时临时设置,不需要序列化
123  }
124 
125  BOOST_SERIALIZATION_SPLIT_MEMBER()
126 #endif /* HKU_SUPPORT_SERIALIZATION */
127 };
128 
129 
130 #if HKU_SUPPORT_SERIALIZATION
131 BOOST_SERIALIZATION_ASSUME_ABSTRACT(ConditionBase)
132 #endif
133 
134 #if HKU_SUPPORT_SERIALIZATION
135 
148 #define CONDITION_NO_PRIVATE_MEMBER_SERIALIZATION private:\
149  friend class boost::serialization::access; \
150  template<class Archive> \
151  void serialize(Archive & ar, const unsigned int version) { \
152  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(ConditionBase); \
153  }
154 #else
155 #define CONDITION_NO_PRIVATE_MEMBER_SERIALIZATION
156 #endif
157 
158 
163 typedef shared_ptr<ConditionBase> ConditionPtr;
164 typedef shared_ptr<ConditionBase> CNPtr;
165 
166 
167 #define CONDITION_IMP(classname) public:\
168  virtual ConditionPtr _clone() {\
169  return ConditionPtr(new classname());\
170  }\
171  virtual void _calculate();
172 
173 
174 
175 HKU_API std::ostream & operator<<(std::ostream &, const ConditionPtr&);
176 HKU_API std::ostream & operator<<(std::ostream &, const ConditionBase&);
177 
178 
179 inline string ConditionBase::name() const {
180  return m_name;
181 }
182 
183 inline void ConditionBase::name(const string& name) {
184  m_name = name;
185 }
186 
187 inline KData ConditionBase::getTO() const {
188  return m_kdata;
189 }
190 
191 inline void ConditionBase::setTM(const TradeManagerPtr& tm) {
192  m_tm = tm;
193 }
194 
195 inline SGPtr ConditionBase::getSG() const {
196  return m_sg;
197 }
198 
199 inline void ConditionBase::setSG(const SGPtr& sg) {
200  m_sg = sg;
201 }
202 
204  return m_tm;
205 }
206 
207 } /* namespace hku */
208 #endif /* CONDITIONBASE_H_ */
SGPtr m_sg
Definition: ConditionBase.h:97
TradeManagerPtr getTM() const
获取交易管理实例
Definition: ConditionBase.h:203
系统有效条件基类
Definition: ConditionBase.h:32
K线数据
Definition: KData.h:19
SGPtr getSG() const
获取系统信号指示器
Definition: ConditionBase.h:195
日期类型
Definition: Datetime.h:33
#define GBToUTF8(s)
Definition: util.h:55
void load(Archive &ar, hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:34
string m_name
Definition: ConditionBase.h:94
void setTM(const TradeManagerPtr &tm)
设置交易管理实例
Definition: ConditionBase.h:191
KData m_kdata
Definition: ConditionBase.h:95
shared_ptr< TradeManager > TradeManagerPtr
客户程序应使用此类型进行实际操作
Definition: TradeManager.h:635
#define HKU_API
Definition: DataType.h:12
KData getTO() const
获取交易对象
Definition: ConditionBase.h:187
void save(Archive &ar, const hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:20
string name() const
获取名称
Definition: ConditionBase.h:179
TMPtr m_tm
Definition: ConditionBase.h:96
HKU_API std::ostream & operator<<(std::ostream &os, const Block &blk)
Definition: Block.cpp:13
#define PARAMETER_SUPPORT
Definition: Parameter.h:233
virtual void _reset()
子类reset接口
Definition: ConditionBase.h:88
#define UTF8ToGB(s)
Definition: util.h:56
shared_ptr< TradeManager > TMPtr
Definition: TradeManager.h:636
shared_ptr< ConditionBase > CNPtr
Definition: ConditionBase.h:164
shared_ptr< ConditionBase > ConditionPtr
客户程序都应使用该指针类型
Definition: ConditionBase.h:163
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
shared_ptr< ConditionBase > ConditionPtr
Definition: ConditionBase.h:73
shared_ptr< SignalBase > SGPtr
Definition: SignalBase.h:186
void setSG(const SGPtr &sg)
设置系统信号指示器
Definition: ConditionBase.h:199
std::set< Datetime > m_valid
Definition: ConditionBase.h:98