VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 16
声望: 0

参照tick驱动,注册了 self.event_engine.register(EVENT_TIME,self.process_systime_event) # test
在仿照以下程序时,遇到问题:
def process_tick_event(self, event: Event):
""""""
tick = event.data

strategies = self.symbol_strategy_map[tick.vt_symbol]
if not strategies:
    return

self.check_stop_order(tick)

for strategy in strategies:
    if strategy.inited:
        self.call_strategy_func(strategy, strategy.on_tick, tick)

tick驱动时,传进来的数据有vt_symbol,可据此判断所有strategies中执行。 但时间事件中,无合约,怎么让它在所有策略中执行呢

def process_systime_event(self, event: Event):
""""""
systime = event.data

strategies = self.symbol_strategy_map[tick.vt_symbol]   ?????
if not strategies:
    return

for strategy in strategies:
    if strategy.inited:
        self.call_strategy_func(strategy, strategy.on_time, tick)
Administrator
avatar
加入于:
帖子: 4493
声望: 311

直接遍历那个包含所有策略的字典好了

Member
avatar
加入于:
帖子: 16
声望: 0

用Python的交易员 wrote:

直接遍历那个包含所有策略的字典好了

谢谢管理员回复。

程序写成这样,还是通不过,求大神代劳

            def process_time_event(self, event: Event):
     """"""
     # tick = event.data

     # strategies = self.symbol_strategy_map[tick.vt_symbol]
    strategies = self.symbol_strategy_map.values()

     for strategy in strategies
         if strategy.inited:
             self.call_strategy_func(strategy, strategy.on_time)  
     pass
Member
avatar
加入于:
帖子: 337
声望: 27

请问一下报错是什么,策略里是否写了on_time函数

Member
avatar
加入于:
帖子: 16
声望: 0

策略和template里边已经写了on_time函数
启动VN Trade Pro时,弹出“触发异常”

提示 cta_strategy\engin.py中 for strategy in strategies ^Syntax Error:invalid syntax

Member
avatar
加入于:
帖子: 337
声望: 27

请检查一下python语法错误,for strategy in strategies 后面加个冒号

Member
avatar
加入于:
帖子: 16
声望: 0

为如此小错惭愧,谢谢 青青子荆 指点。

好巧不巧,遇到simnow暂停交易,没法调试。

紧急申请期货公司穿透测试和模拟交易,只能下周继续测试了

Member
avatar
加入于:
帖子: 127
声望: 13

时间驱动的意义是什么 呢。

Member
avatar
加入于:
帖子: 16
声望: 0

实盘交易时,想在开市前下单,或者无行情时让策略做动作。😅

Member
avatar
加入于:
帖子: 16
声望: 0

系统连接正常了,不过时间驱动还是没有搞定,请熟悉的人指点,谢谢。

现在程序修改的地方包括:
1、自编策略中仿照 ON_TICK函数,编写了一个简单多on_time函数,界面上返回调用次数;
2、cta strategy中template.py中,添加了 @virtual
def on_time(self)
3、cta strategy中engine.PY中class CtaEngine(BaseEngine):
增添了以下内容:
1)from vnpy.trader.event import (
EVENT_TICK,
EVENT_ORDER,
EVENT_TRADE,
EVENT_POSITION,
EVENT_TIMER # 新增内容
2)注册事件
def register_event(self):
""""""
self.event_engine.register(EVENT_TICK, self.process_tick_event)
self.event_engine.register(EVENT_TIMER, self.process_time_event) #新增内容
3) def process_time_event(self, event: Event):
""""""
strategies = self.symbol_strategy_map.values()

    for strategy in strategies:
        if strategy.inited:
            self.call_strategy_func(strategy, strategy.on_time) 

运行时无语法错误

打开cta strategy界面,可以正常登录,也可以正常订阅行情
但启动自编策略时,点击初始化后 无任何提示, 界面上原本正常显示多行情也停住了,好像sleep了一样

求大神指点,怎么才可以在cta strategy中实现时间驱动,谢谢!

Member
avatar
加入于:
帖子: 3698
声望: 238

卡住了可能是底层报错了,可以自己打印底层信息看看。但是如果是分钟级的策略,初始化是load_bar,不会有tick传进来的

Member
avatar
加入于:
帖子: 16
声望: 0

还是有问题,请指点,谢谢!

现有程序修改如下:
cta strategy中engine.PY中class CtaEngine(BaseEngine):
增添了以下内容:
1)from vnpy.trader.event import (
EVENT_TICK,
EVENT_ORDER,
EVENT_TRADE,
EVENT_POSITION,
EVENT_TIMER # 新增内容

2)注册事件
def register_event(self):
""""""
self.event_engine.register(EVENT_TICK, self.process_tick_event)
self.event_engine.register(EVENT_TIMER, self.process_time_event) #新增内容

3) def process_time_event(self, event: Event):
如果不做任何判断和操作,直接打印日志是正常的。
self.write_log("调用时间驱动")
strategies = self.symbol_strategy_map.values()
for strategy in self.strategies:
self.write_log(strategy)
------此时在cta界面中可以每秒打印 “调用时间驱动” 和strategy(cu2106),策略也可以正常添加、初始化和启动

但只要将处理过程增加一点,如判断策略是否初始化再打印日志就不成功了
def process_time_event(self, event: Event):
""""""
self.write_log("调用时间驱动")
strategies = self.symbol_strategy_map.values()
for strategy in self.strategies:

        #self.write_log(strategy)

        if strategy.inited:
            self.write_log(strategy)

---此时“调用时间驱动” 的日志不能正常输出。
临时加入策略也不能显示,关闭cta策略再重新打开后,可以显示加入策略是成功的,但点击策略初始化和启动,都没有反应,就像这个线程没有启动一样。

***请大神指点,看看怎么可以修改,谢谢!

Member
avatar
加入于:
帖子: 337
声望: 27

因为不知道你的自编策略是怎样的,无法复现你的报错,请用run.py文件运行一下策略,看一下底层报错信息是什么。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】