Notebook

Fundamentals exchange_id test

In [1]:
# Import things to run pipeline
from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline  

# Import our data sources
from quantopian.pipeline.data import Fundamentals

# Import some basic universe filters
from quantopian.pipeline.filters import Q500US, Q1500US, Q3000US, QTradableStocksUS

Create a pipline with our exchange_id from Morningstar.

In [2]:
pipe = Pipeline(
    columns = {'exchange_id': Fundamentals.exchange_id.latest,
               'QTradableStocksUS': QTradableStocksUS()
              },
    screen = None,
    )

result = run_pipeline(pipe, '2019-04-18', '2019-04-18')
result.head()
Out[2]:
QTradableStocksUS exchange_id
2019-04-18 00:00:00+00:00 Equity(2 [ARNC]) True NYS
Equity(21 [AAME]) False NAS
Equity(24 [AAPL]) True NAS
Equity(25 [ARNC_PR]) False ASE
Equity(41 [ARCB]) True NAS
In [3]:
# Let's name the date and stock index for easier reading
result.index.rename(['date','stock'], inplace = True)
In [4]:
# Let's also add a column which is the exchange from the symbol object
result['exchange_from_symbol'] = [stock.exchange for stock in result.index.get_level_values('stock').tolist()]
result
Out[4]:
QTradableStocksUS exchange_id exchange_from_symbol
date stock
2019-04-18 00:00:00+00:00 Equity(2 [ARNC]) True NYS NYSE
Equity(21 [AAME]) False NAS NASDAQ
Equity(24 [AAPL]) True NAS NASDAQ
Equity(25 [ARNC_PR]) False ASE NYSE
Equity(41 [ARCB]) True NAS NASDAQ
Equity(52 [ABM]) True NYS NYSE
Equity(53 [ABMD]) True NAS NASDAQ
Equity(62 [ABT]) True NYS NYSE
Equity(64 [GOLD]) True NYS NYSE
Equity(66 [AB]) False NYS NYSE
Equity(67 [ADSK]) True NAS NASDAQ
Equity(70 [VBF]) False NYS NYSE
Equity(76 [TAP]) True NYS NYSE
Equity(100 [IEP]) False NAS NASDAQ
Equity(106 [ACU]) False ASE NYSE
Equity(110 [RAMP]) True NYS NYSE
Equity(112 [ACY]) False ASE NYSE
Equity(114 [ADBE]) True NAS NASDAQ
Equity(117 [AEY]) False NAS NASDAQ
Equity(122 [ADI]) True NAS NASDAQ
Equity(128 [ADM]) True NYS NYSE
Equity(149 [ADX]) False NYS NYSE
Equity(153 [AE]) False ASE NYSE
Equity(154 [AEM]) True NYS NYSE
Equity(157 [AEG]) False NYS NYSE
Equity(161 [AEP]) True NYS NYSE
Equity(166 [AES]) True NYS NYSE
Equity(185 [AFL]) True NYS NYSE
Equity(192 [ATAX]) False NAS NASDAQ
Equity(197 [AGCO]) True NYS NYSE
... ... ... ...
Equity(53055 [BRPM_U]) False NYS NYSE
Equity(53056 [ALC]) False None NYSE
Equity(53057 [GNOM]) False None NASDAQ
Equity(53058 [NRGU]) False None NYSE
Equity(53059 [NRGZ]) False None NYSE
Equity(53060 [NRGD]) False None NYSE
Equity(53061 [NRGO]) False None NYSE
Equity(53062 [YGRN]) False None NYSE
Equity(53063 [JMIA]) False NYS NYSE
Equity(53064 [PD]) False NYS NYSE
Equity(53065 [TUFN]) False None NYSE
Equity(53066 [SFY]) False None NYSE
Equity(53067 [SFYX]) False None NYSE
Equity(53068 [IBMP]) False None BATS
Equity(53069 [UFO]) False None NYSE
Equity(53070 [KEMX]) False None NYSE
Equity(53073 [ACAM_W]) False None NASDAQ
Equity(53074 [ACAM]) False NAS NASDAQ
Equity(53075 [DPHC_W]) False None NASDAQ
Equity(53076 [DPHC]) False NAS NASDAQ
Equity(53077 [EVSI_W]) False None NASDAQ
Equity(53078 [HCAC]) False NAS NASDAQ
Equity(53079 [CLOU]) False None NASDAQ
Equity(53080 [HCAC_W]) False None NASDAQ
Equity(53081 [CRSA]) False NAS NASDAQ
Equity(53082 [CRSA_W]) False None NASDAQ
Equity(53083 [TPTX]) False NAS NASDAQ
Equity(53084 [PLMR]) False NAS NASDAQ
Equity(53085 [GSST]) False None BATS
Equity(53086 [BWAY]) False NAS NASDAQ

8709 rows × 3 columns

