zoukankan      html  css  js  c++  java
  • vnpy交易接口学习

    1、按照github中环境准备要求,配置好环境要求。

    https://github.com/vnpy/vnpy

    mongdb安装在D:Program FilesMongoDBServer3.4     将MongoDB配置为系统服务  http://blog.csdn.net/Tong_T/article/details/78698122

     sc.exe create MongoDB binPath= ""D:Program FilesMongoDBServer3.4inmongod.exe" --service --config="D:Program FilesMongoDBmongod.cfg"" DisplayName= "MongoDB" start= "auto"     电脑配置信息,注意:我电脑是3.6,别人是3.4版本,一点微小差别就导致不成功,一定要细心。

    如果自己手动关掉了,可以win+r 运行中输入 services.msc  启动mongodb即可。关掉了MySQL57。可视化工具:robomongo

    2、安装完成后将csv数据导入mongo数据库。

    运行 E:vnpy0413examplesCtaBacktestingloadCsv.py文件,python2版本注销掉__init__.py文件,ctaHistoryData.py采用绝对引用,修改file,python2和3不一样。

    reader = csv.DictReader(open(fileName, 'r',encoding='utf8'))

    3、debug runBacktesting.py文件,流程如下:

    engine=BacktestingEngine()实例化回测引擎--->

    engine.set()参数设置 --->

    engine.initStrategy(AtrRsiStrategy,d)策略初始化 --->ctaBacktesting.py initStrategy(self,strategyClass,setting=None)--->strategyAtrRsi.py

    self.strategy.onInit()--->self.putEvent() ---->ctaTemplate.py self.ctaEngine.putStrategyEvent(self.name)  pass--->  self.strategy.onstart() 策略初始化--->

    self.putEvent()--->ctaTemplate.py self.ctaEngine.putstrategyEvent(self.name) pass --->

    engine.runBacktesting()--->self.runHistoryDataFromMongo()--->host,port,log=loadMongoSetting() --->vtFunction.py 函数 loadMongoSetting()--->

    疑问:

    7、为什么会有限价字典?

    ctaBacktesting.py
    def SendOrder(*******):
        ****
        self.workingLimitOrderDict[key]=order
        self.limitOrderDict[key]=order

    6、停止单是什么意思?为什么会出现?

    5、self.symbol self.exchange self.vtSymbol均没有赋值,是故意的还是中间有问题?

    4、ctaTemplate.py中buy方法,DIRECTION_LONG、OFFSET_OPEN,参数在哪里?

    解答:在language文件下面constant.py文件中。

    3、strategyAtrRsi.py中的onInit方法,有self.putEvent(),这个方法是在哪里写的?

    解答:继承了父类的ctaTemplate,父类中有putEvent方法。写法分别如下

    strategyAtrRsi.py
    def onInit(self): """初始化策略(必须由用户继承实现)""" self.writeCtaLog(u'%s策略初始化' %self.name) # 初始化RSI入场阈值 self.rsiBuy = 50 + self.rsiEntry self.rsiSell = 50 - self.rsiEntry # 载入历史数据,并采用回放计算的方式初始化策略数值 initData = self.loadBar(self.initDays) for bar in initData: self.onBar(bar) self.putEvent()
    ctaTemplate.py
        def putEvent(self):
            """发出策略状态变化事件"""
            self.ctaEngine.putStrategyEvent(self.name)

    2、ctaEngine在哪里入的参数呢?为什么实例化的时候不需要入参?

    ctaBacktesting.py
        def initStrategy(self, strategyClass, setting=None):
            """
            初始化策略
            setting是策略的参数设置,如果使用类中写好的默认设置则可以不传该参数
            """
            self.strategy = strategyClass(self, setting)
    #为什么没有入ctaEngine的参数呢?

     解答:有ctaEngine的参数,就是self,即在初始化策略的时候,把self作为ctaEngine参数传入策略类中,self.strategy作为策略类的实例化对象,也为回测引擎的属性。

    每个策略类继承cta策略模板类:ctaTemplate,策略模板类初始化__init__方法的时候传入ctaEngine和setting,策略类初始化也有__init__方法,为了传入策略引擎,需要使用super方法初始化父类(策略模板类)的__init__方法。所有如下写法:

    #strategyAtrRsi.py
        def __init__(self, ctaEngine, setting):
            """Constructor"""
            super().__init__(ctaEngine, setting)
    
    ctaTemplate.py
        def __init__(self, ctaEngine, setting):
            """Constructor"""
            self.ctaEngine = ctaEngine
            self.entrust = 0
            self.uncompletedOrders = {}
            if setting:
                self.writeCtaLog(u'基类设置参数')
                d = self.__dict__
                for key in self.paramList:
                    if key in setting:
                        d[key] = setting[key]

    1、vtglobal.py中的 __file__   是在什么时候赋值的呢?还是说每个py脚本文件都可以这样写?

    解答:每个脚本文件都可以这样写,是获得该文件所在位置

    print(__file__)
    E:/exercise/call.py
  • 相关阅读:
    JS字符串截取(获取指定字符后面的所有字符内容)
    vue图片上传插件
    php获取两个日期之间的所有日期
    laravel做定时任务时,加参数(也可缓存参数)
    前端传参数(数组,值为json字符串),后端接收json_decode()转为数组,数组为空值
    springboot的maven多模块项目
    如何给文件重命名
    springboot的get请求和post请求
    java调用ffmpeg
    mybatis批量插入List
  • 原文地址:https://www.cnblogs.com/bawu/p/7979355.html
Copyright © 2011-2022 走看看