Exemplo n.º 1
0
def DL_earningsdates(argv=None):
    today = datetime.datetime.today()
    oneweeks = datetime.timedelta(days=21)
    threeweeks = datetime.timedelta(days=21)
    yec = YahooEarningsCalendar()
    earningsDF = None
    frames = []

    for i in xrange(1, 26, 1):
        if i > 1: today = today - (threeweeks)
        threeweeksago = today - threeweeks
        inthreeweeks = today + threeweeks
        earnings = yec.earnings_between(threeweeksago, inthreeweeks)

        df = pd.DataFrame(earnings)
        print 'Found ' + str(len(df)) + ' results for between ' + str(
            threeweeksago) + ' and ' + str(inthreeweeks)
        if ('startdatetime' not in df.columns) or len(df) == 0:
            print "no startdatetime detected/no data"
            continue
        df['startdatetime'] = pd.to_datetime(
            df['startdatetime'])  # TODO make timezone aware and convert to UTC
        pdtoday = pd.to_datetime(today)
        df['today'] = pdtoday
        df['temp'] = df['startdatetime'].view('int64') - df['today'].view(
            'int64')
        df['days'] = df['temp'].apply(lambda x: np.timedelta64(x, 'ns').astype(
            'timedelta64[D]') / np.timedelta64(1, 'D'))
        frames.append(df)
        df.to_csv('/root/data/temp/earningsdata-' + str(threeweeksago) + '-' +
                  str(inthreeweeks) + '.csv')

    earningsDF = pd.concat(frames)
    earningsDF.to_csv('/root/data/temp/earningsdata.csv')
 def get_earnings_for_days(date_from, date_to):
     try:
         calender_manager = YahooEarningsCalendar()
         data = calender_manager.earnings_between(date_from, date_to)
         return [EarningsData(i) for i in data]
     except KeyError:
         return []
Exemplo n.º 3
0
def GetCompanieslist():
    print("@" * 20 +
          "  Pls Hang on getting data from YahooEarningsCalendar API  " +
          "@" * 20)
    yec = YahooEarningsCalendar()

    date_from = pd.to_datetime(
        cfg.defaults["startdate"])  ##convert str to date format
    date_to = pd.to_datetime(cfg.defaults["enddate"])
    data = yec.earnings_between(date_from, date_to)  ### Pull the data
    print('\n' * 2)
    print("Successfully Fetched the data for time range", date_from, date_to)
    print('\n' * 2)
    df = pd.DataFrame(data)  ### Convert into DataFrame
    df = df.sort_values(by=['epsestimate'],
                        ascending=False)  ## Sort in Asc order by epsestimate
    #df=df[df.epsestimate>cfg.defaults["epsestimate_threshold"]] ## Filter the records
    df.startdatetime = df.startdatetime.apply(
        lambda a: pd.to_datetime(a).strftime("%Y-%m-%d %H:%M:%S"))
    df.fillna(0, inplace=True)
    for idx, data in df.iterrows():
        status = db.EarningCalender(data)
        #print(status,idx)
    companies = df.ticker.tolist()  ### Get the companies list
    #print(df.head())
    if companies:
        output = {"companies": companies, "status": True}
    else:
        output = {"companies": companies, "status": False}
    return output
Exemplo n.º 4
0
def generate_dfs(num_gl):

    start_date = datetime.now().date()
    end_date = datetime.now().date()
    gainers=get_day_gainers()
    topg=gainers.nlargest(num_gl,"% Change")
    topg=topg.drop(columns=["Price (Intraday)","Change","Volume","Avg Vol (3 month)"])

    losers=get_day_losers()
    topl=losers.nsmallest(num_gl,"% Change")
    topl=topl.drop(columns=["Price (Intraday)","Change","Volume","Avg Vol (3 month)"])
    #try:
    yec = YahooEarningsCalendar()
    earnings_list = yec.earnings_between(start_date, end_date)
    earnings_df = pd.DataFrame(earnings_list)
    earnings_df["% Change"]=""
    earnings_df["Current Price"]=""
    earnings_df["Previous Close"]=""
    earnings_df=earnings_df.drop(columns=["epsestimate","epsactual","epssurprisepct","startdatetime","timeZoneShortName","gmtOffsetMilliSeconds","quoteType"])
    for index, x in enumerate(earnings_df["ticker"]):
        try:
            earnings_df["Previous Close"][index]=get_quote_table(x , dict_result = True)["Previous Close"]
            earnings_df["Current Price"][index]=get_live_price(x)
            earnings_df["% Change"][index]=100*((earnings_df["Current Price"][index]-earnings_df["Previous Close"][index])/earnings_df["Previous Close"][index])
        except:
            pass
    earnings_df=earnings_df.dropna().sort_values(by="% Change",ascending=False)
    #except:
     #   earnings_df=pd.DataFrame
    return earnings_df , topg,topl
