这是我的数据:
上次
日期
2019-02-19 277.850006
2019-02-20 278.410004
2019-02-21 277.420013
2019-02-22 279.140015
2019-02-25 279.940002
我用这个函数来处理日常数据,效果很好
def corr\u窗口(数据、cdw、dyf、corr\u级别):
'''
数据=历史数据
cdw=相关天数窗口
dyf=未来天数
corr_level=理想的相关性水平
'''
mylabels=['Dax',str(dyf)+'days forward']
s=[]
数据2=数据[-cdw:]
数据[-cdw:].plot(title='Dax last{}交易日'。格式(str(cdw)))
对于范围内的i(长度(数据)-cdw*2):
如果(pearsonr(数据[i:i+cdw],数据2)[0])>;更正级别:
s、 追加((data.iloc[i+cdw+dyf]['Last']]/data.iloc[i+cdw]['Last']])-1)
图,ax=plt子批次(1,1)
数据[i:i+cdw+dyf]。绘图(title=“Correlation:”+str(pearsonr(数据[i:i+cdw],数据2]),ax=ax)
数据[i+cdw:i+cdw+dyf]。绘图(颜色='red',标签='Days forward',ax=ax)
ax.图例(标签=mylabels,位置=0)
plt.紧_布局();
返回打印(f){dyf}天之后的平均返回为{round(np.mean(s)*100,2)}%\n对于{len(s)}个事件\
---->;{np.round(如果x>;0,则s中x的和为1)/len(s)*100,1)}%正返回\n')
尝试将数据移动到分辨率时,我使用:
data.index=pd.to_datetime(data.Date+''+data.Time)
data['Date']=pd.to_datetime(data.Date)
数据['Time']=pd.to_datetime(数据['Time'],格式='%H:%M:%S.%f').dt.Time
我的数据如下所示:
上次日期时间
2019-03-01 20:51:00 2019-03-01 20:51:00.0 11628.5
2019-03-01 20:54:00 2019-03-01 20:54:00.0 11627.5
2019-03-01 20:57:00 2019-03-01 20:57:00.0 11633.5
2019-03-01 21:00:00 2019-03-01 21:00:00.0 11633.0
2019-03-01 21:03:00 2019-03-01 21:03:00.0 11629.5
在我的分钟数据上运行上述函数时,我遇到以下错误:
值错误:视图限制最小值-24654.425000000003小于1,是无效的Matplotlib日期值。如果将非日期时间值传递给具有日期时间单位的轴,则通常会发生这种情况。
我看了一眼,但它似乎对我很有用:
(唯一的调整是添加了.values.ravel(),因为似乎scipy.pearsonr不喜欢数据帧…)
你能提供一个(不)有效的例子吗
将熊猫作为pd导入
将numpy作为np导入
从scipy.stats导入pearsonr
将matplotlib.pyplot作为plt导入
数据=局部数据帧(['2019-03-01 20:51:00','11628.5'],
['2019-03-01 20:54:00', '11627.5'],
['2019-03-01 20:57:00', '11633.5'],
['2019-03-01 21:00:00', '11633.0'],
['2019-03-01 21:03:00', '11629.5']],
列=['index','Last'])
data.index=pd.to_datetime(data.pop('index'))
数据['Last']=数据['Last'].aType(浮点)
#使数据帧稍微长一点。。。
data=data.append(数据)
# --------------------------
def校正窗口(数据、cdw、dyf、校正级别):
'''
数据=历史数据
cdw=相关天数窗口
dyf=未来天数
corr_level=理想的相关性水平
'''
mylabels=['Dax',str(dyf)+'days forward']
s=[]
数据2=数据[-cdw:]
数据[-cdw:].plot(title='Dax last{}交易日'。格式(str(cdw)))
对于范围内的i(长度(数据)-cdw*2):
if(pearsonr(数据[i:i+cdw].values.ravel(),data2.values.ravel())[0])>;更正级别:
s、 追加((data.iloc[i+cdw+dyf]['Last']]/data.iloc[i+cdw]['Last']])-1)
图,ax=plt子批次(1,1)
数据[i:i+cdw+dyf]。绘图(标题=“相关性:”+str(pearsonr(数据[i:i+cdw].values.ravel()、数据2.values.ravel())[0]),ax=ax)
数据[i+cdw:i+cdw+dyf]。绘图(颜色='red',标签='Days forward',ax=ax)
ax.图例(标签=mylabels,位置=0)
plt.紧_布局();
返回打印(f){dyf}天之后的平均返回为{round(np.mean(s)*100,2)}%\n对于{len(s)}个事件\
---->;{np.round(如果x>;0,则s中x的和为1)/len(s)*100,1)}%正返回\n')
校正窗口(数据,2,0,-1)