Блог им. Bondiator

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

Всем привет!

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

У меня почему-то результат неверный, в инете варианты кодов тоже дают ошибочные ответы…
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
666
12 комментариев

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}»)

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

avatar
Иван-дурак, уже пробовал — результат не совпадает с калькуляторами
avatar
Для теты нет, но есть вот такой:
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)
Сорри, форматирование слетело.)
avatar
3Qu, вах! Это прям тот самый код Грааля? )
avatar
Врач-бондиатОр, одна из функций кода Грааля.))
avatar
разделите на 365 и будет Вам счастье
avatar
_sg_, а результат какого кода делить?
avatar

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

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

return theta / 365.0
avatar
_sg_, спасибо, попробую еще раз
avatar

Читайте на SMART-LAB:
Фото
Финансовые результаты Аэрофлота по РСБУ за 6 месяцев 2026 года
Аэрофлот опубликовал финансовые результаты по РСБУ за 2 квартал и 6 месяцев 2026 года. ✈️ Выручка во 2 квартале увеличилась на 3,3% год к году и...
Фото
Эмитент допустил дефолт: что делать инвесторам в таком случае?
Дефолт по облигациям не всегда означает полную потерю вложений. Даже если эмитент перестал платить купоны или не погасил долг, инвестор...
Ключевые тезисы менеджмента Норникеля по итогам раскрытия финансовых результатов за 1П 2026 г.
Сегодня мы раскрыли финансовые результаты за 1П 2026 г. по МСФО. Все наши материалы доступны на сайте...

теги блога Врач-бондиатОр

....все тэги



UPDONW
Новый дизайн