def test_roll_parameters(self):
        data = mongoRollParametersData(database_name='test')

        # test db so okay to do this
        data._mongo.db.drop_collection(data._mongo.collection_name)

        codes = data.get_list_of_instruments()
        self.assertEqual(codes, [])

        roll_object = data.get_roll_parameters("EDOLLAR")

        self.assertTrue(roll_object.empty())

        roll_object = rollParameters(hold_rollcycle ="HMUZ", priced_rollcycle="HM")
        data.add_roll_parameters(roll_object, "EDOLLAR")

        self.assertEqual(data.get_list_of_instruments(), ['EDOLLAR'])

        found_object = data.get_roll_parameters("EDOLLAR")
        self.assertEqual(found_object.hold_rollcycle.cyclestring, "HMUZ")

        found_object = data['EDOLLAR']
        self.assertEqual(found_object.priced_rollcycle.cyclestring, "HM")

        codes = data.get_list_of_instruments()
        self.assertEqual(codes, ['EDOLLAR'])

        data.delete_roll_parameters("EDOLLAR", are_you_sure=True)

        found_object = data.get_roll_parameters("EDOLLAR")

        self.assertTrue(found_object.empty())
        codes = data.get_list_of_instruments()
        self.assertEqual(codes, [])
def get_roll_parameters_from_mongo(instrument_code):

    mongo_roll_parameters = mongoRollParametersData()

    roll_parameters = mongo_roll_parameters.get_roll_parameters(instrument_code)
    if roll_parameters.empty():
        raise Exception("Instrument %s missing from %s" % (instrument_code, mongo_roll_parameters))

    return roll_parameters
Exemple #3
0
def get_roll_parameters_from_mongo(instrument_code):

    mongo_roll_parameters = mongoRollParametersData()

    roll_parameters = mongo_roll_parameters.get_roll_parameters(
        instrument_code)
    if roll_parameters.empty():
        raise Exception("Instrument %s missing from %s" %
                        (instrument_code, mongo_roll_parameters))

    return roll_parameters
Exemple #4
0
def process_multiple_prices_single_instrument(
    instrument_code,
    adjust_calendar_to_prices=True,
    csv_multiple_data_path=arg_not_supplied,
    csv_roll_data_path=arg_not_supplied,
    ADD_TO_ARCTIC=True,
    ADD_TO_CSV=False,
):

    (
        csv_roll_calendars,
        arctic_individual_futures_prices,
        arctic_multiple_prices,
        csv_multiple_prices,
    ) = _get_data_inputs(csv_roll_data_path, csv_multiple_data_path)

    dict_of_futures_contract_prices = (
        arctic_individual_futures_prices.get_all_prices_for_instrument(
            instrument_code))
    dict_of_futures_contract_closing_prices = (
        dict_of_futures_contract_prices.final_prices())

    roll_calendar = csv_roll_calendars.get_roll_calendar(instrument_code)

    # Add first phantom row so that the last calendar entry won't be consumed by adjust_roll_calendar()
    m = mongoRollParametersData()
    roll_parameters = m.get_roll_parameters(instrument_code)
    roll_calendar = add_phantom_row(roll_calendar,
                                    dict_of_futures_contract_closing_prices,
                                    roll_parameters)

    if adjust_calendar_to_prices:
        roll_calendar = adjust_roll_calendar(instrument_code, roll_calendar)

    # Second phantom row is needed in order to process the whole set of closing prices (and not stop after the last roll-over)
    roll_calendar = add_phantom_row(roll_calendar,
                                    dict_of_futures_contract_closing_prices,
                                    roll_parameters)

    multiple_prices = futuresMultiplePrices.create_from_raw_data(
        roll_calendar, dict_of_futures_contract_closing_prices)

    print(multiple_prices)

    if ADD_TO_ARCTIC:
        arctic_multiple_prices.add_multiple_prices(instrument_code,
                                                   multiple_prices,
                                                   ignore_duplication=True)
    if ADD_TO_CSV:
        csv_multiple_prices.add_multiple_prices(instrument_code,
                                                multiple_prices,
                                                ignore_duplication=True)

    return multiple_prices
Exemple #5
0
def build_and_write_roll_calendar(instrument_code,
                                  output_datapath=arg_not_supplied,
                                  check_before_writing=True):

    if output_datapath is arg_not_supplied:
        print(
            "*** WARNING *** This will overwrite the provided roll calendar. Might be better to use a temporary directory!"
        )
    else:
        print("Writing to %s" % output_datapath)

    arctic_prices = arcticFuturesContractPriceData()
    mongo_rollparameters = mongoRollParametersData()
    csv_roll_calendars = csvRollCalendarData(output_datapath)

    dict_of_all_futures_contract_prices = arctic_prices.get_all_prices_for_instrument(
        instrument_code)
    dict_of_futures_contract_prices = dict_of_all_futures_contract_prices.final_prices(
    )

    roll_parameters_object = mongo_rollparameters.get_roll_parameters(
        instrument_code)

    # might take a few seconds
    print("Prepping roll calendar... might take a few seconds")
    roll_calendar = rollCalendar.create_from_prices(
        dict_of_futures_contract_prices, roll_parameters_object)

    # checks - this might fail
    roll_calendar.check_if_date_index_monotonic()

    # this should never fail
    roll_calendar.check_dates_are_valid_for_prices(
        dict_of_futures_contract_prices)

    # Write to csv
    # Will not work if an existing calendar exists

    if check_before_writing:
        check_happy_to_write = input(
            "Are you ok to write this csv to path %s? [might be worth writing and hacking manually] (yes/other)?"
            % csv_roll_calendars.datapath)
    else:
        check_happy_to_write = "yes"

    if check_happy_to_write == "yes":
        print("Adding roll calendar")
        csv_roll_calendars.add_roll_calendar(instrument_code,
                                             roll_calendar,
                                             ignore_duplication=True)
    else:
        print("Not writing")

    return roll_calendar
def build_and_write_roll_calendar(
    instrument_code, output_datapath=None, check_before_writing=True
):

    artic_prices = arcticFuturesContractPriceData()
    mongo_rollparameters = mongoRollParametersData()
    csv_roll_calendars = csvRollCalendarData(output_datapath)

    dict_of_all_futures_contract_prices = artic_prices.get_all_prices_for_instrument(
        instrument_code)
    dict_of_futures_contract_prices = dict_of_all_futures_contract_prices.final_prices()

    roll_parameters_object = mongo_rollparameters.get_roll_parameters(
        instrument_code)

    # might take a few seconds
    print("Prepping roll calendar... might take a few seconds")
    roll_calendar = rollCalendar.create_from_prices(
        dict_of_futures_contract_prices, roll_parameters_object
    )

    # checks - this might fail
    check_monotonic = roll_calendar.check_if_date_index_monotonic()

    # this should never fail
    check_valid = roll_calendar.check_dates_are_valid_for_prices(
        dict_of_futures_contract_prices
    )

    # Write to csv
    # Will not work if an existing calendar exists

    if check_before_writing:
        check_happy_to_write = input(
            "Are you ok to write this csv? [might be worth writing and hacking manually] (yes/other)?"
        )
    else:
        check_happy_to_write = "yes"

    if check_happy_to_write == "yes":
        csv_roll_calendars.add_roll_calendar(
            roll_calendar, instrument_code, ignore_duplication=True
        )
    else:
        print("Not writing")

    return roll_calendar
def process_multiple_prices_single_instrument(
    instrument_code,
    adjust_calendar_to_prices=True,
    csv_multiple_data_path=arg_not_supplied,
    csv_roll_data_path=arg_not_supplied,
    ADD_TO_ARCTIC=True,
    ADD_TO_CSV=False,
):

    (
        csv_roll_calendars,
        arctic_individual_futures_prices,
        arctic_multiple_prices,
        csv_multiple_prices,
    ) = _get_data_inputs(csv_roll_data_path, csv_multiple_data_path)

    roll_calendar = csv_roll_calendars.get_roll_calendar(instrument_code)
    if adjust_calendar_to_prices:
        roll_calendar = adjust_roll_calendar(instrument_code, roll_calendar)

    dict_of_futures_contract_prices = (
        arctic_individual_futures_prices.get_all_prices_for_instrument(
            instrument_code))
    dict_of_futures_contract_closing_prices = (
        dict_of_futures_contract_prices.final_prices())

    m = mongoRollParametersData()
    roll_parameters = m.get_roll_parameters(instrument_code)
    roll_calendar = add_phantom_row(roll_calendar,
                                    dict_of_futures_contract_closing_prices,
                                    roll_parameters)

    multiple_prices = futuresMultiplePrices.create_from_raw_data(
        roll_calendar, dict_of_futures_contract_closing_prices)

    print(multiple_prices)

    if ADD_TO_ARCTIC:
        arctic_multiple_prices.add_multiple_prices(instrument_code,
                                                   multiple_prices,
                                                   ignore_duplication=True)
    if ADD_TO_CSV:
        csv_multiple_prices.add_multiple_prices(instrument_code,
                                                multiple_prices,
                                                ignore_duplication=True)

    return multiple_prices
