天天看点

利用双均线策略计算中国平安股票收益一、知识储备二、开始操作

一、知识储备

Hello,各位小伙伴们,本篇博文给大家带来的是利用双均线策略,对中国平安601318股票进行炒股,所能获得的大概收益。为了你能正确理解本文的知识,需要你提前做以下准备。。。

python基础:本次策略分析是用python做的,所以需要你有python的基础知识储备。

python数据分析:本次用到的是pandas、matplotlib

均线概念:这是一个金融知识,在这简单给大家讲一下。假如我要计算一个5日均线,那我就是用今天在内往前推四天的收盘价做一个算术平均作为5日均线。30日、60日均线同理。

金叉:衍生于均线,是指短期均线上穿长期均线,说明股价上涨,这是一个买入信号

死叉:衍生于均线,是指短期均线下穿长期均线,说明股价下跌,这是一个卖出信号

二、开始操作

1.首先我们需要获取这个股票的历史数据

import tushare as ts
df=ts.get_k_data('601318',start='1988-01-01')
df.to_csv('601318.csv')
           

这边需要给大家介绍一下这个tushare包,这是一个半免费的金融数据平台,有部分数据是免费给我们使用的,具体的你们上https://waditu.com/document/2?doc_id=118这个平台去查阅。

好的,那我们到这一步为止,就获取了“中国平安601318”股票的历史数据。因为每次获取数据都会花一点时间,所以我们把数据存储到本地。你也可以使用在线数据保证数据的实时性。

2.接着我们导入panda和matplotlib包,然后读取本地数据,并计算5日均线和月均线

import pandas as pd
from matplotlib import pyplot as plt

df=pd.read_csv('601318.csv',index_col='date',parse_dates=['date'])[['open','close']]
           

这边只读取我们需要的开盘价open,收盘价close,并将对应的日期作为我们的索引。

接下来是要计算均线,我们可以用循环去计算。

# 计算5日均线和30日均线
df['ma5']=np.nan #创建5日均线列
df['ma30']=np.nan # 创建30日均线列

# 用for循环做均线计算
for i in range(4,len(df)):# 计算5日均线,因为前4日不够5天,所以下标从4开始,也就是第五天开始
    df.loc[df.index[i],'ma5']=df['close'][i-4:i+1].mean()
for i in range(29,len(df)):# 计算30日均线
    df.loc[df.index[i],'ma30']=df['close'][i-29:i+1].mean()
           

用循环计算均线是一种办法,但是我们还可以用pandas包提供的一种方法去计算,更加方便。

df['ma5']=df['close'].rolling(5).mean() # 计算每5行的平均值
df['ma30']=df['close'].rolling(30).mean() # 计算每30行的平均值
           

rolling(num)函数很好的帮我们解决了取一定行数的问题,再取一个平均即可。

因为有29天月均线是没有值的,所以我们删除那29天,因为没有意义,然后我们可以画一下收盘价、5日均线、月均线的折线图,观察一下。

df=df.dropna()
df[['close','ma5','ma30']].plot()
plt.show()
           
利用双均线策略计算中国平安股票收益一、知识储备二、开始操作

从这个图中可以看出,2008-2009年,股票一路走跌,结合当年汶川地震,原因大家应该都知道了。

3.计算金叉、死叉日期

好的,那么接下来我们需要计算一下金叉和死叉的日期,我们这边选择从2010年开始截取数据做策略。

同样,这边用循环来计算。

df=df['2010-01-01':]
# 计算金叉、死叉日期
# 创建一个金叉、死叉空列表
golden_cross=[]
death_cross=[]
# 用循环计算金叉、死叉日期
for i in range(1,len(df)):
    if df['ma5'][i]>=df['ma30'][i] and df['ma5'][i-1]<df['ma30'][i-1]:
        golden_cross.append(df.index[i])
    if df['ma5'][i]<=df['ma30'][i] and df['ma5'][i-1]>df['ma30'][i-1]:
        death_cross.append(df.index[i])
           

