股票分裂api谷歌或雅虎

mil*_*lan 6 google-finance yahoo-finance

我正在寻找一种获取股票分割信息的方法.使用雅虎股票API,我可以得到任何符号的所有类型的信息,但我不认为我可以得到分割比率,甚至是否分裂.有谁知道获取此信息的方法?

小智 5

借助 pandas datareader 包,您可以在 python 3 中轻松完成。开始定义一个将拆分历史记录作为数据帧返回的函数:

def split_history(stock, date_start, date_end, limit_denominator=1000):
    from decimal import Decimal
    from fractions import Fraction
    from pandas_datareader import data as web
    df = web.DataReader(stock, data_source='yahoo-actions', start=date_start, end=date_end)
    is_split = df['action']=='SPLIT'
    df = df[is_split]
    ratios = []
    for index, row in df.iterrows():
        # Taking the inverse of the row['value'] as it is Yahoo finance convention
        ratio = Fraction(1/Decimal(row['value'])).limit_denominator(limit_denominator)
        ratios.append("{num} for {denom}".\
                            format(num=ratio.numerator, denom=ratio.denominator))
    df['ratio'] = ratios
    return df
Run Code Online (Sandbox Code Playgroud)

现在我们可以以微软('MSFT')的拆分为例:

stock = 'MSFT'
date_start = '1987-01-01'
date_end = '2020-07-22'
split_history(stock, date_start, date_end)
Run Code Online (Sandbox Code Playgroud)
            action  value       ratio
2003-02-18  SPLIT   0.500000    2 for 1
1999-03-29  SPLIT   0.500000    2 for 1
1998-02-23  SPLIT   0.500000    2 for 1
1996-12-09  SPLIT   0.500000    2 for 1
1994-05-23  SPLIT   0.500000    2 for 1
1992-06-15  SPLIT   0.666667    3 for 2
1991-06-27  SPLIT   0.666667    3 for 2
1990-04-16  SPLIT   0.500000    2 for 1
1987-09-21  SPLIT   0.500000    2 for 1
Run Code Online (Sandbox Code Playgroud)

它还可以正确处理反向股票拆分:

            action  value       ratio
2003-02-18  SPLIT   0.500000    2 for 1
1999-03-29  SPLIT   0.500000    2 for 1
1998-02-23  SPLIT   0.500000    2 for 1
1996-12-09  SPLIT   0.500000    2 for 1
1994-05-23  SPLIT   0.500000    2 for 1
1992-06-15  SPLIT   0.666667    3 for 2
1991-06-27  SPLIT   0.666667    3 for 2
1990-04-16  SPLIT   0.500000    2 for 1
1987-09-21  SPLIT   0.500000    2 for 1
Run Code Online (Sandbox Code Playgroud)
                action  value   ratio
 2020-07-22     SPLIT   12.0    1 for 12
Run Code Online (Sandbox Code Playgroud)

ps:可能有更好的方法来输入日期。ps2:另外, limit_denominator 是为了避免错误的舍入。您可以在罕见的分流比情况下扩展它。