Просьба помочь с функцией распределения из модели Блека-Шоулза

ВНИМАНИЕ! КОММЕНТАРИИ ПЕРВОГО УРОВНЯ В ВОПРОСАХ УПОРЯДОЧИВАЮТСЯ ПО ЧИСЛУ ПЛЮСИКОВ, А НЕ ПО ВРЕМЕНИ ПУБЛИКАЦИИ.
В прошлом посте удалось выяснить, что ожидаемую волатильность (из улыбки) можно использовать в качестве сигмы в формуле из модели БШ для определения теор. цены опциона.

Остаётся не совсем понятным, можно ли использовать ожидаемую волатильность в качестве дисперсии в функции distr?

Да и вообще… какую функцию distr брать? Я брал standard normal distribution формулу, потому как wiki пишет, что

N() is the cumulative distribution function of the standard normal distribution

но возможно нужно брать cumulative distribution function (какой-то совершенно непонятный мне интергал).

Для примера: пытаюсь на C++ вычислить цену опционов центрального страйка (при той же цене фьюча), и получается, что d1 = 1.463 а d2 = -1.463 (пока правильно). Т.к. в формуле distr() d1 и d2 возводится в квадрат, то знак нивелируется, и я получаю стоимость опционов 0.

double distr(double x, double sigma)
{
double pi = 3.141592653589793238462643;
double e = 2.718281828459045235360287;

double d = 1;

d /= sigma * sqrt(2 * pi);

d *= pow(e, — pow(x, 2) / (2 * pow(sigma, 2)));

return d;
}

double pCurr = 100000; // текущая цена фьючерса
double pExpi = 100000; // страйк опциона
double tLeft = 5.0 / 365; // 5 дней до экспирации
double sigma = 25; // ожидаемая волатильность

double d1 = log(pCurr / pExpi) + pow(sigma, 2) / 2 * tLeft;

d1 /= sigma * sqrt(tLeft);

double d2 = d1 — sigma * sqrt(tLeft);

double call = pCurr * distr(d1, sigma) — pExpi * distr(d2, sigma);
double put = pExpi * distr(-d2, sigma) — pCurr * distr(-d1, sigma);
avatar
удалось выяснить, что ожидаемую волатильность (из улыбки) можно использовать в качестве сигмы
Это не совсем так. Улыбка строится на основе цен опционов. Цены строятся на основе IV. А сама IV получается фактически из исторической волатильности базового актива + прогноз продавца опциона+премия за риск.
Я же привел код на С++, в том числе кум.функцию распределения.
avatar
Quant-Invest, Вы же сами писали

Сигма — это ожидаемая волатильность в вашем случае

Я написал тогда, что с вашей функцией у меня не выходит.
avatar
Я же не предлагал брать её из улыбки :)
avatar
Quant-Invest, чтобы произвести такой же расчёт теор. цены опциона, как делает биржа, и как делает этот калькулятор, что нужно взять?

Про Вашу функцию так и не ответили…
avatar
Collapse, вы подаете 5 параметров в ту функцию, что я привел, и на выходе у вас цена опциона. CND() вообще не трогаете. Приведите свои 5 параметров, я посчитаю по ним теоретическую цену.
avatar
Quant-Invest, ещё раз повторюсь: прогнал Ваш код, получил стоимость опционов по 85 тысяч пунктов (при r=0).


avatar
1167.28132 цена по этим параметрам получается
на скрине не тот код что я давал
avatar
Quant-Invest, 1167 — это то, что показывает опционный калькулятор. И то, что мне нужно! Только почему у меня выходит не так? У Вас d1 = 1.463 и d2 = -1.463?

В таком случае идем на online C++ компилятор и используя Вашу функцию (я ничего не менял) получаем 85 тыс.

avatar
волатильность не в том формате подана, вот так попробуйте:
BlackScholes('c', 100000, 100000, 5.0 / 365, 0, 0.25)
avatar
Quant-Invest, супер! Все считает как в опционном калькуляторе! Т.е. все-таки можно подставлять волатильность из улыбки, чтобы получать теор. цену опциона как ее считает биржа и сайт option.ru?
avatar
Зависит от того, что вы хотите посчитать. Если «как считает биржа» — то там есть документы, делайте как в них написано. Если у них есть какая-то улыбка с константами, или алгоритм расчета этой улыбки. Если что-то еще — то метод будет другой. Я ж не знаю как вы это будете использовать. «Цель определяет средства»… или как-то так :)
avatar
Quant-Invest, а можете выложить ещё код вычисления N' для расчёта теты?

Уже и с той формулой, что Вы показали, можно тету рассчитать: достаточно просто вычислить цену опциона за сегодня и за завтра и отнять… Но хотелось бы кошерненько как в модели БШ (чтоб иметь возможность считать все греки):



А я могу выложить тики RTS за 33 последних квартала (пятая часть которых содержит признак сделки [к тому же я нашёл способ угадывать признак сделки с вероятностью 95%]).
avatar
Я все греки считал числовым методом(как вы тэту предложили), он точней чем по формулам — ведь они вычисляют касательную в точке и потом экстраполируют на какой-то отрезок. А так вы просто берете два точных расчета и результат заведомо точный.
Код могу сбросить в личку, он правда не на с++ но почти похож, нет проблем переписать. А вообще можете вот эти попробовать:

// Black-Scholes Delta
double BSDelta(double S, double K, double T, double r, double v, char OpType)
{
double d = (log(S/K) + T*(r + 0.5*v*v)) / (v*sqrt(T));
if (OpType==’C’)
return N(d);
else
return N(d) – 1;
}


// Black-Scholes Gamma
double BSGamma(double S, double K, double T, double r, double v)
{
double d = (log(S/K) + T*(r + 0.5*v*v)) / (v*sqrt(T));
return f(d) / S / v / sqrt(T);
}

 

// Black-Scholes Vega
double BSVega(double S, double K, double T, double r, double v)
{
double d = (log(S/K) + T*(r + 0.5*v*v)) / (v*sqrt(T));
return S*f(d)*sqrt(T);
}

// Black-Scholes Rho
double BSRho(double S, double K, double T, double r, double v, char OpType)
{
double d = (log(S/K) + T*(r + 0.5*v*v)) / (v*sqrt(T));
if (OpType==’C’)
return T*K*exp(-r*T)*N(d – v*sqrt(T));
else
return -T*K*exp(-r*T)*N(v*sqrt(T) – d);
}

// Black-Scholes Theta
double BSTheta(double S, double K, double T, double r, double v, char OpType)
{
double d = (log(S/K) + T*(r + 0.5*v*v)) / (v*sqrt(T));
if (OpType==’C’)
return -S*f(d)*v/2/sqrt(T) – r*K*exp(-r*T)*N(d – v*sqrt(T));
else
return -S*f(d)*v/2/sqrt(T) + r*K*exp(-r*T)*N(v*sqrt(T) – d);
}

// N(0,1) density
double f(double x) {
double pi =  4.0*atan(1.0);
return exp(-x*x*0.5)/sqrt(2*pi);
}

// Boole’s Rule
double Boole(double StartPoint, double EndPoint, int n) {
vector<double> X(n+1, 0.0);
vector<double> Y(n+1, 0.0);
double delta_x = (EndPoint – StartPoint)/double(n);
for (int i=0; i<=n; i++) {
X[i] = StartPoint + i*delta_x;
Y[i] = f(X[i]);
}
double sum = 0;
for (int t=0; t<=(n-1)/4; t++) {
int ind = 4*t;
sum += (1/45.0)*(14*Y[ind] + 64*Y[ind+1] + 24*Y[ind+2] + 64*Y[ind+3] + 14*Y[ind+4])*delta_x;
}
return sum;
}

// N(0,1) cdf by Boole’s Rule
double N(double x) {
return Boole(-10.0, x, 240);
}
avatar
Quant-Invest, поменял в функции BlackScholes() вызов CND() на вызов N() из этого кода. Результат почти не изменился (отличие во втором знаке после запятой только). Вывод: и CND() и N() — пока непонятные мне числовые методы расчета одного и того же значения. Верно? Вы этот код (+BlackScholes+CND) где-то из интернета взяли?

А какой смысл вычислять точнее? Насколько большая там разница в результатах и на что она влияет?
avatar
Collapse, не думаю что как-то сильно будет отличаться, это же числовой расчет интеграла нормального распределения в любом случае. Исходники в интеренете где-то нарыл в свое время.
avatar
Quant-Invest,

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

Я не про отличие CND() от N(). Оно там во втором знаке после запятой, как я уже сказал. Мне интересно почему Вы считали греки числовым методом? Насколько это выходит точнее и на что влияет?
avatar
Collapse, потому что греки по сути — изменение функции на шаг параметра. И точнее их взять именно числовым методом, а не через вычисление касательной с приведением к нужному отрезку.
На мой взгляд ни на что не влияет. Код проще и правильней по сути :)

Для меня они вообще бесполезны, у меня нет дельта-нейтральных стратегий.
Вернее, я использую свои греки, второго-третьего порядка, которые показывают то что мне нужно в рамках моих стратегий.
avatar
Quant-Invest, Вы уверены, что эти функции хоть и приближённо, но работают? Тета выходит почти на порядок выше стоимости опциона… Код не менял, просто сделал вызов функции:

avatar
Collapse, не уверен, я ж предупреждал что по-другому считаю
avatar
Quant-Invest, а нет… работает. См. комментарий Стаса.

