hikyuu2/hikyuu_pywrap/main.cpp

163 lines
5.3 KiB
C++
Raw Normal View History

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>
2023-12-26 18:25:50 +08:00
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
2015-01-07 01:26:14 +08:00
#include <hikyuu/hikyuu.h>
#include <hikyuu/global/sysinfo.h>
2023-12-26 18:25:50 +08:00
#include "pybind_utils.h"
2020-06-26 21:39:53 +08:00
2023-12-26 18:25:50 +08:00
using namespace hku;
namespace py = pybind11;
void export_bind_stl(py::module& m);
2023-12-27 02:16:10 +08:00
void export_DataType(py::module& m);
void export_Constant(py::module& m);
void export_util(py::module& m);
void export_log(py::module& m);
2023-12-26 18:25:50 +08:00
void export_Datetime(py::module& m);
2023-12-27 02:16:10 +08:00
void export_TimeDelta(py::module& m);
void export_StockManager(py::module& m);
void export_Stock(py::module& m);
void export_Block(py::module& m);
void export_MarketInfo(py::module& m);
void export_StockTypeInfo(py::module& m);
void export_StockWeight(py::module& m);
void export_KQuery(py::module& m);
void export_KReord(py::module& m);
void export_TimeLineReord(py::module& m);
void export_TransRecord(py::module& m);
void export_KData(py::module& m);
void export_Parameter(py::module& m);
2023-12-26 18:25:50 +08:00
void export_io_redirect(py::module& m);
2023-12-27 02:16:10 +08:00
void export_data_driver_main(py::module& m);
2023-12-27 22:48:41 +08:00
void export_indicator_main(py::module& m);
void export_instance_main(py::module& m);
void export_SystemPart(py::module& m);
2023-12-27 17:02:11 +08:00
void export_trade_manage_main(py::module& m);
void export_trade_sys_main(py::module& m);
2023-12-27 22:48:41 +08:00
void export_global_main(py::module& m);
2023-12-28 02:21:36 +08:00
void export_analysis(py::module& m);
2023-12-26 18:25:50 +08:00
void export_StrategeContext(py::module& m);
2023-12-27 22:48:41 +08:00
void export_strategy_main(py::module& m);
2023-12-26 18:25:50 +08:00
2024-01-26 04:46:44 +08:00
#if PY_MINOR_VERSION == 8
PYBIND11_MODULE(core38, m) {
#elif PY_MINOR_VERSION == 9
PYBIND11_MODULE(core39, m) {
#elif PY_MINOR_VERSION == 10
PYBIND11_MODULE(core310, m) {
#elif PY_MINOR_VERSION == 11
PYBIND11_MODULE(core311, m) {
#elif PY_MINOR_VERSION == 12
PYBIND11_MODULE(core312, m) {
#else
2023-12-26 18:25:50 +08:00
PYBIND11_MODULE(core, m) {
2024-01-26 04:46:44 +08:00
#endif
2024-03-05 23:04:16 +08:00
2024-03-11 19:40:40 +08:00
StockManager::instance().runningInPython(true);
2024-03-05 23:04:16 +08:00
#if HKU_ENABLE_SEND_FEEDBACK
sendPythonVersionFeedBack(PY_MAJOR_VERSION, PY_MINOR_VERSION, PY_MICRO_VERSION);
#endif
2023-12-28 02:21:36 +08:00
py::register_exception<hku::exception>(m, "HKUException");
export_bind_stl(m);
2023-12-27 02:16:10 +08:00
export_DataType(m);
export_Constant(m);
export_util(m);
export_log(m);
2023-12-26 18:25:50 +08:00
export_Datetime(m);
2023-12-27 02:16:10 +08:00
export_TimeDelta(m);
2023-12-27 22:48:41 +08:00
2023-12-27 02:16:10 +08:00
export_MarketInfo(m);
export_StockTypeInfo(m);
export_StockWeight(m);
2023-12-26 18:25:50 +08:00
export_StrategeContext(m);
2023-12-27 02:16:10 +08:00
export_StockManager(m);
export_KQuery(m);
export_KReord(m);
export_TimeLineReord(m);
export_TransRecord(m);
export_KData(m);
export_Stock(m);
export_Block(m);
export_Parameter(m);
2023-12-26 18:25:50 +08:00
2023-12-27 02:16:10 +08:00
export_data_driver_main(m);
2023-12-27 22:48:41 +08:00
export_indicator_main(m);
export_instance_main(m);
2023-12-26 18:25:50 +08:00
2023-12-27 22:48:41 +08:00
export_SystemPart(m);
export_trade_manage_main(m);
export_trade_sys_main(m); // must after export_trade_manage_main
2023-12-26 18:25:50 +08:00
2023-12-28 02:21:36 +08:00
export_analysis(m);
2023-12-27 22:48:41 +08:00
export_strategy_main(m);
2023-12-26 18:25:50 +08:00
2023-12-27 22:48:41 +08:00
export_global_main(m);
2023-12-26 18:25:50 +08:00
export_io_redirect(m);
2023-12-27 22:48:41 +08:00
m.def("close_spend_time", close_spend_time, "全局关闭 c++ 部分耗时打印");
m.def("open_spend_time", close_spend_time, "全局开启 c++ 部分耗时打印");
2023-12-26 18:25:50 +08:00
m.def("hikyuu_init", hikyuu_init, py::arg("filename"), py::arg("ignore_preload") = false,
py::arg("context") = StrategyContext({"all"}));
m.def("get_version", getVersion, R"(getVersion()
:return: hikyuu
:rtype: str)");
m.def("get_version_with_build", getVersionWithBuild);
m.def("get_version_git", getVersionWithGit);
2023-12-26 18:25:50 +08:00
2023-12-27 02:16:10 +08:00
m.def("get_stock", getStock,
R"(get_stock(market_code)
"市场简称证券代码"
:param str market_code: "sh000001"
:return: Stock()
:rtype: Stock)");
int64_t null_int64 = Null<int64_t>();
Datetime null_date = Null<Datetime>();
m.def("get_kdata", py::overload_cast<const string&, const KQuery&>(getKData));
2024-01-28 23:38:03 +08:00
m.def(
"get_kdata",
py::overload_cast<const string&, int64_t, int64_t, const KQuery::KType&, KQuery::RecoverType>(
getKData),
py::arg("market_code"), py::arg("start") = 0, py::arg("end") = null_int64,
py::arg("ktype") = KQuery::DAY, py::arg("recover_type") = KQuery::NO_RECOVER,
R"(根据证券代码及起止位置获取 [start, end) 范围的 K 线数据
2023-12-27 02:16:10 +08:00
:param str market_code: : 'sh000001'
:param int start:
:param int end:
:param Query.KType ktype: K 线, 'DAY'|'WEEK'|'MONTH'|'QUARTER'|'HALFYEAR'|'YEAR'|'MIN'|'MIN5'|'MIN15'|'MIN30'|'MIN60'
:param Query.RecoverType recover_type: )");
m.def("get_kdata",
2024-01-28 23:38:03 +08:00
py::overload_cast<const string&, const Datetime&, const Datetime&, const KQuery::KType&,
2023-12-27 02:16:10 +08:00
KQuery::RecoverType>(getKData),
py::arg("market_code"), py::arg("start") = Datetime::min(), py::arg("end") = null_date,
py::arg("ktype") = KQuery::DAY, py::arg("recover_type") = KQuery::NO_RECOVER,
R"(根据证券代码及起止日期获取 [start, end) 范围的 K 线数据
:param str market_code: : 'sh000001'
:param int start:
:param int end:
:param Query.KType ktype: K 线, 'DAY'|'WEEK'|'MONTH'|'QUARTER'|'HALFYEAR'|'YEAR'|'MIN'|'MIN5'|'MIN15'|'MIN30'|'MIN60'
:param Query.RecoverType recover_type: )");
2015-01-07 01:26:14 +08:00
}