社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

年化73%的策略可以自行查看参数,duckdb按列读取多个文件夹下的csv数据(python代码)

七年实现财富自由 • 1 月前 • 61 次点击  
原创内容第816篇,专注量化投资、个人成长与财富自由。
网站上(ailabx.com)有同学公开了年化73%策略,大家可以前往查看。

今天咱们来导入duckdb,比csvloader做金融量化效率更高,尤其在是大规模数据的时候,比如,全量股票市场。
我把2024年以前的数据作为一部分存量数据,然后2025年的数据增量更新,这样大家不必每次都下载一个大数据包。
duckdb是可以跨多个文件夹直接按列读取数据的。
from datetime import datetime

import duckdb
import pandas as pd


class Duckdbloader:
    def __init__(selfpathstart_date='20100101',
                 end_date=datetime.now().strftime('%Y%m%d')folder='/*'):
        self.path = path
        self.folder = folder
        self.start_date = start_date
        self.end_date = end_date

    def load_data(selfsymbolscolumns):
        columns.extend(['symbol''date'])
        cols_str = ','.join(columns)

        symbols_str = None
        if symbols and len(symbols):
            symbols = ["'{}'".format(s) for in symbols]
            symbols_str = ",".join(symbols)

        query_str = """
    select {} from '{}{}/*.csv'
    where date >= '{}' and date <= '{}'
    """.format(cols_strself.pathself.folderself.start_dateself.end_date)
        if symbols_str:
            query_str += ' and symbol IN ({})'.format(symbols_str)

        df = duckdb.query(
            query_str
        ).df()
        df['date'] = df['date'].apply(lambda x: str(x))
        df.set_index('date'inplace=True)
        df.index = pd.to_datetime(df.index)
        df.sort_index(inplace=True, ascending=True)
        return df

    def get_col_df(self,dfcol):
        if col  not in df.columns:
            return None
        df_col = df[[col,'symbol']].pivot_table(values=colindex=df.indexcolumns='symbol')
        return df_col


if __name__ == '__main__':
    from config import DATA_ETF_QUOTES

    loader = Duckdbloader(path=DATA_ETF_QUOTES.resolve())
    df = loader.load_data(['510500.SH''159915.SZ']['close''adj_factor'])
    df_col = loader.get_col_df(df,'close')
    print(df_col)
可以跨文件夹按列读取相应的数据:

吾日三省吾身
有一种状态叫:一鼓作气,再而衰,三而竭。
蝴蝶飞不过沧海,是沧海那边早已没有了等待。
希望,是一种力量。
当你一无所有时,仍然一往无前的勇气、执着和锲而不舍。

可有,可无,可去,可留,取舍之间便是人生。
能折磨你的,永远都是你我过于在意的东西,我不在意了,天奈我何,日落归山海,山海藏深意。
没有人不遗憾,只有人不喊疼,后来晚风吹人醒,万事藏于心。
放下执念。
广泛性的焦虑,其实是一种信号,源自潜意识对于现状不满,未被满足的需求的投射
这里的投射比较随机,激活了杏仁核,展开丰富的联想,捕捉一切的可能。
但追逐和解决这些表面问题是意义有限的,因为无穷无尽,水中月,镜中花。
潜意识找寻的,是年轻时的梦想,有舞台的中心,是繁华似锦。
“沧海横流方显英雄本色”!
代码和数据下载:AI量化实验室——2025量化投资的星辰大海

AI量化实验室 星球,已经运行三年多,1500+会员。

aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)
deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)

低风险中等收益(年化15.59%,夏普比1.12)的投资策略,主要投资于小市值股票和基金(python代码+数据)

aitrader_v4.4含本周策略及代码发布,webapp上线。(python代码及数据)

近五年年化23%,最大回撤14.26%,基于历史评分因子和EPO优化权重的ETF轮动策略(python代码+数据)

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战





Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/179756
 
61 次点击