天天看點

利用雙均線政策計算中國平安股票收益一、知識儲備二、開始操作

一、知識儲備

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!!!