VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 2
声望: 0

最近使用VeighNa做多品种大周期的强化学习机器人程序,发现如下问题:

1 如果使用sqllite本地库,很容易出现K线数据的混乱,特别是数据乱序下载插入的情况下,表现为哪怕单机读取K线图也会出现不明跳变,严重影响训练效果,因此换用了postgresql,这个问题解决

2 VeighNa3.1版本中的postgresql读写部分,有部分代码没有用批量方式,因此写入大量K线数据很缓慢,如下地方修改就好了

要在peewee导入这里,加入chunked

from peewee import (
    AutoField,
    chunked,
    CharField,
    DateTimeField,
    FloatField, IntegerField,
    Model,
    PostgresqlDatabase as PeeweePostgresqlDatabase,
    ModelSelect,
    ModelDelete,
    fn
)

save_bar_data函数中的单条插入,改为批量,遇到索引冲突重复写入的时候,不能用类似在mysql的那种 on_conflict_replace 的简单方式,需要写明update字典,并使用chunked批量方式

with self.db.atomic():
    for c in chunked(data, 50):
        DbBarData.insert_many(c).on_conflict(
            update={DbBarData.volume: DbBarData.volume,
                    DbBarData.turnover: DbBarData.turnover,
                    DbBarData.open_interest: DbBarData.open_interest,
                    DbBarData.open_price: DbBarData.open_price,
                    DbBarData.high_price: DbBarData.high_price,
                    DbBarData.low_price: DbBarData.low_price,
                    DbBarData.close_price: DbBarData.close_price
                    },
            conflict_target=(
                DbBarData.symbol,
                DbBarData.exchange,
                DbBarData.interval,
                DbBarData.datetime,
            ),
        ).execute()

这样修改后,在多机上批量数据读写训练,不担心重复下载插入,postgresql本身也非常快。

谢谢VeighNa作者提供了非常方便于DIY的框架。

Member
avatar
加入于:
帖子: 737
声望: 39

感谢分享!方便的话请直发个PR让官方合并下吧:https://github.com/vnpy/vnpy_postgresql

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

MTF wrote:

感谢分享!方便的话请直发个PR让官方合并下吧:https://github.com/vnpy/vnpy_postgresql
已经PR,谢谢

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】