hikyuu2/hikyuu_pywrap/trade_sys/_Portfolio.cpp

94 lines
3.4 KiB
C++
Raw Normal View History

2016-04-03 00:08:31 +08:00
/*
* _Portfolio.cpp
*
* Created on: 2016329
2016-04-14 01:36:53 +08:00
* Author: fasiondog
2016-04-03 00:08:31 +08:00
*/
#include <boost/python.hpp>
#include <hikyuu/trade_sys/portfolio/build_in.h>
2020-07-15 22:50:22 +08:00
#include <hikyuu/trade_sys/selector/crt/SE_Fixed.h>
#include <hikyuu/trade_sys/allocatefunds/crt/AF_EqualWeight.h>
#include "../_Parameter.h"
2016-04-03 00:08:31 +08:00
#include "../pickle_support.h"
using namespace boost::python;
using namespace hku;
2022-02-22 01:45:28 +08:00
namespace py = boost::python;
2016-04-03 00:08:31 +08:00
2017-06-17 16:59:15 +08:00
void (Portfolio::*pf_set_name)(const string&) = &Portfolio::name;
2020-06-26 21:39:53 +08:00
const string& (Portfolio::*pf_get_name)() const = &Portfolio::name;
2016-04-03 00:08:31 +08:00
void export_Portfolio() {
2020-07-15 22:50:22 +08:00
class_<Portfolio>("Portfolio", R"(实现多标的、多策略的投资组合)", init<>())
2020-06-26 21:39:53 +08:00
.def(init<const string&>())
.def(init<const TradeManagerPtr&, const SelectorPtr&, const AFPtr&>())
2020-07-15 22:50:22 +08:00
2020-06-26 21:39:53 +08:00
.def(self_ns::str(self))
2020-07-15 00:23:48 +08:00
.def(self_ns::repr(self))
2020-06-26 21:39:53 +08:00
.add_property("name", make_function(pf_get_name, return_value_policy<copy_const_reference>()),
2020-07-15 22:50:22 +08:00
pf_set_name, "名称")
2022-02-26 17:54:15 +08:00
.add_property(
"query", make_function(&Portfolio::getQuery, return_value_policy<copy_const_reference>()),
&Portfolio::setQuery, "查询条件")
2020-07-15 22:50:22 +08:00
.add_property("tm", &Portfolio::getTM, &Portfolio::setTM, "设置或获取交易管理对象")
.add_property("se", &Portfolio::getSE, &Portfolio::setSE, "设置或获取交易对象选择算法")
2022-02-26 17:54:15 +08:00
.add_property("af", &Portfolio::getAF, &Portfolio::setAF, "设置或获取资产分配算法")
.add_property(
"proto_sys_list",
make_function(&Portfolio::getProtoSystemList, return_value_policy<copy_const_reference>()),
"获取原型系统列")
.add_property(
"real_sys_list",
make_function(&Portfolio::getRealSystemList, return_value_policy<copy_const_reference>()),
"由 PF 运行时设定的实际运行系统列表")
.def("get_param", &Portfolio::getParam<boost::any>, R"(get_param(self, name)
:param str name:
:return:
:raises out_of_range: )")
.def("set_param", &Portfolio::setParam<object>, R"(set_param(self, name, value)
2020-07-15 22:50:22 +08:00
2022-02-26 17:54:15 +08:00
:param str name:
:param value:
:raises logic_error: Unsupported type! )")
2020-08-13 00:35:19 +08:00
2022-02-26 17:54:15 +08:00
.def("have_param", &Portfolio::haveParam, "是否存在指定参数")
.def("reset", &Portfolio::reset, "复位操作")
.def("clone", &Portfolio::clone, "克隆操作")
2020-08-13 00:35:19 +08:00
2022-02-22 01:45:28 +08:00
.def("run", &Portfolio::run, (arg("query"), arg("force") = false), R"(run(self, query)
2020-07-15 22:50:22 +08:00
2022-02-22 01:45:28 +08:00
PF在第二次执行时
2020-07-15 22:50:22 +08:00
2022-02-22 01:45:28 +08:00
:param Query query:
:param bool force: )")
2016-04-03 00:08:31 +08:00
#if HKU_PYTHON_SUPPORT_PICKLE
2020-06-26 21:39:53 +08:00
.def_pickle(name_init_pickle_suite<Portfolio>())
2016-04-03 00:08:31 +08:00
#endif
2020-06-26 21:39:53 +08:00
;
2016-04-03 00:08:31 +08:00
register_ptr_to_python<PortfolioPtr>();
2020-07-15 22:50:22 +08:00
def("PF_Simple", PF_Simple,
(arg("tm") = TradeManagerPtr(), arg("se") = SE_Fixed(), arg("af") = AF_EqualWeight()),
2022-02-15 22:13:47 +08:00
R"(PF_Simple([tm, se, af])
2020-07-15 22:50:22 +08:00
:param TradeManager tm:
2022-02-02 17:02:07 +08:00
:param SelectorBase se:
:param AllocateFundsBase af: )");
2016-04-03 00:08:31 +08:00
}