2015-08-18 2 views
1

В ходе тестирования алгоритма я вычислил цены опционов на случайные входные значения, используя стандартную функцию ценообразования blsprice, реализованную в Financial Toolbox компании MATLAB.Отрицательные цены опциона для определенных входных значений в MATLAB?

Удивительно (по крайней мере для меня),
видимо функция возврата отрицательных цен опционов для определенных комбинаций входных значений.

В качестве примера взять следующее:

> [Call,Put]=blsprice(67.6201,170.3190,0.0129,0.80,0.1277) 

Call =-7.2942e-15 
Put = 100.9502 

Если изменить время истечения срока для 0.79 или 0.81, значение становится неотрицательным, как я бы ожидать.

Неужели кто-нибудь из вас когда-либо испытывал нечто похожее и может придумать короткое объяснение, почему это происходит?

+1

Этот вопрос может быть более подходящим для [quant.se]? Однако, поскольку значение настолько маленькое, что я подозреваю, что это просто [ошибка с плавающей точкой] (http://floating-point-gui.de/) из-за усечения в какой-то момент внутренних вычислений. Может быть, рассмотреть округление до подходящей точности, скажем, 4 десятичных точки? Затем цена 'Call' становится' 0'. – Dan

+0

Также может быть хорошим вопросом, чтобы спросить поддержку MathWorks, подав [запрос на обслуживание] (http://www.mathworks.com/support/contact_us/?s_tid=sp_ban_cs). Это может быть ошибка, или они могут просто не применять граничное условие.Вы также можете просмотреть базовый код (если он не скомпилирован или 'pcode'ed), чтобы увидеть, что происходит: введите' edit blsprice' в свое командное окно. – horchler

ответ

1

Бит поздно, но я сталкивался с такими вещами раньше. Небольшое отрицательное значение можно отнести к ошибке числового округления и/или ошибке усечения в рамках процедуры, используемой для вычисления кумулятивного нормального распределения.

Как вы знаете, компьютеры не идеальны, и небольшая численная ошибка всегда сохраняется во всех вычислениях, на мой взгляд, поэтому вопрос, который нужно задать, - это то, что используется точность входных параметров и, следовательно, какая ошибка допустимость для выходов.

Способ, которым я думал об этом, когда я сталкивался с ним раньше, заключался в том, что в финансовой форме типичная ежегодная дисперсия доходности цены акций составляет порядка 30%, что означает, что средняя доходность обычно выбирается со стандартной ошибкой примерно 30%/sqrt (N), который примерно равен +/- 1%, при условии, что данные за 2 года (так что N = 260 x 2 = 520, больше данных у вас есть другая проблема предположения о стационарности). Поэтому на этой основе ответ, который вы получили выше, может быть истолкован как ноль, учитывая допуски ошибок.

Также мы обычно работаем с точностью до пенни/цент, и на этой основе ответ, который вы могли бы интерпретировать как нуль.

Просто подумал, что я дам свою надежду 2c, это полезно в некоторых случаях, если вы все еще проверяете ответы!

+0

Действительно рад, что вы сделали шаг, + прекрасный взгляд на слабость допущений моделей (стационарность) и необходимый масштаб наблюдений, чтобы продемонстрировать характер распределения случайных процессов * «остатков» *. В этом смысле почти все модели финтек ошибочны - используя ** голую математику **, отключенную от реальности дискретной природы проблемной области (если не использовать преимущественно дискретизированные (квантово-ступенчатые) значения и вычислительные инструменты, которые полностью уважают такой главный разрыв цен и сохраняют «шаг» внутри (даже в градиентах и ​​т. д.)). Очень весело! – user3666197

1

Я не знаю, какую версию Financial Toolbox вы используете, но для меня (TB 2007b) она отлично работает.

При работе:

[Call,Put]=blsprice(67.6201,170.3190,0.0129,0.80,0.1277)

я получаю следующее:

Call = 9.3930e-016 
Put = 100.9502 

Что действительно положительный