def check_saved_roll_calendar(instrument_code,
                              input_datapath=arg_not_supplied,
                              input_prices=arg_not_supplied):

    if input_datapath is None:
        print(
            "This will check the roll calendar in the default directory : are you are that's what you want to do?"
        )

    csv_roll_calendars = csvRollCalendarData(input_datapath)

    roll_calendar = csv_roll_calendars.get_roll_calendar(instrument_code)

    if input_prices is arg_not_supplied:
        prices = arcticFuturesContractPriceData()
    else:
        prices = input_prices

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

    print(roll_calendar)

    # 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)

    return roll_calendar
Example #2
0
def generate_roll_calendars_from_provided_multiple_csv_prices(
    output_datapath=arg_not_supplied, ):
    if output_datapath is arg_not_supplied:
        print(
            "USING DEFAULT DATAPATH WILL OVERWRITE PROVIDED DATA in /data/futures/"
        )
    else:
        print("Writing to %s" % output_datapath)
    input(
        "This will overwrite any existing roll calendars to %s: CRTL-C if you aren't sure!"
        % str(output_datapath))
    csv_roll_calendars = csvRollCalendarData(datapath=output_datapath)
    sim_futures_data = csvFuturesSimData()

    instrument_list = sim_futures_data.get_instrument_list()

    for instrument_code in instrument_list:
        print(instrument_code)
        multiple_prices = sim_futures_data.get_multiple_prices(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)
def _get_data_inputs(csv_roll_data_path, csv_multiple_data_path):
    csv_roll_calendars = csvRollCalendarData(csv_roll_data_path)
    arctic_individual_futures_prices = arcticFuturesContractPriceData()
    arctic_multiple_prices = arcticFuturesMultiplePricesData()
    csv_multiple_prices = csvFuturesMultiplePricesData(csv_multiple_data_path)

    return csv_roll_calendars, arctic_individual_futures_prices, arctic_multiple_prices, csv_multiple_prices
Example #4
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
Example #6
0
def generate_roll_calendars_from_provided_multiple_csv_prices(output_datapath):
    input(
        "This will overwrite the roll calendars in %s : CRTL-C if you aren't sure!"
        % output_datapath)
    csv_roll_calendars = csvRollCalendarData(datapath=output_datapath)
    sim_futures_data = csvFuturesSimData()

    instrument_list = sim_futures_data.get_instrument_list()

    for instrument_code in instrument_list:
        print(instrument_code)
        multiple_prices = sim_futures_data.get_multiple_prices(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)
Example #7
0
import matplotlib
matplotlib.use("TkAgg")

from sysdata.arctic.arctic_futures_per_contract_prices import arcticFuturesContractPriceData
from sysdata.csv.csv_roll_calendars import csvRollCalendarData
from sysdata.csv.csv_multiple_prices import csvFuturesMultiplePricesData
from sysdata.arctic.arctic_multiple_prices import arcticFuturesMultiplePricesData

from sysdata.futures.multiple_prices import futuresMultiplePrices

# could get these from stdin
ADD_TO_ARCTIC = True
ADD_TO_CSV = False

if __name__ == '__main__':
    csv_roll_calendars = csvRollCalendarData()
    arctic_individual_futures_prices = arcticFuturesContractPriceData()
    arctic_multiple_prices = arcticFuturesMultiplePricesData()
    csv_multiple_prices = csvFuturesMultiplePricesData()

    instrument_list = arctic_individual_futures_prices.get_instruments_with_price_data(
    )
    instrument_list = ["LIVECOW"]
    for instrument_code in instrument_list:
        print(instrument_code)
        roll_calendar = csv_roll_calendars.get_roll_calendar(instrument_code)
        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(
        )
from syscore.objects import arg_not_supplied
from sysobjects.roll_calendars import rollCalendar
from sysdata.csv.csv_roll_calendars import csvRollCalendarData
from sysdata.mongodb.mongo_roll_data import mongoRollParametersData
from sysdata.arctic.arctic_multiple_prices import arcticFuturesMultiplePricesData
"""
Generate the roll calendars from existing data
"""

if __name__ == "__main__":
    input("Will overwrite existing data are you sure?! CTL-C to abort")

    output_datapath = arg_not_supplied
    csv_roll_calendars = csvRollCalendarData(arg_not_supplied)
    mongo_rollparameters = mongoRollParametersData()
    arctic_multiple_prices = arcticFuturesMultiplePricesData()

    instrument_list = arctic_multiple_prices.get_list_of_instruments()

    for instrument_code in instrument_list:
        print(instrument_code)
        multiple_prices = arctic_multiple_prices.get_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)
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)