【问题标题】:Fetching technical indicators from yahoo api从 yahoo api 获取技术指标
【发布时间】:2015-09-01 17:58:13
【问题描述】:

我正在尝试从 yahoo Finance api 获取 RSI 指标。

到目前为止,我可以获取 CSV 格式的报价,但似乎没有针对特定指标(如 RSI)的 api。

有人知道怎么做吗?

谢谢

【问题讨论】:

    标签: java api finance yahoo-finance stockquotes


    【解决方案1】:

    您拥有计算 RSI 所需的所有数据。 http://www.investopedia.com/terms/r/rsi.asp

    import numpy as np
    from urllib.request import urlopen
    
    # The stock to fetch
    stock = 'AMD'
    
    # Yahoos API
    urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=1y/csv'
    stockFile = []
    
    # Fetch the stock info from Yahoo API
    try:
        sourceCode = urlopen(urlToVisit).read().decode('utf-8')
        splitSource = sourceCode.split('\n')
        for eachLine in splitSource:
            splitLine = eachLine.split(',')
            if len(splitLine)==6:
                if 'values' not in eachLine:
                    stockFile.append(eachLine)
    except Exception as e:
        print(str(e), 'failed to organize pulled data')
    
    except Exception as e:
        print(str(e), 'failed to pull price data')
    
    date, closep, highp, lowp, openp, volume = np.loadtxt(stockFile, delimiter=',',unpack=True,)
    
    
    def rsiFunc(prices, n=14):
        # Returns an RSI array
        deltas = np.diff(prices)
        seed = deltas[:n+1]
        up = seed[seed>=0].sum()/n
        down = -seed[seed<0].sum()/n
        rs = up/down
        rsi = np.zeros_like(prices)
        rsi[:n] = 100. - 100./(1.+rs)
    
        for i in range(n, len(prices)):
            delta = deltas[i-1]
            if delta > 0:
                upval = delta
                downval = 0.
            else:
                upval = 0.
                downval = -delta
            up = (up*(n-1)+upval)/n
            down = (down*(n-1)+downval)/n
            rs = up/down
            rsi[i] = 100. - 100./(1.+rs)
        return rsi
    
    
    # Lets see what we got here
    rsi = rsiFunc(closep)
    n = 0
    for i in date:
        print('Date stamp:', i, 'RSI', rsi[n])
        n+=1
    

    【讨论】:

    • 我可以在您有趣的答案中看到很多努力。我希望我能全部投票。不幸的是,大多数成员不鼓励像你这样有帮助和有用的人
    【解决方案2】:

    雅虎财经没有这样的 API。我发现了一个有趣的 API,它似乎可以满足您的需求 (https://www.stockvider.com/)。它是全新的,API 没有提供很多功能,但它旨在涵盖最常见的技术指标。到目前为止,您只能获取 xml 格式的数据。

    例如,您可以像这样获取 Apple 股票的 RSI 值:https://api.stockvider.com/data/NASDAQ/AAPL/RSI?start_date=2015-05-20&end_date=2015-07-20

    【讨论】:

      【解决方案3】:

      您可以通过软件包获取报价并计算所需的指标。请参阅quantmodTTR 的示例。

      例如:

      library(quantmod)
      getSymbols('F',src='yahoo',return.class='ts') 
      fpr <- Cl(F)
      rsi <- RSI(fpr)
      
      tail(cbind(Cl(F),rsi),10)
      

      【讨论】:

        猜你喜欢
        • 2021-02-27
        • 2021-03-30
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多