def get_latest_bar(self) -> List[dict]: bar_size = self._bar_size bar_type = self._bar_type # Define data range end_date = datetime.today() start_date = end_date - timedelta(minutes=15) start = str(milliseconds_since_epoch(dt_object=start_date)) end = str(milliseconds_since_epoch(dt_object=end_date)) latest_prices = [] for symbol in self.portfolio.positions: historical_price_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) if 'error' in historical_price_response: time_true.sleep(2) historical_price_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) for candle in historical_price_response['candles'][-1:]: new_price_mini_dict = {} new_price_mini_dict['symbol'] = symbol new_price_mini_dict['open'] = candle['open'] new_price_mini_dict['close'] = candle['close'] new_price_mini_dict['high'] = candle['high'] new_price_mini_dict['low'] = candle['low'] new_price_mini_dict['volume'] = candle['low'] new_price_mini_dict['datetime'] = candle['datetime'] latest_prices.append(new_price_mini_dict) return latest_prices
def grab_historical_prices( self, start: datetime, end: datetime, bar_size: int = 1, bar_type: str = 'minute', symbols: Optional[List[str]] = None) -> List[dict]: self.bar_size = bar_size self.bar_type = bar_type start = str(milliseconds_since_epoch(dt_object=start)) end = str(milliseconds_since_epoch(dt_object=end)) new_prices = [] if not symbols: symbols = self.portfolio.positions for symbol in symbols: historical_price_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) self.historical_prices[symbol] = {} self.historical_prices[symbol][ 'candles'] = historical_price_response['candles'] for candle in historical_price_response['candles']: new_price_mini_dict = {} new_price_mini_dict['symbol'] = symbol new_price_mini_dict['open'] = candle['open'] new_price_mini_dict['close'] = candle['close'] new_price_mini_dict['high'] = candle['high'] new_price_mini_dict['low'] = candle['low'] new_price_mini_dict['volume'] = candle['low'] new_price_mini_dict['datetime'] = candle['datetime'] new_prices.append(new_price_mini_dict) self.historical_prices['aggregated'] = new_prices return self.historical_prices
def get_latest_bar(self) -> List[dict]: """Returns the latest bar for each symbol in the portfolio. Returns: --- {List[dict]} -- A simplified quote list. Usage: ---- >>> trading_robot = PyRobot( client_id=CLIENT_ID, redirect_uri=REDIRECT_URI, credentials_path=CREDENTIALS_PATH ) >>> latest_bars = trading_robot.get_latest_bar() >>> latest_bars """ # Grab the info from the last quest. bar_size = self._bar_size bar_type = self._bar_type # Define the start and end date. start_date = datetime.today() end_date = start_date - timedelta(minutes=bar_size * 15) start = str(milliseconds_since_epoch(dt_object=start_date)) end = str(milliseconds_since_epoch(dt_object=end_date)) latest_prices = [] # Loop through each symbol. for symbol in self.portfolio.positions: # Grab the request. historical_prices_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) if 'error' in historical_prices_response: time_true.sleep(2) # Grab the request. historical_prices_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) # parse the candles. for candle in historical_prices_response['candles'][-1:]: new_price_mini_dict = {} new_price_mini_dict['symbol'] = symbol new_price_mini_dict['open'] = candle['open'] new_price_mini_dict['close'] = candle['close'] new_price_mini_dict['high'] = candle['high'] new_price_mini_dict['low'] = candle['low'] new_price_mini_dict['volume'] = candle['volume'] new_price_mini_dict['datetime'] = candle['datetime'] latest_prices.append(new_price_mini_dict) return latest_prices
def grab_historical_prices( self, start: datetime, end: datetime, bar_size: int = 1, bar_type: str = 'minute', symbols: Optional[List[str]] = None) -> List[dict]: """Grabs the historical prices for all the postions in a portfolio. Overview: ---- Any of the historical price data returned will include extended hours price data by default. Arguments: ---- start {datetime} -- Defines the start date for the historical prices. end {datetime} -- Defines the end date for the historical prices. Keyword Arguments: ---- bar_size {int} -- Defines the size of each bar. (default: {1}) bar_type {str} -- Defines the bar type, can be one of the following: `['minute', 'week', 'month', 'year']` (default: {'minute'}) symbols {List[str]} -- A list of ticker symbols to pull. (default: None) Returns: ---- {List[Dict]} -- The historical price candles. Usage: ---- >>> trading_robot = PyRobot( client_id=CLIENT_ID, redirect_uri=REDIRECT_URI, credentials_path=CREDENTIALS_PATH ) >>> start_date = datetime.today() >>> end_date = start_date - timedelta(days=30) >>> historical_prices = trading_robot.grab_historical_prices( start=end_date, end=start_date, bar_size=1, bar_type='minute' ) """ self._bar_size = bar_size self._bar_type = bar_type start = str(milliseconds_since_epoch(dt_object=start)) end = str(milliseconds_since_epoch(dt_object=end)) new_prices = [] if not symbols: symbols = self.portfolio.positions for symbol in symbols: historical_prices_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) self.historical_prices[symbol] = {} self.historical_prices[symbol][ 'candles'] = historical_prices_response['candles'] for candle in historical_prices_response['candles']: new_price_mini_dict = {} new_price_mini_dict['symbol'] = symbol new_price_mini_dict['open'] = candle['open'] new_price_mini_dict['close'] = candle['close'] new_price_mini_dict['high'] = candle['high'] new_price_mini_dict['low'] = candle['low'] new_price_mini_dict['volume'] = candle['volume'] new_price_mini_dict['datetime'] = candle['datetime'] new_prices.append(new_price_mini_dict) self.historical_prices['aggregated'] = new_prices return self.historical_prices
def grab_historical_prices( self, start: datetime, end: datetime, bar_size: int = 1, bar_type: str = 'minute', symbols: List[str] = None) -> Union[List[Dict], pd.DataFrame]: """Grabs the historical prices for all the postions in a portfolio. Overview: ---- Any of the historical price data returned will include extended hours price data by default. Arguments: ---- start {datetime} -- Defines the start date for the historical prices. end {datetime} -- Defines the end date for the historical prices. Keyword Arguments: ---- bar_size {int} -- Defines the size of each bar. (default: {1}) bar_type {str} -- Defines the bar type, can be one of the following: `['minute', 'week', 'month', 'year']` (default: {'minute'}) symbols {List[str]} -- A list of ticker symbols to pull. (default: None) Returns: ---- {List[Dict]} -- The historical price candles. Usage: ---- """ start = str(milliseconds_since_epoch(dt_object=start)) end = str(milliseconds_since_epoch(dt_object=end)) new_prices = [] if not symbols: symbols = self.portfolio.positions for symbol in symbols: historical_prices_response = self.session.get_price_history( symbol=symbol, period_type='day', start_date=start, end_date=end, frequency_type=bar_type, frequency=bar_size, extended_hours=True) self.historical_prices[symbol] = {} self.historical_prices[symbol][ 'candles'] = historical_prices_response['candles'] for candle in historical_prices_response['candles']: new_price_mini_dict = {} new_price_mini_dict['symbol'] = symbol new_price_mini_dict['open'] = candle['open'] new_price_mini_dict['close'] = candle['close'] new_price_mini_dict['high'] = candle['high'] new_price_mini_dict['low'] = candle['low'] new_price_mini_dict['volume'] = candle['volume'] new_price_mini_dict['datetime'] = candle['datetime'] new_prices.append(new_price_mini_dict) self.historical_prices['aggregated'] = new_prices return self.historical_prices