Beispiel #1
0
def price_change_hist(input, pickle_file, historical_quotes_dir, header, header_for_quotes, use_current_date):
    ranking = defaultdict(list)
    find_quotes = FindPrice(historical_quotes_dir, header_for_quotes)

    if header:
        input.next()

    if use_current_date:
        HEADER_LINE = 'Ticker,Firm,Action,Date,Old_Target,New_Target,Target_Ratio,Current_Price,Price_in_1yr,Price_Ratio'
    else:
        HEADER_LINE = 'Ticker,Firm,Action,Date,Old_Target,New_Target,Target_Ratio,EOQ_Price,Price_EOQ_next_year,Price_Ratio'

    print HEADER_LINE

    for l in csv.reader(input):
        rec_date = datetime.strptime(l[ANALYST_DATA_FIELDS.Date.zvalue], ANALYST_DATA_DATE_FORMAT)

        try:
            if use_current_date:
                start_price = find_quotes.at(l[ANALYST_DATA_FIELDS.Ticker.zvalue], rec_date)
            else:
                start_price = find_quotes.at_end_of_qtr(l[ANALYST_DATA_FIELDS.Ticker.zvalue], rec_date)
            end_price = find_quotes.at_end_of_qtr_next_year(l[ANALYST_DATA_FIELDS.Ticker.zvalue], rec_date)
            price_delta = end_price / start_price
        except DatesNotAvailableException:  # Catch when dates are not available
            continue

        to_rating = re.sub('(.*\s*->\s*)(?P<to>.*)', '\\g<to>', l[ANALYST_DATA_FIELDS.Rating.zvalue])
        if pickle_file and price_delta:
            ranking[to_rating].append(price_delta)

        # get rid of annoying commas in text
        for i in range(len(l)):
            l[i] = l[i].replace(",",";")

        # Don't deal with exchange rates
        l[ANALYST_DATA_FIELDS.Price_Target.zvalue] = l[ANALYST_DATA_FIELDS.Price_Target.zvalue].replace('$','')

        # Make sure this isn't a different currency (&euro; or C$ or something else)
        if any(c.isalpha() for c in l[ANALYST_DATA_FIELDS.Price_Target.zvalue]):
            continue

        # replace '$40.00 -> $42.00' to '40.00,42.00'
        before_after = l[ANALYST_DATA_FIELDS.Price_Target.zvalue].split('->')
        if len(before_after) == 1:
            l[ANALYST_DATA_FIELDS.Price_Target.zvalue] = before_after[0] + ',' + before_after[0] + ',1.0'
        elif len(before_after) == 2:
            l[ANALYST_DATA_FIELDS.Price_Target.zvalue] = ','.join(before_after).replace(' ','') + \
                                    ',' + str(float(before_after[1])/float(before_after[0]))
        else:
            raise ValueError

        print ",".join([l[ANALYST_DATA_FIELDS.Ticker.zvalue], l[ANALYST_DATA_FIELDS.Firm.zvalue], to_rating,
                        l[ANALYST_DATA_FIELDS.Date.zvalue], l[ANALYST_DATA_FIELDS.Price_Target.zvalue],
                        str(start_price), str(end_price), str(price_delta)])

    if pickle_file:
        save_obj(ranking, pickle_file)
Beispiel #2
0
def rank_analysts(header, find_quotes, quotes_dir, reco_file):
    find_price = FindPrice(quotes_dir)

    f_reco = csv.reader(reco_file)
    if header:
        f_reco.next()

    print HEADER_LINE
    for l in f_reco:

        if (l[PRICE_CHANGE_FIELDS.Firm.zvalue]
                and l[PRICE_CHANGE_FIELDS.Date.zvalue]
                and l[PRICE_CHANGE_FIELDS.Ticker.zvalue]
                and l[PRICE_CHANGE_FIELDS.New_Target.zvalue]
                and l[PRICE_CHANGE_FIELDS.Current_Price.zvalue]):

            current_date = datetime.strptime(
                l[PRICE_CHANGE_FIELDS.Date.zvalue], PRICE_CHANGE_DATE_FORMAT)
            target_price = float(l[PRICE_CHANGE_FIELDS.New_Target.zvalue])

            if not find_quotes:
                current_price = float(
                    l[PRICE_CHANGE_FIELDS.Current_Price.zvalue])
                final_price = float(
                    l[PRICE_CHANGE_FIELDS.Price_in_a_year.zvalue])

            else:
                try:
                    # find quotes instead of trusting the input file
                    current_price = find_price.at(
                        l[PRICE_CHANGE_FIELDS.Ticker.zvalue], current_date)
                    final_price = find_price.at_end_of_qtr_next_year(
                        l[PRICE_CHANGE_FIELDS.Ticker.zvalue], current_date)
                except DatesNotAvailableException:
                    continue

            to_print = [
                l[PRICE_CHANGE_FIELDS.Ticker.zvalue],
                l[PRICE_CHANGE_FIELDS.Firm.zvalue],
                l[PRICE_CHANGE_FIELDS.Action.zvalue],
                current_date.date(), current_price, target_price, final_price,
                abs(final_price - target_price) / current_price
            ]

            print ",".join([str(i) for i in to_print])
Beispiel #3
0
def rank_analysts(header, find_quotes, quotes_dir, reco_file):
    find_price = FindPrice(quotes_dir)

    f_reco = csv.reader(reco_file)
    if header:
        f_reco.next()

    print HEADER_LINE
    for l in f_reco:

        if (
            l[PRICE_CHANGE_FIELDS.Firm.zvalue]
            and l[PRICE_CHANGE_FIELDS.Date.zvalue]
            and l[PRICE_CHANGE_FIELDS.Ticker.zvalue]
            and l[PRICE_CHANGE_FIELDS.New_Target.zvalue]
            and l[PRICE_CHANGE_FIELDS.Current_Price.zvalue]
        ):

            current_date = datetime.strptime(l[PRICE_CHANGE_FIELDS.Date.zvalue], PRICE_CHANGE_DATE_FORMAT)
            target_price = float(l[PRICE_CHANGE_FIELDS.New_Target.zvalue])

            if not find_quotes:
                current_price = float(l[PRICE_CHANGE_FIELDS.Current_Price.zvalue])
                final_price = float(l[PRICE_CHANGE_FIELDS.Price_in_a_year.zvalue])

            else:
                try:
                    # find quotes instead of trusting the input file
                    current_price = find_price.at(l[PRICE_CHANGE_FIELDS.Ticker.zvalue], current_date)
                    final_price = find_price.at_end_of_qtr_next_year(l[PRICE_CHANGE_FIELDS.Ticker.zvalue], current_date)
                except DatesNotAvailableException:
                    continue

            to_print = [
                l[PRICE_CHANGE_FIELDS.Ticker.zvalue],
                l[PRICE_CHANGE_FIELDS.Firm.zvalue],
                l[PRICE_CHANGE_FIELDS.Action.zvalue],
                current_date.date(),
                current_price,
                target_price,
                final_price,
                abs(final_price - target_price) / current_price,
            ]

            print ",".join([str(i) for i in to_print])