任选两只股票用Python使用日度交易行情信息构造10日简单移动平均线、动量和滚动波动率三个特征,要求说明:构造3个特征的理由,构造方法,画出时间序列图,附上完整代码
时间: 2024-03-24 21:36:21 浏览: 104
构造3个特征的理由:
1. 10日简单移动平均线可以反映出股票价格的趋势,有助于判断股票价格的上升或下降趋势。
2. 动量可以反映出股票价格的变化速度,有助于判断股票价格是否处于波动的状态。
3. 滚动波动率可以反映出股票价格的波动幅度,有助于判断股票价格的波动性。
构造方法:
1. 10日简单移动平均线:首先计算出10日的股票收盘价均值,然后将这个均值作为第一天的简单移动平均值,接着每一天计算出对应的10日的均值,最终形成10日的简单移动平均线。
2. 动量:计算出每一天的收盘价与前一天的收盘价的差值,作为该天的动量值。
3. 滚动波动率:首先计算出10日的收盘价均值,然后计算出每一天的收盘价与10日均值的差值的平方,最后取10日内所有差值平方的平均值的平方根,作为该天的滚动波动率值。
时间序列图和完整代码见下:
```python
# 导入模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
df1 = pd.read_csv('stock1.csv')
df2 = pd.read_csv('stock2.csv')
# 计算10日简单移动平均线
df1['10_day_ma'] = df1['Close'].rolling(window=10).mean()
df2['10_day_ma'] = df2['Close'].rolling(window=10).mean()
# 计算动量
df1['momentum'] = df1['Close'] - df1['Close'].shift(1)
df2['momentum'] = df2['Close'] - df2['Close'].shift(1)
# 计算滚动波动率
df1['rolling_std'] = df1['Close'].rolling(window=10).std()
df1['rolling_volatility'] = df1['rolling_std'] / np.sqrt(10)
df2['rolling_std'] = df2['Close'].rolling(window=10).std()
df2['rolling_volatility'] = df2['rolling_std'] / np.sqrt(10)
# 绘制时间序列图
plt.figure(figsize=(15, 5))
plt.plot(df1['Date'], df1['10_day_ma'], label='10_day_ma_stock1')
plt.plot(df1['Date'], df1['momentum'], label='momentum_stock1')
plt.plot(df1['Date'], df1['rolling_volatility'], label='rolling_volatility_stock1')
plt.plot(df2['Date'], df2['10_day_ma'], label='10_day_ma_stock2')
plt.plot(df2['Date'], df2['momentum'], label='momentum_stock2')
plt.plot(df2['Date'], df2['rolling_volatility'], label='rolling_volatility_stock2')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Stock Price Features')
plt.legend()
plt.show()
```
注:需要将上述代码中的"stock1.csv"和"stock2.csv"替换成所选股票的交易数据文件名。
阅读全文