加入了期间结束的市值,并把行情改为复权后的涨幅,更加正确。
自己研究主题投资历史用的,简单方便,代码效率还可以。
主题名称可以输入想要的,日期也可选择。
×
import pandas as pd
import numpy as np
bdt="20160311" #期间开始
edt="20161011" #期间结束
themeName =u'锂电池'
#获取某主题相关股票的信息
ztid=DataAPI.TickersByThemesGet(themeID=u"",themeName=themeName,beginDate=u"",endDate=u"",isNew=u"",field=u"",pandas="1")
gpjc=ztid.secShortName.tolist() #股票简称
stocklist=ztid.secID.tolist() #股票代码
returnall=[] #设立收益列表
mrktval1=[]
mrktval2=[]
ysdf=pd.DataFrame()
#print(stocklist)
#获取股票 list 中的各股票收益并装入 returnall 中
for i in stocklist:
price1=DataAPI.MktEqudAdjGet(secID=i,\
beginDate=bdt,endDate=bdt,field=u"secID,closePrice",pandas="1")#期间开始价格
price2=DataAPI.MktEqudAdjGet(secID=i,\
beginDate=edt,endDate=edt,field=u"secID,closePrice,negMarketValue,marketValue",pandas="1")#期间结束价格
returnget=round(float(price2.closePrice[0]
1
import pandas as pd
2
import numpy as np
3
bdt="20160311" #期间开始
4
edt="20161011" #期间结束
5
6
7
themeName =u'锂电池'
8
#获取某主题相关股票的信息
9
ztid=DataAPI.TickersByThemesGet(themeID=u"",themeName=themeName,beginDate=u"",endDate=u"",isNew=u"",field=u"",pandas="1")
10
gpjc=ztid.secShortName.tolist() #股票简称
11
stocklist=ztid.secID.tolist() #股票代码
12
returnall=[] #设立收益列表
13
mrktval1=[]
14
mrktval2=[]
15
ysdf=pd.DataFrame()
16
#print(stocklist)
17
#获取股票 list 中的各股票收益并装入 returnall 中
18
for i in stocklist:
19
price1=DataAPI.MktEqudAdjGet(secID=i,\
20
beginDate=bdt,endDate=bdt,field=u"secID,closePrice",pandas="1")#期间开始价格
21
price2=DataAPI.MktEqudAdjGet(secID=i,\
22
beginDate=edt,endDate=edt,field=u"secID,closePrice,negMarketValue,marketValue",pandas="1")#期间结束价格
23
returnget=round(float(price2.closePrice[0]/price1.closePrice[0]-1),4)#收益,保留四位小数
24
returnget1=str(returnget*100)+'%'
25
returnall.append(returnget1)
26
mrktval1.append(int(price2.negMarketValue/100000000))
27
mrktval2.append(int(price2.marketValue/100000000))
28
#print mrktval1
29
indexlen=len(stocklist)+1#为了设置 Index
30
alltable=pd.DataFrame(np.array(zip(stocklist,gpjc,returnall)),columns=['代码','股票简称','期间涨幅'])#index=list(range(1,indexlen))
31
32
alltable1=alltable.join(pd.Series(mrktval1,name='流动市值'))
33
alltable2=alltable1.join(pd.Series(mrktval2,name='总市值'))
34
35
36
alltable2
详细代码和回测结果:
https://uqer.io/community/share/57fce2b0228e5b3668facaf0?source=home