Exemplo n.º 5
0
def get_earnings_calendar(start_date, end_date):
    yec = YahooEarningsCalendar()
    print('Getting earnings calendar between {} - {}'.format(
        start_date, end_date))
    all_earnings_data = yec.earnings_between(start_date, end_date)
    all_earnings_df = pd.DataFrame(all_earnings_data)
    all_earnings_df = all_earnings_df.set_index('ticker')
    return all_earnings_df
def get_todays_earnings():
    today = datetime.date.today()
    date_from = datetime.datetime.combine(today, datetime.datetime.min.time())
    date_to = datetime.datetime.combine(today, datetime.datetime.max.time())

    yec = YahooEarningsCalendar()
    earnings_list = yec.earnings_between(date_from, date_to)

    ticker_list = []
    for stock in earnings_list:
        ticker_list.append(stock['ticker'])
    
    return np.unique(ticker_list)
Exemplo n.º 7
0
    def get_earnings(self, days_before = 0, days_after = 30):
        from yahoo_earnings_calendar import YahooEarningsCalendar
      
        dfdb = pd.read_sql(self.earnings_db, con=self.engine)
        yec = YahooEarningsCalendar()
        dfd = pd.DataFrame(yec.earnings_between(
            datetime.now() - timedelta(days=days_before), datetime.now() + timedelta(days=days_after)))
        
        df_new = dfd.append(dfdb, ignore_index=True)
        df_new.drop_duplicates(subset=["ticker","startdatetime","startdatetimetype"], inplace=True, keep="first")
        #save DATAFRAME to database
        df_new.to_sql(self.earnings_db, con=self.engine,
                   if_exists='replace', index=False)
        print(df_new)

        return df_new
Exemplo n.º 8
0
 def OneTimeUpdate(num_days):
     count = 1
     print('OneTimeUpdate')
     yec = YahooEarningsCalendar()
     date_from = datetime.date.today()
     date_to = date_from + dateutil.relativedelta.relativedelta(
         days=num_days)
     ERs = yec.earnings_between(date_from, date_to)
     ERs = [{k: item[k]
             for k in ('ticker', 'startdatetime')} for item in ERs]
     num_itr = len(ERs)
     for er in ERs:
         screener.objects.update_or_create(
             symbol=er['ticker'], defaults={'nextER': er['startdatetime']})
         print("itr %3d of %3d" % (count, num_itr))
         count = count + 1
def get_earnings():
    '''
        get earnings date and ticker from yahoo calendar library
        save as format:
        [
            {
            ticker: 'string',
            date: 'string',
            },
            ...
        ]


    '''
    print('earnings date script started.......')
    def get_front_date(date_delta):
        dates_list = []
        for i in range(0, date_delta):
            d = datetime.date.today()
            d += datetime.timedelta(i)
            if d.weekday() == 4:
                dates_list.append(str(d))
        #print(dates_list[-2])
        return dates_list[-1]


    front_date = get_front_date(15)
    print(front_date)

    # ========= check earnings calendar ==========
    date_from = datetime.datetime.strptime(date.today().strftime('%Y-%m-%d') + " 05:00:00",  '%Y-%m-%d %X')
    date_to = datetime.datetime.strptime(front_date + " " + "18:00:00", '%Y-%m-%d %X')
    yec = YahooEarningsCalendar()
    earnings_list= []
    earnings_calendar = yec.earnings_between(date_from, date_to)

    if earnings_calendar:
        for company in earnings_calendar:
            earnings_dict = {}
            earnings_dict['ticker'] = company['ticker']
            earnings_dict['date'] = re.findall('\d\d\d\d-\d\d-\d\d',company['startdatetime'])[0]
            earnings_list.append(earnings_dict)
        with open('/tmp/json/companies_earnings.json', 'w') as f:
            json.dump(earnings_list, f)
    print('earnings date script finished !')
    print('check /tmp/json/ for earnings_date')
