Ejemplo n.º 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)
Ejemplo n.º 2
0
def price_change_hist(input, pickle_file):
    ranking = defaultdict(list)
    print HEADER_LINE
    for l in csv.reader(input):
        rec_date = datetime.strptime(l[FIELD_REC_DATE], RECS_DATE_FORMAT)
        later_date = rec_date + DATE_CHANGE

        try:
            start, end, delta = get_price_change(l[FIELD_REC_TICKER], rec_date, later_date)
        except DatesNotAvailableException:  # Catch when dates are not available
            continue

        to_rank = re.sub("(.*\s*->\s*)(?P<to>.*)", "\\g<to>", l[FIELD_REC_RANK])
        if delta:
            ranking[to_rank].append(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[FIELD_REC_PRICE_1Y] = l[FIELD_REC_PRICE_1Y].replace("$", "")

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

        # replace '$40.00 -> $42.00' to '40.00,42.00'
        before_after = l[FIELD_REC_PRICE_1Y].split("->")
        if len(before_after) == 1:
            l[FIELD_REC_PRICE_1Y] = before_after[0] + "," + before_after[0] + ",1.0"  # before and after are equal
        elif len(before_after) == 2:
            l[FIELD_REC_PRICE_1Y] = (
                ",".join(before_after).replace(" ", "") + "," + str(float(before_after[1]) / float(before_after[0]))
            )
        else:
            raise ValueError

        print ",".join(
            [
                l[FIELD_REC_TICKER],
                l[FIELD_REC_FIRM],
                to_rank,
                l[FIELD_REC_DATE],
                l[FIELD_REC_PRICE_1Y],  # before, after, ratio
                str(start),
                str(end),
                str(delta),
            ]
        )

    if pickle_file:
        save_obj(ranking, pickle_file)
Ejemplo n.º 3
0
def price_change_hist(input, pickle_file):
    ranking = defaultdict(list)
    print HEADER_LINE
    for l in csv.reader(input):
        rec_date = datetime.strptime(l[FIELD_REC_DATE], RECS_DATE_FORMAT)
        later_date = rec_date + DATE_CHANGE

        try:
            start, end, delta = get_price_change(l[FIELD_REC_TICKER], rec_date, later_date)
        except DatesNotAvailableException:  # Catch when dates are not available
            continue

        to_rank = re.sub('(.*\s*->\s*)(?P<to>.*)', '\\g<to>', l[FIELD_REC_RANK])
        if delta:
            ranking[to_rank].append(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[FIELD_REC_PRICE_1Y] = l[FIELD_REC_PRICE_1Y].replace('$','')

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

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

        print ",".join([l[FIELD_REC_TICKER], l[FIELD_REC_FIRM], to_rank, l[FIELD_REC_DATE],
                        l[FIELD_REC_PRICE_1Y],  # before, after, ratio
                        str(start), str(end), str(delta)])

    if pickle_file:
        save_obj(ranking, pickle_file)