hikyuu2/hikyuu_pywrap/trade_manage/_OrderBroker.cpp
2024-08-25 17:04:58 +08:00

113 lines
4.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* _OrderBroker.cpp
*
* Created on: 2017年6月28日
* Author: fasiondog
*/
#include <hikyuu/trade_manage/OrderBrokerBase.h>
#include "../pybind_utils.h"
namespace py = pybind11;
using namespace hku;
class PyOrderBrokerBase : public OrderBrokerBase {
public:
using OrderBrokerBase::OrderBrokerBase;
void _buy(Datetime datetime, const string& market, const string& code, price_t price,
double num, price_t stoploss, price_t goalPrice, SystemPart from) override {
PYBIND11_OVERLOAD_PURE(void, OrderBrokerBase, _buy, datetime, market, code, price, num,
stoploss, goalPrice, from);
}
void _sell(Datetime datetime, const string& market, const string& code, price_t price,
double num, price_t stoploss, price_t goalPrice, SystemPart from) override {
PYBIND11_OVERLOAD_PURE(void, OrderBrokerBase, _sell, datetime, market, code, price, num,
stoploss, goalPrice, from);
}
string _getAssetInfo() override {
PYBIND11_OVERLOAD_NAME(string, OrderBrokerBase, "_get_asset_info", _getAssetInfo);
}
};
void export_OrderBroker(py::module& m) {
py::class_<BrokerPositionRecord>(m, "BrokerPositionRecord")
.def(py::init<>())
.def(py::init<const Stock&, price_t, price_t>())
.def("__str__", &BrokerPositionRecord::str)
.def("__repr__", &BrokerPositionRecord::str)
.def_readwrite("stock", &BrokerPositionRecord::stock, "持仓对象")
.def_readwrite("number", &BrokerPositionRecord::number, "持仓数量")
.def_readwrite("money", &BrokerPositionRecord::money, "买入花费总资金");
py::class_<OrderBrokerBase, OrderBrokerPtr, PyOrderBrokerBase>(
m, "OrderBrokerBase",
R"(订单代理包装基类,用户可以参考自定义自己的订单代理,加入额外的处理
:param bool real:
:param float slip: slip则下单; )")
.def(py::init<>())
.def(py::init<const string&>(), R"(
:param str name: )")
.def("__str__", to_py_str<OrderBrokerBase>)
.def("__repr__", to_py_str<OrderBrokerBase>)
.def_property("name", py::overload_cast<>(&OrderBrokerBase::name, py::const_),
py::overload_cast<const string&>(&OrderBrokerBase::name),
py::return_value_policy::copy, "名称(可读写)")
.def("buy", &OrderBrokerBase::buy, "详情见子类实现接口: _buy")
.def("sell", &OrderBrokerBase::sell, "详情见子类实现接口: _sell")
.def("get_asset_info", &OrderBrokerBase::getAssetInfo, "详情见子类实现接口: _get_asset_info")
.def("_buy", &OrderBrokerBase::_buy,
R"(_buy(self, datetime, market, code, price, num, stoploss, goal_price, part_from)
:param Datetime datetime:
:param str market:
:param str code:
:param float price:
:param float num:
:param float stoploss:
:param float goal_price:
:param SystemPart part_from: )")
.def("_sell", &OrderBrokerBase::_sell,
R"(_sell(self, datetime, market, code, price, num, stoploss, goal_price, part_from)
:param Datetime datetime:
:param str market:
:param str code:
:param float price:
:param float num:
:param float stoploss:
:param float goal_price:
:param SystemPart part_from: )")
.def("_get_asset_info", &OrderBrokerBase::_getAssetInfo, R"(_get_asset_info(self)
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},
]
}
:return: json格式
:rtype: str)");
}