mirror of
https://gitee.com/fasiondog/hikyuu.git
synced 2024-11-30 10:59:43 +08:00
python 使用主线程循环,C++不用
This commit is contained in:
parent
8edb9d0a4b
commit
69730916cc
@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
# cp936
|
# cp936
|
||||||
|
|
||||||
from hikyuu import StrategyBase, Query, Datetime, TimeDelta
|
from hikyuu import StrategyBase, Query, Datetime, TimeDelta, Seconds
|
||||||
from hikyuu import StockManager
|
from hikyuu import StockManager
|
||||||
|
|
||||||
|
|
||||||
@ -15,12 +15,6 @@ class TestStrategy(StrategyBase):
|
|||||||
def init(self):
|
def init(self):
|
||||||
print("strategy init")
|
print("strategy init")
|
||||||
|
|
||||||
def on_bar(self, ktype):
|
|
||||||
print("on bar {}".format(ktype))
|
|
||||||
print("{}".format(len(StockManager.instance())))
|
|
||||||
for s in self.sm:
|
|
||||||
print(s)
|
|
||||||
|
|
||||||
|
|
||||||
def my_func():
|
def my_func():
|
||||||
sm = StockManager.instance()
|
sm = StockManager.instance()
|
||||||
@ -31,5 +25,5 @@ def my_func():
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
s = TestStrategy()
|
s = TestStrategy()
|
||||||
s.run_daily_at(my_func, TimeDelta(0, 17, 6))
|
s.run_daily_at(my_func, Datetime.now() - Datetime.today() + Seconds(5))
|
||||||
s.start()
|
s.start()
|
||||||
|
@ -11,9 +11,17 @@
|
|||||||
#include "hikyuu/utilities/ini_parser/IniParser.h"
|
#include "hikyuu/utilities/ini_parser/IniParser.h"
|
||||||
#include "hikyuu/global/schedule/scheduler.h"
|
#include "hikyuu/global/schedule/scheduler.h"
|
||||||
#include "hikyuu/global/GlobalTaskGroup.h"
|
#include "hikyuu/global/GlobalTaskGroup.h"
|
||||||
|
#include "hikyuu/global/sysinfo.h"
|
||||||
#include "hikyuu/hikyuu.h"
|
#include "hikyuu/hikyuu.h"
|
||||||
#include "StrategyBase.h"
|
#include "StrategyBase.h"
|
||||||
|
|
||||||
|
#define EVENT(func) \
|
||||||
|
if (runningInPython()) { \
|
||||||
|
event(func); \
|
||||||
|
} else { \
|
||||||
|
func(); \
|
||||||
|
}
|
||||||
|
|
||||||
namespace hku {
|
namespace hku {
|
||||||
|
|
||||||
std::atomic_bool StrategyBase::ms_keep_running = true;
|
std::atomic_bool StrategyBase::ms_keep_running = true;
|
||||||
@ -83,9 +91,9 @@ void StrategyBase::run() {
|
|||||||
|
|
||||||
auto& agent = *getGlobalSpotAgent();
|
auto& agent = *getGlobalSpotAgent();
|
||||||
agent.addProcess(
|
agent.addProcess(
|
||||||
[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(false);
|
||||||
|
|
||||||
m_running = true;
|
m_running = true;
|
||||||
@ -99,7 +107,7 @@ void StrategyBase::start() {
|
|||||||
void StrategyBase::receivedSpot(const SpotRecord& spot) {
|
void StrategyBase::receivedSpot(const SpotRecord& spot) {
|
||||||
Stock stk = getStock(format("{}{}", spot.market, spot.code));
|
Stock stk = getStock(format("{}{}", spot.market, spot.code));
|
||||||
if (!stk.isNull()) {
|
if (!stk.isNull()) {
|
||||||
event([=]() { this->onChange(stk, spot); });
|
EVENT([=]() { this->onChange(stk, spot); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +133,7 @@ void StrategyBase::runDaily(std::function<void()>&& func, const TimeDelta& delta
|
|||||||
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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -194,7 +202,7 @@ void StrategyBase::runDailyAt(std::function<void()>&& func, const TimeDelta& del
|
|||||||
|
|
||||||
auto new_func = [=]() {
|
auto new_func = [=]() {
|
||||||
if (!ignoreHoliday) {
|
if (!ignoreHoliday) {
|
||||||
event(func);
|
EVENT(func);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,7 +210,7 @@ void StrategyBase::runDailyAt(std::function<void()>&& func, const TimeDelta& del
|
|||||||
auto today = Datetime::today();
|
auto today = Datetime::today();
|
||||||
int day = today.dayOfWeek();
|
int day = today.dayOfWeek();
|
||||||
if (day != 0 && day != 6 && !sm.isHoliday(today)) {
|
if (day != 0 && day != 6 && !sm.isHoliday(today)) {
|
||||||
event(func);
|
EVENT(func);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user