如何建立一个回测系统(四)
搜索任务处理
一个好的量化交易,是对于一个函数的极值的搜索及规则的搜索
但因为函数的复杂性,无法得到函数的性质,有时候可以采用暴力搜索极值点的方式
类似于sum(f(g(x,y),z),t) = alpha其中z是外部响应,z与g(x,y)之间接近线性无关(我们的交易量远达不到影响结果的情景)t是时间序列下标
定义任务
g(x,y)中不同的系数对于f的的影响不同,又因为g(x,y)不是一个显函数,只能通过代入数据计算
我们定义每组(x,y,ts,te)为搜索任务,将数据及计算函数交由每个线程完成,此时不会涉及多线程问题,任务之间线性无关
支撑部件
第一版本我本想通过序列化为字符串形式来作为存储
但因为字符串是变长形式,难以在文件层级进行读写
故而想到如对象存储一般,因为实现难度高,工程量巨大(修改操作占主要),故转而投向SQLite作为持久化操作
最终
我以SQL作为存储端,将任务分发至多台机器形成集群,可以极大的加快搜索进度,且任意机器死亡可以在另一台机器上恢复,无需从头开始