Врач-бондиатОр
Врач-бондиатОр личный блог
22 августа 2023, 21:47

Тетта - поделитесь скриптом для Питона :)

Всем привет!

Если у кого есть, поделитесь плиз скриптом в Питоне для расчета тетты у коллов (по Б-Ш).

У меня почему-то результат неверный, в инете варианты кодов тоже дают ошибочные ответы…
12 Комментариев
  • Иван-дурак
    22 августа 2023, 22:24

    import numpy as np
    from scipy.stats import norm

    def black_scholes_theta(S, K, T, r, sigma, option_type):
    d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
    d2 = d1 — sigma * np.sqrt(T)

    if option_type == 'call':
    theta = — (S * norm.pdf(d1) * sigma) / (2 * np.sqrt(T)) — r * K * np.exp(-r * T) * norm.cdf(d2)
    elif option_type == 'put':
    theta = — (S * norm.pdf(d1) * sigma) / (2 * np.sqrt(T)) + r * K * np.exp(-r * T) * norm.cdf(-d2)
    else:
    raise ValueError(«Invalid option type. Use 'call' or 'put'.»)

    return theta

    # Параметры опциона
    S = 100 # Текущая цена акции
    K = 100 # Цена страйк
    T = 1 # Срок до экспирации (в годах)
    r = 0.05 # Безрисковая процентная ставка
    sigma = 0.2 # Волатильность акции

    option_type = 'call' # Тип опциона: 'call' (колл) или 'put' (пут)

    theta = black_scholes_theta(S, K, T, r, sigma, option_type)
    print(f«Theoretical Theta for the {option_type} option: {theta:.4f}»)

    Это чатГПТ выжал на твой коммент. Но тут вставляется без отступов..

  • 3Qu
    22 августа 2023, 22:49
    Для теты нет, но есть вот такой:
    def InsKline1m(self, sd):        # thname = 'kline'        """ kl = {'stream': 'btcusdt@kline_1m', 'data': {'e': 'kline', 'E': 1692194018649, 's': 'BTCUSDT',        'k': {'t': 1692193980000, 'T': 1692194039999, 's': 'BTCUSDT', 'i': '1m', 'f': 4009649234, 'L': 4009650704, 'o': '29087.10',        'c': '29094.90', 'h': '29095.20', 'l': '29087.10', 'v': '148.002', 'n': 1471, 'x': False, 'q': '4305614.76410', 'V': '88.941',        'Q': '2587451.86430', 'B': '0'}}}        """        ""«if threading.get_ident() != self.threads[thname]['thread_id']:             # print('aaaa ',threading.get_ident())             self.threads[thname]['thread_id'] = threading.get_ident()             self.OpenDB(thname)        „“»        dt = self.ConvertToDTime(sd['data']['E'])        var =   (sd['data']['E'],sd['data']['s'],dt,sd['data']['k']['t'],sd['data']['k']['T'],sd['data']['k']['f'],sd['data']['k']['L'],                 sd['data']['k']['o'],sd['data']['k']['c'],sd['data']['k']['h'],sd['data']['k']['l'],sd['data']['k']['v'],                 sd['data']['k']['n'],sd['data']['k']['x'],sd['data']['k']['q'],sd['data']['k']['V'],sd['data']['k']['Q']) #17        sql2 = '(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'        sql1 = 'insert into Kline1m (E,Symbol,dtime,tb,tc,f,L,open,close,high,low,vol,n,x,q,V,Qp) values' + sql2        begin = time.monotonic_ns()        self.cursor.execute(sql1, var)        self.connect.commit()        if sd['data']['k']['x']:            dt = self.ConvertToDTime(sd['data']['k']['t'])            print('dt ', dt)            var =   (sd['data']['s'],dt,sd['data']['k']['t'],sd['data']['k']['T'],sd['data']['k']['o'],                     sd['data']['k']['c'],sd['data']['k']['h'],sd['data']['k']['l'],sd['data']['k']['v'],                     sd['data']['k']['n'],sd['data']['k']['q'],sd['data']['k']['V'],sd['data']['k']['Q']) #13            sql2 = '(?,?,?,?,?,?,?,?,?,?,?,?,?)'            sql1 = 'insert into Kline_1mc (Symbol,dtime,tb,tc,open,close,high,low,vol,n,q,V,Qp) values' + sql2            self.cursor.execute(sql1, var)            self.connect.commit()        Tq = (time.monotonic_ns() — begin)/1000        print('Time of record ', Tq)
    Сорри, форматирование слетело.)
      • 3Qu
        22 августа 2023, 23:54
        Врач-бондиатОр, одна из функций кода Грааля.))
  • _sg_
    23 августа 2023, 07:10
    разделите на 365 и будет Вам счастье
      • _sg_
        23 августа 2023, 08:47

        Врач-бондиатОр,

        последняя строка

        return theta / 365.0

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн