import pandas as pd
import os
def Quant(funs,name):
K_path='data/K'
files=[files for root, dirs, files in os.walk(K_path)][0]
outdf=pd.DataFrame()
for file in files:
path=os.path.join(K_path, file)
df=pd.read_csv(path,encoding="gbk",index_col = 0,parse_dates=['日期'])
df = funs(df)
df['Buy'] = df["开盘"].shift(-1)
for i in range(8):
if i == 0:
continue
elif i==1:
df['sell_%d' %i]=df["开盘"].shift(-2)
else:
df['sell_%d' %i]=df['收盘'].shift(-i)
df_new=df[df[name]]
outdf=outdf.append(df_new)
if len(outdf)==0:
print('从未出现')
return outdf
order={}
for i in range(8):
if i !=0:
sy=outdf['sell_%d' %i]/outdf['Buy']
order['第%d日' %i]={
'出现总次数(次)':len(outdf),
'成功次数(次)':sum(sy>1),
'平均收益率(%)':((sy-1)*100).mean(),
'累计收益率(%)':(sy.prod()-1)*100,
'盈亏比':(sy[sy>1].mean()-1)/(1-sy[sy<1].mean()),
'成功率':round(sum(sy>1)/len(outdf)*100,0)
}
order_df=pd.DataFrame(order).T
order_df['%s'%name]=name
order_df.to_csv('temp/%s量化.csv' %name,encoding='gbk')
return order_df
从data/K目录读取历史K线数据,数据包含日期、开盘、收盘、最高、最低等价格信息。返回分析结果并保存为csv文件。参数funs为选股函数名,name为选股函数对结果的标记名称。