Notebook

wti oil

In [1]:
from quantopian.research.experimental import history
import pandas as pd
import matplotlib.pyplot as plt
In [80]:
m_list = ['F', 'G', 'H', 'J', 'K', 'M', 'N', 'Q', 'U', 'V', 'X', 'Z']
cont_list = []
for i in range(1, 21):
    for m in m_list:
        cont_list.append('CL'+m+str(i).zfill(2))
print(cont_list)
['CLF01', 'CLG01', 'CLH01', 'CLJ01', 'CLK01', 'CLM01', 'CLN01', 'CLQ01', 'CLU01', 'CLV01', 'CLX01', 'CLZ01', 'CLF02', 'CLG02', 'CLH02', 'CLJ02', 'CLK02', 'CLM02', 'CLN02', 'CLQ02', 'CLU02', 'CLV02', 'CLX02', 'CLZ02', 'CLF03', 'CLG03', 'CLH03', 'CLJ03', 'CLK03', 'CLM03', 'CLN03', 'CLQ03', 'CLU03', 'CLV03', 'CLX03', 'CLZ03', 'CLF04', 'CLG04', 'CLH04', 'CLJ04', 'CLK04', 'CLM04', 'CLN04', 'CLQ04', 'CLU04', 'CLV04', 'CLX04', 'CLZ04', 'CLF05', 'CLG05', 'CLH05', 'CLJ05', 'CLK05', 'CLM05', 'CLN05', 'CLQ05', 'CLU05', 'CLV05', 'CLX05', 'CLZ05', 'CLF06', 'CLG06', 'CLH06', 'CLJ06', 'CLK06', 'CLM06', 'CLN06', 'CLQ06', 'CLU06', 'CLV06', 'CLX06', 'CLZ06', 'CLF07', 'CLG07', 'CLH07', 'CLJ07', 'CLK07', 'CLM07', 'CLN07', 'CLQ07', 'CLU07', 'CLV07', 'CLX07', 'CLZ07', 'CLF08', 'CLG08', 'CLH08', 'CLJ08', 'CLK08', 'CLM08', 'CLN08', 'CLQ08', 'CLU08', 'CLV08', 'CLX08', 'CLZ08', 'CLF09', 'CLG09', 'CLH09', 'CLJ09', 'CLK09', 'CLM09', 'CLN09', 'CLQ09', 'CLU09', 'CLV09', 'CLX09', 'CLZ09', 'CLF10', 'CLG10', 'CLH10', 'CLJ10', 'CLK10', 'CLM10', 'CLN10', 'CLQ10', 'CLU10', 'CLV10', 'CLX10', 'CLZ10', 'CLF11', 'CLG11', 'CLH11', 'CLJ11', 'CLK11', 'CLM11', 'CLN11', 'CLQ11', 'CLU11', 'CLV11', 'CLX11', 'CLZ11', 'CLF12', 'CLG12', 'CLH12', 'CLJ12', 'CLK12', 'CLM12', 'CLN12', 'CLQ12', 'CLU12', 'CLV12', 'CLX12', 'CLZ12', 'CLF13', 'CLG13', 'CLH13', 'CLJ13', 'CLK13', 'CLM13', 'CLN13', 'CLQ13', 'CLU13', 'CLV13', 'CLX13', 'CLZ13', 'CLF14', 'CLG14', 'CLH14', 'CLJ14', 'CLK14', 'CLM14', 'CLN14', 'CLQ14', 'CLU14', 'CLV14', 'CLX14', 'CLZ14', 'CLF15', 'CLG15', 'CLH15', 'CLJ15', 'CLK15', 'CLM15', 'CLN15', 'CLQ15', 'CLU15', 'CLV15', 'CLX15', 'CLZ15', 'CLF16', 'CLG16', 'CLH16', 'CLJ16', 'CLK16', 'CLM16', 'CLN16', 'CLQ16', 'CLU16', 'CLV16', 'CLX16', 'CLZ16', 'CLF17', 'CLG17', 'CLH17', 'CLJ17', 'CLK17', 'CLM17', 'CLN17', 'CLQ17', 'CLU17', 'CLV17', 'CLX17', 'CLZ17', 'CLF18', 'CLG18', 'CLH18', 'CLJ18', 'CLK18', 'CLM18', 'CLN18', 'CLQ18', 'CLU18', 'CLV18', 'CLX18', 'CLZ18', 'CLF19', 'CLG19', 'CLH19', 'CLJ19', 'CLK19', 'CLM19', 'CLN19', 'CLQ19', 'CLU19', 'CLV19', 'CLX19', 'CLZ19', 'CLF20', 'CLG20', 'CLH20', 'CLJ20', 'CLK20', 'CLM20', 'CLN20', 'CLQ20', 'CLU20', 'CLV20', 'CLX20', 'CLZ20']
In [81]:
cl_contracts = symbols(cont_list)

# Pricing data for our consecutive contracts from earlier.
cl_close = history(
    cl_contracts, 
    fields='close_price', 
    frequency='daily', 
    start='2002-01-01', 
    end='2020-12-31'
)
In [82]:
print(cl_close.columns)
Index([Future(1058200202 [CLG02]), Future(1058200203 [CLH02]),
       Future(1058200204 [CLJ02]), Future(1058200205 [CLK02]),
       Future(1058200206 [CLM02]), Future(1058200207 [CLN02]),
       Future(1058200208 [CLQ02]), Future(1058200209 [CLU02]),
       Future(1058200210 [CLV02]), Future(1058200211 [CLX02]),
       ...
       Future(1058202003 [CLH20]), Future(1058202004 [CLJ20]),
       Future(1058202005 [CLK20]), Future(1058202006 [CLM20]),
       Future(1058202007 [CLN20]), Future(1058202008 [CLQ20]),
       Future(1058202009 [CLU20]), Future(1058202010 [CLV20]),
       Future(1058202011 [CLX20]), Future(1058202012 [CLZ20])],
      dtype='object', length=227)
In [83]:
df = pd.DataFrame()
for i in range(len(cl_close.columns)-1):
    tmp_df = cl_close.iloc[:,i] - cl_close.iloc[:, i+1]
    tmp_df = tmp_df.dropna()
    if not tmp_df.empty:
        tmp_df.plot()
        df = df.append(pd.DataFrame(tmp_df))
In [43]:
plt.hist(df, bins = 48)
Out[43]:
(array([   1.,    0.,    0.,    1.,    0.,    0.,    0.,    2.,    1.,
           1.,    5.,    5.,   14.,   24.,   50.,   48.,   81.,  189.,
         337.,  616.,  764.,  469.,  152.,   65.,   36.,   25.,   14.,
           9.,    5.,    3.,    4.,    1.,    1.,    0.,    1.,    0.,
           0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,
           0.,    0.,    1.]),
 array([ -9.74      ,  -9.25604167,  -8.77208333,  -8.288125  ,
         -7.80416667,  -7.32020833,  -6.83625   ,  -6.35229167,
         -5.86833333,  -5.384375  ,  -4.90041667,  -4.41645833,
         -3.9325    ,  -3.44854167,  -2.96458333,  -2.480625  ,
         -1.99666667,  -1.51270833,  -1.02875   ,  -0.54479167,
         -0.06083333,   0.423125  ,   0.90708333,   1.39104167,
          1.875     ,   2.35895833,   2.84291667,   3.326875  ,
          3.81083333,   4.29479167,   4.77875   ,   5.26270833,
          5.74666667,   6.230625  ,   6.71458333,   7.19854167,
          7.6825    ,   8.16645833,   8.65041667,   9.134375  ,
          9.61833333,  10.10229167,  10.58625   ,  11.07020833,
         11.55416667,  12.038125  ,  12.52208333,  13.00604167,  13.49      ]),
 <a list of 48 Patch objects>)
In [27]:
df.describe()
Out[27]:
0
count 47515.000000
mean -0.069964
std 0.673077
min -9.740000
25% -0.450000
50% -0.090000
75% 0.350000
max 13.490000
In [17]:
head_df = pd.DataFrame()
tail_df = pd.DataFrame()
for i in range(len(cl_close.columns)-1):
    tmp_df = cl_close.iloc[:,i] - cl_close.iloc[:, i+1]
    tmp_df = tmp_df.dropna()
    head_df = df.append(pd.DataFrame(tmp_df.head(1)))
    tail_df = df.append(pd.DataFrame(tail_df.head(1)))
In [40]:
plt.hist(head_df, alpha=0.5,color='blue', bins = 24)
plt.hist(tail_df, alpha=0.5, color='orange',bins = 24)
Out[40]:
(array([   1.,    0.,    0.,    0.,    0.,    0.,    2.,    3.,   22.,
         124.,   43.,   13.,    5.,    1.,    0.,    0.,    0.,    0.,
           0.,    0.,    0.,    0.,    0.,    1.]),
 array([ -9.74      ,  -8.77208333,  -7.80416667,  -6.83625   ,
         -5.86833333,  -4.90041667,  -3.9325    ,  -2.96458333,
         -1.99666667,  -1.02875   ,  -0.06083333,   0.90708333,
          1.875     ,   2.84291667,   3.81083333,   4.77875   ,
          5.74666667,   6.71458333,   7.6825    ,   8.65041667,
          9.61833333,  10.58625   ,  11.55416667,  12.52208333,  13.49      ]),
 <a list of 24 Patch objects>)
In [19]:
print(head_df.describe())
print(tail_df.describe())
                0
count  215.000000
mean    -0.220233
std      1.425546
min     -9.740000
25%     -0.595000
50%     -0.240000
75%     -0.010000
max     13.490000
                0
count  215.000000
mean    -0.227256
std      1.423967
min     -9.740000
25%     -0.605000
50%     -0.240000
75%     -0.025000
max     13.490000

VIX future

In [55]:
m_list = ['F', 'G', 'H', 'J', 'K', 'M', 'N', 'Q', 'U', 'V', 'X', 'Z']
cont_list = []
for i in range(2, 21):
    for m in m_list:
        cont_list.append('VX'+m+str(i).zfill(2))
print(cont_list)
['VXF02', 'VXG02', 'VXH02', 'VXJ02', 'VXK02', 'VXM02', 'VXN02', 'VXQ02', 'VXU02', 'VXV02', 'VXX02', 'VXZ02', 'VXF03', 'VXG03', 'VXH03', 'VXJ03', 'VXK03', 'VXM03', 'VXN03', 'VXQ03', 'VXU03', 'VXV03', 'VXX03', 'VXZ03', 'VXF04', 'VXG04', 'VXH04', 'VXJ04', 'VXK04', 'VXM04', 'VXN04', 'VXQ04', 'VXU04', 'VXV04', 'VXX04', 'VXZ04', 'VXF05', 'VXG05', 'VXH05', 'VXJ05', 'VXK05', 'VXM05', 'VXN05', 'VXQ05', 'VXU05', 'VXV05', 'VXX05', 'VXZ05', 'VXF06', 'VXG06', 'VXH06', 'VXJ06', 'VXK06', 'VXM06', 'VXN06', 'VXQ06', 'VXU06', 'VXV06', 'VXX06', 'VXZ06', 'VXF07', 'VXG07', 'VXH07', 'VXJ07', 'VXK07', 'VXM07', 'VXN07', 'VXQ07', 'VXU07', 'VXV07', 'VXX07', 'VXZ07', 'VXF08', 'VXG08', 'VXH08', 'VXJ08', 'VXK08', 'VXM08', 'VXN08', 'VXQ08', 'VXU08', 'VXV08', 'VXX08', 'VXZ08', 'VXF09', 'VXG09', 'VXH09', 'VXJ09', 'VXK09', 'VXM09', 'VXN09', 'VXQ09', 'VXU09', 'VXV09', 'VXX09', 'VXZ09', 'VXF10', 'VXG10', 'VXH10', 'VXJ10', 'VXK10', 'VXM10', 'VXN10', 'VXQ10', 'VXU10', 'VXV10', 'VXX10', 'VXZ10', 'VXF11', 'VXG11', 'VXH11', 'VXJ11', 'VXK11', 'VXM11', 'VXN11', 'VXQ11', 'VXU11', 'VXV11', 'VXX11', 'VXZ11', 'VXF12', 'VXG12', 'VXH12', 'VXJ12', 'VXK12', 'VXM12', 'VXN12', 'VXQ12', 'VXU12', 'VXV12', 'VXX12', 'VXZ12', 'VXF13', 'VXG13', 'VXH13', 'VXJ13', 'VXK13', 'VXM13', 'VXN13', 'VXQ13', 'VXU13', 'VXV13', 'VXX13', 'VXZ13', 'VXF14', 'VXG14', 'VXH14', 'VXJ14', 'VXK14', 'VXM14', 'VXN14', 'VXQ14', 'VXU14', 'VXV14', 'VXX14', 'VXZ14', 'VXF15', 'VXG15', 'VXH15', 'VXJ15', 'VXK15', 'VXM15', 'VXN15', 'VXQ15', 'VXU15', 'VXV15', 'VXX15', 'VXZ15', 'VXF16', 'VXG16', 'VXH16', 'VXJ16', 'VXK16', 'VXM16', 'VXN16', 'VXQ16', 'VXU16', 'VXV16', 'VXX16', 'VXZ16', 'VXF17', 'VXG17', 'VXH17', 'VXJ17', 'VXK17', 'VXM17', 'VXN17', 'VXQ17', 'VXU17', 'VXV17', 'VXX17', 'VXZ17', 'VXF18', 'VXG18', 'VXH18', 'VXJ18', 'VXK18', 'VXM18', 'VXN18', 'VXQ18', 'VXU18', 'VXV18', 'VXX18', 'VXZ18', 'VXF19', 'VXG19', 'VXH19', 'VXJ19', 'VXK19', 'VXM19', 'VXN19', 'VXQ19', 'VXU19', 'VXV19', 'VXX19', 'VXZ19', 'VXF20', 'VXG20', 'VXH20', 'VXJ20', 'VXK20', 'VXM20', 'VXN20', 'VXQ20', 'VXU20', 'VXV20', 'VXX20', 'VXZ20']
In [56]:
vx_contracts = symbols(cont_list)

# Pricing data for our consecutive contracts from earlier.
vx_close = history(
    vx_contracts, 
    fields='close_price', 
    frequency='daily', 
    start='2002-01-01', 
    end='2020-12-31'
)
In [57]:
vx_close.columns
Out[57]:
Index([Future(1025201207 [VXN12]), Future(1025201208 [VXQ12]),
       Future(1025201209 [VXU12]), Future(1025201210 [VXV12]),
       Future(1025201211 [VXX12]), Future(1025201212 [VXZ12]),
       Future(1025201301 [VXF13]), Future(1025201302 [VXG13]),
       Future(1025201303 [VXH13]), Future(1025201304 [VXJ13]),
       Future(1025201305 [VXK13]), Future(1025201306 [VXM13]),
       Future(1025201307 [VXN13]), Future(1025201308 [VXQ13]),
       Future(1025201309 [VXU13]), Future(1025201310 [VXV13]),
       Future(1025201311 [VXX13]), Future(1025201312 [VXZ13]),
       Future(1025201401 [VXF14]), Future(1025201402 [VXG14]),
       Future(1025201403 [VXH14]), Future(1025201404 [VXJ14]),
       Future(1025201405 [VXK14]), Future(1025201406 [VXM14]),
       Future(1025201407 [VXN14]), Future(1025201408 [VXQ14]),
       Future(1025201409 [VXU14]), Future(1025201410 [VXV14]),
       Future(1025201411 [VXX14]), Future(1025201412 [VXZ14]),
       Future(1025201501 [VXF15]), Future(1025201502 [VXG15]),
       Future(1025201503 [VXH15]), Future(1025201504 [VXJ15]),
       Future(1025201505 [VXK15]), Future(1025201506 [VXM15]),
       Future(1025201507 [VXN15]), Future(1025201508 [VXQ15]),
       Future(1025201509 [VXU15]), Future(1025201510 [VXV15]),
       Future(1025201511 [VXX15]), Future(1025201512 [VXZ15]),
       Future(1025201601 [VXF16]), Future(1025201602 [VXG16]),
       Future(1025201603 [VXH16]), Future(1025201604 [VXJ16]),
       Future(1025201605 [VXK16]), Future(1025201606 [VXM16]),
       Future(1025201607 [VXN16])],
      dtype='object')
In [58]:
df = pd.DataFrame()
for i in range(len(vx_close.columns)-1):
    tmp_df = vx_close.iloc[:,i] - vx_close.iloc[:, i+1]
    tmp_df = tmp_df.dropna()
    if not tmp_df.empty:
        tmp_df.plot()
        df = df.append(pd.DataFrame(tmp_df))
In [59]:
plt.hist(df, bins = 24)
Out[59]:
(array([  3.00000000e+00,   0.00000000e+00,   3.00000000e+00,
          1.60000000e+01,   5.70000000e+01,   1.16000000e+02,
          3.03000000e+02,   4.98000000e+02,   1.43500000e+03,
          3.14500000e+03,   1.43600000e+03,   1.29000000e+02,
          6.10000000e+01,   2.70000000e+01,   1.00000000e+01,
          1.30000000e+01,   9.00000000e+00,   2.00000000e+00,
          3.00000000e+00,   2.00000000e+00,   1.00000000e+00,
          1.00000000e+00,   0.00000000e+00,   1.00000000e+00]),
 array([-3.85  , -3.4925, -3.135 , -2.7775, -2.42  , -2.0625, -1.705 ,
        -1.3475, -0.99  , -0.6325, -0.275 ,  0.0825,  0.44  ,  0.7975,
         1.155 ,  1.5125,  1.87  ,  2.2275,  2.585 ,  2.9425,  3.3   ,
         3.6575,  4.015 ,  4.3725,  4.73  ]),
 <a list of 24 Patch objects>)

GOLD

In [60]:
m_list = ['F', 'G', 'H', 'J', 'K', 'M', 'N', 'Q', 'U', 'V', 'X', 'Z']
cont_list = []
for i in range(2, 20):
    for m in m_list:
        cont_list.append('GC'+m+str(i).zfill(2))
print(cont_list)
['GCF02', 'GCG02', 'GCH02', 'GCJ02', 'GCK02', 'GCM02', 'GCN02', 'GCQ02', 'GCU02', 'GCV02', 'GCX02', 'GCZ02', 'GCF03', 'GCG03', 'GCH03', 'GCJ03', 'GCK03', 'GCM03', 'GCN03', 'GCQ03', 'GCU03', 'GCV03', 'GCX03', 'GCZ03', 'GCF04', 'GCG04', 'GCH04', 'GCJ04', 'GCK04', 'GCM04', 'GCN04', 'GCQ04', 'GCU04', 'GCV04', 'GCX04', 'GCZ04', 'GCF05', 'GCG05', 'GCH05', 'GCJ05', 'GCK05', 'GCM05', 'GCN05', 'GCQ05', 'GCU05', 'GCV05', 'GCX05', 'GCZ05', 'GCF06', 'GCG06', 'GCH06', 'GCJ06', 'GCK06', 'GCM06', 'GCN06', 'GCQ06', 'GCU06', 'GCV06', 'GCX06', 'GCZ06', 'GCF07', 'GCG07', 'GCH07', 'GCJ07', 'GCK07', 'GCM07', 'GCN07', 'GCQ07', 'GCU07', 'GCV07', 'GCX07', 'GCZ07', 'GCF08', 'GCG08', 'GCH08', 'GCJ08', 'GCK08', 'GCM08', 'GCN08', 'GCQ08', 'GCU08', 'GCV08', 'GCX08', 'GCZ08', 'GCF09', 'GCG09', 'GCH09', 'GCJ09', 'GCK09', 'GCM09', 'GCN09', 'GCQ09', 'GCU09', 'GCV09', 'GCX09', 'GCZ09', 'GCF10', 'GCG10', 'GCH10', 'GCJ10', 'GCK10', 'GCM10', 'GCN10', 'GCQ10', 'GCU10', 'GCV10', 'GCX10', 'GCZ10', 'GCF11', 'GCG11', 'GCH11', 'GCJ11', 'GCK11', 'GCM11', 'GCN11', 'GCQ11', 'GCU11', 'GCV11', 'GCX11', 'GCZ11', 'GCF12', 'GCG12', 'GCH12', 'GCJ12', 'GCK12', 'GCM12', 'GCN12', 'GCQ12', 'GCU12', 'GCV12', 'GCX12', 'GCZ12', 'GCF13', 'GCG13', 'GCH13', 'GCJ13', 'GCK13', 'GCM13', 'GCN13', 'GCQ13', 'GCU13', 'GCV13', 'GCX13', 'GCZ13', 'GCF14', 'GCG14', 'GCH14', 'GCJ14', 'GCK14', 'GCM14', 'GCN14', 'GCQ14', 'GCU14', 'GCV14', 'GCX14', 'GCZ14', 'GCF15', 'GCG15', 'GCH15', 'GCJ15', 'GCK15', 'GCM15', 'GCN15', 'GCQ15', 'GCU15', 'GCV15', 'GCX15', 'GCZ15', 'GCF16', 'GCG16', 'GCH16', 'GCJ16', 'GCK16', 'GCM16', 'GCN16', 'GCQ16', 'GCU16', 'GCV16', 'GCX16', 'GCZ16', 'GCF17', 'GCG17', 'GCH17', 'GCJ17', 'GCK17', 'GCM17', 'GCN17', 'GCQ17', 'GCU17', 'GCV17', 'GCX17', 'GCZ17', 'GCF18', 'GCG18', 'GCH18', 'GCJ18', 'GCK18', 'GCM18', 'GCN18', 'GCQ18', 'GCU18', 'GCV18', 'GCX18', 'GCZ18', 'GCF19', 'GCG19', 'GCH19', 'GCJ19', 'GCK19', 'GCM19', 'GCN19', 'GCQ19', 'GCU19', 'GCV19', 'GCX19', 'GCZ19']
In [61]:
gc_contracts = symbols(cont_list)

