Hikyuu
SignalBase.h
浏览该文件的文档.
1 /*
2  * SignalBase.h
3  *
4  * Created on: 2013-3-3
5  * Author: fasiondog
6  */
7 
8 #ifndef SIGNALBASE_H_
9 #define SIGNALBASE_H_
10 
11 #include <set>
12 #include "../../KData.h"
13 #include "../../utilities/Parameter.h"
14 #include "../../trade_manage/TradeManager.h"
15 #include "../../serialization/Datetime_serialization.h"
16 
17 #if HKU_SUPPORT_SERIALIZATION
18 #include <boost/serialization/shared_ptr.hpp>
19 #include <boost/serialization/set.hpp>
20 #include <boost/serialization/assume_abstract.hpp>
21 #include <boost/serialization/base_object.hpp>
22 #endif
23 
24 namespace hku {
25 
30 class HKU_API SignalBase: public enable_shared_from_this<SignalBase> {
32 
33 public:
34  SignalBase();
35  SignalBase(const string& name);
36  virtual ~SignalBase();
37 
43  bool shouldBuy(const Datetime& datetime) const;
44 
50  bool shouldSell(const Datetime& datetime) const;
51 
53  DatetimeList getBuySignal() const;
54 
56  DatetimeList getSellSignal() const;
57 
62  void _addBuySignal(const Datetime& datetime);
63 
68  void _addSellSignal(const Datetime& datetime);
69 
74  void setTO(const KData& kdata);
75 
80  KData getTO() const;
81 
83  void reset();
84 
85  typedef shared_ptr<SignalBase> SignalPtr;
87  SignalPtr clone();
88 
90  string name() const;
91 
93  void name(const string& name);
94 
96  virtual void _reset() {}
97 
99  virtual SignalPtr _clone() = 0;
100 
102  virtual void _calculate() = 0;
103 
104 protected:
105  string m_name;
107  bool m_hold;
108  std::set<Datetime> m_buySig;
109  std::set<Datetime> m_sellSig;
110 
111 //============================================
112 // 序列化支持
113 //============================================
114 #if HKU_SUPPORT_SERIALIZATION
115 private:
116  friend class boost::serialization::access;
117  template<class Archive>
118  void save(Archive & ar, const unsigned int version) const {
119  string name_str(GBToUTF8(m_name));
120  ar & boost::serialization::make_nvp("name", name_str);
121  ar & BOOST_SERIALIZATION_NVP(m_params);
122  ar & BOOST_SERIALIZATION_NVP(m_hold);
123  ar & BOOST_SERIALIZATION_NVP(m_buySig);
124  ar & BOOST_SERIALIZATION_NVP(m_sellSig);
125  // m_kdata都是系统运行时临时设置,不需要序列化
126  //ar & BOOST_SERIALIZATION_NVP(m_kdata);
127  }
128 
129  template<class Archive>
130  void load(Archive & ar, const unsigned int version) {
131  ar & boost::serialization::make_nvp("name", m_name);
132  ar & BOOST_SERIALIZATION_NVP(m_params);
133  ar & BOOST_SERIALIZATION_NVP(m_hold);
134  ar & BOOST_SERIALIZATION_NVP(m_buySig);
135  ar & BOOST_SERIALIZATION_NVP(m_sellSig);
136  // m_kdata都是系统运行时临时设置,不需要序列化
137  //ar & BOOST_SERIALIZATION_NVP(m_kdata);
138  }
139 
140  BOOST_SERIALIZATION_SPLIT_MEMBER()
141 #endif /* HKU_SUPPORT_SERIALIZATION */
142 };
143 
144 #if HKU_SUPPORT_SERIALIZATION
145 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SignalBase)
146 #endif
147 
148 #if HKU_SUPPORT_SERIALIZATION
149 
162 #define SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION private:\
163  friend class boost::serialization::access; \
164  template<class Archive> \
165  void serialize(Archive & ar, const unsigned int version) { \
166  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(SignalBase); \
167  }
168 #else
169 #define SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
170 #endif
171 
172 
173 #define SIGNAL_IMP(classname) public:\
174  virtual SignalPtr _clone() {\
175  return SignalPtr(new classname());\
176  }\
177  virtual void _calculate();
178 
179 
180 
185 typedef shared_ptr<SignalBase> SignalPtr;
186 typedef shared_ptr<SignalBase> SGPtr;
187 
188 HKU_API std::ostream & operator<<(std::ostream&, const SignalBase&);
189 HKU_API std::ostream & operator<<(std::ostream&, const SignalPtr&);
190 
191 inline KData SignalBase::getTO() const {
192  return m_kdata;
193 }
194 
195 inline string SignalBase::name() const {
196  return m_name;
197 }
198 
199 inline void SignalBase::name(const string& name) {
200  m_name = name;
201 }
202 
203 inline bool SignalBase::shouldBuy(const Datetime& datetime) const {
204  return m_buySig.count(datetime) ? true : false;
205 }
206 
207 inline bool SignalBase::shouldSell(const Datetime& datetime) const {
208  return m_sellSig.count(datetime) ? true : false;
209 }
210 
211 } /* namespace hku */
212 #endif /* SIGNALBASE_H_ */
bool m_hold
Definition: SignalBase.h:107
std::set< Datetime > m_buySig
Definition: SignalBase.h:108
K线数据
Definition: KData.h:19
string m_name
Definition: SignalBase.h:105
KData getTO() const
获取交易对象
Definition: SignalBase.h:191
日期类型
Definition: Datetime.h:33
#define GBToUTF8(s)
Definition: util.h:55
virtual void _reset()
子类复位接口
Definition: SignalBase.h:96
bool shouldBuy(const Datetime &datetime) const
指定时刻是否可以买入
Definition: SignalBase.h:203
void load(Archive &ar, hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:34
bool shouldSell(const Datetime &datetime) const
指定时刻是否可以卖出
Definition: SignalBase.h:207
std::set< Datetime > m_sellSig
Definition: SignalBase.h:109
#define HKU_API
Definition: DataType.h:12
shared_ptr< SignalBase > SignalPtr
客户程序都应使用该指针类型,操作信号指示器
Definition: SignalBase.h:185
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
std::vector< Datetime > DatetimeList
日期列表
Definition: Datetime.h:177
string name() const
获取名称
Definition: SignalBase.h:195
#define PARAMETER_SUPPORT
Definition: Parameter.h:233
信号指示器基类
Definition: SignalBase.h:30
shared_ptr< SignalBase > SignalPtr
Definition: SignalBase.h:85
KData m_kdata
Definition: SignalBase.h:106
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
shared_ptr< SignalBase > SGPtr
Definition: SignalBase.h:186