Exemplo n.º 10
0
    def upcoming_earnings(self, days: int = 2) -> str:
        result = ''
        date_from = date.today()
        date_to = date_from + timedelta(days=days)

        yec = YahooEarningsCalendar()
        ue = yec.earnings_between(date_from, date_to)
        pd_ue = pd.DataFrame(ue)
        pd_ue = pd_ue.drop_duplicates(subset=['ticker'])
        columns = ['startdatetime', 'companyshortname', 'ticker']
        result = pd_ue[columns].to_string(header=False,
                                          index=False,
                                          formatters={
                                              columns[0]: formatter_date,
                                              columns[1]: '{:.15}'.format
                                          })

        return result
Exemplo n.º 11
0
def email():
    ezgmail.init()
    DAYS_AHEAD=1
    start_date = datetime.now().date() + timedelta(days=DAYS_AHEAD)
    end_date = (datetime.now().date() + timedelta(days=DAYS_AHEAD))

    # downloading the earnings calendar
    yec = YahooEarningsCalendar()
    earnings_list = yec.earnings_between(start_date, end_date)
    print(earnings_list)
    # saving the data in a pandas DataFrame
    earnings_df = pd.DataFrame(earnings_list)
    print(earnings_df["startdatetime"])
    earnings_df["startdatetime"]= earnings_df['startdatetime'].astype(str).str[:-14]
    earnings_df["Link"]="https://finance.yahoo.com/quote/{}".format(earnings_df["ticker"])
    for index, x in enumerate(earnings_df["ticker"]):
        earnings_df["Link"][index]="https://finance.yahoo.com/quote/{}".format(x)
    print(earnings_df["startdatetime"])
    print(earnings_df)
    earnings_df.to_csv( r"C:\Users\MIKEB\Desktop\Python\Fuhnance\Earnings_For_{}.csv".format(start_date))
    e,g,l=generate_dfs(10)
    msg="Top Gainers Today:\n\n"
    for index,x in enumerate(g["Symbol"]):
        try:
            line=f"{x} | {g['Name'][index]} | {g['% Change'][index]}% | https://finance.yahoo.com/quote/{x}\n\n"
            msg=msg+line
        except:
            pass
        print(msg)
    msg=msg+"\n\nTop Losers Today:\n\n"
    for index,x in enumerate(l["Symbol"]):
        try:
            line=f"{x} | {l['Name'][index]} | {l['% Change'][index]}% | https://finance.yahoo.com/quote/{x}\n\n"
            msg=msg+line
        except:
            pass
    msg=msg+"\n\nEarnings Action Today:\n\n"
    for index,x in enumerate(e["ticker"]):
        line=f"{x} | {e['companyshortname'][index]} | {e['startdatetimetype'][index]} | {round(e['% Change'][index],2)}% | https://finance.yahoo.com/quote/{x}\n\n"
        msg=msg+line
    print(msg)
    #for x in ["*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**"]:
    for x in ["*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**","*****@*****.**"]:
        ezgmail.send(x,"Gainers, Losers, and Earnings {}".format(start_date),msg,r"C:\Users\MIKEB\Desktop\Python\Fuhnance\Earnings_For_{}.csv".format(start_date))
