mirror of
https://gitee.com/fasiondog/hikyuu.git
synced 2024-11-30 10:59:43 +08:00
update
This commit is contained in:
parent
761b233204
commit
f2a979a92e
@ -15,6 +15,9 @@ class TestStrategy(StrategyBase):
|
|||||||
def init(self):
|
def init(self):
|
||||||
print("strategy init")
|
print("strategy init")
|
||||||
|
|
||||||
|
def on_received_spot(self, rev_time):
|
||||||
|
print("rev_time:", rev_time)
|
||||||
|
|
||||||
|
|
||||||
def my_func():
|
def my_func():
|
||||||
sm = StockManager.instance()
|
sm = StockManager.instance()
|
||||||
@ -26,5 +29,6 @@ def my_func():
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
s = TestStrategy()
|
s = TestStrategy()
|
||||||
# s.run_daily_at(my_func, Datetime.now() - Datetime.today() + Seconds(5))
|
# s.run_daily_at(my_func, Datetime.now() - Datetime.today() + Seconds(5))
|
||||||
|
# s.on_received_spot(Datetime.now())
|
||||||
s.run_daily(my_func, Minutes(1))
|
s.run_daily(my_func, Minutes(1))
|
||||||
s.start()
|
# s.start()
|
||||||
|
@ -96,7 +96,7 @@ void StrategyBase::run() {
|
|||||||
[this](const SpotRecord& spot) { EVENT([=]() { this->receivedSpot(spot); }); });
|
[this](const SpotRecord& spot) { EVENT([=]() { this->receivedSpot(spot); }); });
|
||||||
agent.addPostProcess(
|
agent.addPostProcess(
|
||||||
[this](Datetime revTime) { EVENT([=]() { this->onReceivedSpot(revTime); }); });
|
[this](Datetime revTime) { EVENT([=]() { this->onReceivedSpot(revTime); }); });
|
||||||
startSpotAgent(false);
|
startSpotAgent(true);
|
||||||
|
|
||||||
m_running = true;
|
m_running = true;
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ void StrategyBase::runDaily(std::function<void()>&& func, const TimeDelta& delta
|
|||||||
Datetime open2 = today + market_info.openTime2();
|
Datetime open2 = today + market_info.openTime2();
|
||||||
Datetime close2 = today + market_info.closeTime2();
|
Datetime close2 = today + market_info.closeTime2();
|
||||||
Datetime now = Datetime::now();
|
Datetime now = Datetime::now();
|
||||||
if ((now > open1 && now < close1) || (now > open2 && now < close2)) {
|
if ((now >= open1 && now <= close1) || (now >= open2 && now <= close2)) {
|
||||||
EVENT(func);
|
EVENT(func);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -146,6 +146,7 @@ void StrategyBase::runDaily(std::function<void()>&& func, const TimeDelta& delta
|
|||||||
auto now = Datetime::now();
|
auto now = Datetime::now();
|
||||||
TimeDelta now_time = now - today;
|
TimeDelta now_time = now - today;
|
||||||
if (now_time >= market_info.closeTime2()) {
|
if (now_time >= market_info.closeTime2()) {
|
||||||
|
HKU_INFO("time: {}", today.nextDay() + market_info.openTime1());
|
||||||
scheduler->addFuncAtTime(today.nextDay() + market_info.openTime1(), [=]() {
|
scheduler->addFuncAtTime(today.nextDay() + market_info.openTime1(), [=]() {
|
||||||
new_func();
|
new_func();
|
||||||
auto* sched = getScheduler();
|
auto* sched = getScheduler();
|
||||||
@ -168,6 +169,7 @@ void StrategyBase::runDaily(std::function<void()>&& func, const TimeDelta& delta
|
|||||||
|
|
||||||
} else if (now_time == market_info.closeTime1()) {
|
} else if (now_time == market_info.closeTime1()) {
|
||||||
scheduler->addFuncAtTime(today + market_info.openTime2(), [=]() {
|
scheduler->addFuncAtTime(today + market_info.openTime2(), [=]() {
|
||||||
|
new_func();
|
||||||
auto* sched = getScheduler();
|
auto* sched = getScheduler();
|
||||||
sched->addDurationFunc(std::numeric_limits<int>::max(), delta, new_func);
|
sched->addDurationFunc(std::numeric_limits<int>::max(), delta, new_func);
|
||||||
});
|
});
|
||||||
@ -189,6 +191,7 @@ void StrategyBase::runDaily(std::function<void()>&& func, const TimeDelta& delta
|
|||||||
|
|
||||||
} else if (now_time < market_info.openTime1()) {
|
} else if (now_time < market_info.openTime1()) {
|
||||||
scheduler->addFuncAtTime(today + market_info.openTime1(), [=]() {
|
scheduler->addFuncAtTime(today + market_info.openTime1(), [=]() {
|
||||||
|
new_func();
|
||||||
auto* sched = getScheduler();
|
auto* sched = getScheduler();
|
||||||
sched->addDurationFunc(std::numeric_limits<int>::max(), delta, new_func);
|
sched->addDurationFunc(std::numeric_limits<int>::max(), delta, new_func);
|
||||||
});
|
});
|
||||||
|
@ -19,6 +19,14 @@ public:
|
|||||||
void init() override {
|
void init() override {
|
||||||
PYBIND11_OVERLOAD(void, StrategyBase, init);
|
PYBIND11_OVERLOAD(void, StrategyBase, init);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onChange(const Stock& stk, const SpotRecord& spot) override {
|
||||||
|
PYBIND11_OVERLOAD(void, StrategyBase, onChange, stk, spot);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void onReceivedSpot(Datetime revTime) override {
|
||||||
|
PYBIND11_OVERLOAD(void, StrategyBase, onReceivedSpot, revTime);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void export_Strategy(py::module& m) {
|
void export_Strategy(py::module& m) {
|
||||||
@ -41,6 +49,8 @@ void export_Strategy(py::module& m) {
|
|||||||
py::return_value_policy::copy, "需要的K线类型")
|
py::return_value_policy::copy, "需要的K线类型")
|
||||||
|
|
||||||
.def("init", &StrategyBase::init)
|
.def("init", &StrategyBase::init)
|
||||||
|
.def("on_change", &StrategyBase::onChange)
|
||||||
|
.def("on_received_spot", &StrategyBase::onReceivedSpot)
|
||||||
.def("start", &PyStrategyBase::start)
|
.def("start", &PyStrategyBase::start)
|
||||||
.def("run_daily",
|
.def("run_daily",
|
||||||
[](StrategyBase& self, py::object func, const TimeDelta& time) {
|
[](StrategyBase& self, py::object func, const TimeDelta& time) {
|
||||||
|
Loading…
Reference in New Issue
Block a user