Hikyuu
MoneyManagerBase.h
浏览该文件的文档.
1 /*
2  * MoneyManagerBase.h
3  *
4  * Created on: 2013-3-3
5  * Author: fasiondog
6  */
7 
8 #ifndef MONEYMANAGERBASE_H_
9 #define MONEYMANAGERBASE_H_
10 
11 #include "../../utilities/Parameter.h"
12 #include "../system/SystemPart.h"
13 #include "../../trade_manage/TradeManager.h"
14 
15 #if HKU_SUPPORT_SERIALIZATION
16 #include <boost/serialization/shared_ptr.hpp>
17 #include <boost/serialization/assume_abstract.hpp>
18 #include <boost/serialization/base_object.hpp>
19 #endif
20 
21 namespace hku {
22 
27 class HKU_API MoneyManagerBase: public enable_shared_from_this<MoneyManagerBase> {
29 
30 public:
32  MoneyManagerBase(const string& name);
33  virtual ~MoneyManagerBase();
34 
36  string name() const {
37  return m_name;
38  }
39 
41  void name(const string& name) {
42  m_name = name;
43  }
44 
46  void reset() {
47  _reset();
48  }
49 
54  void setTM(const TradeManagerPtr& tm) {
55  m_tm = tm;
56  }
57 
63  return m_tm;
64  }
65 
67  void setQuery(const KQuery& query) {
68  m_query = query;
69  }
70 
72  KQuery getQuery() const {
73  return m_query;
74  }
75 
76  typedef shared_ptr<MoneyManagerBase> MoneyManagerPtr;
78  MoneyManagerPtr clone();
79 
81  virtual void buyNotify(const TradeRecord&);
82 
84  virtual void sellNotify(const TradeRecord&);
85 
95  size_t getSellNumber(const Datetime& datetime, const Stock& stock,
96  price_t price, price_t risk, SystemPart from);
97 
106  size_t getSellShortNumber(const Datetime& datetime,
107  const Stock& stock, price_t price, price_t risk, SystemPart from);
108 
117  size_t getBuyShortNumber(const Datetime& datetime,
118  const Stock& stock, price_t price, price_t risk, SystemPart from);
119 
128  size_t getBuyNumber(const Datetime& datetime, const Stock& stock,
129  price_t price, price_t risk, SystemPart from);
130 
131 
132  virtual size_t _getBuyNumber(const Datetime& datetime, const Stock& stock,
133  price_t price, price_t risk, SystemPart from) = 0;
134 
135  virtual size_t _getSellNumber(const Datetime& datetime, const Stock& stock,
136  price_t price, price_t risk, SystemPart from);
137 
138  virtual size_t _getSellShortNumber(const Datetime& datetime,
139  const Stock& stock, price_t price, price_t risk, SystemPart from);
140 
141  virtual size_t _getBuyShortNumber(const Datetime& datetime,
142  const Stock& stock, price_t price, price_t risk, SystemPart from);
143 
145  virtual void _reset() {}
146 
148  virtual MoneyManagerPtr _clone() = 0;
149 
150 protected:
151  string m_name;
154 
155 //============================================
156 // 序列化支持
157 //============================================
158 #if HKU_SUPPORT_SERIALIZATION
159 private:
160  friend class boost::serialization::access;
161  template<class Archive>
162  void save(Archive & ar, const unsigned int version) const {
163  string name(GBToUTF8(m_name));
164  ar & boost::serialization::make_nvp("m_name", name);
165  ar & BOOST_SERIALIZATION_NVP(m_params);
166  // m_query、m_tm都是系统运行时临时设置,不需要序列化
167  //ar & BOOST_SERIALIZATION_NVP(m_query);
168  //ar & BOOST_SERIALIZATION_NVP(m_tm);
169  }
170 
171  template<class Archive>
172  void load(Archive & ar, const unsigned int version) {
173  string name;
174  ar & boost::serialization::make_nvp("m_name", name);
175  m_name = UTF8ToGB(name);
176  ar & BOOST_SERIALIZATION_NVP(m_params);
177  }
178 
179  BOOST_SERIALIZATION_SPLIT_MEMBER()
180 #endif /* HKU_SUPPORT_SERIALIZATION */
181 };
182 
183 
184 #if HKU_SUPPORT_SERIALIZATION
185 BOOST_SERIALIZATION_ASSUME_ABSTRACT(MoneyManagerBase)
186 #endif
187 
188 #if HKU_SUPPORT_SERIALIZATION
189 
202 #define MONEY_MANAGER_NO_PRIVATE_MEMBER_SERIALIZATION private:\
203  friend class boost::serialization::access; \
204  template<class Archive> \
205  void serialize(Archive & ar, const unsigned int version) { \
206  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(MoneyManagerBase); \
207  }
208 #else
209 #define MONEY_MANAGER_NO_PRIVATE_MEMBER_SERIALIZATION
210 #endif
211 
212 
217 typedef shared_ptr<MoneyManagerBase> MoneyManagerPtr;
218 typedef shared_ptr<MoneyManagerBase> MMPtr;
219 
220 
221 #define MONEY_MANAGER_IMP(classname) public:\
222  virtual MoneyManagerPtr _clone() {\
223  return MoneyManagerPtr(new classname());\
224  }\
225  virtual size_t _getBuyNumber(const Datetime& datetime, const Stock& stock,\
226  price_t price, price_t risk, SystemPart from);
227 
228 
229 HKU_API std::ostream & operator<<(std::ostream &, const MoneyManagerBase&);
230 HKU_API std::ostream & operator<<(std::ostream &, const MoneyManagerPtr&);
231 
232 } /* namespace hku */
233 #endif /* MONEYMANAGERBASE_H_ */
void name(const string &name)
设置名称
Definition: MoneyManagerBase.h:41
void reset()
复位
Definition: MoneyManagerBase.h:46
void setTM(const TradeManagerPtr &tm)
设定交易账户
Definition: MoneyManagerBase.h:54
KQuery getQuery() const
获取交易的K线类型
Definition: MoneyManagerBase.h:72
按索引方式查询K线数据条件
Definition: KQuery.h:19
交易记录
Definition: TradeRecord.h:60
日期类型
Definition: Datetime.h:33
#define GBToUTF8(s)
Definition: util.h:55
KQuery m_query
Definition: MoneyManagerBase.h:152
Stock基类,Application中一般使用StockPtr进行操作
Definition: Stock.h:27
shared_ptr< MoneyManagerBase > MoneyManagerPtr
Definition: MoneyManagerBase.h:76
SystemPart
系统关联部件(各自策略)枚举定义,用于修改相关部件参数
Definition: SystemPart.h:19
void load(Archive &ar, hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:34
void setQuery(const KQuery &query)
设置查询条件
Definition: MoneyManagerBase.h:67
shared_ptr< MoneyManagerBase > MoneyManagerPtr
客户程序都应使用该指针类型
Definition: MoneyManagerBase.h:217
virtual void _reset()
子类复位接口
Definition: MoneyManagerBase.h:145
资金管理基类
Definition: MoneyManagerBase.h:27
shared_ptr< TradeManager > TradeManagerPtr
客户程序应使用此类型进行实际操作
Definition: TradeManager.h:635
#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
double price_t
Definition: DataType.h:53
TradeManagerPtr m_tm
Definition: MoneyManagerBase.h:153
shared_ptr< MoneyManagerBase > MMPtr
Definition: MoneyManagerBase.h:218
#define PARAMETER_SUPPORT
Definition: Parameter.h:233
string m_name
Definition: MoneyManagerBase.h:151
string name() const
获取名称
Definition: MoneyManagerBase.h:36
TradeManagerPtr getTM() const
获取交易账户
Definition: MoneyManagerBase.h:62
#define UTF8ToGB(s)
Definition: util.h:56
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11