Exemplo n.º 12
0
 def PopulateEarningDate(num_days):
     yec = YahooEarningsCalendar()
     date_to = datetime.date.today()
     date_from = date_to - dateutil.relativedelta.relativedelta(
         days=num_days)
     ERs = yec.earnings_between(date_from, date_to)
     ERs = [{
         k: item[k]
         for k in ('ticker', 'startdatetime', 'epsestimate', 'epsactual',
                   'epssurprisepct')
     } for item in ERs]
     for er in ERs:
         screener.objects.update_or_create(symbol=er['ticker'],
                                           defaults={
                                               'epsActual':
                                               er['epsactual'],
                                               'epsEstimate':
                                               er['epsestimate'],
                                               'mostRecentER':
                                               er['startdatetime'],
                                               'epsSurprisePC':
                                               er['epssurprisepct']
                                           })
Exemplo n.º 13
0
    def get_future_earnings(self):
        date_from = datetime.strptime(self.start_date, '%b %d %Y')
        date_to = datetime.strptime(self.end_date, '%b %d %Y')

        yec = YahooEarningsCalendar()
        el = yec.earnings_between(date_from, date_to)

        df_list = []

        for elem in el:
            if elem['ticker'] in self.name_list:
                str1 = elem['startdatetime']
                l1 = str1.split("T")
                date = l1[0]
                str2 = elem['startdatetimetype']
                type = ""
                if str2 == "BMO" or str2 == "AMC":
                    type = str2
                else:
                    l2 = l1[1].split(":")
                    if int(l2[0]) <= 16:
                        type = "BMO"
                    else:
                        type = "AMC"
                l2 = date.split("-")
                day = day_dict[calendar.weekday(int(l2[0]), int(l2[1]),
                                                int(l2[2]))]
                #print("|",elem['ticker'].ljust(10),elem['companyshortname'].ljust(40),day.ljust(4),date.ljust(15),type.ljust(8),"|")
                t = (elem['ticker'], elem['companyshortname'], day, date, type)
                df_list.append(t)
        arr = np.array(df_list)
        df = pd.DataFrame(arr,
                          columns=['Ticker', 'Company', 'Day', 'Date', 'When'])
        model = pandasModel(df)
        #print(tabulate(df, headers='keys', tablefmt='psql'))
        return model
Exemplo n.º 14
0
import datetime
from yahoo_earnings_calendar import YahooEarningsCalendar

date_from = datetime.datetime.strptime('May 5 2017  10:00AM',
                                       '%b %d %Y %I:%M%p')
date_to = datetime.datetime.strptime('May 8 2017  1:00PM', '%b %d %Y %I:%M%p')
yec = YahooEarningsCalendar()
print(yec.earnings_on(date_from))
print(yec.earnings_between(date_from, date_to))
Exemplo n.º 15
0
    'August 22 2020  10:00AM', '%B %d %Y %I:%M%p')
date_to = datetime.datetime.strptime(
    'September 10 2020  5:00PM', '%B %d %Y %I:%M%p')