# Pricing data for our consecutive contracts from earlier.
gc_close = history(
    gc_contracts, 
    fields='close_price', 
    frequency='daily', 
    start='2002-01-01', 
    end='2020-12-31'
)
In [62]:
print(gc_close.columns)
Index([Future(1054200202 [GCG02]), Future(1054200204 [GCJ02]),
       Future(1054200206 [GCM02]), Future(1054200208 [GCQ02]),
       Future(1054200212 [GCZ02]), Future(1054200302 [GCG03]),
       Future(1054200304 [GCJ03]), Future(1054200306 [GCM03]),
       Future(1054200308 [GCQ03]), Future(1054200312 [GCZ03]),
       ...
       Future(1054201702 [GCG17]), Future(1054201704 [GCJ17]),
       Future(1054201706 [GCM17]), Future(1054201708 [GCQ17]),
       Future(1054201710 [GCV17]), Future(1054201712 [GCZ17]),
       Future(1054201806 [GCM18]), Future(1054201812 [GCZ18]),
       Future(1054201906 [GCM19]), Future(1054201912 [GCZ19])],
      dtype='object', length=134)
In [63]:
df = pd.DataFrame()
for i in range(len(gc_close.columns)-1):
    tmp_df = gc_close.iloc[:,i] - gc_close.iloc[:, i+1]
    tmp_df = tmp_df.dropna()
    if not tmp_df.empty:
        tmp_df.plot()
        df = df.append(pd.DataFrame(tmp_df))
In [64]:
plt.hist(df, bins = 24)
Out[64]:
(array([  2.00000000e+00,   0.00000000e+00,   2.00000000e+00,
          7.00000000e+00,   7.00000000e+00,   4.10000000e+01,
          8.70000000e+01,   3.18000000e+02,   2.73000000e+02,
          5.10000000e+02,   2.69100000e+03,   5.49600000e+03,
          6.12200000e+03,   5.65000000e+02,   1.36000000e+02,
          5.20000000e+01,   2.50000000e+01,   1.00000000e+01,
          4.00000000e+00,   1.00000000e+00,   2.00000000e+00,
          3.00000000e+00,   1.00000000e+00,   2.00000000e+00]),
 array([-44.8       , -41.22916667, -37.65833333, -34.0875    ,
        -30.51666667, -26.94583333, -23.375     , -19.80416667,
        -16.23333333, -12.6625    ,  -9.09166667,  -5.52083333,
         -1.95      ,   1.62083333,   5.19166667,   8.7625    ,
         12.33333333,  15.90416667,  19.475     ,  23.04583333,
         26.61666667,  30.1875    ,  33.75833333,  37.32916667,  40.9       ]),
 <a list of 24 Patch objects>)

S&P500

In [65]:
m_list = ['F', 'G', 'H', 'J', 'K', 'M', 'N', 'Q', 'U', 'V', 'X', 'Z']
cont_list = []
for i in range(2, 21):
    for m in m_list:
        cont_list.append('SP'+m+str(i).zfill(2))
