Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python股票筛选器赢得';不要停止跑步_Python_Finance_Stock - Fatal编程技术网

Python股票筛选器赢得';不要停止跑步

Python股票筛选器赢得';不要停止跑步,python,finance,stock,Python,Finance,Stock,新的程序员和第一次发布问题。我真的很想得到一些关于我正在尝试运行的股票筛选程序的帮助。基本上,我从CSV文件中提取了一堆股票代码(大约7000个),然后从Finviz(金融数据网站)中获取每个股票的数据。然后我根据一本投资书制定了一些标准。代码可能看起来很糟糕,所以如果你有机会看一下的话,我非常乐意接受反馈 问题是,我还没有让它工作。我不是说它停止了,出现了一个错误,我是说它一直在运行。我的代码中一定有一部分花费了这么长时间。任何帮助都将不胜感激。代码如下: import pandas as p

新的程序员和第一次发布问题。我真的很想得到一些关于我正在尝试运行的股票筛选程序的帮助。基本上,我从CSV文件中提取了一堆股票代码(大约7000个),然后从Finviz(金融数据网站)中获取每个股票的数据。然后我根据一本投资书制定了一些标准。代码可能看起来很糟糕,所以如果你有机会看一下的话,我非常乐意接受反馈

问题是,我还没有让它工作。我不是说它停止了,出现了一个错误,我是说它一直在运行。我的代码中一定有一部分花费了这么长时间。任何帮助都将不胜感激。代码如下:

import pandas as pd
import numpy as np

# Stock ticker URLs
# Local path
stock_tickers = r'local path/stock_symbols.csv'
df = pd.read_csv(stock_tickers)

stocks = df['Symbol'].tolist()

from bs4 import BeautifulSoup as bs
import requests


def get_fundemental_data(df):
    for symbol in df.index:
        try:
            url = ('http://finviz.com/quote.ashx?t=' + symbol.lower())
            soup = bs(requests.get(url).content, features="lxml")
            for m in df.columns:
                df.loc[symbol, m] = fundemental_metric(soup, m)
        except Exception as e:
            print(symbol, 'not found')
    return df


def fundemental_metric(soup, metric):
    return soup.find(text=metric).find_next(class_='snapshot-td2').text


metric = ['P/B',
          'P/E',
          'Market Cap',
          'Current Ratio',
          'Forward P/E',
          'PEG',
          'Debt/Eq',
          'EPS (ttm)',
          'Dividend %',
          'ROE',
          'ROI',
          'EPS Q/Q',
          'Insider Own'
          ]

df = pd.DataFrame(index=stocks, columns=metric)
df = get_fundemental_data(df)

# CLEAN UP THE DATA

# Replace '-' and '' values with NaN
df = df.replace('-', np.NaN)
df = df.replace('', np.NaN)

# Some metrics have 'B' or 'M' at the end to indicate billions or millions of $
# Convert all those values to floats measured in billions of $
df.loc[df['Market Cap'].str.strip().str[-1] == 'M', 'Market Cap'] = df['Market Cap'].str.strip().str[:-1].astype(float)\
                                                                   / 1000
df.loc[df['Market Cap'].str.strip().str[-1] == 'B', 'Market Cap'] = df['Market Cap'].str.strip().str[:-1].astype(float)

# Remove "%" signs
df['ROI'] = (df['ROI'].str[:-1])
df['ROE'] = (df['ROE'].str[:-1])
df['Dividend %'] = (df['Dividend %'].str[:-1])
df['EPS Q/Q'] = (df['EPS Q/Q'].str[:-1])
df['Insider Own'] = (df['Insider Own'].str[:-1])
df['Inst Own'] = (df['Inst Own'].str[:-1])

# Convert all values to floats
df = df.astype(float)

# Create a new DF for easy manipulation
df_II = df

# INTELLIGENT INVESTOR CRITERIA #

# Businesses which are "adequately sized" (i.e. market cap of >$2 billion)
df_II = df_II[(df_II['Market Cap'] > 2)]

# Businesses with a 'strong financial condition' (i.e. current ratio > 3:2)
df_II = df_II[(df_II['Current Ratio'] >= 1.5)]

# Price of stock no more than 1.5 times net asset value. Price-to-book ratio is less than 1.5
df_II = df_II[(df_II['P/B'] <= 1.5)]

# Business has demonstrated earning power (i.e. EPS Q/Q > 10%)
df_II = df_II[(df_II['EPS Q/Q'] > 10)]

# Business earns good returns on equity while employing little or no debt (i.e. Debt/Equity < 1 & ROE > 10%)
df_II = df_II[(df['Debt/Eq'] < 1) & (df_II['ROE'] > 10)]

# Management having substantial ownership in the business (i.e. Insider ownership > 15%)
df_II = df_II[(df_II['Insider Own'] > 15)]