"""


date_to = datetime.datetime.today().replace(year=datetime.datetime.today().year+1)

print("date_to: " + str(date_to))
print("today: " + str(datetime.datetime.today()))

yec = YahooEarningsCalendar()

earning_info_list = []

fetched_earnings = yec.earnings_between(datetime.datetime.today(), date_to)

for each in fetched_earnings:
    earning_info_list.append(EarningInfo(each['ticker'], each['companyshortname'], each['startdatetime'], each['startdatetimetype'], each['epsestimate']))

ticker_set = set()

for each in earning_info_list:
    ticker_set.add(each.ticker)

tickers_string = ""

for ticker in ticker_set:
    tickers_string += " " + ticker

Exemplo n.º 16
0
def main(argv):
    list_file = ""
    name_list = set()
    start_date = ""
    end_date = ""
    future_flag = False
    db_name = ""
    update_flag = False
    method_flag = False

    try:
        opts, args = getopt.getopt(argv, "hd:l:s:e:uafm", [
            "db_name=", "list_file=", "start_date=", "end_date=", "update",
            "add", "future", "method"
        ])
    except getopt.GetoptError:
        print("""driver2.py   -l <file containing list of stocks> 
                -d <name of the database>
                -s <start_date in YYYY-MM-DD format>
                -e <end_date in YYYY-MM-DD format>
                -u (update, do not replace)
                -a (add additional instruments)
                -f (this is for coming earnings)
                -m (use laternative method for future earnings)
             """)
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print("""driver2.py   -l <file containing list of stocks> 
            -s <start_date in YYYY-MM-DD format>
            -e <end_date in YYYY-MM-DD format>  
            -d <name of the database>
            -u (update, do not replace)
            -a (add additional instruments)
            -f (this is for coming earnings)
            -m (use laternative method for future earnings)
            """)
            sys.exit()
        elif opt in ("-l", "--list_file"):
            list_file = arg
        elif opt in ("-s", "--start_date"):
            start_date = arg
        elif opt in ("-e", "--end_date"):
            end_date = arg
        elif opt in ("-f", "--future"):
            future_flag = True
        elif opt in ("-u", "--update"):
            update_flag = True
        elif opt in ("-m", "--method"):
            method_flag = True
        elif opt in ("-d", "--db_name"):
            db_name = arg

    process_file(list_file, name_list)

    date_from = datetime.strptime(start_date, '%b %d %Y')
    date_to = datetime.strptime(end_date, '%b %d %Y')

    if future_flag == True:
        if method_flag == False:
            yec = YahooEarningsCalendar()
            el = yec.earnings_between(date_from, date_to)
            print_future_earnings(el, name_list)
        else:
            future_earnings_method2(start_date, end_date, name_list)
    else:
        l1 = start_date.split()
        l2 = end_date.split()
        obtain_historical_earnings_data(l1, l2, name_list, db_name,
                                        update_flag)
Exemplo n.º 17
0

yec = YahooEarningsCalendar()
'''
    get earnings date and ticker from yahoo calendar library
    save as format:
    [
        {
        ticker: 'string',
        date: 'string',
        },
        ...
    ]


'''
#print('getting earnings dates from yahoo')
earnings_list= []
#print(yec.earnings_on(date_from))
#earnings_calendar = yec.earnings_between(date_from, date_to) # <-- get request for yahoo calendar ehre
earnings_calendar = yec.earnings_between(date_from, date_to)
#print(earnings_calendar)
if earnings_calendar:
    for company in earnings_calendar:
        earnings_dict = {}
        earnings_dict['ticker'] = company['ticker']
        earnings_dict['date'] = re.findall('\d\d\d\d-\d\d-\d\d',company['startdatetime'])[0]
        earnings_list.append(earnings_dict)

    with open('callie_scripts/companies_earnings.json', 'w') as f:
        json.dump(earnings_list, f)
Exemplo n.º 18
0
from yahoo_earnings_calendar import YahooEarningsCalendar
from yahooquery import Ticker
import pandas as pd
from datetime import datetime, timedelta

# Create instance of yec
yec = YahooEarningsCalendar()

# Define Start/End Dates and Pull list of stocks with upcoming earnings
start = datetime.today() + timedelta(days=15)
end = datetime.today() + timedelta(days=25)
earnings = yec.earnings_between(start, end)

# Extract symbols from results
screener_symbols = [dic['ticker'] for dic in earnings]

# Pull current prices
screener = Ticker(screener_symbols)
today_price = screener.price

# Prices DataFrame
prices_df = pd.DataFrame(today_price).T.reset_index()
prices_df.rename({'regularMarketPrice': 'stock_price'}, inplace=True, axis=1)

# Create empty list to store filtered stocks
filtered_stocks = []

# Go through stocks and check if price is between 5/100
for stock in today_price.keys():

    # Dealing with stocks with no results
Exemplo n.º 19
0
db = firebase.database()

user = auth.sign_in_with_email_and_password(EMAIL, PW)

today = datetime.today()
#date_to = today + relativedelta(years=1)
date_to = today + relativedelta(months=1)

print("Today: " + str(today))
print("Date to: " + str(date_to))

yec = YahooEarningsCalendar()

earning_info_list = []
#print("retrieving earning info...")
fetched_earnings = yec.earnings_between(today, date_to)

#print("fetched earnings...")
print(fetched_earnings)

data = []
for each in fetched_earnings:
    if each['epsestimate'] is None:
        each['epsestimate'] = "None"
    data.append({
        'ticker': each['ticker'],
        'company': each['companyshortname'],
        'epsestimate': each['epsestimate'],
        'startdatetime': each['startdatetime'],
        'startdatetimetype': each['startdatetimetype'],
        'timezone': each['timeZoneShortName']
Exemplo n.º 20
0

def next_sunday(d):
    days_ahead = 6 - d.weekday()
    if days_ahead <= 0:
        days_ahead += 7
    return d + datetime.timedelta(days_ahead)


date_from = next_sunday(
    datetime.datetime.today())  #+ datetime.timedelta(weeks=2)
date_to = date_from + datetime.timedelta(weeks=1)

yec = YahooEarningsCalendar()

earnings = yec.earnings_between(date_from, date_to)

errors = []

earnings = [{'ticker': 'LULU'}]

for earning in earnings:
    ticker = earning['ticker']
    stock = tickers.find_one({'symbol': ticker})

    if stock is not None:
        try:
            series = iex_earnings.IEXEarnings([ticker]).read()
        except KeyError:
            print(f"Error getting the iex earnings for {ticker}")
        s = {'ticker': ticker}
                close as close_before
            FROM close_yst2) yst3
    ON cur.rank = yst3.rank+1
'''

df = pd.read_sql_query(qry, conn, parse_dates=["date"])
# print(df.head(1104))

date_from = datetime.datetime.strptime('Aug 5 2016', '%b %d %Y').date()
date_to = datetime.date.today()

yec = YahooEarningsCalendar()

list_result = yec.earnings_on(date_from)

df_table = pd.DataFrame(yec.earnings_between(date_from, date_to))

df_table = df_table[[
    'companyshortname', 'startdatetime', 'startdatetimetype', 'ticker'
]]

print(df_table)

#print(yec.earnings_on(date_from)[])
#print(yec.earnings_between(date_from, date_to))

# data['4. close'].plot()
# plt.title('Intraday Times Series for the MSFT stock (1 min)')
# plt.show()
#
# print("script is running")
Exemplo n.º 22
0
earnings_list = yec.earnings_on(report_date)

earnings_df = pd.DataFrame(earnings_list)
earnings_df = earnings_df.drop(columns = ['gmtOffsetMilliSeconds', 'quoteType', 'timeZoneShortName'])
earnings_df.columns = ['Ticker', 'Company Name', 'DateTime', 'Type', 'EPS Estimate', 'EPS Actual', 'EPS Surprise PCT']
earnings_df = earnings_df[['Ticker', 'Company Name', 'DateTime', 'Type', 'EPS Estimate', 'EPS Actual', 'EPS Surprise PCT']]
earnings_df['DateTime'] = pd.to_datetime(earnings_df['DateTime']).dt.tz_localize(None)
print(earnings_df)

# Downloading the earnings for a range of dates
DAYS_AHEAD = 7
start_date = datetime.now().date()
end_date = (datetime.now().date() + timedelta(days=DAYS_AHEAD))

yec = YahooEarningsCalendar()
earnings_list = yec.earnings_between(start_date, end_date)

earnings_df = pd.DataFrame(earnings_list)
earnings_df = earnings_df.drop(columns = ['gmtOffsetMilliSeconds', 'quoteType', 'timeZoneShortName'])
earnings_df.columns = ['Ticker', 'Company Name', 'DateTime', 'Type', 'EPS Estimate', 'EPS Actual', 'EPS Surprise PCT']
earnings_df = earnings_df[['Ticker', 'Company Name', 'DateTime', 'Type', 'EPS Estimate', 'EPS Actual', 'EPS Surprise PCT']]
earnings_df['DateTime'] = pd.to_datetime(earnings_df['DateTime']).dt.tz_localize(None)
print(earnings_df)

# Downloading the earnings for a specific product
TICKER = 'TWTR'
DAYS_AHEAD = 180
start_date = datetime.now().date()
end_date = (datetime.now().date() + timedelta(days=DAYS_AHEAD))

yec = YahooEarningsCalendar()
Exemplo n.º 23
0
cursor.execute(q)

#set dates
now = datetime.now()
startDate = now.strftime('%b %d %Y %I:%M%p')
print(startDate)
endDate = now + timedelta(days=60)
endDate = endDate.strftime('%b %d %Y %I:%M%p')
print(endDate)
startDate = datetime.strptime(
    startDate, '%b %d %Y %I:%M%p')
endDate = datetime.strptime(
    endDate, '%b %d %Y %I:%M%p')

yec = YahooEarningsCalendar()
xx = yec.earnings_between(startDate, endDate)

print(xx)
sys.exit()
for x in xx:
    print("start--->{}".format(x['startdatetime']))
    print("ticker--->{}".format(x['ticker']))
    print("epsestimate--->{}".format(x['epsestimate']))
    print("epsactual--->{}".format(x['epsactual']))
    print("epssurprisepct--->{}".format(x['epssurprisepct']))

    try:
        q = "insert ignore into yahoo_earnings (earnings_date, ticker, epsestimate, epsactual, epssurprisepct) values (%s,%s,%s,%s,%s)"
        args = (x['startdatetime'], x['ticker'].lower(), x['epsestimate'],
                x['epsactual'], x['epssurprisepct'])
        cursor.execute(q, args)
Exemplo n.º 24
0
def get_earnings_range(date_from, date_to):
    yec = YahooEarningsCalendar()
    el = yec.earnings_between(date_from, date_to)
    print_future_earnings(el, name_list)
class EarningsManager:

    def __init__(self, criteria):

        self.yec = YahooEarningsCalendar()
        self.criteria = criteria

    def get_earnings(self, date_range):

        filename = '../data/' + Utils.get_proper_date_format(date_range[0]) + '_' + \
                   Utils.get_proper_date_format(date_range[1]) + '_earnings.csv'

        # If datafile already exists, load from that instead
        if path.exists(filename):
            data = Utils.load_csv_to_dataframe(filename)
        else:
            # File doesn't exist, write to it

            try:
                data_dict = self.yec.earnings_between(date_range[0], date_range[1])
            except:
                print('Yahoo Finance Earnings Calender is down. Try again later.')
                return pd.DataFrame.empty

            data = pd.DataFrame.from_dict(data_dict)

            # Remove unused columns
            unused = ['startdatetimetype', 'timeZoneShortName', 'gmtOffsetMilliSeconds', 'quoteType']
            data.drop(unused, axis=1, inplace=True)

            # Add more columns of interest
            ticker_data = {'volume': {}, 'marketCap': {}, 'lastClose': {}}

            # Go through each ticker to find ones that don't meet certain criteria
            tickers = data['ticker'].tolist()

            for ticker in tickers:

                curr_share = yf.Ticker(ticker)
                try:

                    # Attempt to get ticker data
                    curr_info = curr_share.info
                    vl = curr_info['volume']
                    mc = curr_info['marketCap']
                    lc = curr_info['previousClose']
                    cr = curr_info['currency']

                except:
                    print('Bad data on ticker ' + ticker + '. Deleting from results.')
                    data = data[data.ticker != ticker]
                    continue

                # Check if passes criteria
                if self.criteria(vl, mc, lc, cr):
                    ticker_data['volume'][vl] = ticker
                    ticker_data['marketCap'][mc] = ticker
                    ticker_data['lastClose'][lc] = ticker
                else:
                    print('Ticker ' + ticker + ' did not meet the criteria. Deleting from results.')
                    data = data[data.ticker != ticker]

            # Add new columns that passed criteria to dataframe
            data['volume'] = ticker_data['volume']
            data['marketCap'] = ticker_data['marketCap']
            data['lastClose'] = ticker_data['lastClose']

            data.reset_index(drop=True, inplace=True) # Reset indices after removing

        Utils.write_dataframe_to_csv(data, filename)

        return data

    def get_earnings_in_range(self, date_range):
        return self.get_earnings(date_range)

    def get_next_week_earnings(self):

        week_range = Utils.get_following_week_range()
        data = self.get_earnings(week_range)

        return data