Вы кстати вкурсе, что если до экспирации опциона остаётся 10 дней, то для расчёта теты нужно не шаги 10-9 отнимать, а (11-9)/2?
avatar
Collapse, нет, подобный бред мне в голову пока не приходил :)
avatar
Quant-Invest, а между тем именно так нужно считать, чтобы получилось как в формуле теты из модели БШ. Потому как то как считаете Вы, отвечает на вопрос: сколько утечёт теты за следующий день. То как считает формула, отвечает на вопрос: сколько теты утекает в день «сейчас». Сайт option.ru считает так же и результаты сходятся.
avatar
Collapse, именно на это я указывал, когда объяснял, почему выбрал числовой метод. Он больше имеет отношения к реальности. Зачем вам знать распад " с полдня в прошлом на полдня в будущее?" То, что предлагаете вы, вообще no vagina no Reda Cohorta — проверьте на сроке в 2 дня ваш метод.
У меня нет цели сделать «научно верно» или чему-то там соответствовать, мне достаточно на этом зарабатывать.
avatar
Quant-Invest, зачем? От целей видимо зависит. Я просто увидел зависимость, решил поделиться, рассказать что и как.

Значит на опционах можно стабильно зарабатывать, раз у Вас значки в профиле соответствующие? Это именно роботом на опционах?
avatar
Collapse, стабильно зарабатывать можно практически на чем угодно, вопрос в приложении достаточных усилий к постижению правильных методов. Но на опционах у меня получается с меньшим риском.
avatar
Quant-Invest, можете объяснить мне, нубу, почему брокер не может дублировать ваши сделки (если они не высокочастотные) и раскрыть для себя вашу стратегию (если она не очень вычурная), снивелировав частично или полностью возможность заработка на ней (используя свои огромные ресурсы)? Лично я для себя таким образом (мысленно) доказываю невозможность стабильного заработка (это как временная неэффективность на рынке). Есть хоть одна причина, почему зарабатывающему трейдеру никто не будет мешать?

Так что путь трейдера не лёгок. Сначала потеряешь не один депозит, рассудок, десяток лет жизни, пока (и если!) что-то найдёшь… А далее либо тебя разбавят, либо, если будешь слишком умный и много зарабатывать, — за тобой придут (обвинив в инсайде и засадив на всю [как это делают в штатах]). Перспективы не очень радужные в любом случае…
avatar
Collapse, он может, но это для него небезопасно, если он не понимает мой риск-менеджмент. А без риск-менеджмента сама стратегия ничего не стоит.
Неужели вы думаете, что, научившись получать прибыль из хаоса, так сложно этот хаос создать ;)
Я уже говорил, главное — прибыль. А как защищать алгоритм — придумаете потом.
Если научитесь стабильно зарабатывать, это будет плевая задачка :)

Комплексную стратегию раскодировать довольно сложно.
avatar
Quant-Invest, у Вас направленная стратегия, маркет-мейкинг или арбитраж? Меня только направленные интересуют, но за много лет мы с товарищем так ничего и не нашли. Знаем тысячу способов, которые не работают. Зарабатывающие трейдеры — звучит как утопия для нас.
avatar
Collapse, ты получил тету на год. Подели на 365
Стас Бржозовский, спасибо большое, вовремя помогли.

Я тут сравниваю функцию распределения N() с функцией CND(). Результаты их выполнения почти идентичны, но вот N() явно намного сложнее реализована. Наверно всё ради точности делалось, которая в данном случае такая и не нужна? Не подскажите?
avatar
Collapse, я не знаю что такое cnd()
Стас Бржозовский, это та же реализация функции N() из модели БШ, только аббревиатура от «Cumulative normal distribution». По сути обе ссылки, которые я привёл, считают одно и то же: значение функции N(). Только по-разному, разными численными методами. Пытаюсь понять, стоит ли использовать более трудоёмкий метод, вместо более лёгкого или нет.
avatar
Collapse, какое то раЗложение в ряд там интеграла. Скорее всего пофиг какую из функций брать, если обе правильно реализованы. Про тету — это довольно кривой костыль тот что вы предложили. Точности толком не добавит, а за день до экспирации вовсе ту тету посчитать не получится
Стас Бржозовский, ну это не я предложил, это я заметил, что сайт option.ru и формула теты из модели БШ считает именно тету ориентировочно «с полдня в прошлом на полдня в будущее». Т.е. (11-9)/2 вместо 10-9 (если 10 дней до экспирации осталось).