print(cont_list)
['SPF02', 'SPG02', 'SPH02', 'SPJ02', 'SPK02', 'SPM02', 'SPN02', 'SPQ02', 'SPU02', 'SPV02', 'SPX02', 'SPZ02', 'SPF03', 'SPG03', 'SPH03', 'SPJ03', 'SPK03', 'SPM03', 'SPN03', 'SPQ03', 'SPU03', 'SPV03', 'SPX03', 'SPZ03', 'SPF04', 'SPG04', 'SPH04', 'SPJ04', 'SPK04', 'SPM04', 'SPN04', 'SPQ04', 'SPU04', 'SPV04', 'SPX04', 'SPZ04', 'SPF05', 'SPG05', 'SPH05', 'SPJ05', 'SPK05', 'SPM05', 'SPN05', 'SPQ05', 'SPU05', 'SPV05', 'SPX05', 'SPZ05', 'SPF06', 'SPG06', 'SPH06', 'SPJ06', 'SPK06', 'SPM06', 'SPN06', 'SPQ06', 'SPU06', 'SPV06', 'SPX06', 'SPZ06', 'SPF07', 'SPG07', 'SPH07', 'SPJ07', 'SPK07', 'SPM07', 'SPN07', 'SPQ07', 'SPU07', 'SPV07', 'SPX07', 'SPZ07', 'SPF08', 'SPG08', 'SPH08', 'SPJ08', 'SPK08', 'SPM08', 'SPN08', 'SPQ08', 'SPU08', 'SPV08', 'SPX08', 'SPZ08', 'SPF09', 'SPG09', 'SPH09', 'SPJ09', 'SPK09', 'SPM09', 'SPN09', 'SPQ09', 'SPU09', 'SPV09', 'SPX09', 'SPZ09', 'SPF10', 'SPG10', 'SPH10', 'SPJ10', 'SPK10', 'SPM10', 'SPN10', 'SPQ10', 'SPU10', 'SPV10', 'SPX10', 'SPZ10', 'SPF11', 'SPG11', 'SPH11', 'SPJ11', 'SPK11', 'SPM11', 'SPN11', 'SPQ11', 'SPU11', 'SPV11', 'SPX11', 'SPZ11', 'SPF12', 'SPG12', 'SPH12', 'SPJ12', 'SPK12', 'SPM12', 'SPN12', 'SPQ12', 'SPU12', 'SPV12', 'SPX12', 'SPZ12', 'SPF13', 'SPG13', 'SPH13', 'SPJ13', 'SPK13', 'SPM13', 'SPN13', 'SPQ13', 'SPU13', 'SPV13', 'SPX13', 'SPZ13', 'SPF14', 'SPG14', 'SPH14', 'SPJ14', 'SPK14', 'SPM14', 'SPN14', 'SPQ14', 'SPU14', 'SPV14', 'SPX14', 'SPZ14', 'SPF15', 'SPG15', 'SPH15', 'SPJ15', 'SPK15', 'SPM15', 'SPN15', 'SPQ15', 'SPU15', 'SPV15', 'SPX15', 'SPZ15', 'SPF16', 'SPG16', 'SPH16', 'SPJ16', 'SPK16', 'SPM16', 'SPN16', 'SPQ16', 'SPU16', 'SPV16', 'SPX16', 'SPZ16', 'SPF17', 'SPG17', 'SPH17', 'SPJ17', 'SPK17', 'SPM17', 'SPN17', 'SPQ17', 'SPU17', 'SPV17', 'SPX17', 'SPZ17', 'SPF18', 'SPG18', 'SPH18', 'SPJ18', 'SPK18', 'SPM18', 'SPN18', 'SPQ18', 'SPU18', 'SPV18', 'SPX18', 'SPZ18', 'SPF19', 'SPG19', 'SPH19', 'SPJ19', 'SPK19', 'SPM19', 'SPN19', 'SPQ19', 'SPU19', 'SPV19', 'SPX19', 'SPZ19', 'SPF20', 'SPG20', 'SPH20', 'SPJ20', 'SPK20', 'SPM20', 'SPN20', 'SPQ20', 'SPU20', 'SPV20', 'SPX20', 'SPZ20']
In [66]:
sp_contracts = symbols(cont_list)

# Pricing data for our consecutive contracts from earlier.
sp_close = history(
    sp_contracts, 
    fields='close_price', 
    frequency='daily', 
    start='2002-01-01', 
    end='2020-12-31'
)
In [67]:
print(sp_close.columns)
Index([Future(1052200203 [SPH02]), Future(1052200206 [SPM02]),
       Future(1052200209 [SPU02]), Future(1052200212 [SPZ02]),
       Future(1052200303 [SPH03]), Future(1052200306 [SPM03]),
       Future(1052200309 [SPU03]), Future(1052200312 [SPZ03]),
       Future(1052200403 [SPH04]), Future(1052200406 [SPM04]),
       Future(1052200409 [SPU04]), Future(1052200412 [SPZ04]),
       Future(1052200503 [SPH05]), Future(1052200506 [SPM05]),
       Future(1052200509 [SPU05]), Future(1052200512 [SPZ05]),
       Future(1052200603 [SPH06]), Future(1052200606 [SPM06]),
       Future(1052200609 [SPU06]), Future(1052200612 [SPZ06]),
       Future(1052200703 [SPH07]), Future(1052200706 [SPM07]),
       Future(1052200709 [SPU07]), Future(1052200712 [SPZ07]),
       Future(1052200803 [SPH08]), Future(1052200806 [SPM08]),
       Future(1052200809 [SPU08]), Future(1052200812 [SPZ08]),
       Future(1052200903 [SPH09]), Future(1052200906 [SPM09]),
       Future(1052200909 [SPU09]), Future(1052200912 [SPZ09]),
       Future(1052201003 [SPH10]), Future(1052201006 [SPM10]),
       Future(1052201009 [SPU10]), Future(1052201012 [SPZ10]),
       Future(1052201103 [SPH11]), Future(1052201106 [SPM11]),
       Future(1052201109 [SPU11]), Future(1052201112 [SPZ11]),
       Future(1052201203 [SPH12]), Future(1052201206 [SPM12]),
       Future(1052201209 [SPU12]), Future(1052201212 [SPZ12]),
       Future(1052201303 [SPH13]), Future(1052201306 [SPM13]),
       Future(1052201309 [SPU13]), Future(1052201312 [SPZ13]),
       Future(1052201403 [SPH14]), Future(1052201406 [SPM14]),
       Future(1052201409 [SPU14]), Future(1052201412 [SPZ14]),
       Future(1052201503 [SPH15]), Future(1052201506 [SPM15]),
       Future(1052201509 [SPU15]), Future(1052201512 [SPZ15]),
       Future(1052201603 [SPH16]), Future(1052201606 [SPM16]),
       Future(1052201609 [SPU16]), Future(1052201612 [SPZ16]),
       Future(1052201703 [SPH17]), Future(1052201706 [SPM17]),
       Future(1052201709 [SPU17]), Future(1052201712 [SPZ17]),
       Future(1052201812 [SPZ18]), Future(1052201912 [SPZ19])],
      dtype='object')
