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

在class CtaEngine(BaseEngine):中
添加了如下:
self.event_engine.register(EVENT_CONTRACT, self.process_contract_event)

def process_contract_event(self, event):
    """"""
    print("contract开始执行了。")
    contracts = event.data
    contract = (contracts.vt_symbol, contracts.size, contracts.pricetick)
    print(contract)

    for strategy_name in self.strategies.keys():
        strategy = self.strategies[strategy_name]
        self.call_strategy_func(strategy, strategy.on_contract, contract)

在class CtaTemplate(ABC):中添加了
@virtual
def on_contract(self, contract):
"""
"""
pass

在策略中添加了如下:
def on_contract(self, contract):
"""
合约信息推送
"""
self.write_log(f"合约信息{contract}")

    self.put_event()

用上面的方法能在策略中获取到信息,但是不是一直有。有时候打开就能出现合约信息,有时程序运行好久会出现合约信息,或是挂着半天不显示,这是为什么?大神帮忙解答下?

Member
avatar
加入于:
帖子: 2115
声望: 140

想获取合约信息去vnpy.trader.engine通过get_contract/get_all_contract函数获取应该就行了吧。请保证连接接口成功后再启动策略

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

xiaohe wrote:

想获取合约信息去vnpy.trader.engine通过get_contract/get_all_contract函数获取应该就行了吧。请保证连接接口成功后再启动策略

这两个函数如何在策略里调用了?直接使用会报错。因为我想让策略获取到对应的合约信息,这样我就可以用来动态开仓。

Member
avatar
加入于:
帖子: 2115
声望: 140

请问是用的哪个交易模块?cta_strategy是单标的,portfolio_strategy是多标的,但是也是有策略内获取合约的办法的。
cta为例,self.cta_engine.main_engine.get_all_contract()

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

沪公网安备 31011502017034号