За день до экспирации разница (между двумя подходами в расчётах) ещё больше увеличится, и, возможно, исказится (т.к. тета ускоряется). Но таковы эти методы. Каждый из них отвечает на свой вопрос.
avatar
Направленные, но мы торгуем синтетику, которую сами создаем :)
Вообще направленные хорошо работают даже без наших изворотов, но выше риски. А минимизация риска — у нас основная забота.
Элементы маркет-мейкинга тоже есть, но пока не запущены в торговлю.
Арбитраж — конечно, синтетику на арбитражных принципах и построили.
avatar
Quant-Invest, синтетика — это те же опционы, только с фьючами? Вы продаете/покупаете то, что выгоднее, а затем равняете фьючом. Скажем если нужно купить пут и кол, но пут дороже, покупаете 2 кола и продаете 1 фьюч. Это понятно. Вопрос как определить направленность конечно…

Я вот например думал как лучше равнять дельту у дельта-нейтральных стратегий… Через каждые 500, 1000, 2500 пунктов — разницы в результатах нет. Тогда мне в голову пришла гениальная идея. Использовать статистическое свойство случайного ряда — автокорелляцию первого порядка, которая 30% (второго — 0%). Т.е. в среднем после двух одинаково направленных свечек рынок разворачивается. Так и буду равнять: если две растущих свечи подряд или падающих — я на закрытии равняю дельту. Я — гений! Результат — такой же как и был. Рынок не наебешь.
avatar
Collapse, мы формируем корзину с максимальным соответствием функции и неизвестной волатильностью. т.к. у нас есть функция, мы знаем множество точек, где может оказаться корзина в будущем.
Преимущество в том, что реальная стоимость корзины все равно однажды будет равна одной из точек точек функции, где мы фиксим плановую прибыль.
И через опционы хэджируем отклонения.
Если это все разложить в алгоритмы, то получается зоопарк роботов, которые торгуют один и тот же набор разнонаправленно, но суммарная эквити получается растущей.
avatar
Quant-Invest, о доходности какого порядка идёт речь?
avatar
Для нас важна не прибыль, а усредненное отношение годовой прибыли к просадке. В текущей корзине оно минимум 2 к 1. Из этого мы можем построить любые стратегии от 20% прибыли при 10% просадки до 180% прибыли при 90% просадке.
Сейчас основной вопрос для нас — это точный расчет просадок по корзине. На публичных счетах постараемся показать 50% с просадкой 20%. Этап точной подстройки, одним словом. У всех свои проблемы :)
avatar
Quant-Invest, 2:1 не густо, но если портфель всегда выбирается из просадки, то неплохо, 50% в год можно иметь. Но мне такое не подходит, мне разгонять депозит нужно. Подскажите наилучший способ для этого? Кроме покупки дальних опционов, как я уже делал: несколько раз сливал на этом депозит, а последний раз из 1 млн. сделал почти 10, но вовремя не остановился и всё потерял на коррекции…
avatar
Collapse, любой разгон депозита влечет повышенные риски полного слива — вы должны это понимать. Соответственно и вопрос нужно формулировать в терминах «отношение слитых депозитов к 1 разогнанному» :)
Какую доходность вы ищите по этому «разгону»?
avatar
Quant-Invest, у меня будет 250 тыс. руб. Мне нужно сделать в 10 раз больше. Затем можно переключаться в консерватив. Так что 1000% за квартал моё стандартное желание. И это можно сделать. На Трамповском тренде например. Хотя были движения в истории RTS и намного сильнее.

Кстати, учитывая сложности торговли для киевлянина на Московской бирже, не подскажите насколько легко и надёжно торговать биткоином на криптобирже? На биткоин вообще когда-то опционы будут?
avatar
Collapse, В любой точке трамповского тренда была неопределенность дальнейшего движения. Никто ж не спорит, что этого нельзя было сделать. Так как вы ставите вопрос — его нельзя ставить, это ведет к сливу депо.

Мы не занимаемся биткоинами, опционов нормальных на него не будет.
avatar
Quant-Invest, ух...

Мы не занимаемся биткоинами, опционов нормальных на него не будет.

Таким образом Ledgerx станет первой в США легальной криптовалютной биржей опционов и клиринговым домом для цифровых валют.

smart-lab.ru/blog/copypaste/408554.php
avatar
Collapse, когда\если станет, тогда и поговорим
avatar
потому что вы отрезали половину кода.
вставьте в том виде как я дал и вызовите функцию

BlackScholes(char CallPutFlag, double S, double X, double T, double r, double v)
avatar
Quant-Invest, запустил Вашу функцию с такими параметрами

BlackScholes('c', 100000, 100000, 5.0 / 365, 0, 25)

Получил на выходе 85653.6.

По этой ссылке можете сами все увидеть.

avatar
Нет, мы работаем непосредственно с исторической базой опционных цен.
avatar

Только зарегистрированные и авторизованные пользователи могут оставлять ответы.

Залогиниться

Зарегистрироваться

теги блога Multifractal

....все тэги



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