首页 > 其他分享 >VeighNa 学习进阶(三) --执行策略(结束)

VeighNa 学习进阶(三) --执行策略(结束)

时间:2022-09-26 11:45:00浏览次数:54  
标签:engine 进阶 -- self VeighNa log main event 策略

先说个结论,看完策略,整个人有点不好了

介绍策略处理的文档上,全是以界面介绍为主,如果是用no_ui的,那得自己研究

上篇讲了连接行情后,用no_ui的run.py跑起来,里面已经加载了策略,就是这段

    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    main_engine.add_gateway(CtpGateway)
    cta_engine = main_engine.add_app(CtaStrategyApp)
    main_engine.write_log("主引擎创建成功")

    log_engine = main_engine.get_engine("log")
    event_engine.register(EVENT_CTA_LOG, log_engine.process_log_event)
    main_engine.write_log("注册日志事件监听")

    main_engine.connect(ctp_setting, "CTP")
    main_engine.write_log("连接CTP接口")

    sleep(10)

    cta_engine.init_engine()
    main_engine.write_log("CTA策略初始化完成")

    cta_engine.init_all_strategies()
    sleep(60)   # Leave enough time to complete strategy initialization
    main_engine.write_log("CTA策略全部初始化")

    cta_engine.start_all_strategies()
    main_engine.write_log("CTA策略全部启动")

它的这个策略,是基于策略基类写策略代码,看清楚,是策略代码,还不是策略实例。然后需要自己添加一次参数才算是策略实例

可以理解为,一个策略代码,根据参数不同,保存成多个策略实例 (保存在用户目录\.vntrader\cta_strategy_setting.json中)

我也不理解为什么要做成这个样子,这个样子好像只有在交易软件中的指标这样干,可以调参,来测试不同的结果达到最优,大概是这样想的吧,

那样有个最大的缺陷,就是不能调试,全靠print了,目前这个框架面向对象是非开发者,所以在界面上完成。但站在开发者角度的话就很奇葩了。

好在VeighNa 公布了源码,调试策略也没有问题。建立项目时把vnpy,vnpy_ctp,vnpy_ctastrategy放在一起,然后策略文件放在vnpy_ctastrategy\strategies下面,即可以调试,但说实话,已经没有兴趣去看其它的app啥的了,纯粹写策略,用JJ比这个方便很多很多。

另外策略中用到的BarGenerator也只支持最小的1分钟周期,用到秒的没得玩,要自己去改了。另外,这个BarGenerator不支持实时周期和静态周期的切换,比如5分钟线,有些策略需要实时的tick形成的K线,有些时候要整个5分钟完成之后形成的K线。

另外也说下行情交易部分,今天也回头看了一下,有些做法不认同,比如交易部分是没有考虑成本价的问题,也就是如果策略用到成本价这个的话,就没法弄了

另外,还有一个地方,比如让人吐槽,看代码:

    def init_query(self) -> None:
        """初始化查询任务"""
        self.count: int = 0
        self.query_functions: list = [self.query_account, self.query_position]
        self.event_engine.register(EVENT_TIMER, self.process_timer_event)

这是在ctp_gateway中的一段代码,意思是通过定时任务(process_timer_event,2秒)去查询账户和持仓,我没有往后看了,查完了肯定会更新本地数据,这么频繁的查询,如果没有做好队列或锁,一定会跟本地数据和在运行的策略中的开平形成冲突。可能作者觉得写个try就完了吧

 

标签:engine,进阶,--,self,VeighNa,log,main,event,策略
From: https://www.cnblogs.com/szyicol/p/16724098.html

相关文章

  • Protobu生成文件报错
    报错信息:user@C02FP58GML7Hpbfile%protoc--go_out=././user.protoprotoc-gen-go:programnotfoundorisnotexecutablePleasespecifyaprogramusingabso......
  • SOLID 设计原理揭秘
    SOLID设计原理揭秘本文最初发表于https://www.learncsdesign.com坚硬的是五项设计原则的首字母缩写词,旨在使软件设计更易于理解、灵活和可维护。它们是由RobertC......
  • 设计 RESTful API 的指南
    设计RESTfulAPI的指南本文最初发表于https://www.learncsdesign.com统一资源标识符(URI)被RESTAPI用来识别资源。在这篇文章中,我们将介绍一组API设计规则,......
  • 第十六章 Centos7下Docker安装GitLab
    一、查找Gitlab镜像[root@staging~]#dockersearchgitlab二、拉取Gitlab镜像[root@staging~]#dockerpullgitlab/gitlab-ce:latest三、运行GitLab[root@sta......
  • window系统如何通过防火箱彻底关闭某个端口(如何通过命令行关闭电脑上的tcp或UDP端口)
    如何通过命令行关闭电脑上的tcp或UDP端口相信很多大家电脑上都会存在一些不常用的端口,那么我们如何去将这些端口关闭呢?方法很简单,下面小编就来为大家介绍。1.首先点击......
  • 帆软报表——图表(一)
    制作图表前期准备1.安装NavicatPremium12(用于连接MySQL,便于管理数据库,激活码/永久激活方法百度有很多自行查找~)2.安装帆软报表(项目需要已升级到FineReport10.0版本,可在......
  • RSA 对称加密,对称解密----公钥私钥加密解密过程
    RSA对称加密,对称解密----公钥私钥加密解密过程(Java)公司说不能传铭文密码,所以只能加密,再解密;麻烦事,其实这在需求文档没有,开发时间点也没有,浪费了了一上午的时间,还......
  • linux cron 任务不成功定位
    编辑定时任务:crontab-e查看定时任务执行情况tail-500f/var/log/crontail-500f/var/spool/mail/root报错:/bin/bash^M:坏的解释器:没有那个文件或目录原因:这个文件......
  • 统计排名(相同的成绩排名一样)
     selects.SId,s.Sname,co.CId,co.Cname,c.score,b.scoreasbscore,(多条数据,数据展示出来才会确定,)COUNT(DISTINCTb.score)+1asrank排名的关键fromsccLEFTJOIN......
  • 单变量时间序列平滑方法介绍
    时间序列是由按时间排序的观察单位组成的数据。可能是天气数据、股市数据。,也就是说它是由按时间排序的观察值组成的数据。在本文中将介绍和解释时间序列的平滑方法,时间......