hikyuu2/hikyuu_pywrap/trade_sys/_Portfolio.cpp
2022-02-02 17:02:07 +08:00

125 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.

/*
* _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;
void (Portfolio::*pf_set_name)(const string&) = &Portfolio::name;
const string& (Portfolio::*pf_get_name)() const = &Portfolio::name;
FundsRecord (Portfolio::*getPortfolioFunds_1)(KQuery::KType) const = &Portfolio::getFunds;
FundsRecord (Portfolio::*getPortfolioFunds_2)(const Datetime&,
KQuery::KType) = &Portfolio::getFunds;
PriceList (Portfolio::*getPFFundsCurve_1)(const DatetimeList&,
KQuery::KType) = &Portfolio::getFundsCurve;
PriceList (Portfolio::*getPFFundsCurve_2)() = &Portfolio::getFundsCurve;
PriceList (Portfolio::*getPFProfitCurve_1)(const DatetimeList&,
KQuery::KType ktype) = &Portfolio::getProfitCurve;
PriceList (Portfolio::*getPFProfitCurve_2)() = &Portfolio::getProfitCurve;
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, R"(run(self, query)
:param Query query: )")
.def("get_funds", getPortfolioFunds_1, (arg("ktype") = KQuery::DAY))
.def("get_funds", getPortfolioFunds_2, (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", getPFFundsCurve_1, (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_funds_curve", getPFFundsCurve_2,
R"(get_funds_curve(self)
线
:return:
:rtype: PriceList)")
.def("get_profit_curve", getPFProfitCurve_1, (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)")
.def("get_profit_curve", getPFProfitCurve_2,
R"(get_profit_curve(self)
线
: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, sys, se])
:param TradeManager tm:
:param SelectorBase se:
:param AllocateFundsBase af: )");
}