参数优化一直都是vnpy之中最耗时的部分,普通的家用电脑,优化一些参数,可能需要好几天的时间,虽然有更新遗传算法使得参数优化的过程变得更快,单经常进入局部最优值一直都是困扰,也很难寻找到合适的参数平原。
所以增加CPU就成了比较好的解决方案,我们参考人工智能深度学习等利用多台机器并行运算的方式,对vnpy进行了改造,使得参数回测部分,可以做到分布式的,多台机器并行优化
这边使用的是Ray,非常的简单易用,只需要对参数优化的部分,进行简单改造即可 https://github.com/ray-project/ray
将 optimize 改成 optimize.remote,使用ray.get() 将结果从节点中取回
for setting in settings:
result = optimize.remote(
target_name,
self.strategy_class,
setting,
self.vt_symbol,
self.interval,
self.start,
self.rate,
self.slippage,
self.size,
self.pricetick,
self.capital,
self.end,
self.mode,
self.inverse,
)
results.append(result)
# Sort results and output
result_values = [ray.get(result) for result in results]
result_values.sort(reverse=True, key=lambda result: result[1])
在optimize函数上方增加@ray.remote(max_calls=1),这里的max_calls是为了防止内存溢出,每运行一次函数,都会新建一个进程,回收资源
@ray.remote(max_calls=1)
def optimize(
target_name: str,
strategy_class: CtaTemplate,
setting: dict,
vt_symbol: str,
interval: Interval,
start: datetime,
rate: float,
slippage: float,
size: float,
pricetick: float,
capital: int,
end: datetime,
mode: BacktestingMode,
inverse: bool,
):
......
我们来看看效果
阿里云12核24G的服务器32台
↓↓↓↓↓
视频演示
下面还有图片演示