创作不易,方便的话点点关注,谢谢
文章结尾有最新热度的文章,感兴趣的可以去看看。
本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身
文章有点长(2222字阅读时长:8分),期望您能坚持看完,并有所收获。
免责声明:股票价格预测本质上是不确定的,本教程仅供教育目的使用。这里讨论的模型和方法不应被解释为财务建议或依赖于实际交易决策。虽然时间融合Transformer(TFT)模型提供了置信区间,有助于评估风险,但没有模型能完全考虑到金融市场的不可预测性。在做出投资决策之前,请始终进行彻底的研究,并咨询金融专业人士。
欢迎来到这个系列,了解如何使用时间融合Transformer(TFT)构建一个可解释的模型,用于高频股票价格预测。在这个系列中,我们将深入探讨训练一个不仅能预测股票价格,而且能提供置信区间,使其成为风险评估的宝贵工具的模型的步骤。从数据收集和预处理到模型训练、评估和解释,每篇文章都将指导您完成过程中的关键阶段。
在第一部分中,我们将从基础开始:收集正确的数据并执行探索性数据分析(EDA),以了解高频股票数据中的趋势、模式和潜在陷阱。
背景和动机
股票市场是一个动态且经常不可预测的环境。成功的日内交易者依赖的不仅仅是预测,还有高回报与风险的交易。即使交易者只有50%的时间正确预测股票的方向,如果每次交易的平均回报超过平均风险,他们仍然可以盈利。自动化交易算法帮助交易者从交易中去除情感,使他们能够专注于技术指标和系统性决策。
使用我们的时间融合Transformer模型,目标不是实现完美的预测准确度(在金融市场上是不可能的壮举),而是开发一个可以识别高概率变动的模型,同时评估与每个预测相关的风险。通过专注于精确度并使用置信区间,该模型可以作为做出更明智交易决策的宝贵工具。
数据收集和准备
在这个项目中,我收集了平均每日交易量超过100万股的股票的1分钟日内数据。这个数据集涵盖了从2024年1月1日到2024年7月11日的6个月,总共超过1500只股票。对于每只股票,我收集了标准的OHLCV(开盘、最高、最低、收盘、成交量)数据,捕捉了整个交易日的每个价格变动。为了简化数据处理过程,我将这些数据保存在一个单一的.parquet文件中,以便有效访问和分析。
数据加载和初始清理
在Jupyter Notebook中,我开始导入数据操作、可视化和建模所需的基本库。以下是一些使用中的库的示例:
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from datetime import datetime
然后加载数据集并将日期设置为基于时间的分析的索引:
df = pd.read_parquet("data.parquet")
df.set_index("datetime", inplace=True)
df.sample(10) # 打印数据集中的10个随机行
输出:
为了了解我要处理的数据量,我使用 df.info() 来获取这些信息:
# 这个数据框相当大,包含超过6600万行,使用超过4.5 GB的内存。
为了使其更易于管理,并过滤掉流动性不佳的股票,我使用“股票平均名义成交量”,这是通过将日均成交量乘以平均价格来计算的。我只保留平均名义成交量最高的前100只股票。
def resample_to_daily(group):
resampled_group = group.resample('D').agg({
'open':'first',
'high':'max',
'low':'min',
'close':'last',
'volume':'sum'
}).dropna()
return resampled_group
# 应用重采样函数到每个组
df_daily = df.groupby('symbol').apply(resample_to_daily).reset_index()
df_daily["stock_median_volume"]= df_daily.groupby("symbol")["volume"].transform("median").astype(int)
df_daily["stock_average_price"]= df_daily.groupby("symbol")["close"].transform("mean")
df_daily["stock_average_nominal_volume"]= df_daily["stock_median_volume"]* df_daily["stock_average_price"]
top_100_symbols = df_daily.groupby("symbol")['stock_average_nominal_volume'].median().nlargest(100).index
# 过滤数据框以保留名义成交量最高的前100只股票
df_daily = df_daily[df_daily['symbol'].isin(list(top_100_symbols))]
df = df[df['symbol'].isin(list(top_100_symbols))]
print(f"Number of total one minute bars after resampling: {df.shape[0]}")
print(f"Symbols: {df_daily.symbol.unique()}")
输出:
重采样后总的1分钟K线数量:165367
符号:['AAL' 'AAPL' 'ABBV' 'ABNB' 'ABT' 'ADBE' 'AM' 'AMD' 'AMZN' 'ANET' 'AVGO' ...]
EDA和特征工程 在下一步中,我进行探索性数据分析(EDA),以了解我们过滤后的数据集的关键特征,并开始特征工程以提取相关指标。通过可视化趋势、价格分布和成交量变化,我旨在揭示可能指导我们预测模型的模式和洞察。
这就结束了第一部分。在接下来的部分中,我们将更深入地探讨特征工程,并开始准备我们的数据集以进行模型训练。
如果您对构建用于股票预测的机器学习模型感到兴奋,请关注我,以获取本系列的最新更新!每篇文章将带您了解一个新的阶段,从数据准备到模型评估和策略回测,提供为金融爱好者和有抱负的量化分析师量身定制的实践代码和洞察力!
点个“在看”不失联
最新热门文章推荐:
国外C++程序员分享:2024/2025年C++是否还值得学习?
国外Python程序员分享:如何用Python构建一个多代理AI应用
国外CUDA程序员分享:2024年GPU编程CUDA C++(从环境安装到进阶技巧)
国外Python程序员分享:2024年NumPy高性能计算库(高级技巧)
外国人眼中的卢湖川:从大连理工到全球舞台,他的科研成果震撼世界!
外国人眼中的张祥雨:交大90后男神博士,3年看1800篇论文,还入选福布斯精英榜
参考文献:《图片来源网络》
本文使用 文章同步助手 同步