In [68]:
df = pd.DataFrame()
for i in range(len(sp_close.columns)-1):
    tmp_df = sp_close.iloc[:,i] - sp_close.iloc[:, i+1]
    tmp_df = tmp_df.dropna()
    if not tmp_df.empty:
        tmp_df.plot()
        df = df.append(pd.DataFrame(tmp_df))
In [70]:
plt.hist(df, bins = 24)
Out[70]:
(array([  2.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          1.00000000e+00,   3.00000000e+00,   5.00000000e+00,
          2.80000000e+01,   1.30000000e+02,   1.71500000e+03,
          1.71800000e+03,   2.81200000e+03,   9.58000000e+02,
          1.60000000e+02,   2.80000000e+01,   7.00000000e+00,
          9.00000000e+00,   4.00000000e+00,   1.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   1.00000000e+00]),
 array([-89.        , -82.22083333, -75.44166667, -68.6625    ,
        -61.88333333, -55.10416667, -48.325     , -41.54583333,
        -34.76666667, -27.9875    , -21.20833333, -14.42916667,
         -7.65      ,  -0.87083333,   5.90833333,  12.6875    ,
         19.46666667,  26.24583333,  33.025     ,  39.80416667,
         46.58333333,  53.3625    ,  60.14166667,  66.92083333,  73.7       ]),
 <a list of 24 Patch objects>)

Tnote 10 year

In [71]:
m_list = ['F', 'G', 'H', 'J', 'K', 'M', 'N', 'Q', 'U', 'V', 'X', 'Z']
cont_list = []
for i in range(2, 21):
    for m in m_list:
        cont_list.append('TY'+m+str(i).zfill(2))
print(cont_list)
['TYF02', 'TYG02', 'TYH02', 'TYJ02', 'TYK02', 'TYM02', 'TYN02', 'TYQ02', 'TYU02', 'TYV02', 'TYX02', 'TYZ02', 'TYF03', 'TYG03', 'TYH03', 'TYJ03', 'TYK03', 'TYM03', 'TYN03', 'TYQ03', 'TYU03', 'TYV03', 'TYX03', 'TYZ03', 'TYF04', 'TYG04', 'TYH04', 'TYJ04', 'TYK04', 'TYM04', 'TYN04', 'TYQ04', 'TYU04', 'TYV04', 'TYX04', 'TYZ04', 'TYF05', 'TYG05', 'TYH05', 'TYJ05', 'TYK05', 'TYM05', 'TYN05', 'TYQ05', 'TYU05', 'TYV05', 'TYX05', 'TYZ05', 'TYF06', 'TYG06', 'TYH06', 'TYJ06', 'TYK06', 'TYM06', 'TYN06', 'TYQ06', 'TYU06', 'TYV06', 'TYX06', 'TYZ06', 'TYF07', 'TYG07', 'TYH07', 'TYJ07', 'TYK07', 'TYM07', 'TYN07', 'TYQ07', 'TYU07', 'TYV07', 'TYX07', 'TYZ07', 'TYF08', 'TYG08', 'TYH08', 'TYJ08', 'TYK08', 'TYM08', 'TYN08', 'TYQ08', 'TYU08', 'TYV08', 'TYX08', 'TYZ08', 'TYF09', 'TYG09', 'TYH09', 'TYJ09', 'TYK09', 'TYM09', 'TYN09', 'TYQ09', 'TYU09', 'TYV09', 'TYX09', 'TYZ09', 'TYF10', 'TYG10', 'TYH10', 'TYJ10', 'TYK10', 'TYM10', 'TYN10', 'TYQ10', 'TYU10', 'TYV10', 'TYX10', 'TYZ10', 'TYF11', 'TYG11', 'TYH11', 'TYJ11', 'TYK11', 'TYM11', 'TYN11', 'TYQ11', 'TYU11', 'TYV11', 'TYX11', 'TYZ11', 'TYF12', 'TYG12', 'TYH12', 'TYJ12', 'TYK12', 'TYM12', 'TYN12', 'TYQ12', 'TYU12', 'TYV12', 'TYX12', 'TYZ12', 'TYF13', 'TYG13', 'TYH13', 'TYJ13', 'TYK13', 'TYM13', 'TYN13', 'TYQ13', 'TYU13', 'TYV13', 'TYX13', 'TYZ13', 'TYF14', 'TYG14', 'TYH14', 'TYJ14', 'TYK14', 'TYM14', 'TYN14', 'TYQ14', 'TYU14', 'TYV14', 'TYX14', 'TYZ14', 'TYF15', 'TYG15', 'TYH15', 'TYJ15', 'TYK15', 'TYM15', 'TYN15', 'TYQ15', 'TYU15', 'TYV15', 'TYX15', 'TYZ15', 'TYF16', 'TYG16', 'TYH16', 'TYJ16', 'TYK16', 'TYM16', 'TYN16', 'TYQ16', 'TYU16', 'TYV16', 'TYX16', 'TYZ16', 'TYF17', 'TYG17', 'TYH17', 'TYJ17', 'TYK17', 'TYM17', 'TYN17', 'TYQ17', 'TYU17', 'TYV17', 'TYX17', 'TYZ17', 'TYF18', 'TYG18', 'TYH18', 'TYJ18', 'TYK18', 'TYM18', 'TYN18', 'TYQ18', 'TYU18', 'TYV18', 'TYX18', 'TYZ18', 'TYF19', 'TYG19', 'TYH19', 'TYJ19', 'TYK19', 'TYM19', 'TYN19', 'TYQ19', 'TYU19', 'TYV19', 'TYX19', 'TYZ19', 'TYF20', 'TYG20', 'TYH20', 'TYJ20', 'TYK20', 'TYM20', 'TYN20', 'TYQ20', 'TYU20', 'TYV20', 'TYX20', 'TYZ20']
In [72]:
ty_contracts = symbols(cont_list)

