ВНИМАНИЕ! КОММЕНТАРИИ ПЕРВОГО УРОВНЯ В ВОПРОСАХ УПОРЯДОЧИВАЮТСЯ ПО ЧИСЛУ ПЛЮСИКОВ, А НЕ ПО ВРЕМЕНИ ПУБЛИКАЦИИ.
В прошлом посте удалось выяснить, что ожидаемую волатильность (из улыбки) можно использовать в качестве сигмы в формуле из модели БШ для определения теор. цены опциона.
Остаётся не совсем понятным, можно ли использовать ожидаемую волатильность в качестве дисперсии в функции distr?
Для примера: пытаюсь на 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;
удалось выяснить, что ожидаемую волатильность (из улыбки) можно использовать в качестве сигмы
Это не совсем так. Улыбка строится на основе цен опционов. Цены строятся на основе IV. А сама IV получается фактически из исторической волатильности базового актива + прогноз продавца опциона+премия за риск.
Я же привел код на С++, в том числе кум.функцию распределения.
Collapse, вы подаете 5 параметров в ту функцию, что я привел, и на выходе у вас цена опциона. CND() вообще не трогаете. Приведите свои 5 параметров, я посчитаю по ним теоретическую цену.
Quant-Invest, 1167 — это то, что показывает опционный калькулятор. И то, что мне нужно! Только почему у меня выходит не так? У Вас d1 = 1.463 и d2 = -1.463?
В таком случае идем на online C++ компилятор и используя Вашу функцию (я ничего не менял) получаем 85 тыс.
Quant-Invest, супер! Все считает как в опционном калькуляторе! Т.е. все-таки можно подставлять волатильность из улыбки, чтобы получать теор. цену опциона как ее считает биржа и сайт option.ru?
Зависит от того, что вы хотите посчитать. Если «как считает биржа» — то там есть документы, делайте как в них написано. Если у них есть какая-то улыбка с константами, или алгоритм расчета этой улыбки. Если что-то еще — то метод будет другой. Я ж не знаю как вы это будете использовать. «Цель определяет средства»… или как-то так :)
Quant-Invest, а можете выложить ещё код вычисления N' для расчёта теты?
Уже и с той формулой, что Вы показали, можно тету рассчитать: достаточно просто вычислить цену опциона за сегодня и за завтра и отнять… Но хотелось бы кошерненько как в модели БШ (чтоб иметь возможность считать все греки):
А я могу выложить тики RTS за 33 последних квартала (пятая часть которых содержит признак сделки [к тому же я нашёл способ угадывать признак сделки с вероятностью 95%]).
Я все греки считал числовым методом(как вы тэту предложили), он точней чем по формулам — ведь они вычисляют касательную в точке и потом экстраполируют на какой-то отрезок. А так вы просто берете два точных расчета и результат заведомо точный.
Код могу сбросить в личку, он правда не на с++ но почти похож, нет проблем переписать. А вообще можете вот эти попробовать:
Quant-Invest, поменял в функции BlackScholes() вызов CND() на вызов N() из этого кода. Результат почти не изменился (отличие во втором знаке после запятой только). Вывод: и CND() и N() — пока непонятные мне числовые методы расчета одного и того же значения. Верно? Вы этот код (+BlackScholes+CND) где-то из интернета взяли?
А какой смысл вычислять точнее? Насколько большая там разница в результатах и на что она влияет?
Collapse, не думаю что как-то сильно будет отличаться, это же числовой расчет интеграла нормального распределения в любом случае. Исходники в интеренете где-то нарыл в свое время.
не думаю что как-то сильно будет отличаться, это же числовой расчет интеграла нормального распределения в любом случае
Я не про отличие CND() от N(). Оно там во втором знаке после запятой, как я уже сказал. Мне интересно почему Вы считали греки числовым методом? Насколько это выходит точнее и на что влияет?
Collapse, потому что греки по сути — изменение функции на шаг параметра. И точнее их взять именно числовым методом, а не через вычисление касательной с приведением к нужному отрезку.
На мой взгляд ни на что не влияет. Код проще и правильней по сути :)
Для меня они вообще бесполезны, у меня нет дельта-нейтральных стратегий.
Вернее, я использую свои греки, второго-третьего порядка, которые показывают то что мне нужно в рамках моих стратегий.
Quant-Invest, Вы уверены, что эти функции хоть и приближённо, но работают? Тета выходит почти на порядок выше стоимости опциона… Код не менял, просто сделал вызов функции:
Quant-Invest, а между тем именно так нужно считать, чтобы получилось как в формуле теты из модели БШ. Потому как то как считаете Вы, отвечает на вопрос: сколько утечёт теты за следующий день. То как считает формула, отвечает на вопрос: сколько теты утекает в день «сейчас». Сайт option.ru считает так же и результаты сходятся.
Collapse, именно на это я указывал, когда объяснял, почему выбрал числовой метод. Он больше имеет отношения к реальности. Зачем вам знать распад " с полдня в прошлом на полдня в будущее?" То, что предлагаете вы, вообще no vagina no Reda Cohorta — проверьте на сроке в 2 дня ваш метод.
У меня нет цели сделать «научно верно» или чему-то там соответствовать, мне достаточно на этом зарабатывать.
Collapse, стабильно зарабатывать можно практически на чем угодно, вопрос в приложении достаточных усилий к постижению правильных методов. Но на опционах у меня получается с меньшим риском.
Quant-Invest, можете объяснить мне, нубу, почему брокер не может дублировать ваши сделки (если они не высокочастотные) и раскрыть для себя вашу стратегию (если она не очень вычурная), снивелировав частично или полностью возможность заработка на ней (используя свои огромные ресурсы)? Лично я для себя таким образом (мысленно) доказываю невозможность стабильного заработка (это как временная неэффективность на рынке). Есть хоть одна причина, почему зарабатывающему трейдеру никто не будет мешать?
Так что путь трейдера не лёгок. Сначала потеряешь не один депозит, рассудок, десяток лет жизни, пока (и если!) что-то найдёшь… А далее либо тебя разбавят, либо, если будешь слишком умный и много зарабатывать, — за тобой придут (обвинив в инсайде и засадив на всю [как это делают в штатах]). Перспективы не очень радужные в любом случае…
Collapse, он может, но это для него небезопасно, если он не понимает мой риск-менеджмент. А без риск-менеджмента сама стратегия ничего не стоит.
Неужели вы думаете, что, научившись получать прибыль из хаоса, так сложно этот хаос создать ;)
Я уже говорил, главное — прибыль. А как защищать алгоритм — придумаете потом.
Если научитесь стабильно зарабатывать, это будет плевая задачка :)
Комплексную стратегию раскодировать довольно сложно.
Quant-Invest, у Вас направленная стратегия, маркет-мейкинг или арбитраж? Меня только направленные интересуют, но за много лет мы с товарищем так ничего и не нашли. Знаем тысячу способов, которые не работают. Зарабатывающие трейдеры — звучит как утопия для нас.
Я тут сравниваю функцию распределения N() с функцией CND(). Результаты их выполнения почти идентичны, но вот N() явно намного сложнее реализована. Наверно всё ради точности делалось, которая в данном случае такая и не нужна? Не подскажите?
Стас Бржозовский, это та же реализация функции N() из модели БШ, только аббревиатура от «Cumulative normal distribution». По сути обе ссылки, которые я привёл, считают одно и то же: значение функции N(). Только по-разному, разными численными методами. Пытаюсь понять, стоит ли использовать более трудоёмкий метод, вместо более лёгкого или нет.
Collapse, какое то раЗложение в ряд там интеграла. Скорее всего пофиг какую из функций брать, если обе правильно реализованы. Про тету — это довольно кривой костыль тот что вы предложили. Точности толком не добавит, а за день до экспирации вовсе ту тету посчитать не получится
Стас Бржозовский, ну это не я предложил, это я заметил, что сайт option.ru и формула теты из модели БШ считает именно тету ориентировочно «с полдня в прошлом на полдня в будущее». Т.е. (11-9)/2 вместо 10-9 (если 10 дней до экспирации осталось).
За день до экспирации разница (между двумя подходами в расчётах) ещё больше увеличится, и, возможно, исказится (т.к. тета ускоряется). Но таковы эти методы. Каждый из них отвечает на свой вопрос.
Направленные, но мы торгуем синтетику, которую сами создаем :)
Вообще направленные хорошо работают даже без наших изворотов, но выше риски. А минимизация риска — у нас основная забота.
Элементы маркет-мейкинга тоже есть, но пока не запущены в торговлю.
Арбитраж — конечно, синтетику на арбитражных принципах и построили.
Quant-Invest, синтетика — это те же опционы, только с фьючами? Вы продаете/покупаете то, что выгоднее, а затем равняете фьючом. Скажем если нужно купить пут и кол, но пут дороже, покупаете 2 кола и продаете 1 фьюч. Это понятно. Вопрос как определить направленность конечно…
Я вот например думал как лучше равнять дельту у дельта-нейтральных стратегий… Через каждые 500, 1000, 2500 пунктов — разницы в результатах нет. Тогда мне в голову пришла гениальная идея. Использовать статистическое свойство случайного ряда — автокорелляцию первого порядка, которая 30% (второго — 0%). Т.е. в среднем после двух одинаково направленных свечек рынок разворачивается. Так и буду равнять: если две растущих свечи подряд или падающих — я на закрытии равняю дельту. Я — гений! Результат — такой же как и был. Рынок не наебешь.
Collapse, мы формируем корзину с максимальным соответствием функции и неизвестной волатильностью. т.к. у нас есть функция, мы знаем множество точек, где может оказаться корзина в будущем.
Преимущество в том, что реальная стоимость корзины все равно однажды будет равна одной из точек точек функции, где мы фиксим плановую прибыль.
И через опционы хэджируем отклонения.
Если это все разложить в алгоритмы, то получается зоопарк роботов, которые торгуют один и тот же набор разнонаправленно, но суммарная эквити получается растущей.
Для нас важна не прибыль, а усредненное отношение годовой прибыли к просадке. В текущей корзине оно минимум 2 к 1. Из этого мы можем построить любые стратегии от 20% прибыли при 10% просадки до 180% прибыли при 90% просадке.
Сейчас основной вопрос для нас — это точный расчет просадок по корзине. На публичных счетах постараемся показать 50% с просадкой 20%. Этап точной подстройки, одним словом. У всех свои проблемы :)
Quant-Invest, 2:1 не густо, но если портфель всегда выбирается из просадки, то неплохо, 50% в год можно иметь. Но мне такое не подходит, мне разгонять депозит нужно. Подскажите наилучший способ для этого? Кроме покупки дальних опционов, как я уже делал: несколько раз сливал на этом депозит, а последний раз из 1 млн. сделал почти 10, но вовремя не остановился и всё потерял на коррекции…
Collapse, любой разгон депозита влечет повышенные риски полного слива — вы должны это понимать. Соответственно и вопрос нужно формулировать в терминах «отношение слитых депозитов к 1 разогнанному» :)
Какую доходность вы ищите по этому «разгону»?
Quant-Invest, у меня будет 250 тыс. руб. Мне нужно сделать в 10 раз больше. Затем можно переключаться в консерватив. Так что 1000% за квартал моё стандартное желание. И это можно сделать. На Трамповском тренде например. Хотя были движения в истории RTS и намного сильнее.
Кстати, учитывая сложности торговли для киевлянина на Московской бирже, не подскажите насколько легко и надёжно торговать биткоином на криптобирже? На биткоин вообще когда-то опционы будут?
Collapse, В любой точке трамповского тренда была неопределенность дальнейшего движения. Никто ж не спорит, что этого нельзя было сделать. Так как вы ставите вопрос — его нельзя ставить, это ведет к сливу депо.
Мы не занимаемся биткоинами, опционов нормальных на него не будет.
Остаётся не совсем понятным, можно ли использовать ожидаемую волатильность в качестве дисперсии в функции distr?
Да и вообще… какую функцию distr брать? Я брал standard normal distribution формулу, потому как wiki пишет, что
но возможно нужно брать cumulative distribution function (какой-то совершенно непонятный мне интергал).
Для примера: пытаюсь на C++ вычислить цену опционов центрального страйка (при той же цене фьюча), и получается, что d1 = 1.463 а d2 = -1.463 (пока правильно). Т.к. в формуле distr() d1 и d2 возводится в квадрат, то знак нивелируется, и я получаю стоимость опционов 0.
double distr(double x, double sigma)
{ }
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);
Я же привел код на С++, в том числе кум.функцию распределения.
Я написал тогда, что с вашей функцией у меня не выходит.
Про Вашу функцию так и не ответили…
на скрине не тот код что я давал
В таком случае идем на online C++ компилятор и используя Вашу функцию (я ничего не менял) получаем 85 тыс.
BlackScholes('c', 100000, 100000, 5.0 / 365, 0, 0.25)
Уже и с той формулой, что Вы показали, можно тету рассчитать: достаточно просто вычислить цену опциона за сегодня и за завтра и отнять… Но хотелось бы кошерненько как в модели БШ (чтоб иметь возможность считать все греки):
А я могу выложить тики RTS за 33 последних квартала (пятая часть которых содержит признак сделки [к тому же я нашёл способ угадывать признак сделки с вероятностью 95%]).
Код могу сбросить в личку, он правда не на с++ но почти похож, нет проблем переписать. А вообще можете вот эти попробовать:
// 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);
}
А какой смысл вычислять точнее? Насколько большая там разница в результатах и на что она влияет?
Я не про отличие CND() от N(). Оно там во втором знаке после запятой, как я уже сказал. Мне интересно почему Вы считали греки числовым методом? Насколько это выходит точнее и на что влияет?
На мой взгляд ни на что не влияет. Код проще и правильней по сути :)
Для меня они вообще бесполезны, у меня нет дельта-нейтральных стратегий.
Вернее, я использую свои греки, второго-третьего порядка, которые показывают то что мне нужно в рамках моих стратегий.
Вы кстати вкурсе, что если до экспирации опциона остаётся 10 дней, то для расчёта теты нужно не шаги 10-9 отнимать, а (11-9)/2?
У меня нет цели сделать «научно верно» или чему-то там соответствовать, мне достаточно на этом зарабатывать.
Значит на опционах можно стабильно зарабатывать, раз у Вас значки в профиле соответствующие? Это именно роботом на опционах?
Так что путь трейдера не лёгок. Сначала потеряешь не один депозит, рассудок, десяток лет жизни, пока (и если!) что-то найдёшь… А далее либо тебя разбавят, либо, если будешь слишком умный и много зарабатывать, — за тобой придут (обвинив в инсайде и засадив на всю [как это делают в штатах]). Перспективы не очень радужные в любом случае…
Неужели вы думаете, что, научившись получать прибыль из хаоса, так сложно этот хаос создать ;)
Я уже говорил, главное — прибыль. А как защищать алгоритм — придумаете потом.
Если научитесь стабильно зарабатывать, это будет плевая задачка :)
Комплексную стратегию раскодировать довольно сложно.
Я тут сравниваю функцию распределения N() с функцией CND(). Результаты их выполнения почти идентичны, но вот N() явно намного сложнее реализована. Наверно всё ради точности делалось, которая в данном случае такая и не нужна? Не подскажите?
За день до экспирации разница (между двумя подходами в расчётах) ещё больше увеличится, и, возможно, исказится (т.к. тета ускоряется). Но таковы эти методы. Каждый из них отвечает на свой вопрос.
Вообще направленные хорошо работают даже без наших изворотов, но выше риски. А минимизация риска — у нас основная забота.
Элементы маркет-мейкинга тоже есть, но пока не запущены в торговлю.
Арбитраж — конечно, синтетику на арбитражных принципах и построили.
Я вот например думал как лучше равнять дельту у дельта-нейтральных стратегий… Через каждые 500, 1000, 2500 пунктов — разницы в результатах нет. Тогда мне в голову пришла гениальная идея. Использовать статистическое свойство случайного ряда — автокорелляцию первого порядка, которая 30% (второго — 0%). Т.е. в среднем после двух одинаково направленных свечек рынок разворачивается. Так и буду равнять: если две растущих свечи подряд или падающих — я на закрытии равняю дельту. Я — гений! Результат — такой же как и был. Рынок не наебешь.
Преимущество в том, что реальная стоимость корзины все равно однажды будет равна одной из точек точек функции, где мы фиксим плановую прибыль.
И через опционы хэджируем отклонения.
Если это все разложить в алгоритмы, то получается зоопарк роботов, которые торгуют один и тот же набор разнонаправленно, но суммарная эквити получается растущей.
Сейчас основной вопрос для нас — это точный расчет просадок по корзине. На публичных счетах постараемся показать 50% с просадкой 20%. Этап точной подстройки, одним словом. У всех свои проблемы :)
Какую доходность вы ищите по этому «разгону»?
Кстати, учитывая сложности торговли для киевлянина на Московской бирже, не подскажите насколько легко и надёжно торговать биткоином на криптобирже? На биткоин вообще когда-то опционы будут?
Мы не занимаемся биткоинами, опционов нормальных на него не будет.
Таким образом Ledgerx станет первой в США легальной криптовалютной биржей опционов и клиринговым домом для цифровых валют.
smart-lab.ru/blog/copypaste/408554.php
вставьте в том виде как я дал и вызовите функцию
BlackScholes(char CallPutFlag, double S, double X, double T, double r, double v)
BlackScholes('c', 100000, 100000, 5.0 / 365, 0, 25)
Получил на выходе 85653.6.
По этой ссылке можете сами все увидеть.
Только зарегистрированные и авторизованные пользователи могут оставлять ответы.
Залогиниться
Зарегистрироваться