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