# Pricing data for our consecutive contracts from earlier.
ty_close = history(
    ty_contracts, 
    fields='close_price', 
    frequency='daily', 
    start='2002-01-01', 
    end='2020-12-31'
)
In [73]:
print(ty_close.columns)
Index([Future(1020200203 [TYH02]), Future(1020200206 [TYM02]),
       Future(1020200209 [TYU02]), Future(1020200212 [TYZ02]),
       Future(1020200303 [TYH03]), Future(1020200306 [TYM03]),
       Future(1020200309 [TYU03]), Future(1020200312 [TYZ03]),
       Future(1020200403 [TYH04]), Future(1020200406 [TYM04]),
       Future(1020200409 [TYU04]), Future(1020200412 [TYZ04]),
       Future(1020200503 [TYH05]), Future(1020200506 [TYM05]),
       Future(1020200509 [TYU05]), Future(1020200512 [TYZ05]),
       Future(1020200603 [TYH06]), Future(1020200606 [TYM06]),
       Future(1020200609 [TYU06]), Future(1020200612 [TYZ06]),
       Future(1020200703 [TYH07]), Future(1020200706 [TYM07]),
       Future(1020200709 [TYU07]), Future(1020200712 [TYZ07]),
       Future(1020200803 [TYH08]), Future(1020200806 [TYM08]),
       Future(1020200809 [TYU08]), Future(1020200812 [TYZ08]),
       Future(1020200903 [TYH09]), Future(1020200906 [TYM09]),
       Future(1020200909 [TYU09]), Future(1020200912 [TYZ09]),
       Future(1020201003 [TYH10]), Future(1020201006 [TYM10]),
       Future(1020201009 [TYU10]), Future(1020201012 [TYZ10]),
       Future(1020201103 [TYH11]), Future(1020201106 [TYM11]),
       Future(1020201109 [TYU11]), Future(1020201112 [TYZ11]),
       Future(1020201203 [TYH12]), Future(1020201206 [TYM12]),
       Future(1020201209 [TYU12]), Future(1020201212 [TYZ12]),
       Future(1020201303 [TYH13]), Future(1020201306 [TYM13]),
       Future(1020201309 [TYU13]), Future(1020201312 [TYZ13]),
       Future(1020201403 [TYH14]), Future(1020201406 [TYM14]),
       Future(1020201409 [TYU14]), Future(1020201412 [TYZ14]),
       Future(1020201503 [TYH15]), Future(1020201506 [TYM15]),
       Future(1020201509 [TYU15]), Future(1020201512 [TYZ15]),
       Future(1020201603 [TYH16]), Future(1020201606 [TYM16]),
       Future(1020201609 [TYU16]), Future(1020201612 [TYZ16])],
      dtype='object')
In [74]:
df = pd.DataFrame()
for i in range(len(ty_close.columns)-1):
    tmp_df = ty_close.iloc[:,i] - ty_close.iloc[:, i+1]
    tmp_df = tmp_df.dropna()
    if not tmp_df.empty:
        tmp_df.plot()
        df = df.append(pd.DataFrame(tmp_df))
In [76]:
plt.hist(df, bins = 64)
Out[76]:
(array([  1.68100000e+03,   3.92100000e+03,   4.40000000e+01,
          2.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
          1.00000000e+00]),
 array([  -1.156     ,    0.53321875,    2.2224375 ,    3.91165625,
           5.600875  ,    7.29009375,    8.9793125 ,   10.66853125,
          12.35775   ,   14.04696875,   15.7361875 ,   17.42540625,
          19.114625  ,   20.80384375,   22.4930625 ,   24.18228125,
          25.8715    ,   27.56071875,   29.2499375 ,   30.93915625,
          32.628375  ,   34.31759375,   36.0068125 ,   37.69603125,
          39.38525   ,   41.07446875,   42.7636875 ,   44.45290625,
          46.142125  ,   47.83134375,   49.5205625 ,   51.20978125,
          52.899     ,   54.58821875,   56.2774375 ,   57.96665625,
          59.655875  ,   61.34509375,   63.0343125 ,   64.72353125,
          66.41275   ,   68.10196875,   69.7911875 ,   71.48040625,
          73.169625  ,   74.85884375,   76.5480625 ,   78.23728125,
          79.9265    ,   81.61571875,   83.3049375 ,   84.99415625,
          86.683375  ,   88.37259375,   90.0618125 ,   91.75103125,
          93.44025   ,   95.12946875,   96.8186875 ,   98.50790625,
         100.197125  ,  101.88634375,  103.5755625 ,  105.26478125,  106.954     ]),
 <a list of 64 Patch objects>)