Загрузка данных об акциях с www.alphavantage.co в Excel

с тех пор, как Yahoo Finance больше не поддерживает автоматическую загрузку, я проверил другие источники, и сайт www.alphavantage.co, похоже, соответствует моим требованиям. Однако данные не поступают в Excel. Кто-нибудь там уже программировал? Я использую тестовую ссылку https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo&datatype=csv. Он загружает данные в файл csv при его открытии в браузере, но в Excel данные не поступают.

Большое спасибо заранее, Ян


person Jan Abraham    schedule 30.07.2017    source источник
comment
Эта ссылка работает для меня.   -  person jamheadart    schedule 30.07.2017
comment
Что вы имеете в виду под словом «прибыть в Excel»? Кажется, они обещают CSV-файл, который вы можете открыть в Excel. Итак, то, что должно получиться, - это файл csv.   -  person Variatus    schedule 30.07.2017
comment
Я использую следующий код для его загрузки:   -  person Jan Abraham    schedule 30.07.2017


Ответы (1)


В VBA выберите Инструменты> Ссылки и выберите следующие ссылки:

  • Microsoft Script Control 1.0
  • Среда выполнения сценариев Microsoft

Следующая функция получит самые последние данные (открытие, максимум, минимум, закрытие и объем) для определенного символа:

Public Function GetLastCloseData(symbol As String) As Dictionary
    Dim scriptControl As Object
    Dim json As Object
    Dim time_series As Object
    Dim date_data As Object
    Dim date_label As String
    Dim date_offset As Integer

    Set scriptControl = CreateObject("MSScriptControl.ScriptControl")
    scriptControl.Language = "JScript"

    'Retrieve historical price data in JSON format
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & symbol & "&apikey=" & API_KEY, False
        .send
        Set json = scriptControl.Eval("(" + .responseText + ")")
        .abort
    End With

    'CallByName returns an error if it cannot find the requested selection.
    'The code is written to skip over those errors.
    On Error Resume Next

    Set time_series = CallByName(json, "Time Series (Daily)", VbGet)

    'If time series property was found...
    If Not time_series Is Nothing Then
        date_offset = 0
        'Retrieve the most recent closing price by looking for todays date. If it's not found,
        'iterate through the last week of dates, stopping whenever the most recent is found.
        While date_data Is Nothing And date_offset < 8
            date_label = Format(DateAdd("d", -date_offset, Date), "yyyy-mm-dd")
            Set date_data = CallByName(time_series, date_label, VbGet)
            date_offset = date_offset + 1
        Wend
    End If

    If Not date_data Is Nothing Then
        Set GetLastCloseData = New Dictionary
        With GetLastCloseData
            .Add "Open", CDbl(CallByName(date_data, "1. open", VbGet))
            .Add "High", CDbl(CallByName(date_data, "2. high", VbGet))
            .Add "Low", CDbl(CallByName(date_data, "3. low", VbGet))
            .Add "Close", CDbl(CallByName(date_data, "4. close", VbGet))
            .Add "Volume", CLng(CallByName(date_data, "5. volume", VbGet))
        End With
    End If

    'set error handling back to normal
    On Error GoTo 0

End Function

Следующая подпрограмма демонстрирует, как использовать результаты:

Public Sub GetStockData()
    Dim daily_data As Dictionary

    Set daily_data = GetLastCloseData("SPY")
    Debug.Print daily_data("Open")
    Debug.Print daily_data("High")
    Debug.Print daily_data("Low")
    Debug.Print daily_data("Close")
    Debug.Print daily_data("Volume")
End Sub

Выход:

260 
260.15 
259.57 
259.76 
45033392 
person NYITGUY    schedule 24.11.2017
comment
ПРИМЕЧАНИЕ. Эта функция требует, чтобы вы определили свой API-ключ Alphavantage в начале модуля следующим образом: Private Const API_KEY = "api_key_here" В качестве альтернативы вы можете просто вручную добавить свой API-ключ в строку URL-адреса. - person NYITGUY; 24.11.2017