Hikyuu
System.h
浏览该文件的文档.
1 /*
2  * SystemBase.h
3  *
4  * Created on: 2013-3-3
5  * Author: fasiondog
6  */
7 
8 #ifndef SYSTEMBASE_H_
9 #define SYSTEMBASE_H_
10 
11 //#include "../../KData.h"
12 //#include "../../utilities/Parameter.h"
13 //#include "../../trade_manage/TradeManager.h"
14 #include "../environment/EnvironmentBase.h"
15 #include "../condition/ConditionBase.h"
16 #include "../moneymanager/MoneyManagerBase.h"
17 #include "../signal/SignalBase.h"
18 #include "../stoploss/StoplossBase.h"
19 #include "../profitgoal/ProfitGoalBase.h"
20 #include "../slippage/SlippageBase.h"
21 #include "TradeRequest.h"
22 #include "SystemPart.h"
23 #include "../../serialization/KData_serialization.h"
24 
25 namespace hku {
26 
31 class HKU_API System {
33 
34 public:
35  System();
36  System(const string& name);
37  System(const TradeManagerPtr& tm,
38  const MoneyManagerPtr& mm,
39  const EnvironmentPtr& ev,
40  const ConditionPtr& cn,
41  const SignalPtr& sg,
42  const StoplossPtr& st,
43  const StoplossPtr& tp,
44  const ProfitGoalPtr& pg,
45  const SlippagePtr& sp,
46  const string& name);
47  virtual ~System();
48 
49  typedef SystemPart Part;
50 
52  string name() const;
53 
55  void name(const string& name);
56 
57  KData getTO() const { return m_kdata; }
58  TradeManagerPtr getTM() const { return m_tm; }
59  MoneyManagerPtr getMM() const { return m_mm; }
60  EnvironmentPtr getEV() const { return m_ev; }
61  ConditionPtr getCN() const { return m_cn; }
62  SignalPtr getSG() const { return m_sg; }
63  StoplossPtr getST() const { return m_st; }
64  StoplossPtr getTP() const { return m_tp; }
65  ProfitGoalPtr getPG() const { return m_pg; }
66  SlippagePtr getSP() const { return m_sp; }
67 
68  void setTM(const TradeManagerPtr& tm) { m_tm = tm; }
69  void setMM(const MoneyManagerPtr& mm) { m_mm = mm; }
70  void setEV(const EnvironmentPtr& ev) { m_ev = ev; }
71  void setCN(const ConditionPtr& cn) { m_cn = cn; }
72  void setSG(const SignalPtr& sg) { m_sg = sg; }
73  void setST(const StoplossPtr& st) { m_st = st; }
74  void setTP(const StoplossPtr& tp) { m_tp = tp; }
75  void setPG(const ProfitGoalPtr& pg) { m_pg = pg; }
76  void setSP(const SlippagePtr& sp) { m_sp = sp; }
77 
78  Stock getStock() const { return m_stock; }
79  void setStock(const Stock& stk) { m_stock = stk; }
80 
81  const TradeRecordList& getTradeRecordList() const { return m_trade_list;}
82 
83  const TradeRequest& getBuyTradeRequest() const { return m_buyRequest; }
84  const TradeRequest& getSellTradeRequest() const { return m_sellRequest; }
85 
87  return m_sellShortRequest;
88  }
89 
91  return m_buyShortRequest;
92  }
93 
94 
102  void reset(bool with_tm, bool with_ev);
103 
104  typedef shared_ptr<System> SystemPtr;
105 
113  SystemPtr clone(bool with_tm, bool with_ev);
114 
119  void setTO(const KData& kdata);
120 
121  //不指定stock的方式下run,需要事先通过setStock设定stock
122  void run(const KQuery& query, bool reset=true);
123  void run(const Stock& stock, const KQuery& query, bool reset=true);
124 
125  void runMoment(const Datetime& datetime);
126  void runMoment(const KRecord& record);
127 
128  //清除已有的交易请求,供Portfolio使用
129  void clearDelayRequest();
130 
131  //当前是否存在延迟的操作请求,供Portfolio
132  bool haveDelayRequest() const;
133 
134  //运行前准备工作
135  bool readyForRun();
136 
137  bool _environmentIsValid(const Datetime& datetime);
138 
139  bool _conditionIsValid(const Datetime& datetime);
140 
141  //通知所有需要接收实际买入交易记录的部件
142  void _buyNotifyAll(const TradeRecord&);
143 
144  //通知所有需要接收实际卖出交易记录的部件
145  void _sellNotifyAll(const TradeRecord&);
146 
147  size_t _getBuyNumber(const Datetime&, price_t price, price_t risk, Part from);
148  size_t _getSellNumber(const Datetime&, price_t price, price_t risk, Part from);
149  size_t _getSellShortNumber(const Datetime&, price_t price, price_t risk, Part from);
150  size_t _getBuyShortNumber(const Datetime&, price_t price, price_t risk, Part from);
151 
152  price_t _getStoplossPrice(const Datetime& datetime, price_t price);
153  price_t _getShortStoplossPrice(const Datetime& datetime, price_t price);
154 
155  price_t _getTakeProfitPrice(const Datetime& datetime);
156 
157  price_t _getGoalPrice(const Datetime& datetime, price_t price);
158  price_t _getShortGoalPrice(const Datetime&, price_t price);
159 
160  price_t _getRealBuyPrice(const Datetime& datetime, price_t planPrice);
161  price_t _getRealSellPrice(const Datetime& datetime, price_t planPrice);
162 
163 
164  void _buy(const KRecord& today, Part from);
165  void _buyNow(const KRecord& today, Part from);
166  void _buyDelay(const KRecord& today);
167  void _submitBuyRequest(const KRecord& today, Part from);
168 
169  void _sell(const KRecord& today, Part from);
170  void _sellNow(const KRecord& today, Part from);
171  void _sellDelay(const KRecord& today);
172  void _submitSellRequest(const KRecord& today, Part from);
173 
174  void _sellShort(const KRecord& today, Part from);
175  void _sellShortNow(const KRecord& today, Part from);
176  void _sellShortDelay(const KRecord& today);
177  void _submitSellShortRequest(const KRecord& today, Part from);
178 
179  void _buyShort(const KRecord& today, Part from);
180  void _buyShortNow(const KRecord& today, Part from);
181  void _buyShortDelay(const KRecord& today);
182  void _submitBuyShortRequest(const KRecord& today, Part from);
183 
184  void _processRequest(const KRecord& today);
185 
186  void _runMoment(const KRecord& record);
187 
188 protected:
198 
199  string m_name;
202 
205 
206  int m_buy_days; //每一次买入清零,计算一次加1,即买入后的天数
207  int m_sell_short_days; //每一次卖空清零
208  TradeRecordList m_trade_list; //保存实际执行的交易记录
209  price_t m_lastTakeProfit; //上一次多头止损价,用于保证止赢价单调递增
210  price_t m_lastShortTakeProfit; //上一次空头止赢价
211 
216 
217 private:
218  void initParam(); //初始化参数及其默认值
219 
220 //============================================
221 // 序列化支持
222 //============================================
223 #if HKU_SUPPORT_SERIALIZATION
224 private:
225  friend class boost::serialization::access;
226  template<class Archive>
227  void save(Archive & ar, const unsigned int version) const {
228  string name(GBToUTF8(m_name));
229  ar & boost::serialization::make_nvp("m_name", name);
230  ar & BOOST_SERIALIZATION_NVP(m_params);
231 
232  ar & BOOST_SERIALIZATION_NVP(m_tm);
233  ar & BOOST_SERIALIZATION_NVP(m_ev);
234  ar & BOOST_SERIALIZATION_NVP(m_cn);
235  ar & BOOST_SERIALIZATION_NVP(m_mm);
236  ar & BOOST_SERIALIZATION_NVP(m_sg);
237  ar & BOOST_SERIALIZATION_NVP(m_st);
238  ar & BOOST_SERIALIZATION_NVP(m_tp);
239  ar & BOOST_SERIALIZATION_NVP(m_pg);
240  ar & BOOST_SERIALIZATION_NVP(m_sp);
241 
242  //m_kdata中包含了stock和query的信息,不用保存m_stock
243  ar & BOOST_SERIALIZATION_NVP(m_kdata);
244 
245  ar & BOOST_SERIALIZATION_NVP(m_pre_ev_valid);
246  ar & BOOST_SERIALIZATION_NVP(m_pre_cn_valid);
247 
248  ar & BOOST_SERIALIZATION_NVP(m_buy_days);
249  ar & BOOST_SERIALIZATION_NVP(m_sell_short_days);
250  ar & BOOST_SERIALIZATION_NVP(m_trade_list);
251  ar & BOOST_SERIALIZATION_NVP(m_lastTakeProfit);
252  ar & BOOST_SERIALIZATION_NVP(m_lastShortTakeProfit);
253 
254  ar & BOOST_SERIALIZATION_NVP(m_buyRequest);
255  ar & BOOST_SERIALIZATION_NVP(m_sellRequest);
256  ar & BOOST_SERIALIZATION_NVP(m_sellShortRequest);
257  ar & BOOST_SERIALIZATION_NVP(m_buyShortRequest);
258  }
259 
260  template<class Archive>
261  void load(Archive & ar, const unsigned int version) {
262  string name;
263  ar & boost::serialization::make_nvp("m_name", name);
264  m_name = UTF8ToGB(name);
265  ar & BOOST_SERIALIZATION_NVP(m_params);
266 
267  ar & BOOST_SERIALIZATION_NVP(m_tm);
268  ar & BOOST_SERIALIZATION_NVP(m_ev);
269  ar & BOOST_SERIALIZATION_NVP(m_cn);
270  ar & BOOST_SERIALIZATION_NVP(m_mm);
271  ar & BOOST_SERIALIZATION_NVP(m_sg);
272  ar & BOOST_SERIALIZATION_NVP(m_st);
273  ar & BOOST_SERIALIZATION_NVP(m_tp);
274  ar & BOOST_SERIALIZATION_NVP(m_pg);
275  ar & BOOST_SERIALIZATION_NVP(m_sp);
276 
277  //m_kdata中包含了stock和query的信息,不用保存m_stock
278  ar & BOOST_SERIALIZATION_NVP(m_kdata);
279  m_stock = m_kdata.getStock();
280 
281  ar & BOOST_SERIALIZATION_NVP(m_pre_ev_valid);
282  ar & BOOST_SERIALIZATION_NVP(m_pre_cn_valid);
283 
284  ar & BOOST_SERIALIZATION_NVP(m_buy_days);
285  ar & BOOST_SERIALIZATION_NVP(m_sell_short_days);
286  ar & BOOST_SERIALIZATION_NVP(m_trade_list);
287  ar & BOOST_SERIALIZATION_NVP(m_lastTakeProfit);
288  ar & BOOST_SERIALIZATION_NVP(m_lastShortTakeProfit);
289 
290  ar & BOOST_SERIALIZATION_NVP(m_buyRequest);
291  ar & BOOST_SERIALIZATION_NVP(m_sellRequest);
292  ar & BOOST_SERIALIZATION_NVP(m_sellShortRequest);
293  ar & BOOST_SERIALIZATION_NVP(m_buyShortRequest);
294  }
295 
296  BOOST_SERIALIZATION_SPLIT_MEMBER()
297 #endif /* HKU_SUPPORT_SERIALIZATION */
298 };
299 
304 typedef shared_ptr<System> SystemPtr;
305 typedef shared_ptr<System> SYSPtr;
306 typedef vector<SystemPtr> SystemList;
307 
308 HKU_API std::ostream& operator <<(std::ostream &os, const System& sys);
309 HKU_API std::ostream& operator <<(std::ostream &os, const SystemPtr& sys);
310 
311 
312 inline string System::name() const {
313  return m_name;
314 }
315 
316 inline void System::name(const string& name) {
317  m_name = name;
318 }
319 
320 inline bool System::
321 _environmentIsValid(const Datetime& datetime) {
322  return m_ev ? m_ev->isValid(datetime) : true;
323 }
324 
325 inline bool System::
326 _conditionIsValid(const Datetime& datetime) {
327  return m_cn ? m_cn->isValid(datetime) : true;
328 }
329 
330 inline size_t System
331 ::_getBuyNumber(const Datetime& datetime, price_t price, price_t risk, Part from) {
332  return m_mm ? m_mm->getBuyNumber(datetime, m_stock, price, risk, from) : 0;
333 }
334 
335 inline size_t System
336 ::_getSellNumber(const Datetime& datetime, price_t price, price_t risk, Part from) {
337  return m_mm ? m_mm->getSellNumber(datetime, m_stock, price, risk, from) : 0;
338 }
339 
340 inline size_t System
341 ::_getSellShortNumber(const Datetime& datetime, price_t price, price_t risk, Part from) {
342  return m_mm ? m_mm->getSellShortNumber(datetime, m_stock, price, risk, from) : 0;
343 }
344 
345 inline size_t System
346 ::_getBuyShortNumber(const Datetime& datetime, price_t price, price_t risk, Part from) {
347  return m_mm ? m_mm->getBuyShortNumber(datetime, m_stock, price, risk, from) : 0;
348 }
349 
350 inline price_t System
351 ::_getRealBuyPrice(const Datetime& datetime, price_t planPrice) {
352  return m_sp ? m_sp->getRealBuyPrice(datetime, planPrice) : planPrice;
353 }
354 
355 inline price_t System
356 ::_getRealSellPrice(const Datetime& datetime, price_t planPrice) {
357  return m_sp ? m_sp->getRealSellPrice(datetime, planPrice) : planPrice;
358 }
359 
360 inline price_t System
361 ::_getStoplossPrice(const Datetime& datetime, price_t price) {
362  return m_st ? m_st->getPrice(datetime, price) : 0.0;
363 }
364 
365 inline price_t System
366 ::_getShortStoplossPrice(const Datetime& datetime, price_t price) {
367  return m_st ? m_st->getShortPrice(datetime, price) : 0.0;
368 }
369 
370 inline price_t System
371 ::_getTakeProfitPrice(const Datetime& datetime) {
372  return m_tp ? m_tp->getPrice(datetime, 0.0) : 0.0;
373 }
374 
375 inline price_t System
376 ::_getGoalPrice(const Datetime& datetime, price_t price) {
377  return m_pg ? m_pg->getGoal(datetime, price) : Null<price_t>();
378 }
379 
380 inline price_t System
381 ::_getShortGoalPrice(const Datetime& datetime, price_t price) {
382  return m_pg ? m_pg->getShortGoal(datetime, price) : 0.0;
383 }
384 
385 } /* namespace hku */
386 #endif /* SYSTEMBASE_H_ */
Stock getStock() const
获取关联的Stock,如果没有关联返回Null<Stock>
Definition: KData.h:143
StoplossPtr getTP() const
Definition: System.h:64
bool m_pre_ev_valid
Definition: System.h:203
size_t _getSellNumber(const Datetime &, price_t price, price_t risk, Part from)
Definition: System.h:336
Stock getStock() const
Definition: System.h:78
price_t _getRealBuyPrice(const Datetime &datetime, price_t planPrice)
Definition: System.h:351
void setTP(const StoplossPtr &tp)
Definition: System.h:74
string name() const
获取名称
Definition: System.h:312
price_t _getGoalPrice(const Datetime &datetime, price_t price)
Definition: System.h:376
shared_ptr< ProfitGoalBase > ProfitGoalPtr
客户程序都应使用该指针类型
Definition: ProfitGoalBase.h:162
KData getTO() const
Definition: System.h:57
StoplossPtr getST() const
Definition: System.h:63
price_t m_lastShortTakeProfit
Definition: System.h:210
K线数据记录
Definition: KRecord.h:19
shared_ptr< System > SystemPtr
Definition: System.h:104
MoneyManagerPtr getMM() const
Definition: System.h:59
const TradeRequest & getBuyTradeRequest() const
Definition: System.h:83
K线数据
Definition: KData.h:19
EnvironmentPtr getEV() const
Definition: System.h:60
price_t m_lastTakeProfit
Definition: System.h:209
const TradeRecordList & getTradeRecordList() const
Definition: System.h:81
按索引方式查询K线数据条件
Definition: KQuery.h:19
const TradeRequest & getSellTradeRequest() const
Definition: System.h:84
vector< TradeRecord > TradeRecordList
Definition: TradeRecord.h:142
SignalPtr m_sg
Definition: System.h:193
const TradeRequest & getBuyShortTradeRequest() const
Definition: System.h:90
ProfitGoalPtr m_pg
Definition: System.h:196
price_t _getShortStoplossPrice(const Datetime &datetime, price_t price)
Definition: System.h:366
void setST(const StoplossPtr &st)
Definition: System.h:73
void setSP(const SlippagePtr &sp)
Definition: System.h:76
shared_ptr< EnvironmentBase > EnvironmentPtr
客户程序都应使用该指针类型
Definition: EnvironmentBase.h:160
bool _environmentIsValid(const Datetime &datetime)
Definition: System.h:321
交易记录
Definition: TradeRecord.h:60
const TradeRequest & getSellShortTradeRequest() const
Definition: System.h:86
提供指定给定类型的Null值
Definition: Null.h:22
int m_buy_days
Definition: System.h:206
日期类型
Definition: Datetime.h:33
#define GBToUTF8(s)
Definition: util.h:55
Stock基类,Application中一般使用StockPtr进行操作
Definition: Stock.h:27
SlippagePtr getSP() const
Definition: System.h:66
SignalPtr getSG() const
Definition: System.h:62
size_t _getSellShortNumber(const Datetime &, price_t price, price_t risk, Part from)
Definition: System.h:341
SystemPart
系统关联部件(各自策略)枚举定义,用于修改相关部件参数
Definition: SystemPart.h:19
void load(Archive &ar, hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:34
shared_ptr< SlippageBase > SlippagePtr
客户程序都应使用该指针类型,操作移滑价差算法
Definition: SlippageBase.h:153
TradeManagerPtr getTM() const
Definition: System.h:58
void setTM(const TradeManagerPtr &tm)
Definition: System.h:68
EnvironmentPtr m_ev
Definition: System.h:191
void setCN(const ConditionPtr &cn)
Definition: System.h:71
int m_sell_short_days
Definition: System.h:207
shared_ptr< MoneyManagerBase > MoneyManagerPtr
客户程序都应使用该指针类型
Definition: MoneyManagerBase.h:217
shared_ptr< TradeManager > TradeManagerPtr
客户程序应使用此类型进行实际操作
Definition: TradeManager.h:635
#define HKU_API
Definition: DataType.h:12
TradeRecordList m_trade_list
Definition: System.h:208
vector< SystemPtr > SystemList
Definition: System.h:306
shared_ptr< SignalBase > SignalPtr
客户程序都应使用该指针类型,操作信号指示器
Definition: SignalBase.h:185
void save(Archive &ar, const hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:20
void setStock(const Stock &stk)
Definition: System.h:79
void setSG(const SignalPtr &sg)
Definition: System.h:72
void setEV(const EnvironmentPtr &ev)
Definition: System.h:70
bool _conditionIsValid(const Datetime &datetime)
Definition: System.h:326
shared_ptr< StoplossBase > StoplossPtr
客户程序都应使用该指针类型,操作止损策略实例
Definition: StoplossBase.h:167
TradeRequest m_buyRequest
Definition: System.h:212
TradeRequest m_sellRequest
Definition: System.h:213
HKU_API std::ostream & operator<<(std::ostream &os, const Block &blk)
Definition: Block.cpp:13
ConditionPtr m_cn
Definition: System.h:192
string m_name
Definition: System.h:199
double price_t
Definition: DataType.h:53
KData m_kdata
Definition: System.h:201
TradeManagerPtr m_tm
Definition: System.h:189
void setPG(const ProfitGoalPtr &pg)
Definition: System.h:75
TradeRequest m_buyShortRequest
Definition: System.h:215
size_t _getBuyNumber(const Datetime &, price_t price, price_t risk, Part from)
Definition: System.h:331
size_t _getBuyShortNumber(const Datetime &, price_t price, price_t risk, Part from)
Definition: System.h:346
shared_ptr< System > SYSPtr
Definition: System.h:305
bool m_pre_cn_valid
Definition: System.h:204
SlippagePtr m_sp
Definition: System.h:197
MoneyManagerPtr m_mm
Definition: System.h:190
交易系统基类
Definition: System.h:31
#define PARAMETER_SUPPORT
Definition: Parameter.h:233
StoplossPtr m_st
Definition: System.h:194
void setMM(const MoneyManagerPtr &mm)
Definition: System.h:69
交易请求记录
Definition: TradeRequest.h:20
ProfitGoalPtr getPG() const
Definition: System.h:65
price_t _getStoplossPrice(const Datetime &datetime, price_t price)
Definition: System.h:361
#define UTF8ToGB(s)
Definition: util.h:56
ConditionPtr getCN() const
Definition: System.h:61
price_t _getRealSellPrice(const Datetime &datetime, price_t planPrice)
Definition: System.h:356
Stock m_stock
Definition: System.h:200
StoplossPtr m_tp
Definition: System.h:195
shared_ptr< ConditionBase > ConditionPtr
客户程序都应使用该指针类型
Definition: ConditionBase.h:163
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
shared_ptr< System > SystemPtr
客户程序应使用该指针进行操作
Definition: System.h:304
price_t _getShortGoalPrice(const Datetime &, price_t price)
Definition: System.h:381
price_t _getTakeProfitPrice(const Datetime &datetime)
Definition: System.h:371
TradeRequest m_sellShortRequest
Definition: System.h:214
SystemPart Part
Definition: System.h:49