This commit is contained in:
fasiondog 2020-07-04 00:15:54 +08:00
parent d4aee26be2
commit f9173dc212
6 changed files with 77 additions and 89 deletions

View File

@ -76,8 +76,8 @@ if sys.platform == 'win32':
# 读取配置信息,并初始化 # 读取配置信息,并初始化
# #
# ============================================================================== # ==============================================================================
#config_file = './test_data/hikyuu_win.ini' config_file = './test_data/hikyuu_win.ini'
config_file = os.path.expanduser('~') + "/.hikyuu/hikyuu.ini" #config_file = os.path.expanduser('~') + "/.hikyuu/hikyuu.ini"
if not os.path.exists(config_file): if not os.path.exists(config_file):
# 检查老版本配置是否存在,如果存在可继续使用,否则异常终止 # 检查老版本配置是否存在,如果存在可继续使用,否则异常终止
data_config_file = os.path.expanduser('~') + "/.hikyuu/data_dir.ini" data_config_file = os.path.expanduser('~') + "/.hikyuu/data_dir.ini"

View File

@ -18,34 +18,6 @@
namespace hku { namespace hku {
double HKU_API roundEx(double number, int ndigits) { double HKU_API roundEx(double number, int ndigits) {
/*double f;
int i;
f = 1.0;
i = abs(ndigits);
while (--i >= 0){
f = f*10.0;
}
if (ndigits < 0){
number /= f;
}else{
number *= f;
}
if (number >= 0.0){
number = std::floor(number + 0.5);
}else{
number = std::ceil(number - 0.5);
}
if (ndigits < 0){
number *= f;
}else{
number /= f;
}
return number;*/
//切换至ROUND_HALF_EVEN 银行家舍入法 //切换至ROUND_HALF_EVEN 银行家舍入法
double pow1, pow2, y, z; double pow1, pow2, y, z;
double x = number; double x = number;

View File

@ -14,41 +14,38 @@ using namespace boost::python;
using namespace hku; using namespace hku;
void export_KData() { void export_KData() {
class_<KData>("KData", init<>()) class_<KData>("KData", init<>())
.def(init<const KData&>()) .def(init<const KData&>())
.def(init<const Stock&, const KQuery&>()) .def(init<const Stock&, const KQuery&>())
//.def(self_ns::str(self)) //.def(self_ns::str(self))
.def("__str__", &KData::toString) .def("__str__", &KData::toString)
.add_property("startPos", &KData::startPos) .def("__repr__", &KData::toString)
.add_property("endPos", &KData::endPos) .add_property("startPos", &KData::startPos)
.add_property("lastPos", &KData::lastPos) .add_property("endPos", &KData::endPos)
.add_property("open", &KData::open) .add_property("lastPos", &KData::lastPos)
.add_property("close", &KData::close) .add_property("open", &KData::open)
.add_property("high", &KData::high) .add_property("close", &KData::close)
.add_property("low", &KData::low) .add_property("high", &KData::high)
.add_property("amo", &KData::amo) .add_property("low", &KData::low)
.add_property("vol", &KData::vol) .add_property("amo", &KData::amo)
.add_property("vol", &KData::vol)
.def("getDatetimeList", &KData::getDatetimeList) .def("getDatetimeList", &KData::getDatetimeList)
.def("getKRecord", &KData::getKRecord) .def("getKRecord", &KData::getKRecord)
.def("get", &KData::getKRecord) .def("get", &KData::getKRecord)
.def("getKRecordByDate", &KData::getKRecordByDate) .def("getKRecordByDate", &KData::getKRecordByDate)
.def("getByDate", &KData::getKRecordByDate) .def("getByDate", &KData::getKRecordByDate)
.def("_getPos", &KData::getPos) //python中需要将Null的情况改写为None .def("_getPos", &KData::getPos) // python中需要将Null的情况改写为None
.def("size", &KData::size) .def("size", &KData::size)
.def("empty", &KData::empty) .def("empty", &KData::empty)
.def("getQuery", &KData::getQuery) .def("getQuery", &KData::getQuery)
.def("getStock", &KData::getStock) .def("getStock", &KData::getStock)
.def("tocsv", &KData::tocsv) .def("tocsv", &KData::tocsv)
.def("__len__", &KData::size) .def("__len__", &KData::size)
#if HKU_PYTHON_SUPPORT_PICKLE #if HKU_PYTHON_SUPPORT_PICKLE
.def_pickle(normal_pickle_suite<KData>()) .def_pickle(normal_pickle_suite<KData>())
#endif #endif
; ;
} }

View File

@ -16,32 +16,32 @@ bool (*krecord_eq)(const KRecord&, const KRecord&) = operator==;
void export_KReord() { void export_KReord() {
class_<KRecord>("KRecord", init<>()) class_<KRecord>("KRecord", init<>())
.def(init<const Datetime&>()) .def(init<const Datetime&>())
.def(init<const Datetime&, price_t, price_t, price_t, price_t, price_t, price_t>()) .def(init<const Datetime&, price_t, price_t, price_t, price_t, price_t, price_t>())
.def(self_ns::str(self)) .def(self_ns::str(self))
.def_readwrite("datetime", &KRecord::datetime) .def(self_ns::repr(self))
.def_readwrite("openPrice", &KRecord::openPrice) .def_readwrite("datetime", &KRecord::datetime, "时间")
.def_readwrite("highPrice", &KRecord::highPrice) .def_readwrite("openPrice", &KRecord::openPrice)
.def_readwrite("lowPrice", &KRecord::lowPrice) .def_readwrite("highPrice", &KRecord::highPrice)
.def_readwrite("closePrice", &KRecord::closePrice) .def_readwrite("lowPrice", &KRecord::lowPrice)
.def_readwrite("transAmount", &KRecord::transAmount) .def_readwrite("closePrice", &KRecord::closePrice)
.def_readwrite("transCount", &KRecord::transCount) .def_readwrite("transAmount", &KRecord::transAmount)
.def("__eq__", krecord_eq) .def_readwrite("transCount", &KRecord::transCount)
.def("__eq__", krecord_eq)
#if HKU_PYTHON_SUPPORT_PICKLE #if HKU_PYTHON_SUPPORT_PICKLE
.def_pickle(normal_pickle_suite<KRecord>()) .def_pickle(normal_pickle_suite<KRecord>())
#endif #endif
; ;
KRecordList::const_reference (KRecordList::*KRecordList_at)(KRecordList::size_type) const = &KRecordList::at; KRecordList::const_reference (KRecordList::*KRecordList_at)(KRecordList::size_type) const =
&KRecordList::at;
void (KRecordList::*append)(const KRecord&) = &KRecordList::push_back; void (KRecordList::*append)(const KRecord&) = &KRecordList::push_back;
class_<KRecordList>("KRecordList") class_<KRecordList>("KRecordList")
.def("__iter__", iterator<KRecordList>()) .def("__iter__", iterator<KRecordList>())
.def("size", &KRecordList::size) .def("size", &KRecordList::size)
.def("__len__", &KRecordList::size) .def("__len__", &KRecordList::size)
.def("__getitem__", KRecordList_at, return_value_policy<copy_const_reference>()) .def("__getitem__", KRecordList_at, return_value_policy<copy_const_reference>())
.def("append", append) .def("append", append);
;
register_ptr_to_python<KRecordListPtr>(); register_ptr_to_python<KRecordListPtr>();
} }

View File

@ -39,6 +39,7 @@ void export_TransRecord() {
void (TransList::*append)(const TransRecord&) = &TransList::push_back; void (TransList::*append)(const TransRecord&) = &TransList::push_back;
class_<TransList>("TransList") class_<TransList>("TransList")
.def(self_ns::str(self)) .def(self_ns::str(self))
.def(self_ns::repr(self))
.def("__iter__", iterator<TransList>()) .def("__iter__", iterator<TransList>())
.def("size", &TransList::size) .def("size", &TransList::size)
.def("__len__", &TransList::size) .def("__len__", &TransList::size)

View File

@ -11,12 +11,30 @@
using namespace boost::python; using namespace boost::python;
using namespace hku; using namespace hku;
BOOST_PYTHON_FUNCTION_OVERLOADS(roundEx_overload, roundEx, 1, 2);
BOOST_PYTHON_FUNCTION_OVERLOADS(roundUp_overload, roundUp, 1, 2);
BOOST_PYTHON_FUNCTION_OVERLOADS(roundDown_overload, roundDown, 1, 2);
void export_util() { void export_util() {
def("roundEx", roundEx, roundEx_overload()); def("roundEx", roundEx, (arg("number"), arg("ndigits") = 0),
def("roundUp", roundUp, roundUp_overload()); R"(roundEx(number[, ndigits=0])
def("roundDown", roundDown, roundDown_overload());
ROUND_HALF_EVEN
:param float number
:param int ndigits
:rype: float)");
def("roundUp", roundUp, (arg("number"), arg("ndigits") = 0), R"(roundUp(number[, ndigits=0])
10.111
:param float number
:param int ndigits
:rtype: float)");
def("roundDown", roundDown, (arg("number"), arg("ndigits") = 0),
R"(roundDown(number[, ndigits=0])
10.110
:param float number
:param int ndigits
:rtype: float)");
} }