Notebook
In [76]:
from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.pipeline.data import factset
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [77]:
zs = factset.Fundamentals.zscore_qf.latest

my_pipe = Pipeline(
    columns={'z_score': zs,
            },
    screen= QTradableStocksUS()
    )

start = '2002-11-01'
end = '2019-03-13'
results = run_pipeline(my_pipe, start, end)

Pipeline Execution Time: 27.39 Seconds
In [78]:
results = results.dropna()
results
Out[78]:
z_score
2002-11-01 00:00:00+00:00 Equity(2 [ARNC]) 1.863670
Equity(24 [AAPL]) 3.601540
Equity(41 [ARCB]) 3.457220
Equity(60 [ABS]) 4.057910
Equity(62 [ABT]) 4.733950
Equity(64 [GOLD]) 3.363640
Equity(67 [ADSK]) 4.371160
Equity(76 [TAP]) 1.786940
Equity(88 [ACI]) 1.010160
Equity(107 [ACV]) 5.042170
Equity(110 [RAMP]) 2.871670
Equity(114 [ADBE]) 13.341800
Equity(115 [ADCT]) 10.213800
Equity(122 [ADI]) 4.026620
Equity(128 [ADM]) 2.416930
Equity(161 [AEP]) 1.324880
Equity(166 [AES]) 0.468870
Equity(197 [AGCO]) 2.873200
Equity(205 [AGN]) 6.982590
Equity(209 [AM]) 2.234460
Equity(216 [HES]) 1.810700
Equity(247 [AIN]) 2.587590
Equity(266 [AJG]) 2.773690
Equity(289 [MATX]) 2.384750
Equity(300 [ALK]) 1.006120
Equity(301 [ALKS]) 0.486815
Equity(328 [ALTR]) 10.356300
Equity(337 [AMAT]) 8.090430
Equity(338 [BEAM]) 4.475960
Equity(351 [AMD]) 1.149860
... ... ...
2019-03-13 00:00:00+00:00 Equity(51693 [GTES]) 1.551080
Equity(51700 [AGS]) 1.110960
Equity(51725 [FTSI]) -3.372510
Equity(51742 [WHD]) 5.892640
Equity(51743 [EOLS]) 2.809310
Equity(51815 [GLIB_A]) 0.761767
Equity(51832 [ZS]) 15.135000
Equity(51854 [DBX]) 3.676210
Equity(51917 [ZUO]) 8.680390
Equity(51928 [NVT]) 2.155580
Equity(51934 [EAF]) 2.983640
Equity(51937 [DOCU]) 3.900020
Equity(51942 [PVTL]) 6.968810
Equity(51955 [CDAY]) 0.902577
Equity(51957 [LASR]) 11.281500
Equity(51961 [SMAR]) 11.971400
Equity(51966 [APY]) 2.394080
Equity(51975 [INSP]) 16.458500
Equity(51982 [CBLK]) 0.777320
Equity(51987 [AMRX]) 0.981905
Equity(51992 [PS]) 2.560410
Equity(52028 [WH]) 1.445650
Equity(52030 [EVOP]) 0.457920
Equity(52038 [CGC]) 6.503450
Equity(52045 [PRSP]) 1.200510
Equity(52059 [CVIA]) 1.626980
Equity(52064 [EVRG]) 0.795902
Equity(52084 [VNE]) 2.637630
Equity(52090 [USX]) 2.565680
Equity(52100 [AVLR]) 3.963240

6294504 rows × 1 columns

In [79]:
median_zs = results.groupby(level=0).median()
In [80]:
ax = median_zs.plot(title='Altman z score median for QTU')
ax.set_xlabel('Trade day')
ax.set_ylabel('Median Altman z score')
Out[80]:
<matplotlib.text.Text at 0x7f4972190d68>
In [81]:
results_time = results.reset_index(level=1, drop=True).apply(np.log10)
In [82]:
times = pd.unique(results_time.index)
In [83]:
N_days = len(times)
In [84]:
N_days
Out[84]:
4117
In [85]:
N_bins = 100
In [86]:
a_min = results_time['z_score'].min()
a_max = results_time['z_score'].max()
In [87]:
hist = np.empty([N_bins,N_days])
In [88]:
for k,index in enumerate(pd.unique(results_time.index)):
    (hist[:,k],bins) = np.histogram(results_time.loc[index,'z_score'].values, bins=N_bins, range=(a_min,a_max), density=True)
In [89]:
plt.imshow(hist, cmap='hot',aspect='auto')
plt.show()
In [ ]: