In [1]:
import pandas as pd

In [4]:
data = pd.read_csv('./vix.csv', index_col='Dates', parse_dates=True)
# statistics
data.describe()


Out[4]:
PX_LAST PX_OPEN PX_HIGH PX_LOW
count 4749.000000 4749.000000 4749.000000 4749.000000
mean 19.682971 19.805511 20.599023 18.991009
std 8.632815 8.690522 9.162908 8.188976
min 9.140000 9.010000 9.310000 8.560000
25% 13.490000 13.580000 14.160000 13.060000
50% 17.550000 17.640000 18.250000 16.830000
75% 23.310000 23.390000 24.300000 22.480000
max 80.860000 80.740000 89.530000 72.760000

In [3]:
pct = data.pct_change()  # pct_change
pct.describe()


Out[3]:
PX_LAST PX_OPEN PX_HIGH PX_LOW
count 4748.000000 4748.000000 4748.000000 4748.000000
mean 0.002371 0.002234 0.002342 0.001542
std 0.071894 0.068930 0.071511 0.056878
min -0.295726 -0.323188 -0.370974 -0.292936
25% -0.037660 -0.038124 -0.036208 -0.031629
50% -0.004805 -0.002590 -0.003150 -0.003033
75% 0.033313 0.034847 0.032967 0.030953
max 1.155979 1.023861 1.172452 0.347596

In [4]:
largeMove = pct.PX_LAST[pct.PX_LAST > 0.2]
largeMove.describe()
print('-- Prob of larger than 20% move in a day: ', len(largeMove)/len(pct))


-- Prob of larger than 20% move in a day:  0.015371657190987577

In [5]:
# n-day return
n = 10
ret = data.resample('10D').last()
pct_n = ret.pct_change()
largeMoveN = pct_n.PX_LAST[pct_n.PX_LAST > 0.2]
pct_n.describe()


Out[5]:
PX_LAST PX_OPEN PX_HIGH PX_LOW
count 691.000000 691.000000 691.000000 691.000000
mean 0.036484 0.034457 0.039159 0.030848
std 0.299564 0.286467 0.309484 0.271347
min -0.703526 -0.660324 -0.736513 -0.665929
25% -0.126518 -0.124740 -0.131844 -0.112163
50% -0.008183 -0.009434 -0.009363 -0.006209
75% 0.134772 0.141477 0.143695 0.126349
max 2.150591 1.718194 1.991817 1.637969

In [6]:
print('-- Prob of larger than 20% move in day: ', n, len(largeMoveN)/len(pct))


-- Prob of larger than 20% move in day:  10 0.02695304274584123

In [7]:
def count_distance(lst: [float]) -> [(int, int)]:
    """"""

In [13]:
def prob(data, window: int, spot: float, strike: float) -> float:
    """
    """
window = 3
data['pct'] = data.PX_LAST.pct_change(periods=window)


            PX_LAST  PX_OPEN  PX_HIGH  PX_LOW       pct
Dates                                                  
2000-03-01    24.21    24.36    26.15   23.98       NaN
2000-04-01    27.01    24.94    27.18   24.80       NaN
2000-05-01    26.41    27.98    29.00   25.85       NaN
2000-06-01    25.73    26.68    26.71   24.70  0.062784
2000-07-01    21.72    25.14    25.17   21.72 -0.195853
2000-10-01    21.71    21.89    22.49   21.36 -0.177963
2000-11-01    22.50    21.98    22.63   21.69 -0.125534
2000-12-01    22.84    23.05    23.49   22.41  0.051565
2000-01-13    21.71    22.73    23.10   21.32  0.000000
2000-01-14    19.66    19.83    20.15   19.51 -0.126222
2000-01-18    21.50    21.39    21.63   20.97 -0.058669
2000-01-19    21.72    22.15    22.16   21.44  0.000461
2000-01-20    21.75    21.31    22.60   21.18  0.106307
2000-01-21    20.82    21.55    21.91   20.50 -0.031628
2000-01-24    24.07    21.43    24.44   21.43  0.108195
2000-01-25    23.02    23.79    24.28   22.87  0.058391
2000-01-26    23.03    22.91    23.19   22.45  0.106148
2000-01-27    23.54    22.37    24.39   22.03 -0.022019
2000-01-28    26.14    23.75    26.54   23.17  0.135534
2000-01-31    24.95    26.78    27.43   24.94  0.083370
2000-01-02    23.45    24.43    24.74   23.29 -0.003823
2000-02-02    23.12    23.02    24.74   22.62 -0.115532
2000-03-02    22.01    22.72    23.73   21.93 -0.117836
2000-04-02    21.54    20.77    21.77   20.69 -0.081450
2000-07-02    22.79    22.97    23.27   22.79 -0.014273
2000-08-02    21.25    21.68    22.08   21.17 -0.034530
2000-09-02    22.90    21.54    22.90   21.29  0.063138
2000-10-02    23.07    23.36    23.55   22.75  0.012286
2000-11-02    24.42    22.94    24.80   22.82  0.149176
2000-02-14    24.38    24.67    24.89   24.27  0.064629
...             ...      ...      ...     ...       ...
2018-04-10    14.22    12.84    15.84   12.42  0.185000
2018-05-10    14.82    14.29    17.36   11.72  0.229876
2018-08-10    15.69    16.05    18.38   15.69  0.351421
2018-09-10    15.95    16.12    17.49   15.27  0.121660
2018-10-10    22.96    16.03    22.96   15.83  0.549258
2018-11-10    24.98    23.07    28.84   20.65  0.592097
2018-12-10    21.31    21.63    26.80   20.88  0.336050
2018-10-15    21.30    21.97    22.89   19.47 -0.072300
2018-10-16    17.62    20.28    20.56   17.55 -0.294636
2018-10-17    17.40    17.06    19.55   17.06 -0.183482
2018-10-18    20.06    18.02    21.57   17.51 -0.058216
2018-10-19    19.89    19.24    21.08   18.39  0.128831
2018-10-22    19.64    19.38    20.89   18.82  0.128736
2018-10-23    20.71    22.18    24.66   20.18  0.032403
2018-10-24    25.23    21.60    26.38   20.40  0.268477
2018-10-25    24.22    24.78    24.78   22.06  0.233198
2018-10-26    24.16    24.51    27.52   23.33  0.166586
2018-10-29    24.70    24.48    27.86   22.01 -0.021007
2018-10-30    23.35    23.94    25.55   23.11 -0.035921
2018-10-31    21.23    22.72    22.80   20.39 -0.121275
2018-01-11    19.34    20.96    21.21   19.03 -0.217004
2018-02-11    19.51    18.52    21.61   18.05 -0.164454
2018-05-11    19.96    20.58    20.87   19.64 -0.059821
2018-06-11    19.91    19.84    20.60   19.69  0.029473
2018-07-11    16.36    18.03    18.05   16.33 -0.161456
2018-08-11    16.72    16.18    17.20   16.09 -0.162325
2018-09-11    17.36    16.87    18.41   16.84 -0.128076
2018-12-11    20.45    17.26    20.71   17.25  0.250000
2018-11-13    20.02    19.45    21.25   19.11  0.197368
2018-11-14    19.56    20.52    21.28   19.30  0.126728

[4749 rows x 5 columns]

In [ ]: