跳到主要内容

11 篇博文 含有标签「量化」

查看所有标签

PV 数据包含了股票的价格和成交量信息,这些都是预测股价最核心、最基本的数据。你可以把它们想象成股票的“体温计”和“心跳监测仪”,反映了市场的最基本动态。


股票价格与成交量数据

  • 价格数据:image-20250825004125333
    • 开盘价(Open): 一天中第一笔交易的价格。
    • 收盘价(Close): 一天中最后一笔交易的价格。
    • 最高价(High): 一天中的最高成交价。
    • 最低价(Low): 一天中的最低成交价。
    • 这些价格点共同构成了我们熟悉的K线图(candlestick chart),直观地展示了股票一天的走势。
  • 成交量(Volume):
    • 成交量表示当天买卖的股票总数量。
    • 高成交量通常意味着市场关注度高、交易活跃。
    • 你可以使用 adv20(20 日平均成交量)这样的数据字段,或者用 ts_mean(volume, N) 来计算任意天数的平均成交量。
  • VWAP(成交量加权平均价):
    • 概念: VWAP 是一种更精确地衡量股票日均价的方法。它考虑到每一笔成交量,而不是简单地计算价格平均值。
    • 作用: 有时,收盘价可能只代表最后几笔交易的价格,如果这些交易量很小,就不能反映当天的真实价格水平。而 VWAP 将交易量大的价格赋予更高的权重,因此能更好地代表一天的平均价格。image-20250825004134208

两种核心 Alpha 思想

大多数使用 PV 数据的 Alpha 策略都基于以下两种核心思想:

  1. 动量(Momentum):
    • 核心理念: 强者恒强,弱者恒弱。
    • 理论: 认为过去表现好的股票(比如涨了几个月)未来会继续表现良好,而表现差的股票会继续下跌。
    • 时间周期: 动量效应通常在较长的时间周期(几个月或更久)内比较明显。
  2. 反转(Reversion):
    • 核心理念: 物极必反,回归平均。
    • 理论: 认为如果一只股票在短期内涨得太快,它可能会回调;如果跌得太深,它可能会反弹。
    • 时间周期: 反转效应通常在较短的时间周期(几天或几周)内比较明显。
    • 我们之前创建的 rank(-returns) 就是一个简单的反转 Alpha,因为它假设回报率会反转。

用 VWAP 尝试一个反转 Alpha

现在,让我们把所学的知识结合起来,尝试一个更有趣的反转策略。

  • 策略思想: 比较收盘价(close)*和*VWAP
    • 如果收盘价远高于 VWAP,说明股票在收盘前有大量买入,价格被拉高了。根据反转理论,这只股票明天可能会下跌。
    • 如果收盘价远低于 VWAP,说明股票在收盘前有大量卖出,价格被压低了。根据反转理论,这只股票明天可能会反弹。
  • 实现方式:
    • 我们可以使用 vwap/close 这个表达式。
    • vwap/close 的值大于 1 时,说明 VWAP 高于收盘价,模型会做多(看涨),期望价格反弹。
    • vwap/close 的值小于 1 时,说明 VWAP 低于收盘价,模型会做空(看跌),期望价格下跌。
  • 模拟结果与优化:
    • 当你模拟这个策略时,可能会发现**夏普比率(Sharpe)很高,但换手率(Turnover)**也很高,超出了可提交的标准(通常要求低于 70%)。
    • 这是因为这个策略每天都会可能产生大量的买卖信号。
    • 如何解决? 你可以利用我们之前学过的**衰减(Decay)**设置,或者使用 trade_when 等操作符,来减少交易频率,从而降低换手率。这是一个在实际操作中常见的优化挑战。
交易量化PV成交量VWAP动量反转阅读需 4 分钟

  • 什么是Alpha?

    Alpha (阿尔法) 是一个衡量投资策略表现的重要指标。简单来说,它衡量的是你的投资策略跑赢或跑输大盘(比如股票市场指数)的程度。

    想像一下,你和你的朋友都投资了股票。你的朋友买的是一个大盘指数基金,而你则根据自己的研究买了一篮子股票。一年后,如果大盘指数上涨了10%,而你的股票组合上涨了15%,那么你比大盘多赚了5%。这多出来的5%就是你的 阿尔法

    一个正的阿尔法(Alpha > 0)表示你的策略表现优于市场。

    一个负的阿尔法(Alpha < 0)则表示你的策略表现逊于市场。

    所以,阿尔法可以帮助投资者评估一个基金经理或一个投资策略的真正价值。如果一个策略能持续产生正阿尔法,那就说明它具有独特的优势,而不是仅仅依赖于市场整体的涨跌。

    深入了解Alpha的性能指标

    在你模拟一个投资策略时,会看到一系列的结果,这些结果可以帮助你全面评估这个策略的好坏。下面是一些重要的指标,我会用最通俗的方式为你解释。

    -returns?

    在您提供的例子中,-returns 是一个非常重要的概念,它由两部分组成:

    1. returns (回报率数据): 这个数据字段记录了每只股票在每一天的回报率(即价格变化百分比)。例如,如果一只股票的 returns 是 0.745%,意味着它的价格上涨了 0.745%。
    2. - (负号运算符): 这个负号是一个操作符,它会把 returns 数据的值反转过来。
      • 如果一只股票昨天的回报率很高(比如 +0.745%),那么 -returns 的值就会变成一个很大的负数。
      • 如果一只股票昨天的回报率很低(比如 -0.613%),那么 -returns 的值就会变成一个很大的正数。

    所以,当你的 Alpha 模型使用 -returns 时,它的策略是与股票过去的回报率反向操作。换句话说,模型会预测那些昨天涨得多的股票今天会跌,而昨天跌得多的股票今天会涨。

    这种策略有一个专门的名称,叫做价格反转 (Price Reversion)。这种现象在金融市场中很常见,指的是资产价格在短期内通常会回归到平均水平。通过使用 -returns,你的 Alpha 模型就是利用这种价格反转的特性来盈利。

    PnL(盈亏)图

    image-20250824230035244

    PnL图表显示了你的投资策略在整个模拟周期内的累计收益和亏损情况。

    • 作用: 这是一个最直观的图表,让你一眼就能看出你的策略是赚钱还是亏钱,以及收益是如何随时间波动的。
    • 小贴士: 📈如果你看到PnL曲线持续向上,恭喜你,你的策略很可能赚钱;如果曲线起伏不定,甚至一路向下,那说明你的策略有问题。

    夏普比率 (Sharpe)

    夏普比率衡量的是你的策略在承担风险后获得的超额回报。它回答了一个核心问题:为了获得这些收益,你冒了多大的风险?

    • 计算: 它用你的超额回报(超出无风险利率的部分)除以你的回报波动性(标准差)。公式是: $$ 夏普比率=(年化回报率−无风险利率)/年化回报率的标准差 $$

    • 作用: 夏普比率越高越好。一个高夏普比率意味着你在获得高回报的同时,承担的风险相对较小。两个策略可能都赚了10%,但如果一个策略的净值波动很大,另一个很平稳,那么后者拥有更高的夏普比率,被认为是更好的策略。


    换手率 (Turnover)

    换手率衡量的是你的策略在日常交易中买卖资产的频率。

    • 计算: 它等于每天交易的金额除以你所持有的总资产价值。
    • 作用: 换手率越高,意味着你越频繁地买卖股票。这通常会带来更高的交易成本(佣金、滑点等)。一个过高的换手率可能会“吃掉”你的大部分利润。
    • 小贴士: 🎯在优化策略时,你需要权衡:高换手率可能会带来更高的回报,但也会增加交易成本。

    健壮性 (Fitness)

    健壮性是一个综合指标,它结合了收益、换手率和夏普比率,来给你的策略打一个综合分数。

    • 计算: $$ 健壮性 = 夏普比率∗ ∣回报率∣

      ​ /Max(换手率,0.125) $$

    • 作用: 高健壮性代表一个好的Alpha策略。当你对策略进行调整时,如果健壮性分数提高了,就说明你的改动是有效的。这个指标帮助你找到收益高、夏普比率高但换手率又不过高的“三好”策略。


    回报率 (Returns)

    回报率表示你的策略总共赚了多少钱。

    • 作用: 这是最直接的指标,告诉你你的策略有多赚钱。
    • 小贴士: 💡由于模拟中假设的是“多头-空头”组合(即同时做多和做空),你的总投资额是账户规模的一半。

    最大回撤 (Drawdown)

    最大回撤是指你的账户净值从最高点下跌到最低点的最大跌幅。

    • 作用: 即使是一个赚钱的策略,也可能会经历短期的大幅亏损。最大回撤衡量了策略在最坏情况下的亏损程度。一个过大的回撤可能会让投资者难以忍受, even though it is not defined.
交易量化Alpha绩效反转夏普比率阅读需 5 分钟

什么是中性化?🎯

中性化 (Neutralization) 是一种非常重要的技术,它能帮助你去除或最小化 Alpha 策略中不想要的因素的影响。

  • 目的: 通过中性化,你可以让你的 Alpha 信号变得“更纯粹”,从而只关注你想要捕捉的特定市场异象。
  • 效果: 通常,中性化会牺牲一些总回报,但会显著提高夏普比率,因为你移除了不必要的风险。

在 BRAIN 平台上,你可以通过 group_neutralize 操作符来实现中性化。


分组中性化 🤝

分组中性化的作用是在特定的分组内进行标准化处理。最常见的例子就是在行业内部进行中性化。

  • 原理: 平台将所有股票按照所属行业进行分组。然后,在每个行业内部,它会分别进行中性化操作。
  • 好处: 这样,你的策略就不会受到某个行业整体涨跌的影响。例如,如果石油行业整体大涨,你的策略会在这个行业内做多表现相对较弱的股票,同时做空表现最强的股票。

除了在设置中直接选择行业中性化外,你还可以使用 group_neutralize 操作符来实现更灵活的分组中性化。


分组数据字段 🗂️

group_neutralize(x, group) 操作符的第二个输入参数 group,就是用来定义分组的数据字段。这些数据字段会根据特定的标准对每只股票进行分类。

你可以使用平台预设的各种分组数据字段,比如:

  • sector (板块)
  • industry (行业)
  • subindustry (子行业)
  • exchange (交易所)

你可以在股票价格/成交量数据关系数据中找到很多有用的分组数据字段。


自定义分组:bucket() 操作符 🛒

如果平台现有的分组不符合你的需求,你可以用 bucket() 操作符来创建自己的分组。

bucket(X, range="{start},{end},{step}")
  • 用法: 它可以将一个连续的数值变量(比如 rank(cap))分成多个离散的组。
  • 例子: bucket(rank(cap), range="0,1,0.1")
    • 这个表达式会根据市值排名将所有股票分成 10 个组。
    • 第一组:排名在 0 到 0.1 之间的股票(市值最小的 10%)
    • 第二组:排名在 0.1 到 0.2 之间的股票
    • ……
    • 第十组:排名在 0.9 到 1.0 之间的股票(市值最大的 10%)

处理稀疏数据:densify() 操作符 🛠️

在使用分组数据字段时,如果分组的值分布非常稀疏,可能会导致计算效率低下,甚至模拟失败。在这种情况下,你可以使用 densify(x) 操作符来解决这个问题。

densify(x) 的作用是压缩这些稀疏的值,使其更紧密地分布,从而提高计算效率。你可以在操作符探索器 (Operator Explorer) 中找到更详细的说明。

交易量化中性化行业分组阅读需 3 分钟

什么是情绪数据?❤️

情绪数据顾名思义,就是用来量化大众对某只股票或整个市场的情绪。这些数据是通过分析各种网络平台(比如新闻、社交媒体、博客、论坛等)上的信息得来的。

通过自然语言处理 (NLP) 技术,平台可以分析这些文字内容是积极还是消极,从而为我们提供一个量化的情绪指标。这种大众情绪可以作为未来股价走势的一个领先指标

BRAIN 平台为你提供了**情绪(sentiment)社交媒体(social media)**等数据字段,它们都量化了人们在网络空间中对公司的看法。

基于成交量的情绪因子 🔊

将情绪数据与成交量数据结合起来,可以产生非常有效的信号。

  • 核心思想: 如果一只股票在网络上被过度提及(情绪热度很高),但它的成交量却没有相应增加,这可能预示着一些不寻常的事情。
  • 假设: 过度的关注(无论是正面的还是负面的)都可能是一个信号,预示着这只股票可能被高估或低估了。

ts_regression() 操作符 🧮

为了更好地分析情绪和成交量之间的关系,我们可以使用 ts_regression() 操作符。这个操作符可以帮助我们找出两个变量在一段时间内的关系。

  • 用途: 它可以帮你找到一个最佳的线性函数,来描述两个变量(比如成交量和情绪)之间的关系。
  • 输入: ts_regression(y, x, lookback_days, rettype=0)
    • y:因变量(你想要被解释的变量,比如情绪)。
    • x:自变量(用来解释 y 的变量,比如成交量)。
    • lookback_days:你想要回溯的天数。
    • rettype:返回值的类型(默认是 0,代表误差项)。

ts_regression() 最有用的地方在于它的误差项。误差项表示 y 的实际值和根据回归模型预测值之间的差距。如果误差项很大,说明情绪和成交量之间的关系出现了异常。

举例: 你可以用 ts_regression() 来预测每天的情绪,而自变量是每天的成交量。如果今天的实际情绪值远高于你的预测值(误差项为正),说明这只股票在网络上获得了异常高的关注。这可能就是一个有价值的交易信号。

通过这种方式,你可以用这个操作符来捕捉那些“异常”的情绪信号,并将其转化为你的 Alpha 策略。

什么是新闻数据?📰

新闻数据是 BRAIN 平台提供的一种特殊数据类型,它包含了各种影响市场的最新金融新闻。这些新闻可以来自不同的来源,比如:

  • 公司公告: 财报、投资、分红等。
  • 分析师报告: 评级、意见等。
  • 法律事件: 调查、破产等。

通过将这些新闻与股票价格结合,我们可以获得更全面的市场洞察。

美股交易时间 ⏰

你需要了解美股的三个交易时段,因为新闻通常在主交易时段之外发布:

  • 盘前(Pre session): 凌晨 4:00 - 早上 9:30
  • 主时段(Main session): 早上 9:30 - 下午 4:00
  • 盘后(Post session): 下午 4:00 - 晚上 8:00

向量数据字段 🔠

新闻数据是一种特殊的向量数据字段。与我们之前看到的矩阵数据(每天每只股票只有一个值)不同,向量数据可以每天为每只股票存储多个值。例如,如果一只股票在一天内发布了多条新闻,向量数据可以全部记录下来。

在使用这些数据时,你需要先用 vec_~ 系列操作符将向量数据聚合为单一的矩阵值,才能进行后续的运算。image-20250826155409248


Alpha 策略:结合动量与反转 💡

我们可以利用一个名为 nws12_afterhsz_sl 的数据字段来创建 Alpha。这个字段会告诉你,在每条新闻发布后,是做多还是做空更有利。

我们的 Alpha 思想是:动量-反转混合策略

  • 条件: 如果一只股票有更多“做多有利”的新闻事件,就采取动量策略(做多)。
  • 否则: 如果这类新闻较少,就采取反转策略(做空)。

这个策略的核心在于,它根据新闻情绪来决定是跟随趋势还是逆势而行。


如何实现?👨‍🏫

  1. 聚合新闻信号:
    • 由于 nws12_afterhsz_sl 是向量数据,你需要先用 vec_avg() 操作符将它聚合起来。vec_avg(nws12_afterhsz_sl) 会计算出当天所有新闻事件的平均情绪值,从而得到一个单一的矩阵值。
  2. 平滑信号:
    • 每天的新闻数据可能存在很多噪音,所以我们应该用时间序列操作符来平滑它。
    • ts_sumts_mean 都是不错的选择,它们可以计算过去一段时间内的新闻情绪总和或平均值,从而得到一个更清晰、更稳定的信号。
  3. 设置条件:
    • 使用 rank() 操作符对平滑后的数据进行排名,并设置一个阈值。
    • 例如,rank(X) > 0.5 这个条件可以将一半的股票归为“积极”,另一半归为“消极”。
  4. 构建最终的 Alpha:
    • 满足条件: 如果条件为真(即新闻情绪积极),你的 Alpha 应该采取动量策略。你可以直接使用一个常量 1 来表示做多。
    • 不满足条件: 如果条件为假,你的 Alpha 应该采取反转策略。这通常意味着做空。
    • 重要提示: 确保你的动量信号和反转信号的规模是平衡的,这样才能让你的策略按照预期工作。
交易量化期权波动率隐含波动率阅读需 5 分钟

什么是期权?🎯

期权是一种特殊的合约,属于金融衍生品。它给予持有者在未来某个时间,以一个特定价格买入或卖出某项资产的权利,但不是义务

因为是权利,所以你可以选择行使,也可以选择放弃。为了拥有这个权利,你需要支付一笔费用,这笔费用就叫做期权费(Option Premium)。可以把它简单理解为期权的价格。

期权可以很好地反映市场参与者的心理预期,因此在开发 Alpha 策略时非常有用。


两种基本期权类型 📑

期权主要分为两种:看涨期权看跌期权

看涨期权(Call Option)

看涨期权是买入一项资产的权利。

  • 例子: 假设 A 公司的股票现在是 60 美元。你预测一周后股价会涨,于是你支付一笔期权费,买入一个执行价为 60 美元的看涨期权,一周后到期。
  • 结果: 一周后,如果股价涨到了 70 美元,你可以以 60 美元的价格买入,然后立即以 70 美元卖出,赚取 10 美元的差价。在这种情况下,你的期权本身的价格也会大幅上涨,你可以直接卖出期权来获利。
  • 结论: 购买看涨期权,就是看好资产价格上涨。

看跌期权(Put Option)

看跌期权是卖出一项资产的权利。

  • 例子: 假设 B 公司的股票现在是 50 美元。你预测一周后股价会跌,于是你支付期权费,买入一个执行价为 50 美元的看跌期权,一周后到期。
  • 结果: 一周后,如果股价跌到了 40 美元,你可以以 40 美元从市场上买入股票,然后根据你的期权合同,以 50 美元的价格卖出给期权合约的发行方,赚取 10 美元的差价。
  • 结论: 购买看跌期权,就是看空资产价格下跌。

重要术语 🔍

  • 执行价(Strike Price): 期权合约中约定的未来买入或卖出资产的价格。
  • 到期日(Expiration): 期权权利可以行使的最后一天。
  • 期权费(Premium): 购买期权合约需要支付的价格。
  • 波动率(Volatility): 衡量股票价格变动剧烈程度的指标。

期权中的波动率 📏

波动率是影响期权价格的关键因素。股票价格的波动性越高,期权的价值就越高。这是因为高波动性意味着股票价格大幅波动的可能性更大,从而使期权盈利的机会增加。

波动率分为两种:

  • 历史波动率(Historical Volatility):
    • 这是一个滞后指标。它通过计算过去实际股价的波动来得出。
    • 可以简单理解为:过去股价的波动有多大。
  • 隐含波动率(Implied Volatility):
    • 这是一个领先指标。它是根据当前市场上的期权价格,利用像布莱克-斯科尔斯这样的模型推算出来的。
    • 可以简单理解为:市场参与者预期未来股价的波动有多大。

比较这两种波动率可以帮助我们判断,是期权市场还是股票市场被高估或低估了。

期权市场的特点 🎯

期权交易之所以复杂,是因为它不仅关乎价格涨跌方向,还涉及波动率时间价值。正因如此,期权市场的参与者通常被认为是拥有更多信息、更专业的交易者。

当这些专业的交易者对看涨期权(Call Option)和看跌期权(Put Option)的需求出现差异时,这种差异就可以帮助我们预测未来的股价走势。


看跌-看涨期权隐含波动率差异分析 🎭

我们之前学过,**隐含波动率(Implied Volatility)**是期权价格的反映。期权价格高,隐含波动率就高,这说明市场对这种期权的需求旺盛。反之亦然。

因此,通过比较看跌期权和看涨期权的隐含波动率差异,我们就能了解期权交易者整体的市场情绪:

  • 看涨期权的隐含波动率 > 看跌期权的隐含波动率:这表明看涨期权的需求更旺盛,期权交易者普遍预期股价会上涨。
  • 看跌期权的隐含波动率 > 看涨期权的隐含波动率:这表明看跌期权的需求更旺盛,期权交易者普遍预期股价会下跌。

如何比较看跌-看涨期权隐含波动率 🤔

由于看涨期权和看跌期权的隐含波动率在计算上使用的是相同的尺度,所以最直观的比较方法就是相减(-)

  • 相减(-): 看涨期权的隐含波动率 - 看跌期权的隐含波动率
    • 如果结果为正数,表示看涨情绪更强。
    • 如果结果为负数,表示看跌情绪更强。

当然,你也可以尝试其他方法,比如相除(/)或者更复杂的比率,但这取决于你的具体 Alpha 策略。在大多数情况下,直接相减就能给你提供一个清晰的方向性信号。

交易量化期权波动率隐含波动率阅读需 5 分钟

什么是股票池?💫

在 BRAIN 平台上,股票池 (Universe) 是一个预先筛选好的股票集合,你的 Alpha 模型将只在这些股票中进行选择和交易。平台根据股票的**成交量(transaction volume)**来对它们进行排名和分组。

你可以选择不同的股票池,比如 TOP3000TOP1000TOP500,甚至 TOP200


股票池的结构 🌌

股票池的数字越小,代表它包含的股票数量越少,但这些股票的流动性(liquidity)和市值(market capitalization)都越高

  • 流动性高: 意味着这些股票的交易非常活跃,很容易买卖。
  • 市值大: 这些通常是市场上的大型蓝筹公司。

因此,平台上的“小股票池”(如 TOP200)实际上是由那些最活跃、规模最大的公司组成的。

小池子,大挑战: 由于这些大公司的信息流通非常快,价格会迅速反映所有可用的信息。因此,在这些“小池子”里,想找到有效的 Alpha 信号会更难。


子股票池测试 🌠

之前我们提到过子股票池测试 (Subuniverse Test),这就是一个用来评估你的 Alpha 策略是否真正稳健的关键测试。

  • 测试目的: 它会检查你的 Alpha 在一个更小、流动性更高的股票池里是否依然有效。
  • 为什么重要? 如果一个 Alpha 在流动性低、小盘股较多的股票池里表现很好,但在大盘股组成的“小池子”里却失效了,这通常意味着这个策略依赖于一些在实践中难以实现的交易机会(比如在流动性差的股票上进行大额交易)。

所以,如果你的 Alpha 通过了子股票池测试,就说明它具有很强的稳健性,能够在那些最难产生信号的市场中依然有效。如果你发现你的 Alpha 在这个测试中失败了,你可以尝试将你的仓位更多地集中在那些高流动性、大市值的股票上,以提高表现。

交易量化股票池流动性子股票池阅读需 2 分钟

首先,你需要了解什么是仓位。仓位决定了你要买入或卖出多少股票。

  • 多头仓位 (Long Position): 这意味着你买入股票,并期望它的价格会上涨。
  • 空头仓位 (Short Position): 这意味着你卖出股票,并期望它的价格会下跌。这是一种做空的策略,即使在熊市中也有可能盈利。

在模拟过程中,系统会为每一只股票计算一个仓位,来决定是买入还是卖出。image-20250824233723831


表达式计算

这是模拟的第一步,系统会运行你输入的公式。

  • rank() 函数: rank() 的作用是给一堆数值排序,并把它们均匀地分配在 0 到 1 之间。

    举个例子,假设有 5 只股票,它们的 -returns 值各不相同。rank() 函数会给它们排名,然后把排名结果转换为 0、0.25、0.5、0.75、1 这五个值。

    • -returns 值最大的股票,rank() 结果是 1。
    • -returns 值最小的股票,rank() 结果是 0。
    • 中间的股票则根据大小得到相应的分数。

    在您的例子中,公式 rank(-returns) 就是将每只股票的“昨天回报率的反向值”进行排名。这意味着,昨天跌得最惨的股票,会得到最高的 rank() 值(最接近 1);而昨天涨得最多的股票,会得到最低的 rank() 值(最接近 0)。


市场中性化 (Market Neutralization)

这是非常关键的一步,它让你的投资策略更加稳健。

  • 为什么要中性化? 股票的价格通常会受到整个大盘走势的影响。如果你只买入(做多)股票,那么当市场整体下跌时,你的所有股票可能都会跟着跌,这会带来很大的风险。

  • 什么是中性化? 中性化的目的就是消除大盘对你策略的影响。平台通过构建一个“多头-空头”组合来实现中性化,也就是一半仓位做多,另一半仓位做空。

    这样一来,无论市场整体是涨是跌,你的策略都能保持稳定。如果市场大涨,你的多头仓位会盈利,但空头仓位可能会亏损,二者可以对冲;如果市场大跌,你的空头仓位会盈利,从而弥补多头仓位的损失。image-20250824233751878

  • 在平台上,你的投资策略如何被执行和优化的?


    市场中性化:多头-空头组合的威力 ⚖️

    image-20250824234856816

    你可能会发现,无论你的策略是预测股价上涨(多头)还是下跌(空头),如果只持有单一方向的仓位,你的投资组合都很难摆脱整个大盘的影响。

    • 只做多(Long-only)的问题: 假设你预测10只股票都会上涨,并买入了它们。如果当天大盘突然暴跌,即使你的预测是正确的,这10只股票很可能还是会跟着市场一起下跌,导致你亏钱。这种风险叫做市场风险

    为了解决这个问题,平台引入了市场中性化的概念。核心思想是:同时做多和做空,让多头仓位的总价值等于空头仓位的总价值

    为什么这么做? 这么做的好处是,你的投资组合不再受大盘整体涨跌的影响,而只取决于你选股的准确性。

    • 如果大盘上涨,你的多头仓位会赚更多钱,但空头仓位会亏一些钱,两者对冲后,你的净收益仍然是正的。
    • 如果大盘下跌,你的空头仓位会赚钱,弥补了多头仓位的损失,你的净收益可能仍然是正的。

    这就像是你在玩一个只与你个人技巧相关的游戏,而不是受限于整个市场的波动。

    仓位分配的三个步骤:

    平台每天都会通过三个主要步骤来为你的投资策略分配仓位:

    1. 居中归零(Centered around 0): 首先,系统会计算出你所有股票的 Alpha 值(比如 -returns 排名后得到的 0 到 1 的值),然后减去它们的平均值。这样做的目的是让所有股票的 Alpha 值围绕 0 居中,正值代表做多,负值代表做空。
    2. 标准化权重(Normalized weights): 接下来,系统会将这些居中后的值进行处理,确保所有值的绝对值加起来等于 1。这样就得到了每只股票的“权重”,方便后续计算。
    3. 分配资金(Assign capital): 最后,系统会根据这些权重来分配你的总投资资金(比如 2000 万美元),决定每只股票具体要买入或卖出多少。image-20250824235029384

    通过这三个步骤,你的 Alpha 模型每天都会得到一个多空平衡的仓位列表,从而实现市场中性化。


    衰减(Decay):控制仓位变化的速度 🍂

    有时,你的 Alpha 策略可能每天都会产生非常大的仓位变化。比如,rank(-returns) 策略可能需要每天都大幅调整多头和空头仓位,以适应最新的价格反转。

    为什么这会是个问题? 过于频繁和剧烈的仓位变动会带来两个问题:

    • 交易成本: 频繁买卖会产生高昂的交易佣金和滑点(实际成交价与预期价格的偏差),侵蚀你的利润。
    • 稳定性: 过于激进的策略可能在短期内表现良好,但缺乏稳定性,容易在特定市场环境下遭遇重大亏损。

    为了解决这个问题,我们可以引入衰减(Decay)image-20250824234937526

    • 什么是衰减? 衰减是一种平滑仓位变化的方法,它将你过去几天的仓位也考虑进来,而不是只看今天的数据。
    • 如何工作? 举例来说,如果你设置了 3 天的衰减,那么今天的最终仓位不是完全由今天的 Alpha 值决定,而是由今天、昨天和大前天的 Alpha 值加权平均而来。今天的数据权重最高,昨天次之,大前天最低。

    衰减公式:

    Decay_linear(x,n) = (x[今天]*n + x[昨天]*(n-1) + ... + x[n天前]*1) / (n + (n-1) + ... + 1)

    优点与缺点:

    • 优点: 衰减能让你的投资组合更加稳定,减少不必要的交易成本,并平滑掉一些短期噪声。
    • 缺点: 衰减会削弱你信号的实时性。因为今天的仓位中包含了过去几天的数据,所以对今天最新信号的反应会变得迟钝。

    通常,衰减的参数会设置在 10 以下,以在信号强度和仓位稳定性之间取得平衡。

交易量化仓位市场中性权重阅读需 6 分钟

在创建 Alpha 时,你可以通过添加条件来精细控制你的交易行为。这就像给你的策略设置一些“如果……就……”的规则,让它变得更聪明。你可以使用常见的逻辑操作符(><>=<=== 等)来创建这些条件。

  • 例子: 如果你想只在股票成交量比平时高时才进行交易,你可以设置条件为 volume > adv20

💡 注意: 过于严格的条件可能会减少你的交易机会,同时增加“过拟合”的风险,也就是你的策略只在历史数据上表现的特别好,但在未来却失效。


if_else():简单的条件判断 🔀

if_else() 是一个非常基础但强大的操作符,它能根据条件返回不同的值。

  • 基本用法: if_else(条件, 如果条件为真,返回这个值, 如果条件为假,返回这个值)
  • 简化写法: 就像我们之前在动量策略中看到的,你也可以使用更简洁的 条件 ? 值1 : 值2 格式,效果是一样的。

trade_when():决定何时交易 🎯

trade_when() 是一个更高级的操作符,它能让你精确控制 Alpha 模型的“入场”和“出场”时机,只在满足特定条件时才更新仓位。

trade_when() 需要三个输入:

  1. 入场条件(entry_condition):
    • 当这个条件为真时,系统会根据你的 Alpha 表达式来计算并更新你的仓位。
    • 例子: 你可以设定 volume > adv20 作为入场条件,意思是只有当成交量异常高时,才开始使用你的 Alpha 模型进行交易。
  2. Alpha 表达式(Alpha):
    • 当入场条件满足时,系统会执行你的 Alpha 公式来决定具体买卖什么。
    • 例子: 在动量策略中,这个表达式可以是 ts_sum(returns > 0 ? 1 : 0, 250)
  3. 出场条件(exit_condition):
    • 当这个条件为真时,系统会平掉你之前建立的仓位(即清仓)。
    • 例子: 如果你不想清仓,可以将出场条件设置为 -1
  • 工作流程:
    • 入场时: 如果入场条件为真,每天都更新你的仓位。
    • 出场时: 如果出场条件为真,平掉仓位。
    • 两者都为假时: 保持你上一次入场时的仓位不变,直到下次入场或出场条件满足。

trade_when() 在动量策略中的应用 💡

我们可以用 trade_when() 来优化之前提到的动量 Alpha。

  • 策略思想: 动量效应往往在成交量突然放大时更有效。所以,我们可以只在成交量异常高时才建立动量仓位,并在之后保持仓位不变。
  • 设置:
    1. 入场条件:
      • 你可以用 volume > adv20volume > ts_mean(volume, N) 来判断成交量是否异常高。你还可以使用更高级的判断,比如 volume * vwap > ts_mean(volume * vwap, N),它将成交量和价格结合起来。
    2. Alpha 表达式:
      • 使用我们之前学的动量公式,比如 positive_days(过去一年上涨天数)。
    3. 出场条件:
      • 由于动量是长期效应,你可以把出场条件设为 -1,这意味着一旦建立仓位,就一直持有。当然,你也可以根据自己的想法设置一个有效的出场条件。
  • 中性化设置:
    • 动量效应通常是跨行业的(比如所有科技股一起涨),而不是在行业内部(比如一个行业里有些股票涨有些股票跌)。因此,在设置中性化选项时,最好选择“市场中性化”(Market Neutralization)或“行业中性化”(Sector Neutralization),而不是更细的分组。
交易量化条件trade_whenif_else策略优化阅读需 4 分钟


什么是公司基本面数据?🔍

基本面数据就像是公司的体检报告,它反映了一家公司真实的商业、财务和运营状况。这些数据主要来源于公司的财报,是评估公司内在价值和未来潜力的关键。


数据来源:三大报表 📑

公司的基本面数据主要来自以下三份核心财务报表:

  • 资产负债表 (Balance Sheet): 就像公司在某一特定日期的“快照”。它告诉你公司拥有什么(资产)、欠别人什么(负债),以及股东拥有什么(所有者权益)。
  • 损益表 (Income Statement): 展示了公司在一段时间内(比如一个季度)的盈利能力。它会告诉你公司赚了多少钱(收入),花了多少钱(费用),最终赚了多少利润。
  • 现金流量表 (Cash Flow Statement): 记录了公司在一段时间内现金的流入和流出。它能帮你了解公司的资金流动性,看它是否有足够的现金来运营、投资和偿还债务。

基本面数据的特点 ⏰

与我们之前学过的价格/成交量(PV)数据不同,基本面数据有以下几个特点:

  • 更新频率低: 它不像股价那样每天都在变,而是按季度、半年或年度更新一次。
  • 更新不连续: 由于是定期发布,数据更新的时间点是不连续的。

这些特点意味着,基本面数据更适合用于长期的投资策略,而不是短期的价格预测。


基本面数据的重要性 💡

基本面数据之所以重要,是因为它能:

  • 揭示真相: 帮助你了解一家公司真实的经营状况,而不仅仅是看股价的涨跌。
  • 评估价值: 它是预测公司未来增长潜力的基础,也是进行公司估值的核心要素。

PV 数据与基本面数据的结合 📋

单独使用 PV 数据或基本面数据都能创建 Alpha,但将它们结合起来,你就能得到更强大、更有意义的策略。这就像同时使用一个公司的“体温计”(股价)和它的“体检报告”(财报),从而获得更全面的信息。

一个经典的例子就是将市值(cap)(PV 数据)与营业收入(operating income)(基本面数据)结合起来。


两种数据的特性 🔍

数据类型基本面数据 (Operating income)PV 数据 (Market capitalization)
更新频率按季度或年度更新每天更新
反映内容公司实际的盈利能力和经营效率市场对公司未来价值的估值
计算方式从财务报表中提取股价 × 总股本

Alpha 思想:用现在对比未来 💡

  • 市值代表了市场对公司未来价值的预期。即使两家公司目前的盈利能力一样,市场也会因为对它们未来增长潜力的不同预期而给出不同的市值。
  • 营业收入则反映了公司当下的实际盈利能力。

因此,将市值与营业收入进行比较,可以帮助我们评估:市场对公司的预期,是否与其当下的实际表现相符? 这种比较可以帮助我们找到被市场高估或低估的公司。


比较数据的两种方法 ⚖️

有两种主要的方式来比较这两个数据点:相减和相除。

  • 相减(y - x):
    • 这种方法适用于数据规模相近的情况。比如,你可以用它来比较分析师的预测值与公司实际公布的盈利值之间的差异。
    • 缺点: 如果数据规模差异很大(比如市值通常比营业收入大很多),相减的结果会受公司规模影响,大公司的差值会远大于小公司,这可能导致不准确的信号。
  • 相除(y / x):
    • 这是将不同规模数据进行比较的最佳方法。它能得到一个比率,从而消除公司规模带来的影响。
    • 优点: 无论公司大小,这个比率都具有可比性。例如,用市值除以营业收入得到的比率,可以告诉我们市场愿意为每一美元的盈利支付多少钱。

企业价值(EV)和 EBITDA 的结合

将基本面数据与 PV 数据结合,可以创建更有意义的 Alpha。我们可以用 企业价值(EV)EBITDA 这两个指标来评估公司的估值,从而找到投资机会。

数据特性 🔍

首先,让我们了解这两个指标各自的特点。

数据类型基本面数据 (EBITDA)PV 数据 (企业价值 EV)
全称税息折旧及摊销前利润Enterprise Value
更新频率按季度或年度更新随股价每天更新
反映内容衡量公司运营的盈利能力公司总价值(包含债务)
作用剔除利息、税收等非经营性因素,便于不同公司比较比市值更全面地衡量公司价值

Alpha 思路:用盈利能力评估总价值 💡

  • 企业价值 (EV) 代表了市场对一家公司的总估值,这不仅包括了股票市值,还考虑了公司的债务。它是一个更全面的价值指标。
  • EBITDA 则代表了公司核心业务的赚钱能力。它剔除了很多非经营性因素,因此能更好地反映公司的运营效率。

通过比较这两者,我们可以评估:公司的总价值,相对于它的核心盈利能力来说,是高估还是低估了?

比较方法:EV/EBITDA 比率 ⚖️

最常见的比较方法是计算 EV/EBITDA 比率。这个比率也被称为“企业倍数”。

  • 为何用除法?➗
    • 标准化: 除法可以将不同规模的公司放在一起比较,比如一个大公司和一个小公司。
    • 金融分析标准: EV/EBITDA 是金融分析中广泛使用的估值指标,它代表了公司需要多少年才能通过核心利润来偿还其总价值。
  • 比率解读 💭
    • 较低的 EV/EBITDA 比率: 可能意味着公司被低估了。市场认为它的价值较低,但它的盈利能力却很高。
    • 较高的 EV/EBITDA 比率: 可能意味着公司被高估了,或者市场对它未来的增长有很高的预期。

操作符的类型:时间序列 vs. 横截面

你可以把这两种操作符想象成两种不同的分析视角。当我们看一个数据时,可以用两种方式来评价它:是和自己过去比,还是和别人现在比。

1. 时间序列操作符 ⏰

时间序列操作符就像是和自己过去比。它关注的是一个数据在一段时间内自身的变化。

想象一个学生考试得了 80 分。如果他平时都只考 70 分,那这次考 80 分就是很大的进步。时间序列操作符就是做这种分析。它会看一只股票在过去一段时间里的表现,比如它的平均价格、波动性、或者与其他时间的对比。

常用的时间序列操作符有:

  • ts_mean(x, d): 计算过去 d 天中 x 值的平均值。
  • ts_delta(x, d): 计算 d 天前 x 值与今天 x 值之间的差异。
  • ts_rank(x, d): 对过去 d 天中 x 的值进行排名,然后转换成 0 到 1 的分数。

2. 横截面操作符 🌐

横截面操作符就像是和别人现在比。它关注的是一个数据在同一时间点上与其他所有数据的比较。

如果这个学生班里的平均分是 90 分,那么他这次考 80 分就不算太好。横截面操作符就是做这种分析。它会看所有股票在今天这个时间点的表现,然后进行排序或标准化。

常用的横截面操作符有:

  • rank(x): 对所有股票今天的 x 值进行排名,然后转换成 0 到 1 的分数。我们之前用的 rank(-returns) 就是一个典型的例子。

  • zscore(x): 告诉你一只股票今天的 x 值,相对于所有股票今天的平均值,偏离了多少个标准差。

  • winsorize(x): 把所有股票 x 值中特别高或特别低的极端值都限制在一个范围内,避免它们对整体分析产生过大的影响。


    通过可视化理解

下图说明了这一概念。对于基于2020年1月10日公司1的计算,红色标记区域表示用于时间序列计算的数据,而绿色标记区域表示用于横截面计算的数据。

image-20250825172106489


如何选择合适的工具 🎯

选择哪种操作符,取决于你的分析目的:

  • 当你需要和自己比时,用时间序列操作符。 比如,你想知道一只股票今天的价格,是否高于它过去 10 天的平均价格。
  • 当你需要和别人比时,用横截面操作符。 比如,你想知道一只股票今天的涨幅,在所有股票中排名第几。

通常来说,时间序列操作符在很多情况下表现更好,因为股票价格的变化更多地是基于公司自身过去与现在的比较。然而,这并非绝对,最好的方法还是通过多次模拟来探索哪种方法更适合你的数据和策略。

交易量化基本面财报长期策略阅读需 9 分钟

当然,让我们继续用最通俗易懂的方式来了解这些设置选项。


平台设置详解

这些设置选项就像是你为你策略量身定做的“规则”,它们决定了你的 Alpha 模型在什么条件下运行。

1. 语言/资产类型(Language / Instrument Type)

这个很简单。你只需要知道,你使用的语言叫 Fast Expression,这是一种专门用来写量化公式的简化语言。你目前只能用它来模拟股票(Equity)

地区(Region)

这个设置决定了你的模型要分析哪个国家或地区的股票。

  • 目前: 你只能选择美国(United States)
  • 未来: 当你成为更高阶的用户(顾问)后,你就能解锁更多地区,比如中国、日本、欧洲等,甚至可以同时模拟全球的股票。

