1 分别用日周期,周周期,月周期计算沪深300指数2002年一月到2022年十一月范围内,选择走势与2021年十一月到2022年十一月两段相似度最高的周期
2期望输出结果例如(数据纯虚构):2021年十一月到2022年十一月在日周期内与2019年4月到2020年4月相似度最高,
与2003年6月到2004年6月在周周期内相似度最高。
3分别输出日周月相似度最高的时间段
以下只是大概框架,希望能帮到你
import tushare as ts
import pandas as pd
from dtw import dtw
# 获取沪深300指数历史数据
hs300 = ts.get_hist_data('hs300', start='2002-01-01', end='2022-11-01')
# 将数据按日、周、月周期进行重采样
hs300_daily = hs300['close'].resample('D').last().dropna()
hs300_weekly = hs300['close'].resample('W').last().dropna()
hs300_monthly = hs300['close'].resample('M').last().dropna()
# 2021年十一月到2022年十一月的收盘价序列
target = hs300_daily['2021-11-01':'2022-11-01']
# 计算日周期下所有子序列与目标序列的相似度
dists_daily = []
for i in range(len(hs300_daily) - len(target)):
dist, _ = dtw(hs300_daily[i:i+len(target)], target)
dists_daily.append(dist)
# 计算周周期下所有子序列与目标序列的相似度
dists_weekly = []
for i in range(len(hs300_weekly) - len(target)):
dist, _ = dtw(hs300_weekly[i:i+len(target)], target)
dists_weekly.append(dist)
# 计算月周期下所有子序列与目标序列的相似度
dists_monthly = []
for i in range(len(hs300_monthly) - len(target)):
dist, _ = dtw(hs300_monthly[i:i+len(target)], target)
dists_monthly.append(dist)
# 找到每个周期内与目标序列相似度最高的子序列
best_daily_start = dists_daily.index(min(dists_daily))
best_daily_end = best_daily_start + len(target)
best_weekly_start = dists_weekly.index(min(dists_weekly))
best_weekly_end = best_weekly_start + len(target)
best_monthly_start = dists_monthly.index(min(dists_monthly