Exemple #8
0
def get_instrument_spec_from_mongo(instrument_code):

    mongo_instruments = mongoFuturesInstrumentData()
    mongo_roll_data = mongoRollParametersData()

    instrument_object = mongo_instruments.get_instrument_data(instrument_code)

    if instrument_object.empty():
        raise Exception("Instrument %s missing from %s" %
                        (instrument_code, mongo_instruments))

    roll_parameters = mongo_roll_data.get_roll_parameters(instrument_code)
    if roll_parameters.empty():
        raise Exception("Instrument %s missing from %s" %
                        (instrument_code, mongo_roll_data))

    return (instrument_object, roll_parameters)
Exemple #9
0
from sysdata.sim.csv_futures_sim_data import csvFuturesSimData
from sysobjects.roll_calendars import rollCalendar
from sysdata.csv.csv_roll_calendars import csvRollCalendarData
from sysdata.mongodb.mongo_roll_data import mongoRollParametersData
"""
Generate the roll calendars from existing data
"""

if __name__ == "__main__":
    csv_roll_calendars = csvRollCalendarData()
    sim_futures_data = csvFuturesSimData()
    mongo_rollparameters = mongoRollParametersData()

    instrument_list = sim_futures_data.get_instrument_list()

    for instrument_code in instrument_list:
        print(instrument_code)
        multiple_prices = sim_futures_data.get_all_multiple_prices(
            instrument_code)

        roll_parameters = mongo_rollparameters.get_roll_parameters(
            instrument_code)
        roll_calendar = rollCalendar.back_out_from_multiple_prices(
            multiple_prices)
        print("Calendar:")
        print(roll_calendar)

        # We ignore duplicates since this is run regularly
        csv_roll_calendars.add_roll_calendar(instrument_code,
                                             roll_calendar,
                                             ignore_duplication=True)
Exemple #10
0
"""
Populate a mongo DB collection with roll data from a csv
"""

from sysdata.mongodb.mongo_roll_data import mongoRollParametersData
from sysinit.futures.rolldata_from_csv import initCsvFuturesRollData

data_out = mongoRollParametersData()
data_in = initCsvFuturesRollData()

instrument_list = data_in.get_list_of_instruments()

for instrument_code in instrument_list:
    instrument_object = data_in.get_roll_parameters(instrument_code)

    data_out.delete_roll_parameters(instrument_code, are_you_sure=True)
    data_out.add_roll_parameters(instrument_object, instrument_code)

    # check
    instrument_added = data_out.get_roll_parameters(instrument_code)
    print("Added %s: %s to %s" % (instrument_code, instrument_added, data_out))
from sysdata.csv.csv_sim_futures_data import csvFuturesSimData
from sysdata.futures.roll_calendars import rollCalendar
from sysdata.csv.csv_roll_calendars import csvRollCalendarData
from sysdata.mongodb.mongo_roll_data import mongoRollParametersData

"""
Generate the roll calendars from existing data
"""

if __name__ == '__main__':
    csv_roll_calendars = csvRollCalendarData()
    sim_futures_data = csvFuturesSimData()
    mongo_rollparameters = mongoRollParametersData()

    instrument_list = sim_futures_data.get_instrument_list()

    for instrument_code in instrument_list:
        print(instrument_code)
        current_and_forward_data = sim_futures_data.get_current_and_forward_price_data(instrument_code)

        roll_parameters = mongo_rollparameters.get_roll_parameters(instrument_code)
        roll_calendar = rollCalendar.back_out_from_current_and_forward_data(current_and_forward_data, roll_parameters)
        print("Calendar:")
        print(roll_calendar)

        ## We ignore duplicates since this is run regularly
        csv_roll_calendars.add_roll_calendar(roll_calendar, instrument_code, ignore_duplication=True)
"""
Populate a mongo DB collection with roll data from a csv
"""

from sysdata.mongodb.mongo_roll_data import mongoRollParametersData
from sysinit.futures.csv_data_readers.rolldata_from_csv import initCsvFuturesRollData

data_out = mongoRollParametersData()
data_in = initCsvFuturesRollData()

instrument_list = data_in.get_list_of_instruments()

for instrument_code in instrument_list:
    instrument_object = data_in.get_roll_parameters(instrument_code)

    data_out.delete_roll_parameters(instrument_code, are_you_sure=True)
    data_out.add_roll_parameters(instrument_object, instrument_code)

    # check
    instrument_added = data_out.get_roll_parameters(instrument_code)
    print("Added %s: %s to %s" % (instrument_code, instrument_added, data_out))