Python 3.x 将月末交易日历应用于Yahoo API数据
这是我的第一篇文章,我对Python和Pandas还不熟悉。根据我在这个网站上看到的许多问题和答案,我一直在努力拼凑下面的代码。我的下一个挑战是如何将月末交易日历应用于下面的代码,以便输出包括“VTI和BND”列出的两个ETF的月末“调整收盘”值。“100ma”100日移动平均线仍必须基于前100个交易日计算 @ryan sheftel似乎在这个网站上有一些可以工作的东西,但我似乎无法用我的代码来实现它,以满足我的需求 到目前为止,我已经整理好了代码:Python 3.x 将月末交易日历应用于Yahoo API数据,python-3.x,pandas,Python 3.x,Pandas,这是我的第一篇文章,我对Python和Pandas还不熟悉。根据我在这个网站上看到的许多问题和答案,我一直在努力拼凑下面的代码。我的下一个挑战是如何将月末交易日历应用于下面的代码,以便输出包括“VTI和BND”列出的两个ETF的月末“调整收盘”值。“100ma”100日移动平均线仍必须基于前100个交易日计算 @ryan sheftel似乎在这个网站上有一些可以工作的东西,但我似乎无法用我的代码来实现它,以满足我的需求 到目前为止,我已经整理好了代码: import datetime as d
import datetime as dt #set start and end dates for data we are using
import pandas as pd
import numpy as np
import pandas_datareader.data as web # how I grab data from Yahoo Finance API. Pandas is popular data analysis library.
start = dt.datetime(2007,1,1)
end = dt.datetime(2017,2,18)
vti = web.DataReader('vti', 'yahoo',start, end)# data frame, stock ticker symbol, where getting from, start time, end time
bnd = web.DataReader('bnd', 'yahoo', start, end)
vti["100ma"] = vti["Adj Close"].rolling(window=100).mean()
bnd["100ma"] = bnd["Adj Close"].rolling(window=100).mean()
# Below I create a DataFrame consisting of the adjusted closing price of these stocks, first by making a list of these objects and using the join method
stocks = pd.DataFrame({'VTI': vti["Adj Close"],
'VTI 100ma': vti["100ma"],
'BND': bnd["Adj Close"],
'BND 100ma': bnd["100ma"],
})
print (stocks.head())
stocks.to_csv('Stock ETFs.csv')
我会使用
asfreq
对每个营业月进行采样
import datetime as dt #set start and end dates for data we are using
import pandas as pd
import numpy as np
import pandas_datareader.data as web # how I grab data from Yahoo Finance API. Pandas is popular data analysis library.
start = dt.datetime(2007,1,1)
end = dt.datetime(2017,2,18)
ids = ['vti', 'bnd']
data = web.DataReader(ids, 'yahoo', start, end)
ac = data['Adj Close']
ac.join(ac.rolling(100).mean(), rsuffix=' 100ma').asfreq('BM')
bnd vti bnd 100ma vti 100ma
Date
2007-01-31 NaN 58.453726 NaN NaN
2007-02-28 NaN 57.504188 NaN NaN
2007-03-30 NaN 58.148760 NaN NaN
2007-04-30 54.632232 60.487535 NaN NaN
2007-05-31 54.202353 62.739991 NaN 59.207899
2007-06-29 54.033591 61.634027 NaN 60.057136
2007-07-31 54.531996 59.455505 NaN 60.902113
2007-08-31 55.340892 60.330213 54.335640 61.227386
2007-09-28 55.674840 62.650936 54.542452 61.363872
2007-10-31 56.186500 63.773849 54.942038 61.675567
我会使用
asfreq
对每个营业月进行采样
import datetime as dt #set start and end dates for data we are using
import pandas as pd
import numpy as np
import pandas_datareader.data as web # how I grab data from Yahoo Finance API. Pandas is popular data analysis library.
start = dt.datetime(2007,1,1)
end = dt.datetime(2017,2,18)
ids = ['vti', 'bnd']
data = web.DataReader(ids, 'yahoo', start, end)
ac = data['Adj Close']
ac.join(ac.rolling(100).mean(), rsuffix=' 100ma').asfreq('BM')
bnd vti bnd 100ma vti 100ma
Date
2007-01-31 NaN 58.453726 NaN NaN
2007-02-28 NaN 57.504188 NaN NaN
2007-03-30 NaN 58.148760 NaN NaN
2007-04-30 54.632232 60.487535 NaN NaN
2007-05-31 54.202353 62.739991 NaN 59.207899
2007-06-29 54.033591 61.634027 NaN 60.057136
2007-07-31 54.531996 59.455505 NaN 60.902113
2007-08-31 55.340892 60.330213 54.335640 61.227386
2007-09-28 55.674840 62.650936 54.542452 61.363872
2007-10-31 56.186500 63.773849 54.942038 61.675567
乍一看,我认为上面的脚本有效。然后我注意到,当我将整个日期范围导出到excel时,2010年5月31日(阵亡将士纪念日)和2013年3月29日(耶稣受难日)显示为没有数据。有人知道如何在piRSquared提供的代码中解决这个问题吗?乍一看,我认为上面的脚本是有效的。然后我注意到,当我将整个日期范围导出到excel时,2010年5月31日(阵亡将士纪念日)和2013年3月29日(耶稣受难日)显示为没有数据。有人知道如何在piRSquared提供的上述代码中解决这个问题吗?