();
}
- return tradetime;
+}
+
+string OrderBrokerBase::getAssetInfo() noexcept {
+ string ret;
+ try {
+ ret = _getAssetInfo();
+ } catch (const std::exception& e) {
+ HKU_ERROR(e.what());
+ } catch (...) {
+ HKU_ERROR_UNKNOWN;
+ }
+ return ret;
}
} /* namespace hku */
diff --git a/hikyuu_cpp/hikyuu/trade_manage/OrderBrokerBase.h b/hikyuu_cpp/hikyuu/trade_manage/OrderBrokerBase.h
index 2c2055b6..0597eed3 100644
--- a/hikyuu_cpp/hikyuu/trade_manage/OrderBrokerBase.h
+++ b/hikyuu_cpp/hikyuu/trade_manage/OrderBrokerBase.h
@@ -11,9 +11,28 @@
#include "../DataType.h"
#include "../utilities/Parameter.h"
+#include "../trade_sys/system/SystemPart.h"
namespace hku {
+struct HKU_API BrokerPositionRecord {
+ Stock stock;
+ price_t number{0.0}; // 数量
+ price_t money{0.0}; // 买入花费总资金
+
+ BrokerPositionRecord() = default;
+ BrokerPositionRecord(const Stock& stock, price_t number, price_t money);
+ BrokerPositionRecord(const BrokerPositionRecord&) = default;
+ BrokerPositionRecord(BrokerPositionRecord&& rv);
+
+ BrokerPositionRecord& operator=(const BrokerPositionRecord&) = default;
+ BrokerPositionRecord& operator=(BrokerPositionRecord&& rv);
+
+ string str() const;
+};
+
+HKU_API std::ostream& operator<<(std::ostream& os, const BrokerPositionRecord&);
+
/**
* 订单代理基类,实现实际的订单操作及程序化的订单。
* @details 可通过向 TradeManager.regBroker 向 TradeManager 注册多个订单代理实例。
@@ -49,10 +68,12 @@ public:
* @param code 证券代码
* @param price 买入价格
* @param num 买入数量
- * @return 操作执行的时刻。实盘时,应返回委托单时间或服务器交易时间。
+ * @param stoploss 预期的止损价
+ * @param goalPrice 预期的目标价位
+ * @param from 系统部件来源
*/
- Datetime buy(Datetime datetime, const string& market, const string& code, price_t price,
- double num);
+ void buy(Datetime datetime, const string& market, const string& code, price_t price, double num,
+ price_t stoploss, price_t goalPrice, SystemPart from) noexcept;
/**
* 执行卖出操作
@@ -61,34 +82,65 @@ public:
* @param code 证券代码
* @param price 卖出价格
* @param num 卖出数量
- * @return 操作执行的时刻。实盘时,应返回委托单时间或服务器交易时间。
+ * @param stoploss 新的预期止损价
+ * @param goalPrice 新的预期目标价位
+ * @param from 系统部件来源
*/
- Datetime sell(Datetime datetime, const string& market, const string& code, price_t price,
- double num);
+ void sell(Datetime datetime, const string& market, const string& code, price_t price,
+ double num, price_t stoploss, price_t goalPrice, SystemPart from) noexcept;
/**
- * 执行实际买入操作
+ * 获取当前资产信息
+ * @return string json字符串
+ *
+ * 接口规范:
+ * {
+ * "datetime": "2001-01-01 18:00:00.12345",
+ * "cash": 0.0,
+ * "positions": [
+ * {"market": "SZ", "code": "000001", "number": 100.0, "stoploss": 0.0, "goal_price": 0.0,
+ * "cost_price": 0.0},
+ * {"market": "SH", "code": "600001", "number": 100.0, "stoploss": 0.0, "goal_price": 0.0,
+ * "cost_price": 0.0},
+ * ]
+ * }
+ *
+ * 说明:
+ * cash: 当前可用资金
+ * number 应该为:现有持仓 + 正在买入 - 正在卖出
+ * cost_price: 每股买入成本价
+ *
+ */
+ string getAssetInfo() noexcept;
+
+ /**
+ * 子类实现接口,执行实际买入操作
* @param datetime 策略指示时间
* @param market 市场标识
* @param code 证券代码
* @param price 买入价格
* @param num 买入数量
- * @return 操作执行的时刻。实盘时,应返回委托单时间或服务器交易时间。
+ * @param stoploss 预期的止损价
+ * @param goalPrice 预期的目标价位
+ * @param from 系统部件来源
*/
- virtual Datetime _buy(Datetime datetime, const string& market, const string& code,
- price_t price, double num) = 0;
+ virtual void _buy(Datetime datetime, const string& market, const string& code, price_t price,
+ double num, price_t stoploss, price_t goalPrice, SystemPart from) = 0;
/**
- * 执行实际卖出操作
+ * 子类实现接口,执行实际卖出操作
* @param datetime 策略指示时间
* @param market 市场标识
* @param code 证券代码
* @param price 卖出价格
* @param num 卖出数量
- * @return 操作执行的时刻。实盘时,应返回委托单时间或服务器交易时间。
*/
- virtual Datetime _sell(Datetime datetime, const string& market, const string& code,
- price_t price, double num) = 0;
+ virtual void _sell(Datetime datetime, const string& market, const string& code, price_t price,
+ double num, price_t stoploss, price_t goalPrice, SystemPart from) = 0;
+
+ virtual string _getAssetInfo() {
+ return string();
+ }
protected:
string m_name;
diff --git a/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.cpp b/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.cpp
index fa41d3e5..8296f048 100644
--- a/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.cpp
+++ b/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.cpp
@@ -65,7 +65,7 @@ HKU_API std::ostream& operator<<(std::ostream& os, const PositionRecord& record)
return os;
}
-string PositionRecord::toString() const {
+string PositionRecord::str() const {
int precision = 2;
std::string market(""), code(""), name("");
if (!stock.isNull()) {
diff --git a/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.h b/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.h
index ea4247df..67c8c804 100644
--- a/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.h
+++ b/hikyuu_cpp/hikyuu/trade_manage/PositionRecord.h
@@ -26,19 +26,19 @@ public:
price_t buyMoney, price_t totalCost, price_t totalRisk, price_t sellMoney);
/** 仅用于python的__str__ */
- string toString() const;
+ string str() const;
- Stock stock; ///< 交易对象
- Datetime takeDatetime; ///< 初次建仓日期
- Datetime cleanDatetime; ///< 平仓日期,当前持仓记录中为Null()
- double number; ///< 当前持仓数量
- price_t stoploss; ///< 当前止损价
- price_t goalPrice; ///< 当前的目标价格
- double totalNumber; ///< 累计持仓数量
- price_t buyMoney; ///< 累计买入资金
- price_t totalCost; ///< 累计交易总成本
- price_t totalRisk; ///< 累计交易风险 = 各次 (买入价格-止损)*买入数量, 不包含交易成本
- price_t sellMoney; ///< 累计卖出资金
+ Stock stock; ///< 交易对象
+ Datetime takeDatetime; ///< 初次建仓日期
+ Datetime cleanDatetime; ///< 平仓日期,当前持仓记录中为Null