예제 #1
0
    def _get_futures_chain_tickers(self):
        """
        Function used to download the expiration dates of the futures contracts, in order to return afterwards current
        futures tickers. It uses the list of month codes of designated contracts and filter out these, that should not
        be considered by the future ticker.
        """
        futures_chain_tickers_df = self._data_provider.get_futures_chain_tickers(self,
                                                                                 ExpirationDateField.all_dates())[self]
        # Get the minimum date
        futures_chain_tickers = futures_chain_tickers_df.min(axis=1)
        futures_chain_tickers = QFSeries(data=futures_chain_tickers.index, index=futures_chain_tickers.values)
        futures_chain_tickers.index = pd.to_datetime(futures_chain_tickers.index)

        # Filter out the non-designated contracts
        seed = self.family_id.split("{}")[0]
        designated_contracts_seeds = tuple(seed + month_code for month_code in self.designated_contracts)
        futures_chain_tickers = futures_chain_tickers[futures_chain_tickers.apply(
            lambda t: t.ticker.startswith(designated_contracts_seeds)
        )]
        return futures_chain_tickers
예제 #2
0
    def _compute_aggregated_volume(self, ticker: FutureTicker, start_date: datetime, end_date: datetime) \
            -> Optional[QFSeries]:
        # Compute the TOTAL VOLUME (aggregated across contracts)
        futures_chain_tickers_df = self.data_provider.get_futures_chain_tickers(
            ticker, ExpirationDateField.all_dates())[ticker]
        # Get the minimum date
        futures_chain_tickers = futures_chain_tickers_df.min(axis=1)
        futures_chain_tickers = QFSeries(data=futures_chain_tickers.index,
                                         index=futures_chain_tickers.values)
        futures_chain_tickers.index = to_datetime(futures_chain_tickers.index)
        futures_chain_tickers = futures_chain_tickers.sort_index()

        futures_chain_tickers = futures_chain_tickers.loc[start_date:end_date +
                                                          RelativeDelta(
                                                              months=6)]
        all_specific_tickers = futures_chain_tickers.values.tolist()
        volume_df = self.data_provider.get_price(
            all_specific_tickers, PriceField.Volume, start_date, end_date,
            Frequency.DAILY).dropna(axis=1, how="all").fillna(0)

        return volume_df.sum(axis=1) if not volume_df.empty else None
예제 #3
0
    def _get_futures_chain_tickers(self) -> QFSeries:
        futures_chain_tickers_df = self._data_provider.get_futures_chain_tickers(
            self, [ExpirationDateField.LastTradeableDate])[self]
        futures_chain_tickers_series = futures_chain_tickers_df.loc[:,
                                                                    ExpirationDateField
                                                                    .
                                                                    LastTradeableDate]

        # Filter out the non-designated contracts
        month_codes = "|".join(self.designated_contracts)
        contracts_pattern = self.family_id.format(f"\\d{{4}}({month_codes})")
        designated_contracts = futures_chain_tickers_series.index[
            futures_chain_tickers_series.index.map(lambda t: bool(
                re.search(f"^{contracts_pattern}$", t.as_string())))]
        futures_chain_tickers_series = futures_chain_tickers_series.loc[
            designated_contracts]

        futures_chain_tickers = QFSeries(futures_chain_tickers_series.index,
                                         futures_chain_tickers_series.values)
        futures_chain_tickers.index = to_datetime(futures_chain_tickers.index)

        return futures_chain_tickers
예제 #4
0
    def _get_futures_chain_tickers(self):
        """
        Function used to download the expiration dates of the futures contracts, in order to return afterwards current
        futures tickers. It uses the list of month codes of designated contracts and filter out these, that should not
        be considered by the future ticker.
        """
        futures_chain_tickers_df = self._data_provider.get_futures_chain_tickers(
            self, ExpirationDateField.all_dates())[self]
        # Get the minimum date
        futures_chain_tickers_series = futures_chain_tickers_df.min(axis=1)

        # Filter out the non-designated contracts
        month_codes = "|".join(self.designated_contracts)
        contracts_pattern = self.family_id.format(f"({month_codes})\\d{{1,2}}")
        designated_contracts = futures_chain_tickers_series.index[
            futures_chain_tickers_series.index.map(lambda t: bool(
                re.search(f"^{contracts_pattern}$", t.as_string())))]
        futures_chain_tickers_series = futures_chain_tickers_series.loc[
            designated_contracts]

        futures_chain_tickers = QFSeries(futures_chain_tickers_series.index,
                                         futures_chain_tickers_series.values)
        futures_chain_tickers.index = to_datetime(futures_chain_tickers.index)
        return futures_chain_tickers