股票池(Universe)

股票池是你进行模拟的“候选股票库”。它通常基于股票的**流动性(liquidity)**来筛选。

  • 流动性可以简单理解为股票的交易活跃度。流动性越高,股票就越容易买卖,对我们来说越好。
  • 你可以选择不同的股票池,比如 TOP 3000,这意味着你的模型将只在市场上交易最活跃的 3000 只股票中进行选择。选择不同的股票池会影响你的模型最终能抓住哪些机会。

延迟(Delay)

这个设置决定了你的数据有多“新鲜”。

  • 为什么会有延迟? 举个例子,你无法在当天市场收盘前就知道收盘价。所以,通常我们会用 Delay1,也就是用前一天的数据来预测今天。这是最普遍、最安全的做法。
  • Delay0:如果你想更“快”,可以用 Delay0,它使用当天市场收盘前的数据进行预测。但这更难,因为数据可能不完整,而且提交要求更严格。你可以简单理解为 Delay0 的信号更“快”,但需要你更谨慎地使用。

中性化(Neutralization)

我们之前说过,通过多头-空头组合可以对冲掉大盘风险。但还有一种风险叫行业风险

  • 行业风险:想象一下,油价大涨,所有石油公司的股票都涨了,而所有航空公司的股票都跌了。你的模型可能因此集中做多石油股,集中做空航空股。这导致你的策略过度依赖这两个行业的表现。
  • 行业中性化: 解决办法是只在同一个行业内部进行中性化。比如,在石油行业内部,你做多涨得少的,做空涨得多的。在航空行业内部也一样。这样,你的策略就能排除掉行业整体涨跌的影响,只专注于行业内部的相对表现。

衰减(Decay)

这个我们之前详细讲过,它决定了你的模型对历史数据的**“记忆”程度**。

  • 高衰减值意味着你的策略变化会更平缓,交易更少,但可能会错过最新的信号。
  • 低衰减值意味着你的策略变化会更激进,更及时地响应最新信号,但可能不够稳定。这是一个需要在稳定性和反应速度之间权衡的设置。

截断(Truncation)

这个设置是为了防止你的资金过于集中在某一只股票上

  • 为什么需要截断? 有时你的 Alpha 模型可能会认为某只股票是“最好的”,然后把所有资金都压在这只股票上。这风险太高了。
  • 作用: 截断可以限制单只股票的最大仓位比例。比如,设置截断为 1%,那么无论你的模型多看好某只股票,你最多只能将 1% 的资金投资于它。这有助于分散风险,提高投资组合的稳健性。

其他高级选项

  • 巴氏杀菌法(Pasteurization):一个复杂的概念,你可以简单理解为,它决定了在计算时,是否把那些不在你选定股票池里的股票也考虑进来。
  • 单位处理(Unit Handling):它会帮你检查数据单位是否匹配,并给出警告,但不会影响模拟结果。
  • 缺失值处理(NaN Handling):当某些数据缺失时(NaN代表“不是一个数字”),这个选项决定是把它们当成 0 来处理,还是忽略它们。

测试周期(Test Period)

这是一个非常有用的功能,用于评估你的模型是否真的稳健

  • 如何使用? 你可以隐藏一部分模拟结果(比如最后一年)。在你看不到这部分结果的情况下优化你的模型。当你认为模型已经足够好时,再点击“显示测试周期”来看它在这段隐藏时间内的表现。
  • 作用: 如果你的模型在隐藏期间的表现依然很好,那就说明它不是“过拟合”了历史数据,而是一个真正稳健、能预测未来的好模型。

如何在平台中找到数据 📁

在 BRAIN 平台上,你需要的数据都已经被整理好了,并且有了特定的名字,这样你就可以像使用一个变量一样在你的公式中调用它们。你可以把整个数据系统想象成一个图书馆,它被分为三个层次:

  1. 数据集类别(Dataset Categories): 就像图书馆的大分类,比如“历史类”、“科学类”或“金融类”。
  2. 数据集(Datasets): 就像大分类下的具体书架。例如,“金融类”下面可能有“公司财报”书架和“股票价格”书架。
  3. 数据字段(Data fields): 就像书架上的一本本书,每一本都包含具体的数据。比如在“股票价格”书架上,你可能会找到一本叫做《收盘价》的书,里面就是每只股票每天的收盘价数据。

数据的三层结构

  • 数据集类别(Dataset Categories): 这是最高层级的分类,将所有数据分为 17 个主要类别。比如,你可以在“基本面数据”(Fundamental)这个类别下找到公司的财报信息,或者在“价格/成交量数据”(PV)这个类别下找到股票的价格和成交量信息。
  • 数据集(Datasets): 它们是按主题分组的数据集合。通常,它们的命名方式是在类别名后面加上数字,比如 PV1fundamental6
    • PV1:这个数据集包含了所有与股票价格和成交量相关的数据,比如开盘价、最高价、最低价、收盘价,以及 20 日平均成交量等。
    • fundamental6:这个数据集则包含了公司财务报表中的各种详细数据,比如资产、资本和负债等。
  • 数据字段(Data fields): 这是你真正要用的数据。它们以矩阵的形式存在,你可以直接用它们的名字在你的公式中调用。我们之前用过的 returns 就是一个数据字段,它包含了所有股票的回报率信息。

如何找到你想要的数据 🔍

平台提供了一个专门的 “数据区”(Data Section) 来帮助你查找数据字段。

  • 搜索功能: 你可以直接输入数据集或数据字段的名称进行搜索。
  • 按类别浏览: 你也可以像逛图书馆一样,先从大的分类(数据集类别)开始,一步步找到你想要的数据。

重要提示:

在搜索之前,一定要先检查屏幕右上角的设置,确认你选择了正确的地区(Region)延迟(Delay)*和*股票池(Universe)。因为不同的设置下,可用的数据字段可能会有所不同。

好的,我们继续用最通俗易懂的方式来理解这些“操作符”。


如何使用操作符 🛠️

你可以把**操作符(Operators)**想象成工具箱里的各种工具。有了数据(原材料),你需要用这些工具来处理和转换它们,最终才能创建出你的 Alpha 模型。

这些操作符可以对数据进行各种运算,从简单的加减乘除到复杂的统计分析,无所不包。

算术操作符(Arithmetic Operators)

这些是最基础的工具,就像计算器一样。它们能让你对数据进行基本的数学运算,比如加、减、乘、除、取整等等。

逻辑操作符(Logical Operators)

这些工具用来做“判断”。它们会评估一个表达式是否成立,然后返回“真”(true)或“假”(false)。

  • 在 BRAIN 中,“真”用 1 表示,“假”用 0 表示。
  • 例如,你可以用它来判断“今天的收盘价是否高于昨天的收盘价”。如果是,结果就是 1;如果不是,结果就是 0。

时间序列操作符(Time Series Operators)