金叉:如果前一天的日均线小于月均线,后一天的日均线大于月均线,则说明两天之间存在了一个焦点,这样我们选取后一天作为金叉日期。因为实际生活中你不可能提前知道第二天会出现金叉,如果你能预先知道,那你炒股的收益一定会更高😏

死叉:上面的概念反过来就是了,相信你一定能搞懂😄

OK,那么同样的套路,学会了循环计算金叉和死叉后,还有个计算的方式跟大家说一下。

sr1=df['ma5']<df['ma30'] # 获取5日均线<30日均线的布尔序列
sr2=df['ma5']>=df['ma30'] # 获取5日均线>=30日均线的布尔序列
death_cross=df[sr1 & sr2.shift(1)].index
golden_cross=df[~(sr1 | sr2.shift(1))].index
           

这个理解起来可能比较难,所以先让我给你解释一下。

  • 首先,我们先制定(5日均线<30日均线)这样一个布尔条件,然后假设在某个10日时间内,它的布尔序列是这样的TTTTFFFFTT.

OK,那么我们可以得出前面4天都是日均线<月均线,在第5天的时候出现>=的情况,那么说明金叉日期出现了。

OK,那么同样在第九天的时候,出现了死叉日期。

  • 然后,我们制定(5日均线>=30日均线)这样一个布尔条件,然后同样在上面的10日时间内,它的布尔序列正好相反FFFFTTTTFF

OK,那么得出的金叉和死叉日期和上面是一致的。

  • 最后,我们将两个序列拿到一起做对比

T T T T F F F F T T

   F F F F T T T T F F

注意,这边我将下面那个序列往后偏移了一位,看下图中我们知道了金叉日期和死叉日趋

利用双均线策略计算中国平安股票收益一、知识储备二、开始操作

好的,相信你这下就明白了上面的代码是做什么的了。

利用双均线策略计算中国平安股票收益一、知识储备二、开始操作

4.计算收益

好的,接下来就到了实操的环节。假定我们手上有十万启动资金,每次都能买入100股,并从2010年开始使用双均线策略去炒股,让我们看看十年时间,“中国平安601318”这支股票能为我们带来多少收益?或让我们亏损多少呢?废话不多说,上代码。

# 计算收益,每一手买100股
original_money=100000 # 拥有的初始资金十万
money = original_money # 炒股过程中的资金变化(迭代变量)
hold=0 #持有多少股
golden_series=pd.Series(1,index=golden_cross) # 创建金叉日期序列
death_series=pd.Series(0,index=death_cross) # 创建死叉日期序列
signal=golden_series.append(death_series).sort_index() # 创建买入卖出信号日期序列
for i in range(0,len(signal)):
    oprice = df['open'][signal.index[i]] # 获取当天的开盘价
    cprice = df['close'][signal.index[i]] # 获取当天的收盘价
    if signal.iloc[i]==1:
        # 取到金叉日期,买入
        buy=(money//(100*oprice)) # 计算买了多少手
        hold+=buy*100 #计算手里加了多少股票
        money-=buy*100*oprice #计算剩余多少资金
    else:
        # 取到死叉日期,卖出
        money+=hold*cprice # 计算剩余资金
        hold=0 # 抛出所有股票
final_price=df['close'][-1] # 可能手中还有剩余股票,所以获取最后一天的收盘价
now_money=hold*final_price+money
print('预计收入:%.2f'%(now_money-original_money))
           

上面的过程映射到实际生活的买卖中稍有出入,如果长期执行此策略的话,误差可以忽略不记。

截至2020-12-29日为止,预计收入为184496.20元。也就是说,平均每年能赚1.8W。

利用双均线策略计算中国平安股票收益一、知识储备二、开始操作

.

好了,本篇博文到这边就结束了,如果你想入手整理好的代码和数据,可以访问https://www.kesci.com/mw/project/5feadb15840381003bfbb44d

投资有风险,入市须谨慎!!!本文只带大家了解一下,不作为选股买股参考peace!!!