def test_update_stocks_vol_last(self): structures.update_stocks_vol('SPX', TEST_DB_NAME) with database.connect_db(TEST_DB_NAME) as db: db.execute('SELECT MAX(date) FROM stocks WHERE symbol=?;', ['SPX']) test_date = database.decode_date(db.fetchall()[0][0]) db.execute('SELECT * FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) original_row = db.fetchall()[0][3:] db.execute('UPDATE volatility SET change=?, vol1d=?, vol2d=?, ' \ 'vol3d=?, vol4d=?, vol5d=?, vol6d=?, vol7d=?, vol8d=?, '\ 'vol9d=?, vol1m=?, vol2m=?, vol3m=?, vol6m=?, vol1y=? ' \ 'WHERE symbol=? AND date=?;', [0] * 15 + ['SPX', test_date]) db.execute('SELECT * FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) corrupted_row = db.fetchall()[0][3:] self.assertTrue(all(abs(item) > 1e-5 for item in original_row)) self.assertTrue(all(abs(item) < 1e-5 for item in corrupted_row)) structures.update_stocks_vol_last('SPX', TEST_DB_NAME) with database.connect_db(TEST_DB_NAME) as db: db.execute('SELECT * FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) updated_row = db.fetchall()[0][3:] self.assertTrue(all(abs(item) > 1e-5 for item in updated_row))
def test_update_stocks_vol(self): test_date = date(2015, 12, 18) expected_row = ('SPX', database.encode_date(test_date), -1.78, -28.25, 3.15, 28.47, 26.80, 23.70, 24.49, 22.66, 21.15, 19.84, 16.89, 15.69, 15.88, 18.30, 15.39) with database.connect_db(TEST_DB_NAME) as db: db.execute('SELECT COUNT(*) FROM volatility WHERE symbol=?;', ['SPX']) self.assertEqual(db.fetchall(), [(0,)]) structures.update_stocks_vol('SPX', TEST_DB_NAME) with database.connect_db(TEST_DB_NAME) as db: db.execute('SELECT * FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) self.assertEqual(db.fetchall()[0], expected_row) db.execute('DELETE FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) db.execute('SELECT * FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) self.assertEqual(db.fetchall(), []) structures.update_stocks_vol('SPX', TEST_DB_NAME) with database.connect_db(TEST_DB_NAME) as db: db.execute('SELECT * FROM volatility WHERE symbol=? AND date=?;', ['SPX', test_date]) self.assertEqual(db.fetchall()[0], expected_row)
def update_quotes(): """Retrieves all required historical quotes""" logger = logging.getLogger(__name__) logger.info('Updating quotes ...') all_symbols = [ 'VIX', 'VXST', 'VXV', 'VXMT', 'VVIX', 'SPX', 'XIV', 'VXX', 'TLT'] for symbol in all_symbols: stocks.fetch_historical(symbol) structures.update_stocks_vol('SPX') futures.fetch_historical('VX') options.fetch_historical('SPX') logger.info('Done')
def test_volatility_cone(self): stocks.fetch_historical('SPX', TEST_DB_NAME) structures.update_stocks_vol('SPX', TEST_DB_NAME) cone1 = structures.volatility_cone( 'SPX', self.test_timestamp.date(), 252, TEST_DB_NAME) cone2 = np.array([ [ 19.84, 16.89, 15.69, 15.88, 18.30, 15.39], [ 5.82, 8.08, 9.37, 9.64, 10.81, 11.54], [ 8.85, 9.43, 9.98, 10.50, 11.50, 11.69], [ 9.83, 10.54, 11.18, 11.01, 12.26, 11.85], [ 12.32, 12.41, 11.90, 12.57, 12.94, 12.3 ], [ 16.04, 16.64, 18.51, 20.50, 16.94, 15.04], [ 21.94, 26.19, 23.62, 21.59, 17.34, 15.3 ], [ 43.41, 31.95, 25.45, 22.06, 18.30, 15.54], ]) self.assertTrue(np.array_equal(cone1, cone2))