In [5]:
# Display our result in a qgrid to easily sort and filter
import qgrid  
qgrid.show_grid(result) 
QgridWidget(grid_options={'highlightSelectedRow': True, 'fullWidthRows': True, 'rowHeight': 28, 'enableColumnR���
In [6]:
# First check if there are any securities which don't have an exchange_id
result[result.isnull().any(axis=1)]
Out[6]:
QTradableStocksUS exchange_id exchange_from_symbol
date stock
2019-04-18 00:00:00+00:00 Equity(2174 [DIA]) False None NYSE
Equity(8554 [SPY]) False None NYSE
Equity(12430 [EWD]) False None NYSE
Equity(12915 [MDY]) False None NYSE
Equity(14516 [EWA]) False None NYSE
Equity(14517 [EWC]) False None NYSE
Equity(14518 [EWG]) False None NYSE
Equity(14519 [EWH]) False None NYSE
Equity(14520 [EWJ]) False None NYSE
Equity(14521 [EWK]) False None NYSE
Equity(14522 [EWL]) False None NYSE
Equity(14523 [EWM]) False None NYSE
Equity(14524 [EWN]) False None NYSE
Equity(14525 [EWO]) False None NYSE
Equity(14526 [EWP]) False None NYSE
Equity(14527 [EWQ]) False None NYSE
Equity(14528 [EWS]) False None NYSE
Equity(14529 [EWU]) False None NYSE
Equity(14530 [EWW]) False None NYSE
Equity(19654 [XLB]) False None NYSE
Equity(19655 [XLE]) False None NYSE
Equity(19656 [XLF]) False None NYSE
Equity(19657 [XLI]) False None NYSE
Equity(19658 [XLK]) False None NYSE
Equity(19659 [XLP]) False None NYSE
Equity(19660 [XLU]) False None NYSE
Equity(19661 [XLV]) False None NYSE
Equity(19662 [XLY]) False None NYSE
Equity(19920 [QQQ]) False None NASDAQ
Equity(20098 [KTP]) False None NYSE
... ... ... ...
Equity(53035 [FISR]) False None NYSE
Equity(53037 [KNAB]) False None NYSE
Equity(53039 [BNKD]) False None NYSE
Equity(53040 [BNKZ]) False None NYSE
Equity(53041 [BNKU]) False None NYSE
Equity(53042 [BNKO]) False None NYSE
Equity(53045 [OXSQ_Z]) False None NASDAQ
Equity(53048 [IXSE]) False None NYSE
Equity(53049 [IBMO]) False None BATS
Equity(53051 [VERB_W]) False None NASDAQ
Equity(53056 [ALC]) False None NYSE
Equity(53057 [GNOM]) False None NASDAQ
Equity(53058 [NRGU]) False None NYSE
Equity(53059 [NRGZ]) False None NYSE
Equity(53060 [NRGD]) False None NYSE
Equity(53061 [NRGO]) False None NYSE
Equity(53062 [YGRN]) False None NYSE
Equity(53065 [TUFN]) False None NYSE
Equity(53066 [SFY]) False None NYSE
Equity(53067 [SFYX]) False None NYSE
Equity(53068 [IBMP]) False None BATS
Equity(53069 [UFO]) False None NYSE
Equity(53070 [KEMX]) False None NYSE
Equity(53073 [ACAM_W]) False None NASDAQ
Equity(53075 [DPHC_W]) False None NASDAQ
Equity(53077 [EVSI_W]) False None NASDAQ
Equity(53079 [CLOU]) False None NASDAQ
Equity(53080 [HCAC_W]) False None NASDAQ
Equity(53082 [CRSA_W]) False None NASDAQ
Equity(53085 [GSST]) False None BATS

2655 rows × 3 columns

In [7]:
# There seem to be some securities which don't have an exchange_id
# However, scannng the list there seems to be a lot of ETFs and warrents and some other security types
# These won't have fundamental data so it's no surprise they don't show up in Morningstar fundamentals
# That's part of what the QTradableStocksUS universe is meant for - filter only stocks
# Lets see how many of the stocks from the QTradableStocksUS don't have an exchange_id
result[result.isnull().any(axis=1)].query('QTradableStocksUS == True')
Out[7]:
QTradableStocksUS exchange_id exchange_from_symbol
date stock
In [8]:
# Looks like all the QTradableStocksUS securities have a value
# Let's verify the NYSE
result.query("exchange_from_symbol in ['NYSE'] and not exchange_id in ['NYS', 'ASE', 'ARCX'] and QTradableStocksUS")
Out[8]:
QTradableStocksUS exchange_id exchange_from_symbol
date stock
In [9]:
# That looks good
# Let's verify the BATS
result.query("exchange_from_symbol in ['BATS'] and not exchange_id in ['BATS'] and QTradableStocksUS")
Out[9]:
QTradableStocksUS exchange_id exchange_from_symbol
date stock
In [10]:
# That looks good too
# Let's verify the NASDAQ
result.query("exchange_from_symbol in ['NASDAQ'] and not exchange_id in ['NAS'] and QTradableStocksUS")
Out[10]:
QTradableStocksUS exchange_id exchange_from_symbol
date stock