学习alpha,第2个alpha
alphas
(-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank(((close - open) / open)), 6))
先分析操作符从左到右
ts_corr:
Pearson 相关度量两个变量之间的线性关系。当变量呈正态分布且关系呈线性时,它最有效。
`ts_corr(vwap, close, 20)`是一个计算时间序列相关性的函数,下面用金融知识和数据表格来解释它。 - **函数参数含义** - `vwap`:即成交量加权平均价格(Volume - Weighted Average Price),是一种常见的技术分析指标。它通过将每一笔交易的价格乘以该笔交易的成交量,然后将所有交易的结果相加,再除以总成交量得到。VWAP 可以反映出在一定时间段内市场交易的平均价格水平,常用于衡量机构投资者的交易成本和评估市场的整体交易价格趋势。 - `close`:指的是收盘价,是每个交易日结束时证券的成交价格。收盘价在技术分析中具有重要地位,它代表了当日交易结束时市场对该证券的定价,常被用于分析价格趋势、绘制图表以及计算各种技术指标。 - `20`:表示时间窗口的大小为20个交易日。这意味着函数将计算过去20个交易日内 `vwap` 和 `close` 之间的相关性。 - **计算与结果分析** - 假设我们有以下表格数据,展示了某股票连续20个交易日的 `vwap` 和 `close` 价格: | 交易日 | VWAP | 收盘价(Close) || ---- | ---- | ---- || 1 | 50.2 | 50.5 | | 2 | 50.5 | 50.8 | | 3 | 50.8 | 51.0 | |... |... |... | | 20 | 55.0 | 55.5 | -计算 `ts_corr(vwap, close, 20)` 就是要分析这20个交易日里 `vwap` 和 `close` 这两组数据之间的线性相关程度。相关性的取值范围在 -1 到 1 之间。 - 如果结果接近1,说明 `vwap` 和 `close` 在这20个交易日内呈现出很强的正相关关系,即当 `vwap` 上升时,收盘价也倾向于上升,两者的变动趋势较为一致。这可能表明市场交易价格的整体趋势较为稳定,成交量加权平均价格与收盘价之间存在紧密的联系,市场参与者在这段时间内的交易行为相对一致,推动价格同步变动。 - 如果结果接近 -1,则表示 `vwap` 和 `close` 呈现很强的负相关关系,这种情况在实际金融市场中相对较少见,但可能出现在一些特殊时期或特定市场环境下,例如市场出现大幅波动、多空力量激烈对抗导致成交量加权平均价格与收盘价出现相反的变动趋势。 - 如果结果接近0,说明 `vwap` 和 `close` 之间不存在明显的线性相关关系,它们的变动趋势较为独立,可能受到不同因素的影响。这可能暗示市场在这段时间内较为复杂,各种因素相互交织,导致成交量加权平均价格与收盘价之间的关系不明显。 通过 `ts_corr(vwap, close, 20)` 函数的计算,投资者可以了解到在过去20个交易日内 `vwap` 和 `close` 之间的相关性,从而辅助判断市场趋势、评估交易成本与价格走势之间的关系,进而制定更为合理的投资策略。
rank:
排名(close);Rank (close, rate=0) # 精确排序
X = (4,3,6,10,2) => Rank(x) = (0.5, 0.25, 0.75, 1, 0)
X = (4,3,6,10,2) => 排名 (x) = (0.5, 0.25, 0.75, 1, 0)这里返回的是0到1之间的排序
交易日 VWAP 收盘价(Close) 1 50.2 50.5 2 50.5 50.8 3 50.8 51.0 ... ... ... 20 55.0 55.5
我们可以理解这里的rank是对这样可以在同一时间截面上,比较不同股票的成交量对数二阶差分和股价涨跌幅的相对大小,从而找出在当天这些指标表现突出或异常的股票。通过这种方式,投资者可以快速筛选出与其他股票相比,在成交量和股价变动方面存在差异的股票,进而深入分析这些差异背后的原因,评估其投资价值和潜在交易机会。
当然,具体的排名范围也可以根据实际需求进行调整,比如可以对某一周、某一个月内的所有股票按特定日期进行排名,或者对特定板块内的股票进行排名等,这取决于投资者的分析目的和策略。
ts_delta(x, d) ts_delta(x, d):
返回 x - ts_delay(x, d)
那么ts_delay是什么呢?
Returns x value d days ago,就是d天前的x个值
`ts_delay(x, d)` 是金融量化分析里常用的函数,下面结合金融知识与数据表格为你详细解释。 ### 函数参数含义 - `x`:代表一个时间序列数据,在金融领域,它可以是股票价格、成交量、收益率等随时间变化的数据。比如,`x` 可以是某只股票每天的收盘价,每天记录一个数值,形成一个按时间顺序排列的数据序列。 - `d`:表示延迟的周期数。`d` 为正整数,它的作用是把时间序列 `x` 向后移动 `d` 个周期。 ### 具体计算过程和结果分析 假设我们有一只股票连续10个交易日的收盘价数据,
交易日 收盘价(x) 1 100 2 102 3 105 4 103 5 106 6 108 7 110 8 109 9 112 10 115 现在我们分别计算
ts_delay(x, 1)
和ts_delay(x, 2)
的结果:
ts_delay(x, 1)
当
d = 1
时,就是把时间序列x
向后移动 1 个周期。第一个交易日没有前一个交易日的数据,所以用NaN
(非数字)表示,之后每个交易日的延迟值就是前一个交易日的收盘价。
交易日 收盘价(x) ts_delay(x, 1)
1 100 NaN 2 102 100 3 105 102 4 103 105 5 106 103 6 108 106 7 110 108 8 109 110 9 112 109 10 115 112 现在我们分别计算 `ts_delay(x, 1)` 和 `ts_delay(x, 2)` 的结果: #### `ts_delay(x, 1)` 当 `d = 1` 时,就是把时间序列 `x` 向后移动1个周期。第一个交易日没有前一个交易日的数据,所以用 `NaN`(非数字)表示,之后每个交易日的延迟值就是前一个交易日的收盘价。 | 交易日 | 收盘价(_delay(x, 2)` 当 `d = 2` 时,是把时间序列 `x` 向后移动2个周期。前两个交易日没有前两个交易日的数据,用 `NaN` 表示,之后每个交易日的延迟值就是前两个交易日的收盘价。 | 交易日 | 收盘价(
交易日 收盘价(x) ts_delay(x, 2)
1 100 NaN 2 102 NaN 3 105 100 4 103 102 5 106 105 6 108 103 7 110 106 8 109 108 9 112 110 10 115 109 在金融分析中的应用
## 在金融分析中的应用 - **技术分析**:在技术分析里,`ts_delay` 函数能用来计算价格的滞后值,进而分析价格的趋势变化和动量。例如,通过比较当前价格和前一个周期的价格(`ts_delay(x, 1)`),可以判断价格是上涨还是下跌。 - **策略开发**:在开发交易策略时,`ts_delay` 函数可用于创建滞后指标,如比较当前的技术指标值和前几个周期的指标值,以此生成交易信号。例如,当当前的移动平均线值大于前一个周期的移动平均线值时,可能产生买入信号。
x-ts_delay(x,d)
`x - ts_delay(x, d)` 表示将原始时间序列 `x` 与经过 `d` 期延迟后的时间序列相减,得到的结果是一个新的时间序列,反映了原始序列在 `d` 个时间周期内的变化情况。以下结合之前的收盘价数据示例来解释: 假设我们仍使用之前某股票连续10个交易日的收盘价数据作为时间序列 `x`
交易日 收盘价(x) ts_delay(x, 1)
x - ts_delay(x, 1)
1 100 NaN NaN 2 102 100 2 3 105 102 3 4 103 105 -2 5 106 103 3 6 108 106 2 7 110 108 2 8 109 110 -1 9 112 109 3 10 115 112 3 当计算
x - ts_delay(x, 2)
时,结果如下:
交易日 收盘价(x) ts_delay(x, 2)
x - ts_delay(x, 2)
1 100 NaN NaN 2 102 NaN NaN 3 105 100 5 4 103 102 1 5 106 105 1 6 108 103 5 7 110 106 4 8 109 108 1 9 112 110 2 10 115 109 6 在金融分析中,
x - ts_delay(x, d)
有以下作用:
- 计算价格变化量:如果
x
是股票价格序列,那么x - ts_delay(x, d)
可以表示在d
个交易日内股票价格的变化量。通过观察这个变化量的大小和正负,可以了解股票价格的短期波动情况,进而分析市场的短期趋势和交易机会。例如,如果x - ts_delay(x, 1)
持续为正,说明股票价格近期处于上涨趋势;反之,如果持续为负,则说明处于下跌趋势。- 构建技术指标:该计算方式可以作为构建一些技术指标的基础。例如,相对强弱指标(RSI)的计算就涉及到价格的上涨和下跌幅度,
x - ts_delay(x, d)
可以用来衡量价格在一定周期内的涨跌情况,从而帮助判断市场的超买超卖状态。- 分析市场动量:较大的
x - ts_delay(x, d)
值(正值或负值)可能表示市场具有较强的动量,即价格趋势较为强劲。而较小的值则可能意味着市场处于相对平稳或盘整状态。通过对不同股票或市场指数的x - ts_delay(x, d)
进行分析和比较,可以评估不同资产的动量特征,为投资组合的配置提供参考。你返回的表格我无法复制到其他页面以便我作笔记,你有更好的办法吗
很抱歉给你带来不便。为了方便你做笔记,我可以将表格以文本形式呈现,用竖线(|)分隔列,用换行区分行,这样你复制起来会更方便。
例如之前
x - ts_delay(x, 1)
的结果,以文本形式如下:
交易日 收盘价(x) ts_delay(x, 1)
x - ts_delay(x, 1)
1 100 NaN NaN 2 102 100 2 3 105 102 3 4 103 105 -2 5 106 103 3 6 108 106 2 7 110 108 2 8 109 110 -1 9 112 109 3 10 115 112 3
x - ts_delay(x, 2)
的结果文本形式如下:
交易日 收盘价(x) ts_delay(x, 2)
x - ts_delay(x, 2)
1 100 NaN NaN 2 102 NaN NaN 3 105 100 5 4 103 102 1 5 106 105 1 6 108 103 5 7 110 106 4 8 109 108 1 9 112 110 2 10 115 109 6 希望这种形式对你做笔记更有帮助,如果你还有其他需求,请随时告诉我。
编辑
分享
以文本形式返回`x - ts_delay(x, 3)`的结果
如何使用这些函数进行金融数据分析?
还有哪些类似的金融量化分析函数?
在金融分析中,`x - ts_delay(x, d)` 有以下作用: - **计算价格变化量**:如果 `x` 是股票价格序列,那么 `x - ts_delay(x, d)` 可以表示在 `d` 个交易日内股票价格的变化量。通过观察这个变化量的大小和正负,可以了解股票价格的短期波动情况,进而分析市场的短期趋势和交易机会。例如,如果 `x - ts_delay(x, 1)` 持续为正,说明股票价格近期处于上涨趋势;反之,如果持续为负,则说明处于下跌趋势。 - **构建技术指标**:该计算方式可以作为构建一些技术指标的基础。例如,相对强弱指标(RSI)的计算就涉及到价格的上涨和下跌幅度,`x - ts_delay(x, d)` 可以用来衡量价格在一定周期内的涨跌情况,从而帮助判断市场的超买超卖状态。 - **分析市场动量**:较大的 `x - ts_delay(x, d)` 值(正值或负值)可能表示市场具有较强的动量,即价格趋势较为强劲。而较小的值则可能意味着市场处于相对平稳或盘整状态。通过对不同股票或市场指数的 `x - ts_delay(x, d)` 进行分析和比较,可以评估不同资产的动量特征,为投资组合的配置提供参考。
log:
你写的
log(volume), 2)
这种表述不太明确标准,从常见的数学和金融分析角度,可能有两种理解情况:
- 以 2 为底的对数: 如果这里是想计算成交量(
volume
)以 2 为底的对数,在数学符号上应该写成 \(\log_2(\text{volume})\)。在金融中,成交量(volume
)表示在一定时间内交易的股票或其他金融资产的数量。对成交量取以 2 为底的对数可能有多种用途。比如,在分析成交量的变化规模时,对数变换可以将较大范围的成交量数值进行压缩,使得数据更便于处理和比较。例如,假设某股票在不同交易日的成交量分别为 1000、8000、64000。计算以 2 为底的对数: \(\log_2(1000)\approx9.97\)(因为 \(2^{9.97}\approx1000\)); \(\log_2(8000)=\log_2(2^{13}) = 13\)(因为 \(8000 = 2^{13}\)); \(\log_2(64000)=\log_2(2^{16}) = 16\) (因为 \(64000=2^{16}\))。 通过这种对数变换,可以更清晰地看到成交量增长的相对幅度,原本从 1000 到 8000 再到 64000 的绝对数量变化,在对数尺度下表现为从约 \(9.97\) 到 13 再到 16 的相对变化。
数据:
volume:
Field description 字段描述
Category: Price Volume / Price Volume
类别 : 价格量 / 价格量Type: Matrix 类型: 矩阵
Daily volume 每日交易量
Region 地区Delay 延迟
close:
收盘价
open:
开盘价
`(close - open) / open`
是一个用于计算金融数据中价格变化百分比的表达式,通常用于衡量某一交易时段内资产价格的相对变动情况。具体含义如下: - `open` 代表资产(如股票、期货等)在一个特定交易时段开始时的价格,即开盘价。 - `close` 表示该资产在同一交易时段结束时的价格,即收盘价。 - `(close - open)` 计算的是收盘价与开盘价之间的差值,反映了价格在该交易时段内的绝对变动量。 - 用这个差值除以 `open`,即 `(close - open) / open`,得到的结果是价格的相对变动百分比,它可以帮助投资者了解资产价格在一个交易时段内的涨跌幅度。例如,如果计算结果为0.05,即表示价格在该时段内上涨了5%;如果结果为 -0.03,则表示价格下跌了3%。
从里到外
我们比较的是rank(((close - open) / open))和rank(ts_delta(log(volume), 2)),这两个在6天上的相关性。
我们对价格变化率进行了一个排名。另外一个是对交易量进行一个缩放。然后用ts_detal判断是否持续为正,交易量在上涨。反之下降。然后进行排名。
然后我们用ts_corr看它们两者之间的相关性,如果为0,表示是独立,如果是1.则是强相关
交易日 | 开盘价 (open) | 收盘价 (close) | 成交量 (volume) | log(volume) | ts_delta(log(volume), 2) | (close - open) / open | rank(ts_delta(log(volume), 2)) | rank((close - open) / open) | ts_corr(rank(ts_delta(log(volume), 2)), rank((close - open) / open), 6) | -1 * ts_corr(rank(ts_delta(log(volume), 2)), rank((close - open) / open), 6) | 交易信号(示例阈值:±0.5) |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 100 | 102 | 1000 | 6.907755 | 无(前两个数据无法计算二阶差分) | 0.02 | 无(需至少 3 个数据计算排名) | 无 | 无 | 无 | 无 |
2 | 103 | 101 | 1200 | 7.090375 | 无 | -0.019417 | 无 | 无 | 无 | 无 | 无 |
3 | 101 | 105 | 1500 | 7.31322 | 0.222845 | 0.039604 | 1 | 2 | 无(不足 6 个数据计算相关性) | 无 | 无 |
4 | 104 | 108 | 2000 | 7.600908 | 0.287688 | 0.038462 | 2 | 1 | 无 | 无 | 无 |
5 | 106 | 104 | 1800 | 7.49543 | -0.105478 | -0.018868 | 3 | 3 | 无 | 无 | 无 |
6 | 103 | 107 | 2500 | 7.824052 | 0.328622 | 0.038835 | 4 | 2 | 0.2(假设计算得到的相关性值) | -0.2 | 无(未超过阈值) |
7 | 108 | 106 | 2200 | 7.703457 | -0.120595 | -0.018519 | 5 | 4 | -0.1(假设计算得到的相关性值) | 0.1 | 无(未超过阈值) |
8 | 105 | 110 | 3000 | 8.006367 | 0.30291 | 0.047619 | 6 | 1 | 0.3(假设计算得到的相关性值) | -0.3 | 无(未超过阈值) |
9 | 110 | 108 | 2800 | 7.93797 | -0.068397 | -0.018182 | 7 | 5 | -0.2(假设计算得到的相关性值) | 0.2 | 无(未超过阈值) |
10 | 109 | 112 | 3500 | 8.155212 | 0.217242 | 0.027523 | 8 | 3 | 0.1(假设计算得到的相关性值) | -0.1 | 无(未超过阈值) |
在上述模拟表格中:
- 计算相关指标:首先根据开盘价、收盘价和成交量计算出对数成交量
log(volume)
、成交量对数的二阶差分ts_delta(log(volume), 2)
、价格变动百分比(close - open) / open
。 - 计算排名:然后对成交量对数二阶差分和价格变动百分比分别进行排名
rank(ts_delta(log(volume), 2))
和rank((close - open) / open)
。 - 计算相关性:再计算过去 6 个交易日内这两个排名序列的时间序列相关性
ts_corr(rank(ts_delta(log(volume), 2)), rank((close - open) / open), 6)
,并取相反数得到-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank((close - open) / open), 6)
。 - 生成交易信号:最后根据设定的阈值(示例中为 ±0.5)判断是否生成交易信号。在这个模拟示例中,由于所有交易日的相关性相反数的值都未超过阈值,所以没有生成交易信号。
投资策略
例如,可以设定一个阈值,当相关性值低于 -0.5(仅为示例,具体阈值需根据回测和优化确定)时,认为成交量和价格变动之间存在较强的负相关关系,可能预示着价格即将反转,此时可以考虑卖出资产;相反,当相关性值高于 0.5 时,可能表示价格将继续沿着当前趋势发展,可以考虑买入资产。
- 均值回归原理:该策略可能假设股票的某些指标,如成交量的对数变化率与股价的涨跌幅之间存在一种长期的均衡关系。当这种关系出现偏离时,市场有向均值回归的趋势,策略试图利用这种回归来获取收益。例如,如果一段时间内成交量对数的二阶差分与股价涨跌幅的相关性出现较大偏离历史均值的情况,策略可能预期这种偏离会得到纠正,从而进行相应的交易操作。
- 相关性分析原理:通过计算
ts_corr
,即时间序列的相关性,来衡量成交量变化和股价涨跌之间的线性关系。如果两者具有较高的正相关性或负相关性,那么当一个指标发生变化时,可以根据这种相关性来预测另一个指标的变化方向,进而制定交易策略。比如,如果发现成交量对数的二阶差分与股价涨跌幅在过去一段时间内呈现稳定的负相关关系,那么当成交量对数的二阶差分上升时,可能预期股价涨跌幅会下降,从而采取相应的卖出或做空操作。 - 排序与相对强弱原理:使用
rank
函数对成交量对数的二阶差分和股价涨跌幅进行排序,将绝对数值转化为相对排名,这样可以更关注指标在一段时间内的相对强弱变化。例如,在一个包含多只股票的投资组合中,通过比较不同股票的成交量和股价涨跌幅的相对排名,可以找出那些成交量变化相对较大且股价涨跌幅相对较小(或反之)的股票,这些股票可能具有更高的投资价值或交易机会,因为它们的指标表现与其他股票相比存在差异,可能预示着股价的走势即将发生变化。 - 时间序列分析原理:
ts_delta
函数用于计算时间序列的差分,这里是对成交量的对数进行二阶差分,它可以帮助分析成交量随时间的变化趋势和变化速度。通过观察成交量对数的二阶差分,可以了解成交量的增长或减少是否在加速或减速,这对于判断市场的买卖力量和股价的后续走势具有重要意义。例如,如果成交量对数的二阶差分持续增大,可能意味着市场的交易活跃度在不断提高,股价上涨或下跌的动力增强,结合股价涨跌幅的情况,可以更准确地把握市场趋势。
编辑
分享
逻辑问题:
1. ts_delay
的含义及取值情况
ts_delay
通常是对单只股票的时间序列数据进行操作,它会将该股票某个指标(如价格、成交量等)的时间序列向后延迟指定的周期数。也就是说,对于每一只股票,ts_delay
会根据自身的历史数据生成一个延迟后的序列。
例如,对于股票 A 的收盘价序列 [10, 11, 12, 13, 14]
,当使用 ts_delay(收盘价, 1)
时,会得到延迟 1 期后的序列 [NaN, 10, 11, 12, 13]
;若使用 ts_delay(收盘价, 2)
,则得到 [NaN, NaN, 10, 11, 12]
。所以,ts_delay
是针对每只股票各自生成延迟后的时间序列值,每天对应一个延迟后的值(如果有足够的历史数据来计算延迟)。
2. rank(ts_delay(...))
的含义
rank(ts_delay(...))
结合了延迟操作和排名操作。下面详细解释其含义:
-
操作步骤
- 首先,使用
ts_delay
函数对每只股票的特定指标(如成交量、价格等)进行延迟处理,得到每只股票延迟后的指标序列。 - 然后,在每一天对所有股票延迟后的指标值进行排序,并赋予排名。
- 首先,使用
-
示例说明
假设我们有三只股票 A、B、C,某指标的原始值及经过ts_delay(指标, 1)
处理后的值如下表:
日期 | 股票 | 原始指标值 | 延迟 1 期后的指标值(ts_delay(指标, 1) ) |
---|---|---|---|
第 1 天 | A | 10 | NaN |
第 1 天 | B | 12 | NaN |
第 1 天 | C | 15 | NaN |
第 2 天 | A | 11 | 10 |
第 2 天 | B | 13 | 12 |
第 2 天 | C | 16 | 15 |
在第 2 天,对延迟后的指标值进行排名(假设是升序排名),那么股票 A 的排名为 1,股票 B 的排名为 2,股票 C 的排名为 3。这个排名结果可以帮助我们了解在考虑指标延迟的情况下,每只股票在当天相对于其他股票的相对位置,从而挖掘出一些可能被忽略的市场信息和交易机会。例如,如果延迟后的成交量排名靠前,可能意味着该股票的交易活跃度变化有一定的滞后效应,后续股价可能会有相应的表现。