堆栈上的第一个问题。我是一个想用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
答案 0 :(得分:1)
我认为雅虎财经模块的“成千上万”调用很可能是为什么需要这么长时间(因此答案就是你要批量调用这些电话的方式 - 据说,我并不完全明白这个库是如何工作的,或者即使它们支持这样的功能)。总之,围绕web api调用的for循环会尖叫性能问题。
我对您的代码实际引用的内容感到有点困惑。您是否介意链接到图书馆yahoo_fin
的哪个位置?我看到yahoo-finance库,但似乎没有名为get_data
的方法。