Python编程,根据股票近1个月的收盘价曲线,
在其它股票历史行情中查找类似的曲线

 

DeepSeek:

步骤:

1. 数据获取:获取目标股票和其他股票的近期收盘价数据。

2. 数据预处理:归一化处理,确保数据可比性。

3. 相似性计算:选择合适的算法计算曲线相似度。

4. 结果排序:根据相似度排序,找出最相似的股票。

5. 可视化展示:绘制目标股票与相似股票的曲线对比图。

现在需要将这些步骤转化为Python代码,选择合适的库和函数来实现每个部分。例如,使用pandas处理数据,numpy进行数值计算,dtw库或scipy中的距离函数,matplotlib进行可视化。同时,要注意代码的效率和可扩展性,尤其是在处理大量股票数据时。

以下是基于Python实现的股票走势相似性匹配解决方案,使用动态时间规整(DTW)算法进行曲线匹配:

import numpy as np
import pandas as pd
from dtaidistance import dtw
import yfinance as yf
import matplotlib.pyplot as plt
# 参数配置
target_stock = 'AAPL' # 目标股票代码
compare_stocks = ['MSFT', 'GOOG', 'AMZN', 'META', 'TSLA', 'NVDA', 'PYPL'] # 待比较股票列表
start_date = '2023-06-01'
end_date = '2023-06-30'

def fetch_stock_data(stock_list):
"""获取股票历史数据"""
data = yf.download(stock_list, start=start_date, end=end_date)['Adj Close']
return data.dropna(axis=1) # 去除有缺失数据的股票

def normalize_series(series):
"""标准化价格序列"""
return (series - series.min()) / (series.max() - series.min())
def find_similar_patterns(target_series, compare_data, top_n=3):

"""
使用DTW算法查找相似模式
:param target_series: 目标序列
:param compare_data: 待比较数据集
:param top_n: 返回前N个相似结果
:return: 相似股票列表
"""
similarities = []
target = normalize_series(target_series).values
for stock in compare_data.columns:
compare = normalize_series(compare_data[stock]).values
distance = dtw.distance_fast(target, compare)
similarities.append((stock, distance))
return sorted(similarities, key=lambda x: x[1])[:top_n]

def visualize_comparison(target, comparisons):
"""可视化对比结果"""
plt.figure(figsize=(12, 6))
# 绘制目标股票
target_norm = normalize_series(target)
plt.plot(target_norm, label=f'Target: {target.name}', linewidth=2.5, color='black')
# 绘制相似股票
colors = ['#1f77b4', '#ff7f0e', '#2ca02c']
for idx, (stock, _) in enumerate(comparisons):
compare_norm = normalize_series(compare_data[stock])
plt.plot(compare_norm, label=f'Similar {idx+1}: {stock}',
linestyle='--', color=colors[idx])
plt.title('Stock Price Pattern Comparison')
plt.xlabel('Trading Days')
plt.ylabel('Normalized Price')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

if __name__ == "__main__":
# 获取数据 
all_stocks = [target_stock] + compare_stocks
stock_data = fetch_stock_data(all_stocks)
# 分离目标数据和比较数据
target_series = stock_data[target_stock]
compare_data = stock_data.drop(columns=[target_stock])
# 查找相似模式
similar_stocks = find_similar_patterns(target_series, compare_data)
# 输出结果
print("最相似的股票:")
for rank, (stock, score) in enumerate(similar_stocks, 1):
print(f"{rank}. {stock} (相似度评分:{score:.2f})")

# 可视化对比
visualize_comparison(target_series, similar_stocks)

实现原理说明 数据获取模块: 使用Yahoo Finance API获取历史价格数据 自动处理缺失值,确保时间序列对齐 支持多股票代码批量下载 核心算法设计: 标准化处理:采用Min-Max归一化消除价格绝对值差异 动态时间规整(DTW):解决时间序列相位差问题,比欧氏距离更适合金融时序数据 并行计算优化:利用快速DTW算法(distance_fast)提升计算效率 可视化系统: 使用Matplotlib生成专业级对比图表 自动颜色编码区分目标股票与相似股票 支持动态显示前N个匹配结果



顶部   关于本站   免责声明   联系站主   周刊   公众号