close

參考文章是這個

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/niuge8905/article/details/78287355

那我們開始吧!

首先你要下載0050的股票資料, 詳細作法請見之前的文章

然後先這樣

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

df = pd.read_csv(r'd:\0050.tw.csv')
df['Date'] = pd.to_datetime(df['Date'])

df.set_index("Date", inplace=True)

close= df.Close

打印出來長這樣

擷取.PNG

那原PO有多一個p_change

所以我們增添一行

df['p_change'] = (close[-1] - close)/close

打印出來長這樣

擷取.PNG

OKOK, 我們可以來試試看原po的程式碼

測試了一下, 從2007年太長了, 圖會很難看, 所以重新下載資料

from pandas_datareader import data as web
import datetime as dt
import yfinance as yf

yf.pdr_override()

start = dt.datetime(2019, 1, 1)
end = dt.datetime(2019, 10, 1)

df = web.get_data_yahoo(['0050.TW'],start, end)
df.to_csv(r'd:\0050.TW.csv')

然後測試看看

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

df = pd.read_csv(r'd:\0050.tw.csv')
df['Date'] = pd.to_datetime(df['Date'])

df.set_index("Date", inplace=True)

close= df.Close

df['p_change'] = (close[-1] - close)/close

ret=df.p_change/100
df['DIFF'],df['DEA'],df['MACD'] = talib.MACD(np.array(close),
                            fastperiod=12, slowperiod=26, signalperiod=9)


diff=df.DIFF
dea=df.DEA


macdSignal=pd.Series(0,index=close.index)

for i in range(10,len(close)):
    #if all([diff[i]>dea[i]>0,diff[i-1]<dea[i-1]]):
    if all([diff[i]>dea[i]]):
        macdSignal[i]=1
    #elif all([diff[i]<dea[i]<0,diff[i-1]>dea[i-1]]):
        #macdSignal[i]=-1


macdTrade=macdSignal.shift(1).dropna()
macdRet=ret*macdTrade.dropna()

#累积收益表现
#股票累积收益率
cumStock=np.cumprod(1+ret[macdRet.index[0]:])-1
#策略累积收益率
cumTrade=np.cumprod(1+macdRet)-1
plt.plot(cumStock,label="cumStock",color='k')
plt.plot(cumTrade,label="cumTrade",color='r',linestyle=':')
plt.show()

Figure_1.png

意思是收益小於股票自身累積的意思嗎...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    張郎屋 發表在 痞客邦 留言(0) 人氣()