hikyuu2/hikyuu_pywrap/trade_sys/_Portfolio.cpp
2022-02-23 01:32:11 +08:00

111 lines
4.1 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.

/*
* _Portfolio.cpp
*
* Created on: 2016年3月29日
* Author: fasiondog
*/
#include <boost/python.hpp>
#include <hikyuu/trade_sys/portfolio/build_in.h>
#include <hikyuu/trade_sys/selector/crt/SE_Fixed.h>
#include <hikyuu/trade_sys/allocatefunds/crt/AF_EqualWeight.h>
#include "../_Parameter.h"
#include "../pickle_support.h"
using namespace boost::python;
using namespace hku;
namespace py = boost::python;
void (Portfolio::*pf_set_name)(const string&) = &Portfolio::name;
const string& (Portfolio::*pf_get_name)() const = &Portfolio::name;
py::list get_real_sys_list(const Portfolio& pf) {
return vector_to_py_list<SystemList>(pf.getRealSystemList());
}
py::list get_proto_sys_list(const Portfolio& pf) {
return vector_to_py_list<SystemList>(pf.getProtoSystemList());
}
void export_Portfolio() {
class_<Portfolio>("Portfolio", R"(实现多标的、多策略的投资组合)", init<>())
.def(init<const string&>())
.def(init<const TradeManagerPtr&, const SelectorPtr&, const AFPtr&>())
.def(self_ns::str(self))
.def(self_ns::repr(self))
.def("get_param", &Portfolio::getParam<boost::any>)
.def("set_param", &Portfolio::setParam<object>)
.def("have_param", &Portfolio::haveParam)
.add_property("name", make_function(pf_get_name, return_value_policy<copy_const_reference>()),
pf_set_name, "名称")
.add_property("tm", &Portfolio::getTM, &Portfolio::setTM, "设置或获取交易管理对象")
.add_property("se", &Portfolio::getSE, &Portfolio::setSE, "设置或获取交易对象选择算法")
.def("reset", &Portfolio::reset)
.def("clone", &Portfolio::clone)
//.def("readyForRun", &Portfolio::readyForRun)
//.def("runMoment", &Portfolio::runMoment)
.def("run", &Portfolio::run, (arg("query"), arg("force") = false), R"(run(self, query)
PF在第二次执行时
:param Query query:
:param bool force: )")
.def("get_real_sys_list", get_real_sys_list, "获取实际运行的子账户系统列表")
.def("get_proto_sys_list", get_proto_sys_list, "获取原型系统列表")
.def("get_funds", &Portfolio::getFunds, (arg("datetime"), arg("ktype") = KQuery::DAY),
R"(get_funds(self, [datetime, ktype = Query.DAY])
:param Datetime datetime:
:param Query.KType ktype: K线类型
:rtype: FundsRecord)")
.def("get_funds_curve", &Portfolio::getFundsCurve, (arg("dates"), arg("ktype") = KQuery::DAY),
R"(get_funds_curve(self, dates[, ktype = Query.DAY])
线
:param DatetimeList dates: 线
:param Query.KType ktype: K线类型
:return:
:rtype: PriceList)")
.def("get_profit_curve", &Portfolio::getProfitCurve,
(arg("dates"), arg("ktype") = KQuery::DAY),
R"(get_profit_curve(self, dates[, ktype = Query.DAY])
线线
:param DatetimeList dates: 线
:param Query.KType ktype: K线类型
:return: 线
:rtype: PriceList)")
#if HKU_PYTHON_SUPPORT_PICKLE
.def_pickle(name_init_pickle_suite<Portfolio>())
#endif
;
register_ptr_to_python<PortfolioPtr>();
def("PF_Simple", PF_Simple,
(arg("tm") = TradeManagerPtr(), arg("se") = SE_Fixed(), arg("af") = AF_EqualWeight()),
R"(PF_Simple([tm, se, af])
:param TradeManager tm:
:param SelectorBase se:
:param AllocateFundsBase af: )");
}