这些工具专门用来处理时间序列数据,也就是与“过去”相关的数据。

  • 核心功能: 它们让你能够回顾一只股票在过去一段时间内的表现。
  • 举例: ts_mean(x, d) 就是一个时间序列操作符。它的作用是计算数据 x 在过去 d 天里的平均值。比如,你可以用它来计算一只股票过去 20 天的平均收盘价。

横截面操作符(Cross Sectional Operators)

这些工具用来进行横向比较。它们会在同一个时间点上,比较所有股票的数据。

  • 核心功能: 它们帮助你找出在某个时间点上,哪些股票相对表现更好或更差。
  • 举例: 我们之前用过的 rank(x) 就是一个典型的横截面操作符。它会给所有股票的 x 值进行排名,并把结果转换为 0 到 1 的分数。

向量操作符(Vector Operators)

有些数据字段不是单个数值,而是包含多个值的“向量”。

  • 核心功能: 这些操作符的作用是把一个包含多个值的向量,转换成一个能代表这个向量的单个值。
  • 举例: 比如,一个数据字段可能包含了某只股票在一天内的所有交易价格。你可以用向量操作符,比如 mean()(求平均值)或 median()(求中位数),来得到一个代表当天价格的单一值。

转换操作符(Transformational Operators)

这些操作符可以对数据进行特殊的转换

  • 核心功能: 它们能以特定的方式改变矩阵中的数值。

分组操作符(Group Operators)

有时候,数据字段会根据某些标准将公司进行分组,比如按照行业分类。

  • 核心功能: 这些操作符允许你在这些分组内部进行操作。
  • 举例: 你可以计算一个特定行业所有股票的平均值,或者在同一个行业内部进行中性化,从而消除行业整体涨跌的影响。
交易量化平台设置延迟中性化股票池阅读需 10 分钟

技术分析是一种预测股票未来价格走势的方法。1它基于一个核心假设:市场参与者的行为和心理模式会不断重复。技术分析师通过研究历史的价格和成交量数据,来寻找可以帮助他们预测未来的模式,就像气象学家通过观察过去的天气数据来预测未来的天气一样。2

一些常见且有代表性的技术指标包括:

  • RSI (相对强弱指数): 衡量价格上涨或下跌的力度。3

    布林带 (Bollinger Bands): 在移动平均线上下设置两条带状线,用于判断价格的波动范围。4

    MACD (移动平均线收敛/发散指标): 通过比较短期和长期移动平均线来判断价格趋势的变化。5

    使用 CLV 构建 Alpha 模型

CLV(收盘位置值) 是一个非常简单但有用的技术指标。它告诉你当天的收盘价在全天的价格范围内处于什么位置。这个指标能帮助你洞察在收盘前,市场情绪是看涨还是看跌。

CLV 的计算方法 🎯

CLV 的值介于 -1 到 1 之间。

公式: CLV=((收盘价−最低价)−(最高价−收盘价))/(最高价−最低价)

  • CLV 接近 1 时,意味着收盘价非常接近当天的最高价。这通常表示当天多头力量(买方)非常强劲,在收盘时仍然占据主导地位。
  • CLV 接近 -1 时,意味着收盘价非常接近当天的最低价。这通常表示当天空头力量(卖方)非常强劲,在收盘时仍然在打压价格。

CLV 的 Alpha 策略💡

因为 CLV 衡量的是一天的价格变化,它非常适合用来构建反转(Reversion) 策略,也就是我们之前讲过的“物极必反”思想。

一个常见的 CLV 反转策略是:

  • CLV 很低(接近 -1)时 → 意味着当天大跌,预测第二天会反弹,所以做多(买入)
  • CLV 很高(接近 1)时 → 意味着当天大涨,预测第二天会回调,所以做空(卖出)

结合 CLV 和成交量 🔍

单独使用 CLV 已经是一个不错的策略,但如果将它与**成交量(volume)**结合起来,信号会变得更有意义。例如,你可以假设一个高 CLV(接近 1)且成交量巨大的股票,其上涨趋势更为可信,而一个高 CLV 但成交量很小的股票则可能是一个虚假的信号。通过结合使用这两个指标,你可以更好地过滤掉噪声,找到更可靠的交易信号。

什么是动量效应?🔍

动量效应是金融市场中一个常见的现象:涨的股票倾向于继续涨,跌的股票倾向于继续跌。这就像一个正在奔跑的物体,它会因为惯性而继续向前冲。许多学术研究都证实了这个效应的存在。

动量效应的特点 ⏰

动量效应的强度会随着时间周期的不同而变化:

  • 短期(小于 1 个月): 在这个时间段内,反转效应更强。这意味着,涨得太快的股票可能会回调,跌得太狠的股票可能会反弹。
  • 中期(1 季度到 1 年): 在这个时间段内,传统的动量效应最为明显。这是最适合捕捉动量趋势的时间窗。
  • 长期(超过 12 个月): 动量效应会逐渐减弱。

如何在 BRAIN 中实现动量效应?👨‍💻

最简单的动量策略是计算股票在过去一段时间内的涨幅。例如,如果你想计算过去一年的涨幅,可以这样来做:

  • 公式: ts_delta(close, 250) / ts_delay(close, 250)
    • ts_delta(close, 250):计算 250 个交易日(大约一年)前到现在收盘价的变化量。
    • ts_delay(close, 250):获取 250 个交易日前的收盘价。
    • 整个公式计算的是过去一年的回报率。

然而,这个简单的公式可能不会产生好的 Alpha 结果。 为什么呢?因为过去一年的回报率包含了最近一个月内的短期回报率,而在这个短期内,反转效应可能比动量效应更强。这会导致你的模型信号变得混乱。

优化动量策略的方法 💫

为了更清晰地捕捉中期动量效应,你可以使用以下两种方法来优化你的 Alpha 模型:

  1. 应用延迟(Apply Delay):
    • 思想: 既然短期内反转效应很强,我们就把最近一个月的信号排除在外。
    • 实现: 你可以在计算完一年的回报率后,再施加一个延迟操作符。例如,ts_delay(ts_delta(close, 250) / ts_delay(close, 250), 10) 这个公式会计算过去一年(250 天)的回报率,但会忽略最近 10 天的数据。这能有效排除短期反转效应的干扰,让你更专注于中期动量。
  2. 统计上涨天数(Count Up-Days):
    • 思想: 动量不仅体现在最终的涨幅上,也体现在上涨天数的多少上。一只股票在一年内上涨的天数越多,说明其动量越强。
    • 实现: 你可以使用 ts_sum(returns > 0 ? 1 : 0, 250) 这个公式。
      • returns > 0:这是一个逻辑判断,如果当天的回报率大于 0(即股价上涨),结果为真。
      • ? 1 : 0:这是一个条件操作符。如果 returns > 0 为真,则返回 1;否则返回 0。
      • ts_sum(..., 250):对过去 250 个交易日的结果求和。
交易量化技术分析指标CLV动量反转阅读需 5 分钟