**初学者Python代码运行缓慢(Yahoo Finance Stock Screener)

时间:2018-06-13 23:40:17

标签: python performance for-loop yahoo-finance

堆栈上的第一个问题。我是一个想用Python编写股票筛选器的新手编码员。我正在使用Yahoo!财务模块https://github.com/lukaszbanasiak/yahoo-finance。我的整个程序需要20多分钟才能执行。见下文:它由几乎所有可交易的美国股票组成。对于列表中的每个股票,程序会查找它的历史记录,计算一些值,并在股票的统计数据落在我的参数范围内打印。有没有办法加快速度?谢谢!

from yahoo_fin.stock_info import get_data
List=["AA","AAC","AAMC",]
#list continues for 7000 more elements

Limit=90
for stock in List:
    try: 
        df=get_data(stock,start_date='03/28/2018')
        Results,Averages,AvgHighs,AvgLows,=[],[],[],[]
        AverageVolume=(df['volume'].mean())
        AvgHigh=(df['high'].mean())
        AvgLow=(df['low'].mean())
        Average=(AvgHigh+AvgLow)/2
        SUM=sum(i>Average for i in (df['high']))
        if ((SUM/(len(df['high'])))>(Limit/100)) and (AverageVolume>80000) and 
(200>Average>5.99):
            Results.append(stock)
            Averages.append(round(Average,2))
            AvgHighs.append(round(AvgHigh,2))
            AvgLows.append(round(AvgLow,2))
            print(Results,AvgLows,Averages,AvgHighs)
    except (ValueError,KeyError,RuntimeError,TypeError,KeyboardInterrupt):
        continue 

1 个答案:

答案 0 :(得分:1)

我认为雅虎财经模块的“成千上万”调用很可能是为什么需要这么长时间(因此答案就是你要批量调用这些电话的方式 - 据说,我并不完全明白这个库是如何工作的,或者即使它们支持这样的功能)。总之,围绕web api调用的for循环会尖叫性能问题。

我对您的代码实际引用的内容感到有点困惑。您是否介意链接到图书馆yahoo_fin的哪个位置?我看到yahoo-finance库,但似乎没有名为get_data的方法。