VeighNa量化社区
你的开源社区量化交易平台
Member
加入于:
帖子: 8
声望: 0
  • 目的是用跟住主力日线交易
  • 下载日线数据RB9999到database
  • 检查database确实更新了2月6号为止
  • 运行交易策略test,使用no-ui模式方便调试,貌似没有执行到on_daily_bar的位置(print bar没有出来)
  • 日线utility逻辑已添加,分钟线的回测有正常打印。启动交易确没有打印,初始化的配置有错误?
    VNPY/vnpy-2.1.8/examples/no_ui$ python run.py
    启动CTA策略守护父进程
    启动子进程
    子进程启动成功
    2021-02-06 00:49:13,048 INFO: 主引擎创建成功
    2021-02-06 00:49:13,049 INFO: 注册日志事件监听
    2021-02-06 00:49:13,051 INFO: 连接CTP接口
    2021-02-06 00:49:13,068 INFO: 行情服务器连接成功
    2021-02-06 00:49:13,072 INFO: 行情服务器登录成功
    2021-02-06 00:49:13,073 INFO: 交易服务器连接成功
    2021-02-06 00:49:13,086 INFO: 交易服务器授权验证成功
    2021-02-06 00:49:13,093 INFO: 交易服务器登录成功
    2021-02-06 00:49:13,099 INFO: 结算信息确认成功
    2021-02-06 00:49:13,132 INFO: 合约信息查询成功
    auth success
    2021-02-06 00:49:23,404 INFO: jqdata数据接口初始化成功
    2021-02-06 00:49:23,433 INFO: test: -1
    2021-02-06 00:49:23,434 INFO: test: -2
    2021-02-06 00:49:23,437 INFO: CTA策略引擎初始化成功
    2021-02-06 00:49:23,442 INFO: CTA策略初始化完成
    2021-02-06 00:49:23,444 INFO: test开始执行初始化
    2021-02-06 00:49:23,446 INFO: test: 策略初始化
    2021-02-06 00:49:23,450 INFO: test初始化完成

code:
def init(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super().init(cta_engine, strategy_name, vt_symbol, setting)
self.bg = BarGenerator(self.on_bar,1,self.on_daily_bar, Interval.DAILY)
self.write_log("-1")
self.am = ArrayManager(size=500)
self.write_log("-2")
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(10,use_database=True,interval=Interval.DAILY)
log:

def on_daily_bar(self, bar: BarData):
    """"""
    self.cancel_all()

    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return
    print(bar)
Member
avatar
加入于:
帖子: 4711
声望: 287

你是在am初始化之后打印bar,然后你的am的size又是500,不知道你历史数据是否超过500天足够am初始化,可以把print语句加到cancel_all下面试试看是否有bar传进来。
而且你的日线逻辑里需要对self.window进行相对处理才行

Member
加入于:
帖子: 8
声望: 0

xiaohe wrote:

你是在am初始化之后打印bar,然后你的am的size又是500,不知道你历史数据是否超过500天足够am初始化,可以把print语句加到cancel_all下面试试看是否有bar传进来。
而且你的日线逻辑里需要对self.window进行相对处理才行

多谢,按下面两步骤调试了下,回测是有打印结果也符合,目前的问题是模拟盘交易的时候没有执行到,数据用的symbol是RB9999.SHFE(jqdata.py拿数据会内部映射RB9999.XSGE,但是CTP的交易用的symbol当前需要映射到rb2105.SHFE,get_dominant_future('RB','2021-02-05')可以达到这个效果从而自动根据日期改symbol在模拟盘下单/换月,但是还不知道在ctp的那个逻辑里改?

1)bar改成500以后,
2)在database提供分钟线后(按代码逻辑会自己合成日线),
self.load_bar(500,use_database=True,interval=Interval.DAILY),

Member
加入于:
帖子: 8
声望: 0

应该主要是symbol,数据库识别的symbol,RB9999.SHFE
但是模拟交易启用的策略只能用"rb2105.SHFE"才能运行,
~/.vntrader/cta_strategy_setting.json

1.改成jqdata识别的RB9999.SHFE,报错
"test": {
"vt_symbol": "RB9999.SHFE",
2021-02-06 12:16:36,805 INFO: test: 行情订阅失败,找不到合约RB9999.SHFE
2.改成vnpy识别的,可以正常运行,bar滚动无打印
"test": {
. "vt_symbol": "rb2105.SHFE",

Member
avatar
加入于:
帖子: 4711
声望: 287

策略初始化和订阅合约都在vnpy.app.cta_strategy.engine的_init_strategy函数里,可以自己改改

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

沪公网安备 31011502017034号

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