问题描述
前言
我正在分析股票价格。
- 价差值是一对的值。
- 一对是两只股票,例如 Amazon_Tesla。
- 如果信号为 1,则表示必须出售该股票。
- 如果信号为 0,则表示必须买入该股票。
输入
- 标准值:浮动
- 传播:列表或熊猫系列
输出
- 信号 1
- 信号 2
信号如何变化?
信号根据传播和阈值而变化。在本例中,阈值是标准偏差(值=1)。在指数#2 中,我们出售亚马逊股票并购买特斯拉股票。第一笔交易开始时,点差必须超过标准值。信号值在样本数据中发生变化。
结果
要访问示例数据: https://gist.github.com/birdalugureren/05ea6995a9f31478599e9c062e9cd452
解决方法
实现此目的的一种方法是使用与 standard deviation
相关的 spread values
值来描述每个信号的函数,以产生股票走势将转向的点。之后,使用ffill向前填充库存操作没有变化的空间。
import pandas as pd
import numpy as np
d = {'index': {i:i for i in range(20)},'spread': {0: 0.4,1: 0.6,2: 1.1,3: 0.8,4: 1.5,5: 0.6,6: -0.01,7: -1.4,8: 0.1,9: 0.4,10: 1.4,11: -1.5,12: -0.4,13: 0.3,14: 0.6,15: 1.2,16: 0.7,17: -0.3,18: -0.8,19: -1.9}}
df = pd.DataFrame(d)
print(df)
std_dev = 1
func_sig1 = lambda x: 1 if x > std_dev else 0 if x < 0 else np.NAN
func_sig2 = lambda x: 1 if x < -std_dev else 0 if x > 0 else np.NAN
df["Signal-1"] = df["spread"].map(func_sig1).ffill()
df["Signal-2"] = df["spread"].map(func_sig2).ffill()
print(df)
来自df
的输出 index spread Signal-1 Signal-2
0 0 0.40 NaN 0.0
1 1 0.60 NaN 0.0
2 2 1.10 1.0 0.0
3 3 0.80 1.0 0.0
4 4 1.50 1.0 0.0
5 5 0.60 1.0 0.0
6 6 -0.01 0.0 0.0
7 7 -1.40 0.0 1.0
8 8 0.10 0.0 0.0
9 9 0.40 0.0 0.0
10 10 1.40 1.0 0.0
11 11 -1.50 0.0 1.0
12 12 -0.40 0.0 1.0
13 13 0.30 0.0 0.0
14 14 0.60 0.0 0.0
15 15 1.20 1.0 0.0
16 16 0.70 1.0 0.0
17 17 -0.30 0.0 0.0
18 18 -0.80 0.0 0.0
19 19 -1.90 0.0 1.0