Example #1
0
    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))
Example #2
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)
Example #3
0
    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)
Example #4
0
    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)