8 #ifndef TRADEMANAGER_H_ 9 #define TRADEMANAGER_H_ 11 #include <boost/tuple/tuple.hpp> 12 #include "../utilities/Parameter.h" 13 #include "../utilities/util.h" 22 #if HKU_SUPPORT_SERIALIZATION 23 #include <boost/serialization/map.hpp> 24 #include <boost/serialization/vector.hpp> 25 #include <boost/serialization/list.hpp> 49 const string& name =
"SYS");
71 m_broker_last_datetime = date;
74 shared_ptr<TradeManager> clone();
81 double getMarginRate(
const Datetime& datetime,
const Stock& stock);
84 string name()
const {
return m_name; }
87 void name(
const string& name) { m_name =
name; }
100 return m_trade_list.empty()
101 ? m_init_datetime : m_trade_list.back().datetime;
105 bool reinvest()
const {
return getParam<bool>(
"reinvest"); }
108 int precision()
const {
return getParam<int>(
"precision"); }
135 return m_position.count(stock.
id()) ?
true :
false;
145 return m_short_position.count(stock.
id()) ?
true :
false;
155 size_t getHoldNumber(
const Datetime& datetime,
const Stock& stock);
158 size_t getShortHoldNumber(
const Datetime& datetime,
const Stock& stock);
161 size_t getDebtNumber(
const Datetime& datetime,
const Stock& stock);
182 return m_position_history;
190 return m_short_position_history;
211 price_t price,
size_t num)
const{
213 ? m_costfunc->getBuyCost(datetime, stock, price, num)
226 price_t price,
size_t num)
const{
228 ? m_costfunc->getSellCost(datetime, stock, price, num)
239 ? m_costfunc->getBorrowCashCost(datetime, cash)
253 ? m_costfunc->getReturnCashCost(borrow_datetime,
254 return_datetime, cash)
268 ? m_costfunc->getBorrowStockCost(datetime, stock, price, num)
284 ? m_costfunc->getReturnStockCost(borrow_datetime,
285 return_datetime, stock, price, num)
313 bool checkinStock(
const Datetime& datetime,
const Stock& stock,
325 bool checkoutStock(
const Datetime& datetime,
const Stock& stock,
341 price_t realPrice,
size_t number,
380 price_t realPrice,
size_t number,
430 bool borrowStock(
const Datetime& datetime,
const Stock& stock,
441 bool returnStock(
const Datetime& datetime,
const Stock& stock,
488 string toString()
const;
494 void tocsv(
const string& path);
532 list<LoanRecord> m_loan_list;
534 typedef map<hku_uint64, BorrowRecord> borrow_stock_map_type;
535 borrow_stock_map_type m_borrow_stock;
539 typedef map<hku_uint64, PositionRecord > position_map_type;
540 position_map_type m_position;
542 position_map_type m_short_position;
545 list<OrderBrokerPtr> m_broker_list;
548 list<string> m_actions;
553 #if HKU_SUPPORT_SERIALIZATION 555 friend class boost::serialization::access;
556 template<
class Archive>
557 void save(Archive & ar,
const unsigned int version)
const {
559 ar & boost::serialization::make_nvp(
"m_name", name);
560 ar & BOOST_SERIALIZATION_NVP(m_params);
561 ar & BOOST_SERIALIZATION_NVP(m_init_datetime);
562 ar & BOOST_SERIALIZATION_NVP(m_init_cash);
563 ar & BOOST_SERIALIZATION_NVP(m_costfunc);
564 ar & BOOST_SERIALIZATION_NVP(m_cash);
565 ar & BOOST_SERIALIZATION_NVP(m_checkin_cash);
566 ar & BOOST_SERIALIZATION_NVP(m_checkout_cash);
567 ar & BOOST_SERIALIZATION_NVP(m_checkin_stock);
568 ar & BOOST_SERIALIZATION_NVP(m_checkout_stock);
569 ar & BOOST_SERIALIZATION_NVP(m_borrow_cash);
570 ar & BOOST_SERIALIZATION_NVP(m_loan_list);
573 ar & bs::make_nvp<BorrowRecordList>(
"m_borrow_stock", borrow);
575 ar & bs::make_nvp<PositionRecordList>(
"m_position", position);
576 ar & BOOST_SERIALIZATION_NVP(m_position_history);
577 position = getShortPositionList();
578 ar & bs::make_nvp<PositionRecordList>(
"m_short_position", position);
579 ar & BOOST_SERIALIZATION_NVP(m_short_position_history);
580 ar & BOOST_SERIALIZATION_NVP(m_trade_list);
581 ar & BOOST_SERIALIZATION_NVP(m_actions);
584 template<
class Archive>
585 void load(Archive & ar,
const unsigned int version) {
587 ar & boost::serialization::make_nvp(
"m_name", name);
589 ar & BOOST_SERIALIZATION_NVP(m_params);
590 ar & BOOST_SERIALIZATION_NVP(m_init_datetime);
591 ar & BOOST_SERIALIZATION_NVP(m_init_cash);
592 ar & BOOST_SERIALIZATION_NVP(m_costfunc);
593 ar & BOOST_SERIALIZATION_NVP(m_cash);
594 ar & BOOST_SERIALIZATION_NVP(m_checkin_cash);
595 ar & BOOST_SERIALIZATION_NVP(m_checkout_cash);
596 ar & BOOST_SERIALIZATION_NVP(m_checkin_stock);
597 ar & BOOST_SERIALIZATION_NVP(m_checkout_stock);
598 ar & BOOST_SERIALIZATION_NVP(m_borrow_cash);
599 ar & BOOST_SERIALIZATION_NVP(m_loan_list);
602 ar & bs::make_nvp<BorrowRecordList>(
"m_borrow_stock", borrow);
603 BorrowRecordList::const_iterator bor_iter = borrow.begin();
604 for (; bor_iter != borrow.end(); ++bor_iter) {
605 m_borrow_stock[bor_iter->stock.id()] = *bor_iter;
608 ar & bs::make_nvp<PositionRecordList>(
"m_position", position);
609 PositionRecordList::const_iterator iter = position.begin();
610 for (; iter != position.end(); ++iter) {
611 m_position[iter->stock.id()] = *iter;
613 ar & BOOST_SERIALIZATION_NVP(m_position_history);
616 ar & bs::make_nvp<PositionRecordList>(
"m_short_position", position);
617 iter = position.begin();
618 for (; iter != position.end(); ++iter) {
619 m_short_position[iter->stock.id()] = *iter;
621 ar & BOOST_SERIALIZATION_NVP(m_short_position_history);
622 ar & BOOST_SERIALIZATION_NVP(m_trade_list);
623 ar & BOOST_SERIALIZATION_NVP(m_actions);
626 BOOST_SERIALIZATION_SPLIT_MEMBER()
636 typedef shared_ptr<TradeManager>
TMPtr;
Datetime lastDatetime() const
最后一笔交易日期,注意和交易类型无关,如未发生交易返回账户建立日期
Definition: TradeManager.h:99
size_t getStockNumber() const
当前持有的证券种类数量
Definition: TradeManager.h:149
shared_ptr< OrderBrokerBase > OrderBrokerPtr
客户程序应使用此类型进行实际操作
Definition: OrderBrokerBase.h:110
CostRecord getBorrowCashCost(const Datetime &datetime, price_t cash)
计算计入现金时的费用成本
Definition: TradeManager.h:237
提供size_t的Null值
Definition: Null.h:88
const PositionRecordList & getHistoryPositionList() const
获取全部历史持仓记录,即已平仓记录
Definition: TradeManager.h:181
Datetime initDatetime() const
账户建立日期
Definition: TradeManager.h:93
vector< TradeRecord > TradeRecordList
Definition: TradeRecord.h:142
const PositionRecordList & getShortHistoryPositionList() const
获取全部空头历史仓位记录
Definition: TradeManager.h:189
vector< price_t > PriceList
Definition: DataType.h:66
int precision() const
交易精度
Definition: TradeManager.h:108
交易记录
Definition: TradeRecord.h:60
无效值
Definition: SystemPart.h:31
void setBrokerLastDatetime(const Datetime &date)
设置开始订单代理操作的时刻
Definition: TradeManager.h:70
日期类型
Definition: Datetime.h:33
#define GBToUTF8(s)
Definition: util.h:55
shared_ptr< TradeCostBase > TradeCostPtr
交易成本算法指针
Definition: TradeCostBase.h:169
Stock基类,Application中一般使用StockPtr进行操作
Definition: Stock.h:27
static const string DAY
Definition: KQuery.h:58
SystemPart
系统关联部件(各自策略)枚举定义,用于修改相关部件参数
Definition: SystemPart.h:19
void load(Archive &ar, hku::Block &blk, unsigned int version)
Definition: Block_serialization.h:34
Definition: Block_serialization.h:18
持仓记录
Definition: PositionRecord.h:24
void name(const string &name)
设置账户名称
Definition: TradeManager.h:87
TradeCostPtr HKU_API TC_Zero()
创建零成本算法实例
Definition: ZeroTradeCost.cpp:35
const TradeRecordList & getTradeList() const
获取全部交易记录
Definition: TradeManager.h:167
price_t initCash() const
初始资金
Definition: TradeManager.h:90
TradeCostPtr costFunc() const
获取交易算法指针
Definition: TradeManager.h:111
shared_ptr< TradeManager > TradeManagerPtr
客户程序应使用此类型进行实际操作
Definition: TradeManager.h:635
#define HKU_API
Definition: DataType.h:12
vector< PositionRecord > PositionRecordList
Definition: PositionRecord.h:103
string name() const
账户名称
Definition: TradeManager.h:84
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
成本记录
Definition: CostRecord.h:27
当前资产情况记录,由TradeManager::getFunds返回
Definition: FundsRecord.h:24
std::vector< Datetime > DatetimeList
日期列表
Definition: Datetime.h:177
hku_uint64 id() const
获取内部id,一般用于作为map的键值使用,该id实质为m_data的内存地址
Definition: Stock.h:254
void costFunc(const TradeCostPtr &func)
设置交易算法指针
Definition: TradeManager.h:114
Datetime getBrokerLastDatetime() const
从哪个时刻开始启动订单代理进行下单操作
Definition: TradeManager.h:67
size_t getShortStockNumber() const
当前空头持有的证券种类数量
Definition: TradeManager.h:152
string KType
查询K线类型:日线/周线等
Definition: KQuery.h:51
CostRecord getBorrowStockCost(const Datetime &datetime, const Stock &stock, price_t price, size_t num)
计算融劵借入成本
Definition: TradeManager.h:265
price_t currentCash() const
返回当前现金
Definition: TradeManager.h:120
#define PARAMETER_SUPPORT
Definition: Parameter.h:233
CostRecord getReturnCashCost(const Datetime &borrow_datetime, const Datetime &return_datetime, price_t cash)
计算归还融资成本
Definition: TradeManager.h:249
bool reinvest() const
红利/股息/送股再投资标志,即是否忽略权息信息
Definition: TradeManager.h:105
#define UTF8ToGB(s)
Definition: util.h:56
bool have(const Stock &stock) const
当前是否持有指定的证券
Definition: TradeManager.h:134
CostRecord getReturnStockCost(const Datetime &borrow_datetime, const Datetime &return_datetime, const Stock &stock, price_t price, size_t num)
计算融劵归还成本
Definition: TradeManager.h:280
shared_ptr< TradeManager > TMPtr
Definition: TradeManager.h:636
账户交易管理模块,管理帐户的交易记录及资金使用情况
Definition: TradeManager.h:42
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
CostRecord getSellCost(const Datetime &datetime, const Stock &stock, price_t price, size_t num) const
计算卖出成本
Definition: TradeManager.h:225
CostRecord getBuyCost(const Datetime &datetime, const Stock &stock, price_t price, size_t num) const
计算买入成本
Definition: TradeManager.h:210
bool haveShort(const Stock &stock) const
当前空头仓位是否持有指定的证券
Definition: TradeManager.h:144
vector< BorrowRecord > BorrowRecordList
Definition: BorrowRecord.h:83