def test_expire_without_close_on_expiration(self): path = Path('tests/test_data/normalized/TSLA') training = pd.read_csv(path / 'training.csv', parse_dates=['date'], date_parser=from_small_date) call = Option('call', TSLA, 2800, datetime(2020, 7, 24)) portfolio = Portfolio(cash=0, securities={TSLA: 100, call: -1}) portfolio.collateral = {TSLA: 100} sim = Simulator(TSLA, portfolio, path, training) net = BuyAndHoldNet() sim.simulate(net, datetime(2020, 7, 23), datetime(2020, 8, 3)) self.assertEqual(0, portfolio.securities.get(call, 0))
def test_hold_only(self): path = Path('tests/test_data/normalized/TSLA') training = pd.read_csv(path / 'training.csv', parse_dates=['date'], date_parser=from_small_date) portfolio = Portfolio(cash=0, securities={TSLA: 100}) sim = Simulator(TSLA, portfolio, path, training) net = BuyAndHoldNet() fitness = sim.simulate(net, datetime(2020, 7, 20), datetime(2020, 8, 22)) # close on 8/21 was 2049.98 # buy-and-hold is the fitness base-line self.assertAlmostEqual(0, fitness, places=3)
def test_sell_and_expire(self): path = Path('tests/test_data/normalized/TSLA') training = pd.read_csv(path / 'training.csv', parse_dates=['date'], date_parser=from_small_date) portfolio = Portfolio(cash=0, securities={TSLA: 100}) sim = Simulator(TSLA, portfolio, path, training) net = SellOnceNet() # close on 8/21 was 2049.98 # direction,expiration,strike,price,iv,delta,theta,vega # call,200821,2050.0,100.0,0.49691698172618826,0.4607403125936822,0.3105944110992971,0.5219995298370175 net.theta = 0.3087888191319731 # target 8/21 expiration net.delta = 0.4607403125936822 # target 2050 strike fitness = sim.simulate(net, datetime(2020, 7, 19), datetime(2020, 8, 22)) # premium + held shares value - buy-and-hold value expected = (100 * 100) + (2049.98 * 100) - (2049.98 * 100) self.assertAlmostEqual(expected, fitness, places=2) self.assertEqual(100, portfolio.securities[TSLA]) self.assertEqual(0, portfolio.collateral[TSLA]) self.assertEqual(10000, portfolio.cash)
def test_sell_and_get_assigned(self): path = Path('tests/test_data/normalized/TSLA') training = pd.read_csv(path / 'training.csv', parse_dates=['date'], date_parser=from_small_date) portfolio = Portfolio(cash=0, securities={TSLA: 100}) sim = Simulator(TSLA, portfolio, path, training) net = SellOnceNet() # close on 8/21 was 2049.98 # direction,expiration,strike,price,iv,delta,theta,vega # call,200821,2000.0,108.75,0.4965503408681624,0.46177122041801355,0.30752325473559794,0.5241433005010039 net.theta = 0.3087888191319731 # target 8/21 expiration net.delta = 0.4617712204180135 # target 2000 strike fitness = sim.simulate(net, datetime(2020, 7, 19), datetime(2020, 8, 22)) # premium + assigned cash - buy-and-hold value expected = (108.75 * 100) + (2000 * 100) - (2049.98 * 100) self.assertAlmostEqual(expected, fitness, places=2) self.assertEqual(0, portfolio.securities[TSLA]) self.assertEqual(0, portfolio.collateral[TSLA]) self.assertEqual(10875 + 200000, portfolio.cash)