2015-01-07 01:26:14 +08:00
|
|
|
|
/*
|
|
|
|
|
* main.cpp
|
|
|
|
|
*
|
|
|
|
|
* Created on: 2011-12-4
|
|
|
|
|
* Author: fasiondog
|
|
|
|
|
*/
|
|
|
|
|
|
2020-06-26 21:39:53 +08:00
|
|
|
|
#include <cstdint>
|
2015-01-07 01:26:14 +08:00
|
|
|
|
#include <boost/python.hpp>
|
|
|
|
|
#include <hikyuu/hikyuu.h>
|
2023-09-27 02:49:36 +08:00
|
|
|
|
#include <hikyuu/global/sysinfo.h>
|
2015-01-07 01:26:14 +08:00
|
|
|
|
|
2020-06-26 21:39:53 +08:00
|
|
|
|
namespace py = boost::python;
|
|
|
|
|
using namespace hku;
|
|
|
|
|
|
2015-01-07 01:26:14 +08:00
|
|
|
|
void export_DataType();
|
|
|
|
|
void export_Constant();
|
|
|
|
|
void export_util();
|
2023-10-10 02:41:05 +08:00
|
|
|
|
void export_analysis();
|
2019-02-11 15:20:43 +08:00
|
|
|
|
void export_log();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
void export_Datetime();
|
2019-12-15 01:25:00 +08:00
|
|
|
|
void export_TimeDelta();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
void export_StockManager();
|
|
|
|
|
void export_Stock();
|
2016-04-03 00:08:31 +08:00
|
|
|
|
void export_Block();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
void export_MarketInfo();
|
|
|
|
|
void export_StockTypeInfo();
|
|
|
|
|
void export_StockWeight();
|
|
|
|
|
void export_KQuery();
|
|
|
|
|
void export_KReord();
|
2019-02-08 22:41:20 +08:00
|
|
|
|
void export_TimeLineReord();
|
2019-02-11 21:13:06 +08:00
|
|
|
|
void export_TransRecord();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
void export_KData();
|
|
|
|
|
void export_Parameter();
|
|
|
|
|
void export_save_load();
|
2018-08-30 02:38:13 +08:00
|
|
|
|
void export_io_redirect();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
|
2020-06-25 15:59:37 +08:00
|
|
|
|
void export_data_driver_main();
|
|
|
|
|
void export_indicator_main();
|
|
|
|
|
void export_instance_main();
|
|
|
|
|
void export_trade_manage_main();
|
|
|
|
|
void export_trade_sys_main();
|
2021-02-21 22:52:05 +08:00
|
|
|
|
void export_global_main();
|
2018-08-26 18:47:06 +08:00
|
|
|
|
|
2021-02-11 00:47:22 +08:00
|
|
|
|
void export_StrategeContext();
|
2021-02-17 00:56:19 +08:00
|
|
|
|
void export_strategy_main();
|
2021-02-11 00:47:22 +08:00
|
|
|
|
|
2020-06-26 21:39:53 +08:00
|
|
|
|
KData Py_GetKData(const string& market_code, py::object start = py::long_(0),
|
2020-10-01 22:52:50 +08:00
|
|
|
|
py::object end = py::long_(Null<int64_t>()), KQuery::KType ktype = KQuery::DAY,
|
2020-06-26 21:39:53 +08:00
|
|
|
|
KQuery::RecoverType recovertType = KQuery::NO_RECOVER) {
|
2020-07-07 00:34:25 +08:00
|
|
|
|
py::extract<KQuery> query_x(start);
|
|
|
|
|
if (query_x.check()) {
|
|
|
|
|
return getKData(market_code, query_x());
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-01 22:52:50 +08:00
|
|
|
|
py::extract<int64_t> int_x(start);
|
2020-06-26 21:39:53 +08:00
|
|
|
|
if (int_x.check()) {
|
2020-10-01 22:52:50 +08:00
|
|
|
|
int64_t start_ix = 0, end_ix = 0;
|
2020-06-26 21:39:53 +08:00
|
|
|
|
if (end.is_none()) {
|
2020-10-01 22:52:50 +08:00
|
|
|
|
end_ix = Null<int64_t>();
|
2020-06-26 21:39:53 +08:00
|
|
|
|
} else {
|
2020-10-01 22:52:50 +08:00
|
|
|
|
py::extract<int64_t> int_y(end);
|
2020-06-26 21:39:53 +08:00
|
|
|
|
if (!int_y.check()) {
|
|
|
|
|
HKU_THROW_EXCEPTION(
|
|
|
|
|
std::invalid_argument,
|
|
|
|
|
"The input parameters start and end must be of the same type (Datetime or int)!");
|
|
|
|
|
}
|
|
|
|
|
end_ix = int_y();
|
|
|
|
|
}
|
|
|
|
|
start_ix = int_x();
|
|
|
|
|
return getKData(market_code, start_ix, end_ix, ktype, recovertType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
py::extract<Datetime> date_x(start);
|
|
|
|
|
if (!date_x.check()) {
|
|
|
|
|
HKU_THROW_EXCEPTION(std::invalid_argument,
|
|
|
|
|
"The type of input parameter start must be Datetime or int!");
|
|
|
|
|
}
|
2020-06-25 18:22:51 +08:00
|
|
|
|
|
2020-06-26 21:39:53 +08:00
|
|
|
|
Datetime start_date, end_date;
|
|
|
|
|
if (end.is_none()) {
|
|
|
|
|
end_date = Null<Datetime>();
|
|
|
|
|
} else {
|
|
|
|
|
py::extract<Datetime> date_y(end);
|
|
|
|
|
if (!date_y.check()) {
|
|
|
|
|
HKU_THROW_EXCEPTION(
|
|
|
|
|
std::invalid_argument,
|
|
|
|
|
"The input parameters start and end must be of the same type (Datetime or int)!");
|
|
|
|
|
}
|
|
|
|
|
end_date = date_y();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
start_date = date_x();
|
|
|
|
|
return getKData(market_code, start_date, end_date, ktype, recovertType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_PYTHON_MODULE(core) {
|
|
|
|
|
py::docstring_options doc_options;
|
|
|
|
|
doc_options.disable_signatures();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
|
|
|
|
|
export_DataType();
|
|
|
|
|
export_Constant();
|
|
|
|
|
export_util();
|
2023-10-10 02:41:05 +08:00
|
|
|
|
export_analysis();
|
2019-02-11 15:20:43 +08:00
|
|
|
|
export_log();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
export_Datetime();
|
2019-12-15 01:25:00 +08:00
|
|
|
|
export_TimeDelta();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
export_MarketInfo();
|
|
|
|
|
export_StockTypeInfo();
|
|
|
|
|
export_StockWeight();
|
2021-02-17 19:43:59 +08:00
|
|
|
|
export_StrategeContext();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
export_StockManager();
|
|
|
|
|
export_KQuery();
|
|
|
|
|
export_KReord();
|
2019-02-08 22:41:20 +08:00
|
|
|
|
export_TimeLineReord();
|
2019-02-11 21:13:06 +08:00
|
|
|
|
export_TransRecord();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
export_KData();
|
|
|
|
|
export_Stock();
|
2016-04-03 00:08:31 +08:00
|
|
|
|
export_Block();
|
2015-01-07 01:26:14 +08:00
|
|
|
|
export_Parameter();
|
|
|
|
|
export_save_load();
|
2018-08-30 02:38:13 +08:00
|
|
|
|
|
2020-06-25 15:59:37 +08:00
|
|
|
|
export_data_driver_main();
|
|
|
|
|
export_indicator_main();
|
|
|
|
|
export_instance_main();
|
|
|
|
|
|
|
|
|
|
export_trade_sys_main();
|
|
|
|
|
export_trade_manage_main(); // must after export_trade_sys_main
|
|
|
|
|
|
2021-02-17 00:56:19 +08:00
|
|
|
|
export_strategy_main();
|
2021-02-11 00:47:22 +08:00
|
|
|
|
|
2021-02-21 22:52:05 +08:00
|
|
|
|
export_global_main();
|
2021-01-30 00:52:56 +08:00
|
|
|
|
|
2018-08-30 02:38:13 +08:00
|
|
|
|
export_io_redirect();
|
2020-06-26 21:39:53 +08:00
|
|
|
|
|
2022-02-16 01:02:50 +08:00
|
|
|
|
py::def("close_spend_time", close_spend_time, "全局关闭 c++ 部分耗时打印");
|
|
|
|
|
py::def("open_spend_time", close_spend_time, "全局开启 c++ 部分耗时打印");
|
|
|
|
|
|
2021-02-17 19:43:59 +08:00
|
|
|
|
py::def("hikyuu_init", hikyuu_init,
|
|
|
|
|
(py::arg("filename"), py::arg("ignore_preload") = false,
|
|
|
|
|
py::arg("context") = StrategyContext({"all"})));
|
2020-07-06 00:41:32 +08:00
|
|
|
|
py::def("get_version", getVersion, R"(getVersion()
|
2020-06-26 21:39:53 +08:00
|
|
|
|
|
|
|
|
|
:return: hikyuu 当前版本
|
|
|
|
|
:rtype: str)");
|
|
|
|
|
|
2020-07-06 00:41:32 +08:00
|
|
|
|
py::def("get_stock", getStock,
|
|
|
|
|
R"(get_stock(market_code)
|
2020-06-26 21:39:53 +08:00
|
|
|
|
|
|
|
|
|
根据"市场简称证券代码"获取对应的证券实例
|
|
|
|
|
|
|
|
|
|
:param str market_code: 格式:“市场简称证券代码”,如"sh000001"
|
|
|
|
|
:return: 对应的证券实例,如果实例不存在,则返回空实例,即Stock(),不抛出异常
|
|
|
|
|
:rtype: Stock)");
|
|
|
|
|
|
|
|
|
|
py::def(
|
2020-07-07 00:34:25 +08:00
|
|
|
|
"get_kdata", Py_GetKData,
|
2020-06-26 21:39:53 +08:00
|
|
|
|
(py::arg("market_code"), py::arg("start") = py::long_(0), py::arg("end") = py::object(),
|
|
|
|
|
py::arg("ktype") = KQuery::DAY, py::arg("recover_type") = KQuery::NO_RECOVER),
|
2020-07-06 00:41:32 +08:00
|
|
|
|
R"(get_kdata(market_code[, start=0, end=None, ktype=Query.DAY, recover_type=Query.NO_RECOVER])
|
2020-06-26 21:39:53 +08:00
|
|
|
|
|
2020-07-07 00:34:25 +08:00
|
|
|
|
or get_kdata(market_code, query)
|
|
|
|
|
|
2020-06-26 21:39:53 +08:00
|
|
|
|
获取K线数据,其中 start 和 end 需同时为 int 或 同时为 Datetime。
|
|
|
|
|
|
|
|
|
|
:param str market_code: 格式:“市场简称证券代码”,如"sh000001"
|
|
|
|
|
:param int or Datetime start: 起始索引或起始日期
|
|
|
|
|
:param int or Datetime end: 终止索引或终止日期
|
2020-07-07 00:34:25 +08:00
|
|
|
|
:param Query query: 查询条件
|
2020-06-26 21:39:53 +08:00
|
|
|
|
:return: 满足查询条件的K线数据
|
|
|
|
|
:rtype: KData)");
|
2015-01-07 01:26:14 +08:00
|
|
|
|
}
|