跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

AI量化投资实验室-社区&知识库

A

ailabx

@ailabx
关于
帖子
120
主题
43
分享
0
群组
2
粉丝
5
关注
0

帖子

最新 最佳 有争议的

  • agno的使用教程
    A ailabx

    如何使用工具:

    from agno.agent import Agent
    
    agent = Agent(
        # Add functions or Toolkits
        tools=[...],
        # Show tool calls in the Agent response
        show_tool_calls=True
    )
    

    也可以使用工具集:

    from agno.agent import Agent
    from agno.tools.duckduckgo import DuckDuckGoTools
    
    agent = Agent(tools=[DuckDuckGoTools()], show_tool_calls=True, markdown=True)
    agent.print_response("Whats happening in France?", stream=True)
    

    我们可以很容易自定义自己的工具,就是普通的python函数:

    import json
    import httpx
    
    from agno.agent import Agent
    
    def get_top_hackernews_stories(num_stories: int = 10) -> str:
        """Use this function to get top stories from Hacker News.
    
        Args:
            num_stories (int): Number of stories to return. Defaults to 10.
    
        Returns:
            str: JSON string of top stories.
        """
    
        # Fetch top story IDs
        response = httpx.get('https://hacker-news.firebaseio.com/v0/topstories.json')
        story_ids = response.json()
    
        # Fetch story details
        stories = []
        for story_id in story_ids[:num_stories]:
            story_response = httpx.get(f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json')
            story = story_response.json()
            if "text" in story:
                story.pop("text", None)
            stories.append(story)
        return json.dumps(stories)
    
    agent = Agent(tools=[get_top_hackernews_stories], show_tool_calls=True, markdown=True)
    agent.print_response("Summarize the top 5 stories on hackernews?", stream=True)
    
    智能体开发与应用落地

  • 新手如何用回测策略跑通实盘?
    A ailabx

    先回复关于实盘的问题。
    关于实盘,其实咱们ETF主要是日频,部分甚至是周频的策略。
    从交易的角度,按信号开盘交易即可。
    交易是严肃的事情,交易这个环境手动操作更有感觉。
    因此,并不存在所谓“跑通”实盘。
    我自己就是手动调仓,不是我做不到自动化,而是买卖是自己的事情。
    量化只是帮我生成信号而已。

    需求&建议

  • 第1周:《富爸爸,穷爸爸》普通人理财,财商启蒙书
    A ailabx

    这本书很早了,里面的案例和执行路径可能有些过时了。
    但,理念是正常的。
    很适合普通人建立财商的观念。

    财商,普通家庭很多父母不懂,更不会教。
    很多普通家庭的孩子,从小受的教育理念是,好好学习,考一个好大学,找一份好工作。
    本身没有什么不好。
    但,这条路径不是唯一,更不够优秀。
    至少让自己知道有更多可能性。

    书里最重要的一个理念就是 一个人,有四种商业模式:
    一、打工
    二、自由职业者
    三、企业主
    四、投资、钱生钱。

    作者当然推崇三和四。这也让很多人觉得过于鸡汤,无法落地。
    因为创业大家都知道风险极高,投资需要本金,都是门槛不低。

    现在流行的超级个体,一人企业的理念,其实属于二和三之间。
    投资的复利也与本金体量无关,但确实需要你本金到达一定的体量之后,才能感受得到。
    但你需要先有这样的理念。

    推荐理由:如果大家仍然只有“朝九往五”,职场一份收入。那你要开始想想,如何获得工资外的其他收入来源。

    每周一本书

  • 第2天:pandas从零撸极简的”创业板动量择时“策略
    A ailabx

    做量化首先要解决数据来源的问题。

    数据有两类,一类的价量数据,就是通过我们说的”开盘价“,”收盘价“,‘”最高价’,“最低价”和“成交量”,即“OHLCV”。这些数据是时间序列数据,最常见的是日频数据。

    另外,像股票还有基本面数据,常见的财务三大报表和PE/PB这样的指标。

    偏技术分析类的策略,量价数据就够了。

    从学习量化入门的角度,日频的量价数据就足够了。

    高质量的金融一般都比较贵,好在python生态有开源包akshare,可以提供以上数据。

    金融数据获取与处理

    AKShare是一个基于Python的开源财经数据接口库,它提供了一系列工具,用于实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据的采集、清洗和落地。

    官网地址:https://akshare.akfamily.xyz/

    数据字典地址:https://akshare.akfamily.xyz/data/index.html

    这里有详细的数据接口使用说明。

    另外,它是完全免费的。

    我们以下载股票日线数据为例,讲解akshare的数据获取:

    在“数据字典“下找到”A股>历史行情数据“。
    871692b7-b28a-4e38-8bda-b12148a6d572-image.png

    这里需要注意一下”复权“的概念,股票背后的东西会分红、拆股这样的操作,导致股份会出现跳跃式变化。而在回测过程中,我们需要把这些因素还原回去,就叫”复权“。

    回测中通常使用后复权,因此我们下载后复权数据。

    akshare最大的好处是,它可以指定下载复权数据。

    start_date和end_date均不填的情况下,就是下载全量数据,而且是后复权的(直观来说,后复权的数据,会比真实的股票价值高,因为它把分红的要加回去)。

    下载回来的数据,是中文表头,可以通过rename来修改:

    inpace表示在当前的df上修改,columns=字典类型的数值对即可。

    然后如前文to_csv直接保存到本地备用即可。

    其余的数据下载大同小异,大家直接在官网看相应的文档说明即可。

    金融数据处理

    pandas库介绍

    Pandas 是一个开源的数据分析和操作库。它提供了高性能、易用的数据结构和数据分析工具。

    Pandas 提供了两种主要的数据结构,DataFrame 和 Series。DataFrame 是一个二维标签化数据结构(类似于 Excel 表格),而 Series 是一维数组。

    pandas功能强大,可以说一个可编程操作的excel。

    • 数据操作:支持数据过滤、分组、聚合和转换等操作。

    • 数据清洗:提供工具处理缺失数据、数据过滤和数据替换。

    • 时间序列分析:支持时间序列数据的高级处理,包括时间索引、频率转换等。

    • 数据合并:支持数据连接、合并和 join 操作。

    • 数据重塑:提供数据透视表、交叉表和数据重塑功能。

    • 数据输入输出:支持多种格式的数据输入输出,如 CSV、Excel、JSON。

    Pandas 是 Python 数据科学领域的核心库之一,广泛用于数据挖掘、数据清洗、数据分析和数据可视化。它的设计使得处理大型数据集变得简单高效,是数据科学家和分析师的重要工具。因此,它在量化投资里应用非常广,它的Dataframe是很多量化回测系统的基础数据结构。

    python量化投资里,主要使用pandas来加载、处理数据,计算指标等。

    pandas安装比较简单:

    pip install pandas
    

    量化第一步:从csv里加载数据

    一个CSV文件中读取股票数据,将日期列设置为索引,然后对数据进行排序和日期格式转换,最后返回处理后的数据集。

    import pandas as pd
    %matplotlib inline
    import warnings
    warnings.simplefilter(action='ignore', category=FutureWarning)
    
    def get_data(symbol):
        data = pd.read_csv('data/{}.csv'.format(symbol))
        data['date'] = data['date'].apply(lambda x: str(x))
        data.set_index('date', inplace=True)
        data.sort_index(ascending=True, inplace=True)
        data.index = pd.to_datetime(data.index)
        return data
    
    df = get_data('159915.SZ')
    df
    

    a0794b68-cd1f-4db8-a41c-eed0415f8689-image.png

    从前文保存的文件里,读取数据,将日期列转换为字符串类型,设置为索引,然后对索引进行排序,并将索引转换为datetime对象,最后返回这个处理后的DataFrame。

    data = pd.read_csv('data/{}.csv'.format(symbol))
    

    使用pandas库的read_csv函数来读取一个CSV文件。文件存放在名为data的目录下。读取的数据被存储在变量data中。

    data['date'] = data['date'].apply(lambda x: str(x))
    

    使用apply函数将date列中的每个元素转换为字符串类型。这一步是csv会把日期字段当成数字所有需要先转换成字符串。
    lambda x: str(x)是一个匿名函数,它接受一个参数x并返回x的字符串表示。

    data.set_index('date', inplace=True)
    

    这行代码将data中的date列设置为索引。inplace=True参数表示这个操作会直接在原始的data变量上进行修改,而不是创建一个新的DataFrame。

    data.sort_index(ascending=True, inplace=True)
    

    对data DataFrame按照索引(即日期)进行排序。ascending=True表示按照升序排序,inplace=True同样表示这个操作会直接在原始的data变量上进行修改。

    data.index = pd.to_datetime(data.index)
    

    将索引(日期)转换为pandas的datetime对象,这样可以方便地进行日期相关的操作。pd.to_datetime函数用于转换日期格式。

    以上是量化投资金融数据处理中最常用的操作,从csv加载数据,对数据进行预数据,排序。

    量化第二步:计算指标

    指标是指通过基础价量数据(OHLCV),衍生计算得到指标数据,比如动量,各种技术指标如均线,MACD, KDJ等。

    咱们今天的策略,需要使用的指标是动量,动量的定义就是```
    “过去N天的收益率”
    。

    pandas的series支持pct_change(N)来计算收益率。

    还可以通过如下函数来计算:

    factor = df['close'].pct_change(20)
    factor
    

    25064bfc-ba1b-4810-91cc-cec2c3815bcd-image.png

    这里使用序列的向量化计算,shift是向下移动多少个位置,相当于是N天前的价值,当前的收盘价/20天前的收益价 减去1 ,也就是过去20天的收益率。

    pandas的功能非常强大,时间序列的计算函数非常丰富,这个在策略开发过程中,可以查询相应的文档。

    量化第三步:生成信号

    我们的交易规则是:

    20天动量 大于 0.08时买入
    20天动量 小于0时清仓
    

    我们使用了numpy和pandas库来创建一个新的signal序列。

    import numpy as np
    
    signal = np.where(factor>0.08,1,np.nan)
    signal = np.where(factor<0,0,signal)
    signal = pd.Series(signal,df.index)
    signal = signal.ffill()
    signal = signal.fillna(0)
    signal
    

    下面是每一步的详细解释:

    signal = np.where(factor>0.08,1,np.nan)
    

    使用numpy的where函数来创建一个新的数组。
    where函数的第一个参数是一个条件表达式,这里检查factor数组中的每个元素是否大于0.08。如果条件为真,则在相应的位置放置1,否则放置np.nan(即不是数字的值)。

    signal = np.where(factor<0,0,signal)
    

    再次使用numpy的where函数,这次检查factor数组中的每个元素是否小于0。如果是,则在signal数组的相应位置放置0,否则保持signal数组的当前值(即上一步中设置的值)。

    signal = pd.Series(signal, df.index)
    

    将signal数组转换为pandas的Series对象,并使用df.index作为这个序列的索引。

    signal = signal.ffill()
    

    使用ffill方法对signal序列进行前向填充。这意味着所有的NaN值将被前一个非NaN值替换。如果序列开始处就是NaN,则该NaN保持不变。

    这里为何要调用ffill前向填充,仔细想一下,在于0.08的标记为1,小于0的标记为0, 还有(0-0.08)之间的现在值是Nan,前向填充意味着,与上一个值保持一致,也就是说前面是1,后面就填为1,是0就填成零。在投资里就叫“保持持仓状态不变“。

    signal = signal.fillna(0)
    

    使用fillna方法将signal序列中剩余的NaN值替换为0。

    这一段理解了,后面的策略就非常简单了。

    量化第四步:生成策略

    daily_returns = df['close'].pct_change()
    strategy_returns = signal.shift(1) * daily_returns
    # 计算累积收益
    portfolio_value = (1 + strategy_returns).cumprod()
    portfolio_value
    

    曲线绘制出来,就是10年8倍的效果。
    d966858a-db74-4fd3-a909-e6c6e64dd4d3-image.png

    量化第五步:绩效评估
    410f2879-9edd-4964-a9f5-e41a9d922bf8-image.png

    portfolio_value是策略终值,初始值是1,那么收益率就是 (终值-初始值)/初始值。

    总收益到年化收益的计算,这里涉及一个复利的概念。

    **(252 / len(df)):这里,252通常代表一年中的交易日数量,len(df)是数据集中的总交易日数量。252/交易日=年数的倒数,**是开方运算,这个操作将累积收益率转换为年化收益率。

    小结

    我们使用akshare分别获取创业板指数的历史日频价量数据,并保存到csv中。

    从csv中加载数据,并做适当的预处理。

    通过pandas(numpy),计算出收盘价的20日动量,同时按交易规则计算交易信号。

    依照交易信号,计算出策略的收益率序列。

    通过收益率序列,计算出策略最终的累计收益,然后计算出策略的年化收益。

    中间过程通过pandas的plot函数实现可视化。

    以上,我们完成了使用pandas从数据加载到策略实现过程,完成了创业板动量择时策略,年化17.9%,是一个还不错的策略。

    七天入门量化投资

  • 关于实盘我的观点,看法,欢迎大家讨论
    A ailabx

    @jakenie http://bbs.ailabx.com/topic/30/aitrader对接mini-qmt实盘教程

    实盘代码、qmt、ptrade、聚宽等

  • 第2周:《百万富翁快车道》
    A ailabx

    《财富自由快车道》(The Millionaire Fastlane)的核心观点是通过颠覆传统财富积累的思维模式,帮助普通人跳出「打工+存钱」的慢车道,快速实现财富自由。作者MJ·德马科(MJ DeMarco)通过自身经历和商业逻辑,提出了一套更具爆发力的财富创造方法论。以下是普通人可以借鉴的启发和实战指导:

    核心观点提炼
    三条人生路径:

    人行道:即时消费,没有财务规划,依赖工资生存。

    慢车道:依赖稳定工作、储蓄和长期投资(如股票、基金),但需要数十年时间积累。

    快车道:通过创建可复制的商业系统,快速实现被动收入和指数级增长。

    快车道的核心公式:

    财富 = 净利润 × 杠杆率 × 时间效率
    (通过规模化、自动化和边际成本趋零的商业模式放大收益)

    关键思维转变:

    从「用时间换钱」到「用系统赚钱」;

    从「追求稳定」到「拥抱可控风险」;

    从「延迟满足」到「快速验证、快速失败、快速迭代」。

    对普通人的启发与实战指导

    1. 重新定义财富自由:时间自由>金钱数字
      启发:财富自由的本质是「时间自主权」,而非单纯积累资产。快车道的目标是建立能脱离个人时间投入的盈利系统(如软件、电商、内容平台等)。

    实战:

    评估现有技能或资源,寻找能规模化或自动化的变现方式(例如:开发工具类App、建立订阅制服务、打造知识付费课程)。

    避免陷入「高收入陷阱」(如高薪但996的工作),优先选择有复利效应的事业。

    1. 聚焦「需求驱动」而非「兴趣驱动」
      启发:赚钱的本质是解决他人的痛点。普通人容易陷入「自我视角」,而快车道要求从市场真实需求出发。

    实战:

    用最小成本验证需求:通过社交媒体、问卷、竞品分析找到未被满足的细分市场(例如:特定人群的定制化服务)。

    案例:发现「宝妈群体需要高效育儿工具」→ 开发一款整合育儿日程、食谱推荐的轻量App。

    1. 杠杆思维:用系统放大个人价值
      启发:普通人缺乏资本,但可通过技术、团队、内容等杠杆放大能力。

    实战:

    技术杠杆:利用现有平台(如微信生态、TikTok、Shopify)低成本启动业务。

    团队杠杆:外包非核心环节(如客服、设计),专注核心优势。

    内容杠杆:通过短视频、直播、文章建立个人品牌,低成本获客。

    1. 快速试错:小步验证,拒绝完美主义
      启发:普通人失败的主因是过度准备或害怕犯错。快车道强调「快速失败,低成本失败」。

    实战:

    MVP(最小可行产品)策略:用最低成本推出产品测试市场反应。例如:用Excel表格模拟服务流程,收10个用户反馈后再开发软件。

    失败清单:预设可能的风险(如用户不付费、流量不足),制定应对方案。

    1. 时间效率:从「单次销售」到「睡后收入」
      启发:快车道的核心是让收入与时间脱钩。例如:写一本畅销书(一次创作,持续版税)>接设计私单(时间直接换钱)。

    实战:

    将技能转化为可复制的数字产品(模板、课程、电子书)。

    建立订阅制服务(会员社群、付费专栏)。

    投资能产生现金流的资产(如自动化仓储、版权内容)。

    实战:

    遵循「可控风险」原则:投入资金不超过可承受损失的50%。

    验证商业模式的可持续性:是否有真实用户愿意重复付费?

    普通人可立即行动的建议
    启动副业:每天抽出2小时,从「服务型副业」(如咨询、培训)切入,逐步向产品化转型。

    学习低成本获客技能:掌握SEO、短视频运营、社群裂变等能力,降低流量成本。

    加入快车道社群:与创业者、自由职业者交流,获取行业洞察和合作机会。

    记录时间开销:分析每日时间分配,减少无效消耗(如刷短视频),将时间投入高价值活动。

    总结
    《百万富翁快车道》的本质是思维升级:从「消费者」变为「生产者」,从**「线性增长」转向「指数增长」。普通人无需等待巨额资本,而是通过解决真实需求、构建可复制的系统,在3-5年内实现财富自由。关键在于行动力——从今天开始设计你的「快车道系统」,而非等待「完美时机」。

    每周一本书

  • aitrader如何登录自己的账号,免费下载策略?
    A ailabx

    登录您的ailabx.com的账号,进入个人中心,复制token:
    8aeae7ee-547c-4e6e-b0c7-652fec4cac96-image.png

    在aitrader软件(代码在这里下载:https://gitee.com/ailabx/aitrader )上,点击“系统配置”,后填入刚才的token,点击“登录”测试一下。

    916580b6-b16a-4280-b5df-7aeaf3014944-image.png

    关闭软件重新打开:
    dfe1cc64-3a50-4c63-a68e-5d109dbea4e8-image.png

    就可以下载策略到本地了:
    3b1b3035-002b-4d30-9cf6-c079865317c9-image.png

    点策略目录,可以看到刚才下载的策略文件:
    d6f5edf2-7f61-4aff-bca0-f9908499da25-image.png

    AI量化实验室 玩法

  • 第1天(续):量化投资开发环境搭建
    A ailabx

    python版本,目前咱们是3.11,建议大家保持一致。

    七天入门量化投资

  • aitrader如何登录自己的账号,免费下载策略?
    A ailabx

    @yohom
    一是查看及使用参数,在 ailabx.com/mall 可以按这个参数配置策略。
    二是本地化运行,可以在星球下载 aitrader_core最新代码+数据,然后运行这个toml文件。

    AI量化实验室 玩法
  • 登录

  • 没有帐号? 注册

Powered by NodeBB Contributors
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组