根据mindgo和vnpy量化金融视频做一个最简单的因子分析。
参考资料:
mindgo 单因子分析链接:http://quant.10jqka.com.cn/platform/html/strategylib.html#/
vnpy量化金融视频链接:https://www.bilibili.com/video/BV1yJ411u7WG?p=2
代码:
price = ts.get_hist_data('000002')
price=price.sort_index()
# 获取收盘价数据
close = price['close'].values
# # sh = ts.get_hist_data('sh')
# # sh = sh.sort_index()
# # #print sh['close']
# # ma = ta.MA(sh['close'].values,20) #20日均线
# # ma1 = pd.DataFrame(ma)
# # ma1.index = sh.index
# 计算SMA
money=10000
moneylist=[]
ma = ta.MA(price['close'].values,20) #20日均线
ma1 = pd.DataFrame(ma)
ma1.index = price.index
#print ma1
price['SMA20'] = ma1
# 获取当前的股票价格
crtprice = price['open'].values
# 获取当前个股的持仓
curposition = 0
buypi=0
le=len(crtprice)
for i in range(le):
#若开盘价上穿均线,且持仓为0,则全仓买入
if crtprice[i] > ma[i-1] and curposition == 0 and money>0:
curposition=money/crtprice[i]+curposition
sub=crtprice[i]
moneylist.append(sub)
money = 0
buypi=crtprice[i]
print('买入价格:' ,sub)
# print('买入价格:' + str(crtprice))
# 若开盘价下穿均线,且有持仓,则清仓
elif crtprice[i] < ma[i-1] and curposition != 0 :
#money = round(have * crtprice,2)
money=curposition * close[i]
curposition = 0
sub=close[i]*close[i]/buypi
moneylist.append(sub)
print('卖出价格:' + str(sub))
else:
sub=close[i]*close[i]/buypi
moneylist.append(sub)
print("无操作:"+str(sub))
# # 绘图
# # record
price['strage']=moneylist
price[['close', 'SMA20','open','strage']].plot(figsize=(15, 8), grid=True)
plt.show()
print(price['strage'])
效果图为: