研究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]是否为空字符串来判断

而且,量化交易接口可以做二次开发,所以可操作性更加强,有这方面需求的小伙伴可以进一步了解。