示例#1
0
    def test_get_price(self):
        call = Option('call', TSLA, 420, datetime(2020, 12, 4))
        call.price = 420
        chain = OptionChain(TSLA, datetime.now())
        chain.add_option(call)

        self.assertEqual(420, chain.get_price(call))
示例#2
0
 def parse_chain(self, date, security, path):
     chain = OptionChain(security, date)
     df = pd.read_csv(path,
                      parse_dates=['expiration'],
                      date_parser=from_small_date)
     for index, contract in df.iterrows():
         expiration = contract['expiration']
         direction = contract['direction']
         strike = contract['strike']
         option = Option(direction, security, strike, expiration)
         option.price = contract['price']
         option.delta = contract['delta']
         option.theta = contract['theta']
         option.vega = contract['vega']
         chain.add_option(option)
     return chain
示例#3
0
 def _parse_chain(self, date, security, contracts):
     chain = OptionChain(security, date)
     for contract in contracts:
         fields = contract.split(' ')
         match = re.match(r'(\d+)(c|p)(\d+\.\d*)', fields[0])
         expiration = datetime.strptime(match[1], '%y%m%d')
         direction = 'call' if match[2] == 'c' else 'put'
         strike = float(match[3])
         price = float(fields[1])
         delta = float(fields[2])
         theta = float(fields[3])
         option = Option(direction, security, strike, expiration)
         option.price = price
         option.delta = delta
         option.theta = theta
         chain.add_option(option)
     return chain
示例#4
0
    def test_otm(self):
        security = Security('TSLA')
        security.add_quote(Quote(420, datetime.now()))
        o1 = Option('call', security, 500, datetime(2020, 4, 20))
        o2 = Option('put', security, 300, datetime(2020, 4, 20))
        o3 = Option('call', security, 100, datetime(2020, 4, 20))  # ITM

        chain = OptionChain(security, datetime.now())
        chain.add_option(o1)
        chain.add_option(o2)
        chain.add_option(o3)

        calls, puts = chain.otm(datetime(2020, 4, 20)).values()
        self.assertEqual(1, len(calls))
        self.assertEqual(1, len(puts))
示例#5
0
    def test_search(self):
        security = Security('TSLA')
        o1 = Option('call', security, 500, datetime(2020, 4, 1))
        o1.theta = -2.02
        o1.delta = 0.83
        o2 = Option('put', security, 300, datetime(2020, 4, 20))
        o2.theta = -0.16
        o2.delta = -0.34

        chain = OptionChain(security, datetime.now())
        chain.add_option(o1)
        chain.add_option(o2)

        result = chain.search(theta=-2, delta=0.8)
        assert o1.strike == result.strike
        result = chain.search(theta=-1, delta=-0.5)
        assert o2.strike == result.strike
示例#6
0
    def test_iv(self):
        security = Security('TSLA')
        security.add_quote(Quote(420, datetime.now()))
        o1 = Option('call', security, 700, datetime(2020, 4, 20))
        o3 = Option('call', security, 500, datetime(2020, 4, 20))
        o2 = Option('put', security, 400, datetime(2020, 4, 20))
        o1.iv = 5
        o1.price = 2
        o2.iv = 2
        o2.price = 4
        o3.iv = 0.5
        o3.price = 10

        chain = OptionChain(security, datetime.now())
        chain.add_option(o1)
        chain.add_option(o2)
        chain.add_option(o3)

        expected = (5 * 2 + 2 * 4 + 0.5 * 10) / (2 + 4 + 10)
        result = chain.iv(datetime(2020, 4, 20))
        self.assertEqual(expected, result)
示例#7
0
 def _parse_option_chain(self, security, date, json):
     chain = OptionChain(security, date)
     for exp_dt, options in json.items():
         for option in options:
             chain.add_option(self._parse_option(security, exp_dt, option))
     return chain