參考文章是這個
版权声明:本文为博主原创文章,遵循 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
打印出來長這樣
那原PO有多一個p_change
所以我們增添一行
df['p_change'] = (close[-1] - close)/close
打印出來長這樣
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()
意思是收益小於股票自身累積的意思嗎...