mirror of
https://gitee.com/fasiondog/hikyuu.git
synced 2024-12-02 03:48:19 +08:00
107 lines
3.5 KiB
C++
107 lines
3.5 KiB
C++
/*
|
||
* PositionRecord.h
|
||
*
|
||
* Created on: 2013-2-21
|
||
* Author: fasiondog
|
||
*/
|
||
|
||
#pragma once
|
||
#ifndef POSITIONRECORD_H_
|
||
#define POSITIONRECORD_H_
|
||
|
||
#include "../StockManager.h"
|
||
#include "../serialization/Stock_serialization.h"
|
||
|
||
#if HKU_SUPPORT_SERIALIZATION
|
||
#include <boost/serialization/split_member.hpp>
|
||
#endif
|
||
|
||
namespace hku {
|
||
|
||
/**
|
||
* 持仓记录
|
||
* @ingroup TradeManagerClass
|
||
*/
|
||
class HKU_API PositionRecord {
|
||
public:
|
||
PositionRecord();
|
||
PositionRecord(const Stock& stock, const Datetime& takeDatetime, const Datetime& cleanDatetime,
|
||
size_t number, price_t stoploss, price_t goalPrice, size_t totalNumber,
|
||
price_t buyMoney, price_t totalCost, price_t totalRisk, price_t sellMoney);
|
||
|
||
/** 仅用于python的__str__ */
|
||
string toString() const;
|
||
|
||
Stock stock; ///< 交易对象
|
||
Datetime takeDatetime; ///< 初次建仓日期
|
||
Datetime cleanDatetime; ///< 平仓日期,当前持仓记录中为Null<Datetime>()
|
||
size_t number; ///< 当前持仓数量
|
||
price_t stoploss; ///< 当前止损价
|
||
price_t goalPrice; ///< 当前的目标价格
|
||
size_t totalNumber; ///< 累计持仓数量
|
||
price_t buyMoney; ///< 累计买入资金
|
||
price_t totalCost; ///< 累计交易总成本
|
||
price_t totalRisk; ///< 累计交易风险 = 各次 (买入价格-止损)*买入数量, 不包含交易成本
|
||
price_t sellMoney; ///< 累计卖出资金
|
||
|
||
//===================
|
||
//序列化支持
|
||
//===================
|
||
#if HKU_SUPPORT_SERIALIZATION
|
||
private:
|
||
friend class boost::serialization::access;
|
||
template <class Archive>
|
||
void save(Archive& ar, const unsigned int version) const {
|
||
namespace bs = boost::serialization;
|
||
ar& BOOST_SERIALIZATION_NVP(stock);
|
||
uint64 take = takeDatetime.number();
|
||
uint64 clean = cleanDatetime.number();
|
||
ar& bs::make_nvp("takeDatetime", take);
|
||
ar& bs::make_nvp("cleanDatetime", clean);
|
||
ar& BOOST_SERIALIZATION_NVP(number);
|
||
ar& BOOST_SERIALIZATION_NVP(stoploss);
|
||
ar& BOOST_SERIALIZATION_NVP(goalPrice);
|
||
ar& BOOST_SERIALIZATION_NVP(totalNumber);
|
||
ar& BOOST_SERIALIZATION_NVP(buyMoney);
|
||
ar& BOOST_SERIALIZATION_NVP(totalCost);
|
||
ar& BOOST_SERIALIZATION_NVP(totalRisk);
|
||
ar& BOOST_SERIALIZATION_NVP(sellMoney);
|
||
}
|
||
|
||
template <class Archive>
|
||
void load(Archive& ar, const unsigned int version) {
|
||
namespace bs = boost::serialization;
|
||
ar& BOOST_SERIALIZATION_NVP(stock);
|
||
uint64 take, clean;
|
||
ar& bs::make_nvp("takeDatetime", take);
|
||
ar& bs::make_nvp("cleanDatetime", clean);
|
||
takeDatetime = Datetime(take);
|
||
cleanDatetime = Datetime(clean);
|
||
ar& BOOST_SERIALIZATION_NVP(number);
|
||
ar& BOOST_SERIALIZATION_NVP(stoploss);
|
||
ar& BOOST_SERIALIZATION_NVP(goalPrice);
|
||
ar& BOOST_SERIALIZATION_NVP(totalNumber);
|
||
ar& BOOST_SERIALIZATION_NVP(buyMoney);
|
||
ar& BOOST_SERIALIZATION_NVP(totalCost);
|
||
ar& BOOST_SERIALIZATION_NVP(totalRisk);
|
||
ar& BOOST_SERIALIZATION_NVP(sellMoney);
|
||
}
|
||
|
||
BOOST_SERIALIZATION_SPLIT_MEMBER()
|
||
#endif /* HKU_SUPPORT_SERIALIZATION */
|
||
};
|
||
|
||
/** @ingroup TradeManagerClass */
|
||
typedef vector<PositionRecord> PositionRecordList;
|
||
|
||
/**
|
||
* 输出持仓记录信息
|
||
* @ingroup TradeManagerClass
|
||
*/
|
||
HKU_API std::ostream& operator<<(std::ostream&, const PositionRecord&);
|
||
|
||
bool HKU_API operator==(const PositionRecord& d1, const PositionRecord& d2);
|
||
|
||
} /* namespace hku */
|
||
#endif /* POSITIONRECORD_H_ */
|