vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 6
声望: 0

在示范策略代码中没有找到关于实时数据推送给策略的入口,请问策略如何接收实时实盘行情,示范策略如下。
def onInit(self):
"""初始化策略(必须由用户继承实现)"""
self.writeCtaLog(u'双EMA演示策略初始化,走这里初始化')

    initData = self.loadBar(self.initDays)
    for bar in initData:
        self.onBar(bar)

    self.putEvent()

#----------------------------------------------------------------------
def onStart(self):
    """启动策略(必须由用户继承实现)"""
    self.writeCtaLog(u'双EMA演示策略启动,走这里!')
    self.putEvent()


从代码初始化可以看到把数据库中查到的数据推给了onBar,并由onBar发出买入和卖出信号,但onStart中并没有订阅实时行情并把实时行情推给onBar,请问是不是我由看遗漏的代码,如果自己实现订阅行情,并将订阅行情Tick数据转换为5分钟K线同送给onBar,之后写入数据库中应该怎么实现。

Administrator
avatar
加入于:
帖子: 1711
声望: 80

通过onTick函数收取

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

这个函数需要传入Tick怎么获取订阅行情的Tick呢?

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

用Python的交易员 wrote:

通过onTick函数收取

这个函数需要传入Tick怎么获取订阅行情的Tick呢?

Administrator
avatar
加入于:
帖子: 1711
声望: 80

onTick函数叫做回调函数callback,是由系统自动调用的,你在onTick函数中去写你的逻辑就行

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

用Python的交易员 wrote:

onTick函数叫做回调函数callback,是由系统自动调用的,你在onTick函数中去写你的逻辑就行

谢谢版主的详细解答,回调函数应该是有函数原型的吧,这个是什么地方在给到onTick数据呢,这个问题困扰了我好长时间了

这个函数的原型是不是c++ThostFtdcMdApi.h中的
virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) {};
这个函数
又通过ctpGateway.py中的def onRtnDepthMarketData(self, data):函数推给了事件引擎但是这个函数需要传入一个data啊,这里我只能假设c++程序把data推给了 onRtnDepthMarketData因为我只是猜测拿不出证据,然而事件引擎有做了什么可以让onTick收到数据的我看了好长时间也找不出证据,菜鸟一只希望版主大哥见谅!

Administrator
avatar
加入于:
帖子: 1711
声望: 80

原始数据是从C++层的OnRtnDepthMarketData函数过来的,中间经过了Gateway数据结构转换,然后走事件引擎分发,CTA引擎收到后再调用策略的onTick函数推送给策略

def onRtnDepthMarketData(self, data),这里的data是C++层传过来的

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