Опцион - это производный контракт, основанный на стоимости некоторой базовой ценной бумаги (обычно цена акции).Формально в модели ценообразования цена опциона является функцией s0
, текущей базовой цены ценной бумаги, лота других аргументов (волатильность, процентная ставка, ставка дивидендов и т. Д.) И некоторых возможныхkwargs
.
Дельта опциона - это скорость изменения его цены по отношению к цене базовой ценной бумаги.На практике это реализуется как
(calc_price(s0 + ds, **kwargs) - calc_price(s0 - ds, **kwargs)) / (2 * ds)
Что я хочу сделать, это реализовать get_delta
как метод класса Option
Итак, теперь яреализовали модель ценообразования для опциона следующим образом:
class Option:
def __init__(self, s0, lots_of_args, **kwargs):
self.s0 = s0
# actually there's a list of lots of args, not packed
self.lots_of_args = lots_of_args
# actually kwargs are unpacked either,
self.kwargs = kwargs
def calc_price(self):
price = ...
return price
def get_delta(self, ds=.05):
cd = Option(self.s0 - ds, self.lots_of_args, **self.kwargs).calc_price()
cu = Option(self.s0 + ds, self.lots_of_args, **self.kwargs).calc_price()
return (cu - cd) / (2 * ds)
Проблема заключается в том, что на самом деле существует лот аргументов, отличных от s0
(представлен как lots_of_args , но на самом деле это не один аргумент, но их дюжина), поэтому я очень не хочу копировать их один за другим в функцию get_delta
.Мне нужен способ получить подсказку об аргументах, которые передаются в __init__
.Первая мысль, конечно же, заключается в использовании locals()
.Однако есть некоторые проблемы:
дополнительно self
аргумент включен.
kwargs
не распаковано.
Документ на locals()
не советует изменять dict, возвращаемый locals()
, поэтому я не думаю, что это хорошая идеяdel
self
arg и update
распакованный kwargs
.
Кто-нибудь может помочь?Благодаря.