VeighNa量化社区
你的开源社区量化交易平台
dmz
dmz's Avatar
Member
离线
60 帖子
声望: 2

由于我个人的需求,我按照自己的需求修改了vnpy的源代码。

但是,众所周知,vnpy是会不断更新版本的。因此,我每次在更新版本时,就必须重新修改一次代码,非常痛苦。由于我修改的代码涉及到许多不同的文件,即使我都已经记录了修改的流程,每次修改起来还是很困难。由于我并不是CS出身,所以我想问一下,有没有什么代码管理的方法,能够让版本更新后,修改的代码尽可能的少呢?

问题
(1)在portfolio的回测中,发出去的订单 成交与否 的逻辑是在哪部分代码中呢?
(2)虽然没有找到对应的代码,但根据我的观察,发出的订单是否成交,似乎和订单的价格以及下一个bar的价格有关。可我使用的是小时级别的数据,下一个小时的价格大幅上升或者下降,并不意味着上一个小时发出的订单就不能成交。实盘中,这个订单是否能成交主要由后几秒、后几分钟的价格决定。因此,在小时级别的回测中,我想设置为发出去的订单默认成交,我该如何修改代码呢?

看了下系统自带的四个portofolio策略,分别是:
$_arbitrage_strategy.py
portfolio_boll_channel_strategy.py
pair_trading_strategy.py
trend_following_strategy.py

发现他们在保存K线时,有的使用了一个字典(键名为品种,值为BarGenerator类), 有的直接使用了PortfolioBarGenerator类。这个K线被保存在bgs或者pbg的成员变量中。
在社区的使用文档中,也说明了,当需要进行K线合成时,应该使用PortfolioBarGenerator类,
可是在trend_following_strategy中,没有进行K线合成,也使用了PortfolioBarGenerator类。
所以我想问一下,使用一个BarGenerator的字典 和 使用PortfolioBarGenerator 有什么差别呢?

我有一个策略,它不会给出每天需要买多少手期货,它只会给出每天需要把30%的钱分配到品种A,把40%的钱分配到品种B, 把30%的钱分配给品种C。

因此,为了计算下单时的volume,我必须首先获得当前时刻我有多少资金。然而,资金的初始值capital是传给BackTestingEngine而不是StrategyEngine的。
所以:

  1. 我要如何在我的策略类中获取BackTestingEngine的信息呢?(StrategyTemplate的构造函数中,只传入了StrategyEngine作为自变量)
  2. 如果我下单开仓N手期货A,可是下单所用的保证金已经超过了我的总资金,这种情况下又会发生什么呢?

我使用了vnpy的github仓库里, example文件夹中的示例文件 backtesting_demo.ipynb来进行多品种策略的回测。

但是我很快就在数据导入中遇到了一个问题:

description
可以看到,我的焦煤历史数据的数据量是0。然而,在dataManager页面中,已经显示我成功的上传了jm的数据:

description

我猜测,也许加载数据的函数并没有按我所想像那样,加载了我上传的数据。所以我观察了一下代码:

description

发现控制加载数据的是 BacktestingEngine类里的load_data方法,其中核心函数是load_bar_data函数,load_bar_data函数的代码如下

description

其中database是由database = get_database() 这一行所指定的。
但是get_database函数是没有输入的, database完全由SETTINGS这个常量控制,而SETTINGS由一个json文件控制。因此,我要如何修改代码,才能让database指向我上传的那个数据库呢?

description

为什么不直接:
self.bar.high_price = max(self.bar_high_price, tick.high_price)
为什么一开始要把tick.last_price放进来计算呢?last_price不能代表这500ms内的最大值呀。

我的数据的时间格式有点不一样,每天有三个数据点,分别是早上的收盘,下午的收盘和夜盘的收盘,因此时间与时间之间的间隔不均匀。
在导入数据的时候,我的interval该写什么呢, HOUR吗?还是说,我应该在class INTERVAL 这个枚举类型里面增加一个分类?

由于simnow官网无法连接,也无法注册账号,因此按照论坛中的FAQ找中信期货申请了模拟账号

description

但是,使用模拟账号时,连接CTP的信息该如何填写呢?

description

特别是产品名称和授权编码,应该不是写“simnow_client_test”吧,那应该填什么呢?

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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