xl_filepath = r'local file path/BG_StockPicks.xlsx'
df_II.to_excel(xl_filepath, index=False)
将熊猫作为pd导入
将numpy作为np导入
#股票代码URL
#本地路径
stock\u tickers=r'local path/stock\u symbols.csv'
df=pd.read\u csv(股票行情)
stocks=df['Symbol'].tolist()
从bs4导入BeautifulSoup作为bs
导入请求
def获取基本数据(df):
对于df.index中的符号:
尝试:
url=('http://finviz.com/quote.ashx?t=“+symbol.lower())
soup=bs(requests.get(url.content,features=“lxml”)
对于df.columns中的m:
df.loc[符号,m]=基本度量(单位,m)
例外情况除外,如e:
打印(符号“未找到”)
返回df
def基本计量单位(汤,计量单位):
返回soup.find(text=metric).find_next(class='snapshot-td2').text
指标=['P/B',
“市盈率”,
“市值”,
“流动比率”,
“远期市盈率”,
"挂",,
“债务/Eq”,
“每股收益(ttm)”,
“股息%”,
“ROE”,
“投资回报率”,
“EPS Q/Q”,
“内部人自己的”
]
df=pd.DataFrame(指数=股票,列=度量)
df=获取基本数据(df)
#清理数据
#将“-”和“”值替换为NaN
df=df.replace('-',np.NaN)
df=df.替换(“”,np.NaN)
#一些指标的末尾有“B”或“M”,表示数十亿或数百万的数据$
#将所有这些值转换为以十亿为单位的浮点值$
df.loc[df['Market Cap'].str.strip().str[-1]='M','Market Cap']=df['Market Cap'].str.strip().str[-1].aType(浮动)\
/ 1000
df.loc[df['Market Cap'].str.strip().str[-1]='B','Market Cap']=df['Market Cap'].str.strip().str[-1].aType(浮动)
#删除“%”符号
df['ROI']=(df['ROI'].str[:-1])
df['ROE']=(df['ROE'].str[:-1])
df['divident%']=(df['divident%].str[:-1])
df['EPS Q/Q']=(df['EPS Q/Q'].str[:-1])
df['Insider Own']=(df['Insider Own'].str[:-1])
df['Inst Own']=(df['Inst Own'].str[:-1])
#将所有值转换为浮点数
df=df.astype(浮动)
#创建一个新的DF以便于操作
df_II=df
#智能投资者标准#
#“足够规模”的企业(即市值>20亿美元)
df_II=df_II[(df_II[‘市值’]>2)]
#“财务状况良好”(即流动比率>3:2)的企业
df_II=df_II[(df_II[‘流动比率’]>=1.5)]
#股票价格不超过资产净值的1.5倍。价格与账面比率小于1.5
df_II=df_II[(df_II['P/B']10%)
df_II=df_II[(df_II['EPS Q/Q']>10)]
#企业在几乎不负债或不负债的情况下获得良好的权益回报(即负债/权益<1%和净资产收益率>10%)
df_II=df_II[(df[‘债务/均衡’]<1)和(df_II[‘股本回报率’]>10)]
#对企业拥有实质所有权的管理层(即内部人所有权>15%)
df_II=df_II[(df_II[‘内部人拥有’]>15)]
xl_filepath=r'local file path/BG_StockPicks.xlsx'
df_II.到excel(xl_文件路径,索引=False)

要收集更多信息,您可以添加一些日志记录(一些打印语句暂时可以使用)查看程序的运行位置。您也可以在调试模式下运行它,并在整个过程中添加断点,以查看哪些调用占用的时间最多。您可能还想了解制作数据帧副本的相关信息,特别是python中的按引用传递。我不确定代码df_II=df的行为是否完全符合您的预期错误,具体问题。至少找出代码挂起的位置,然后构建尽可能短的挂起方式相同的程序(在不做更改的情况下运行时,删除所有不需要严格复制确切问题的内容)。请参阅帮助中心中的定义和“修剪提示”至少,您可能想看看是否有办法在一个可下载的文件中获取所有股票信息,然后进行处理。发出7000个独立请求不太可能执行得很好,或者服务提供商会非常友好地关注:-)您必须提供stock_symbols.csv的布局。仅从财务角度来看,您可能希望首先将股票分为多个部门,然后设置特定于部门的标准。要收集更多信息,可以添加一些日志记录(一些打印语句暂时可以使用)查看程序的运行位置。您也可以在调试模式下运行它,并在整个过程中添加断点,以查看哪些调用占用的时间最多。您可能还想了解制作数据帧副本的相关信息,特别是python中的按引用传递。我不确定代码df_II=df的行为是否完全符合您的预期错误,具体问题。至少找出代码挂起的位置,然后构建尽可能短的挂起方式相同的程序(在不做更改的情况下运行时,删除所有不需要严格复制确切问题的内容)。请参阅帮助中心中的定义和“修剪提示”至少,您可能想看看是否有办法在一个可下载的文件中获取所有股票信息,然后进行处理。发出7000个独立请求不太可能执行得很好,或者服务提供商会非常友好地关注:-)您必须提供stock_symbols.csv的布局。仅从财务角度来看,您可能希望首先将股票分为多个板块,然后再设置s