提示词:
编写一个Python程序,旨在预测股市未来30天的价格趋势。要求程序满足以下条件:
数据获取与预处理:
从Yahoo Finance获取过去5年的日间交易数据(包括开盘价、收盘价、最高价、最低价、交易量)。
进行数据清洗,包括处理缺失值、异常值和数据标准化。
生成特征工程,如计算移动平均线、相对强弱指数(RSI)、布林带等技术指标。
代码如下:
pip install yfinance pandas ta
import yfinance as yf
import pandas as pd
from ta.volatility import BollingerBands
from ta.momentum import RSIIndicator
from ta.trend import SMAIndicator
# 1. 数据获取
ticker = "AAPL" # 以苹果公司股票为例
data = yf.download(ticker, period="5y", interval="1d")
# 2. 数据预处理
# 处理缺失值,通常删除含有缺失值的行
data.dropna(inplace=True)
# 异常值处理这里简化处理,实际应用中可能需要更复杂的方法
# 这里简单地将每个数值列的最大最小值限制在一定范围内,例如去除极高极低的异常值
for col in ['Open', 'Close', 'High', 'Low', 'Volume']:
q1, q3 = data[col].quantile([0.25, 0.75])
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
data[col] = data[col].clip(lower_bound, upper_bound)
# 数据标准化(这里根据需求选择是否执行,对于某些技术指标计算并不需要)
# data = (data - data.mean()) / data.std()
# 3. 特征工程
# 计算移动平均线(这里以20日为例)
sma_indicator = SMAIndicator(data['Close'], window=20)
data['SMA_20'] = sma_indicator.sma_indicator()
# 计算相对强弱指数(RSI),默认周期为14
rsi_indicator = RSIIndicator(data['Close'])
data['RSI'] = rsi_indicator.rsi()
# 计算布林带
bb_indicator = BollingerBands(data['Close'])
data['BB_UPPER'], data['BB_MIDDLE'], data['BB_LOWER'] = bb_indicator.bollinger_mavg(), bb_indicator.bollinger_hband(), bb_indicator.bollinger_lband()
# 为了预测未来30天价格趋势,我们通常需要基于现有数据训练模型,比如使用机器学习算法
# 此部分较为复杂,涉及模型选择、训练、验证等多个步骤,此处不展开,仅展示数据准备过程
print(data.tail())