研究backtrader这么长时间,我感觉相对vnpy,backtrader最大的优势在于对多标的,多周期的处理上非常优雅,比vnpy强。多标的,多周期在实盘时处理时,由于存在不确定的网络延时,更加复杂。考虑一个单周期多标的简单的场景,从远端接收tick,然后合成1分钟k线。
vnpy合成分钟线的时机不是物理时间整分钟触发,而是下一个tick触发。收到下一个tick时,检查其时间是否相对上一个tick时间越过了整分钟,若是,就合成1分钟k线,若下一个tick距离上一个tick的时间很远,那就问题很大。在多标的下,这种k线合成机制无法同步各个标的。
而backtrader中分钟线合成时机是物理时间整分钟触发的(可以设置合成时机推迟比如一秒,以考虑网络延时),每到整分钟,比如10点整,你的客户端开始聚合收集到的tick,为每个标的合成1分钟k线。这种机制能够很好地同步各个标的分钟线。如果再考虑多周期,情况更加复杂,bt能够处理得很好,vnpy就很难处理。
当然啦,backtrader也有局限性,那就是很多人看不懂,其实想量化交易,还是有很多其他选项的,例如交易接口、破解版等等,可以做高频,又是实盘,资费也比较合理,可以满足大部分的需求。
签名 | void SendOrders(int ClientId, int Category[], int EntrustType[], const char* Gddm[], const char* Zqdm[], float Price[], int Quantity[], int Count, char* Result[], char* ErrorInfo[]); | |
功能 | 单账户批量下单, 通过下标区分每项委托 | |
参数 | ClientId | 客户端 Id |
Category[] | 委托类别数组, 具体含义请参阅[委托类别] | |
EntrustType[] | 报价方式数组, 具体含义请参阅[报价方式] | |
Gddm[] | 股东代码数组 | |
Zqdm[] | 证券代码数组 | |
Price[] | 委托价格数组 | |
Quantity[] | 委托数量数组 | |
Count | 委托项数, 即数组长度 | |
Result[] | 委托结果数组, 每项结果需要分配 1024*1024 字节的空间 格式请参阅[Result 格式] | |
ErrorInfo[] | 错误信息数组, 每项错误信息需要分配 256 字节的空间 | |
返回值 | 无, 第 i 项委托成功与否通过 ErrorInfo[i]是否为空字符串来判断 |
而且,量化交易接口可以做二次开发,所以可操作性更加强,有这方面需求的小伙伴可以进一步了解。