vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 10
声望: 6

参数优化一直都是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台

↓↓↓↓↓

视频演示

下面还有图片演示

description

Member
avatar
加入于:
帖子: 1
声望: 0

远程机器 除了配置ray环境 还需要做什么吗

Member
avatar
加入于:
帖子: 21
声望: 0

阿里云12核24G的服务器32台。。。。豪!

Member
avatar
加入于:
帖子: 10
声望: 6

suphhh wrote:

远程机器 除了配置ray环境 还需要做什么吗

回测数据的共享是个小问题,如果从Master机器传输到Slave机器的话,数据量过大,几个G的流量;如果从Sql中读取的话,数据库启动瞬间就挂了,建议在Slave节点,预先部署好数据,用sqlit就可以了

Member
avatar
加入于:
帖子: 38
声望: 11

@丘 Slave需要安装VNPY吗?

Member
avatar
加入于:
帖子: 1
声望: 0

不错学习了

Member
avatar
加入于:
帖子: 144
声望: 3

这个太牛了。。

不过小白不会用啊,希望详细介绍一下,谢谢。

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3