def get_prices_at_frequency_for_contract_object(self, contract_object, freq="D"): """ Get historical prices at a particular frequency We override this method, rather than _get_prices_at_frequency_for_contract_object_no_checking Because the list of dates returned by contracts_with_price_data is likely to not match (expiries) :param contract_object: futuresContract :param freq: str; one of D, H, 15M, 5M, M, 10S, S :return: data """ new_log = self.log.setup(instrument_code=contract_object.instrument_code, contract_date=contract_object.date) contract_object_with_ib_data = self.futures_contract_data.get_contract_object_with_IB_metadata(contract_object) if contract_object_with_ib_data is missing_contract: new_log.warn("Can't get data for %s" % str(contract_object)) return futuresContractPrices.create_empty() price_data = self.ibconnection.broker_get_historical_futures_data_for_contract(contract_object_with_ib_data, bar_freq = freq) if len(price_data)==0: new_log.warn("No IB price data found for %s" % str(contract_object)) data = futuresContractPrices.create_empty() else: data = futuresContractPrices(price_data) data = futuresContractPrices(data[data.index<datetime.datetime.now()]) data = data.remove_zero_volumes() return data
def get_prices_for_contract_object(self, contract_object): """ Get some prices (daily frequency: using IB historical data) We override this method, rather than _get_prices_for_contract_object_no_checking Because the list of dates returned by contracts_with_price_data is likely to not match (expiries) :param contract_object: futuresContract :return: data """ new_log = self.log.setup( instrument_code=contract_object.instrument_code, contract_date=contract_object.date) contract_object_with_ib_data = self._get_contract_object_with_IB_metadata( contract_object) if contract_object_with_ib_data is missing_contract: new_log.warn("Can't get data for %s" % str(contract_object)) return futuresContractPrices.create_empty() price_data = self.ibconnection.broker_get_historical_futures_data_for_contract( contract_object_with_ib_data, bar_freq="D") if len(price_data) == 0: new_log.msg("No IB price data found for %s" % str(contract_object)) data = futuresContractPrices.create_empty() else: data = futuresContractPrices(price_data) return data
def _get_prices_for_contract_object_no_checking(self, futures_contract_object): """ :param futures_contract_object: futuresContract :return: futuresContractPrices """ self.log.label(instrument_code=futures_contract_object.instrument_code, contract_date=futures_contract_object.date) try: quandl_contract = _quandlFuturesContract(futures_contract_object) except: self.log.warning("Can't parse contract object to find the QUANDL identifier") return futuresContractPrices.create_empty() try: contract_data = quandl.get(quandl_contract.quandl_identifier()) except Exception as exception: self.log.warn("Can't get QUANDL data for %s error %s" % (quandl_contract.quandl_identifier(), exception)) return futuresContractPrices.create_empty() try: data = quandlFuturesContractPrices(contract_data) except: self.log.error( "Quandl API error: data fields are not as expected %s" % ",".join(list(contract_data.columns))) return futuresContractPrices.create_empty() # apply multiplier factor = quandl_contract.get_dividing_factor() data = data / factor return data
def get_prices_for_contract_object(self, contract_object): """ Get some prices (daily frequency: using IB historical data) :param contract_object: futuresContract :return: data """ new_log = self.log.setup( instrument_code=contract_object.instrument_code, contract_date=contract_object.date) contract_object_with_ib_data = self._get_contract_object_with_IB_metadata( contract_object) if contract_object_with_ib_data is missing_contract: new_log.warn("Can't get data for %s" % str(contract_object)) return futuresContractPrices.create_empty() price_data = self.ibconnection.broker_get_historical_futures_data_for_contract( contract_object_with_ib_data, bar_freq="D") if len(price_data) == 0: new_log.msg("No IB price data found for %s" % str(contract_object)) data = futuresContractPrices.create_empty() else: data = futuresContractPrices(price_data) data = futuresContractPrices( data[data.index < datetime.datetime.now()]) data = data.remove_zero_volumes() return data
def get_recent_bid_ask_tick_data_for_contract_object( self, contract_object, trade_list_for_multiple_legs=None): """ Get last few price ticks :param contract_object: futuresContract :return: """ new_log = self.log.setup( instrument_code=contract_object.instrument_code, contract_date=contract_object.date_str, ) contract_object_with_ib_data = ( self.futures_contract_data.get_contract_object_with_IB_metadata( contract_object)) if contract_object_with_ib_data is missing_contract: new_log.warn("Can't get data for %s" % str(contract_object)) return futuresContractPrices.create_empty() tick_data = self.ibconnection.ib_get_recent_bid_ask_tick_data( contract_object_with_ib_data, trade_list_for_multiple_legs=trade_list_for_multiple_legs, ) if tick_data is missing_contract: return missing_data tick_data_as_df = from_ib_bid_ask_tick_data_to_dataframe(tick_data) return tick_data_as_df
def cancel_market_data_for_contract_object( self, contract_object, trade_list_for_multiple_legs=None): """ Returns my encapsulation of a ticker object :param contract_object: :param trade_list_for_multiple_legs: :return: """ new_log = self.log.setup( instrument_code=contract_object.instrument_code, contract_date=contract_object.date_str, ) contract_object_with_ib_data = ( self.futures_contract_data.get_contract_object_with_IB_metadata( contract_object)) if contract_object_with_ib_data is missing_contract: new_log.warn("Can't get data for %s" % str(contract_object)) return futuresContractPrices.create_empty() self.ibconnection.cancel_market_data_for_contract_object( contract_object_with_ib_data, trade_list_for_multiple_legs=trade_list_for_multiple_legs, )
def _get_prices_for_contract_object_no_checking(self, futures_contract_object): """ Read back the prices for a given contract object :param contract_object: futuresContract :return: data """ keyname = self._keyname_given_contract_object(futures_contract_object) filename = self._filename_given_key_name(keyname) date_format = self._input_date_format date_time_column = self._input_date_time_column input_column_mapping = self._input_column_mapping skiprows = self._input_skiprows skipfooter = self._input_skipfooter try: instrpricedata = pd_readcsv( filename, date_index_name=date_time_column, date_format=date_format, input_column_mapping=input_column_mapping, skiprows=skiprows, skipfooter=skipfooter) except OSError: self.log.warning("Can't find adjusted price file %s" % filename) return futuresContractPrices.create_empty() instrpricedata = instrpricedata.groupby(level=0).last() instrpricedata = futuresContractPrices(instrpricedata) return instrpricedata
def _get_prices_for_contract_object_no_checking(self, futures_contract_object): """ :param futures_contract_object: futuresContract :return: futuresContractPrices """ self.log.label(instrument_code=futures_contract_object.instrument_code, contract_date=futures_contract_object.date[2:4]) try: barchart_contract = _barchartFuturesContract( futures_contract_object) except: self.log.warning( "Can't parse contract object to find the BARCHART identifier") return futuresContractPrices.create_empty() try: # contract_data = barchart.get(barchart_contract.barchart_identifier()) contract_data = od.history(barchart_contract.barchart_identifier(), historical_type='daily')['results'] contract_data = pd.DataFrame(contract_data)[[ 'open', 'high', 'low', 'close', 'volume' ]] contract_data.tail() except Exception as exception: self.log.warn("Can't get BARCHART data for %s error %s" % (barchart_contract.barchart_identifier(), exception)) return futuresContractPrices.create_empty() try: data = barchartFuturesContractPrices(contract_data) except: self.log.error( "Barchart API error: data fields are not as expected %s" % ",".join(list(contract_data.columns))) return futuresContractPrices.create_empty() # apply multiplier factor = barchart_contract.get_dividing_factor() data = data / factor return data