python应用——简单的跟随北上资金策略

记录一下一个尝试,用类似双均线策略的思路来跟随北上资金,并计算策略收益。

整体思路是:当北上资金持股市值(5日)>北上资金持股市值变化(10日)时,买入该股,根据当日涨跌幅来计算策略收益率。 

1、首先导入一些常用的后续需要的库

#首先导入各种需要的库
import akshare as ak  #用akshare获取北上资金数据
import pandas as pd   #
import numpy as np   #
from matplotlib import pyplot as plt  #用于后续交叉点做图
import xlrd

2、读取股票代码的excel表格

excel表格整理自同花顺ifind的导出数据,内容如下图:

python应用——简单的跟随北上资金策略_第1张图片

下面为具体代码: 

#读取股票代码的excel表格
worksheet= xlrd.open_workbook('D:\A USTC\jrsj\hgstdm1.xls') 
#hsgtdm1为通过同花顺Ifind获取的陆股通持股市值大于0的股票的代码,使用时注意更改路径
sheet_names= worksheet.sheet_names()
sheet1 = worksheet.sheet_by_name('Sheet1')
dm=sheet1.col_values(0)  #取第一列数据
dm.remove('股票代码')  #去掉表格第一行"股票代码”

 3、当北上资金持股市值(5日)>北上资金持股市值变化(10日)时,买入该股,根据当日涨跌幅来计算策略收益率。

因为想计算excel里面前500只股票应用该策略的收益,所以在akshare库导入即后续操作放入循环,依次读取各自股票的北上资金流入流出数据。

用stock_hsgt_individual_em_df.head()直观地看一下得到的数据,如下图:

(这里是跑完后面代码之后再看的,所以会有s-l,signal及stategy列)

python应用——简单的跟随北上资金策略_第2张图片

 定义data['s-l']为持股市值变化5日-持股市值变化10日,大于0赋值为1,小于0赋值为0。

用data[['持股市值变化-5日','持股市值变化-10日']].plot(grid=True,figsize=(18,15))看一下大概情况。

python应用——简单的跟随北上资金策略_第3张图片

用print(data['signal'].value_counts())可以输出统计的交点的个数。

接着计算当赋值为1时买入的平均收益率,先累加涨跌幅再求平均。

最后输出得到每只股票执行该策略的结果。

#因为策略要应用于500只股票所以写一个循环
for x in range(0,500):
    
    #AKshare库导入
    stock_hsgt_individual_em_df = ak.stock_hsgt_individual_em(stock=dm[x])  #分别读取个股北上资金数据

    #将短期(5日)持股市值变化-长期(10日)持股市值变化赋给data["s-l"]
    data=pd.DataFrame(stock_hsgt_individual_em_df )
    data['s-l']=data['持股市值变化-5日']-data['持股市值变化-10日']
  
    
    #短期超过长期赋值1
    data['signal']=np.where(data['s-l']>0,1,0)
    #长期超过短期赋值-1
    data['signal']=np.where(data['s-l']<0,-1,data['signal'])
    
    #统计金叉死叉个数
    data['signal'].value_counts()
    
    #策略涨跌幅
    data['stategy']=data['当日涨跌幅']*data['signal'].shift(1) 

    #计算平均收益率
    rtn=[]
    for i in range(0,data.shape[0]):
        if data.iloc[i,10]==1:      #如果s-l信号(第i行第10列数据)赋值为1,即金叉时买入
            rtn.append(data.iloc[i,2])   #加上当日涨跌幅,data的第i行第2列
            
    result=np.cumsum(rtn)         #累加涨跌幅得收益率
    np.mean(result)      #求得平均收益率
    print("%s的策略平均收益率为:"%(dm[x]),np.mean(result))  #打印平均收益率

4、最后得到输出结果

 策略主要调用双均线的一些思路做了一个应用性的尝试,单纯应用该策略收益与实际股票未来涨跌相对比,发现该策略在一定程度还能预示股票未来涨跌,预测成功率在67%左右,进行收益回测也能够跑赢同期简单的买入持有策略。

你可能感兴趣的:(python应用,python,开发语言,pandas)