阿尔法华帝:使用Excel VBA拉从CSV文件中的数据
我是雅虎财经API难民(他们停止他们的API服务)尝试切换到阿尔法华帝。 我修改了以前用于Yahoo Finance的以下代码,但我在Excel中遇到了#VALUE错误。阿尔法华帝:使用Excel VBA拉从CSV文件中的数据
以下作品的网址本身(它会打开一个CSV如果你输入到你的网页浏览器),所以我想我真正的问题在于提取的CSV正确的数据到我的Excel电子表格。任何人都可以提供帮助吗?
我试图从CSV提取第2行,第5列数据(最后的收盘价)。提前谢谢了!
Function StockClose(Ticker As String)
Dim URL As String, CSV As String, apikey As String, SCRows() As String, SCColumns() As String, pxClose As Double
apikey = "*censored*"
URL = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & Ticker & "&outputsize=full&" & apikey & "&datatype=csv"
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
xmlhttp.Open "GET", URL, False
xmlhttp.Send
CSV = xmlhttp.responseText
'split the CSV into rows
SCRows() = Split(CSV, Chr(10))
'split the relevant row into columns. 0 means 1st row, starting at index 0
SCColumns() = Split(SCRows(1), ",")
'6 means: 5th column; starting at index 0 - price close is in the 5th column
pxClose = SCColumns(6)
StockClose = pxClose
Set http = Nothing
End Function
样本数据的返回,如果我提取JSON而不是CSV:
{ “元数据”:{ “1信息”:“每日价格(开盘,高,低,“关闭”和“卷” “2.符号”:“SGD = X”, “3.最后刷新”:“2017-11-10”, “4.输出尺寸”:“全尺寸”, “5.时区”:“美国/东部” }, “时间序列(每日)”:{ “201 7-11-13“:{ ”1。打开“:”1.3588“, ”2。高“:”1.3612“, ”3。低“:”1.3581“, ”4。关闭“:”1.3587“, ”5。体积“:”0“ }, ”2017-11-10“:{ ”打开“:”1.3588“, ”2。高“:”1.3612“, ”3。低“:”1.3581“, ”4。关闭“:”1.3587“, ”5。卷“:‘0’ },
的‘从网站CSV’选项是一个可下载的文件,而不是文本文档解析这样一个简单的办法是使用该网站的JSON选项,而不是,这很容易装入一个字符串。
因为你只需要一个值,这是最简单的只是搜索字符串“关闭”,并在其后返回值。
这里有一个快速的解决方案,你可以为适应需要:
Option Explicit
Function StockClose(Ticker As String) As Double
Dim URL As String, json As String, apiKey As String, xmlHTTP As Object
Dim posStart As Integer, posEnd As Integer, strClose As String
apiKey = "demo"
URL = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & Ticker & "&outputsize=full&apikey=" & apikey
Set xmlHTTP = CreateObject("MSXML2.XMLHTTP")
xmlHTTP.Open "GET", URL, False
xmlHTTP.Send
json = xmlHTTP.responseText
Set xmlHTTP = Nothing
posStart = InStr(json, "4. close") + 12
posEnd = InStr(posStart, json, """") - 1
strClose = Mid(json, posStart, posEnd - posStart)
StockClose = Val(strClose)
End Function
谢谢Ashlee,我试过上面的代码,但函数总是返回0.你认为这可能是因为在json中有多个“4. close”?下面提取的样品: “时间序列(日报)”:{ “2017年11月13日”:{ “1.打开”: “1.3588”, “2高”: “1.3612”, “ 3.“low”:“1.3581”, “4. close”:“1.3587”, “5. volume”:“0” }, “2017-11-10”:{ “1. open”: “1.3588”, “2. high”:“1.3612”, “3. low”:“1.3581”, “4. close”:“1.3587”, “5. volume”:“0” – volvader
hmm,它应该没关系。它正在寻找第一次亮相。大写/小写可能或可能不重要。你的文件中的情况与代码相同:'4。 close'? – ashleedawg
您正在查看的代码是什么? – ashleedawg
当雅虎结束他们的API服务时,这是一个悲伤的日子。尽管如此,还有很多选择。您可以使用Python获取股票的时间序列数据。你也可以使用R.我会让你知道如何利用这些技术,因为你是一名Excel-VBA用户,如果你不想这些技术,我不想强迫你选择这些技术。作为替代方案,请考虑下面列出的这两个选项之一。
http://finance.jasonstrimpel.com/bulk-stock-download/
http://investexcel.net/multiple-stock-quote-downloader-for-excel/
对于第二个网址,点击名为'Get Excel Spreadsheet to Download Bulk Historical Stock Data from Google Finance'
的链接,你可以下载一个工具,它应该做你想要的一切。
检查[这个答案](https://*.com/a/43969543/2165759),它可以帮助你与雅虎财经的API来管理。 – omegastripes