Блог им. kiselev

Рабочий код LUA для QUIK по расчету теор цены опциона на Мосбирже

Код взял с сайта bot4sale.ru/

Спасибо автору за публикацию. Дублирую здесь с некоторыми комментами.
Публикую как есть, за ошибки отвественности нет, не является рекомендацией!

LUA код считает цену опциона по формуле БлэкаШоулза.

function cnd(x)

-- taylor series coefficients
   local a1, a2, a3, a4, a5 = 0.31938153, -0.356563782, 1.781477937,-1.821255978, 1.330274429
   local l = math.abs(x)
   local k = 1.0 / (1.0 + 0.2316419 * l)
   local w = 1.0 - 1.0 / math.sqrt(2 * math.pi) * math.exp(-l * l / 2) * (a1 * k + a2 * k * k + a3 * (k^3) + a4 * (k^4) + a5 * (k^5))
   if x < 0 then w = 1.0 - w end
   return w
end

-- The Black-Scholes option valuation function
-- is_call: true for call, false for put
-- s: current price
-- x: strike price
-- t: time
-- r: interest rate
-- v: volatility
function black_scholes(is_call, s, x, t, r, v)
   local d1 = (math.log(s / x) + (r + v * v / 2.0) * t) / (v * math.sqrt(t))
   local d2 = d1 - v * math.sqrt(t)
   if is_call then
      return s * cnd(d1) - x * math.exp(-r * t) * cnd(d2)
   else
      return x * math.exp(-r * t) * cnd(-d2) - s * cnd(-d1)
   end
end
Проверено вчера на путах сишки. Расчет совпал с табличными значениями «теор цена» на июньских, сентярьских, декабрьских досках опционов.

Сделал вынужденные изменения в оригинальном коде:
math.pow(k, 3) — не воспринимается компилятором LUA 5.4, заменил на (k^3) и т.д.

t — задается в годах! Т.е. сначала расчитываем количество дней до экспиры опциона, а потом делим на 365 чтобы получить дробное значение.
r — устанавливал 0.001, почему-то этот коэффициент оказался для путов не релевантным.
v — задается дробным значением, деленным на 100. Т.е. 0.2 для волы 20%, 0.3 для 30% и т.д.
По сути: v — заданная волатильность, основной параметр, на котором можно строить своих роботов
s — цена базового контракта (фьючерса), получаю через функцию getParamEx(«SPBFUT», «Si**», «last»).param_value

В-общем, если полезно — лайкните.

  • обсудить на форуме:
  • Quik Lua
★16
17 комментариев
а зачем это, если методика Мосбиржи наоборот считает волу по ордерам в стакане… а если стакан пустой то и волу они берут приблизительно… то есть вола изначально притянута за уши. Еще 10 лет назад один умник признался что на вечерке на дальних страйках теорценой очень легко манипулировать.
Сергей Олейник, а как поставить свою лимитную заявку по своей ставке IV, если не считать ??
Алексей, так вы про расчет заявки а не про теорцену… тогда ясно
Еще 10 лет назад один умник признался что на вечерке на дальних страйках теорценой очень легко манипулировать.
Сергей Олейник, это был Илья Коровин в споре с Твардовским В.В. про паравоз, у которого отказали тормоза ?!
Алексей, 
в споре с Твардовским В.В. про паравоз, у которого отказали тормоза

деталей не помню, но где-то так

Алексей, в том видео, если правильно помню, Коровин заявлял не про вечернюю сессию, а вообще в любое время он двигал рынок на дальних )
Твардовский подобрал отличную иллюстрацию )
Тео, транслируемая биржей — даже внутри дня может показывать чудеса, меняясь в разы на некоторое время.
avatar
ignat, да, на пустой опционной доске IV и соответственно теор. цена, транслируемая биржей — иногда как будто от балды берется  В этом смысле на кухне ничего не поменялось и по сей день
Translator   Алексей, а можно пожалуйста пример получения цены (LAST) опциона из стакана? (на любом языке: python, lua)  Там логика также как и с другими инструментами типа акций-облигаций?  getparamex['data']['last'] по коду опциона? код секции тоже интересует. Просто не имел еще возможность потестировать работу ботов по опцикам.


avatar
цены (LAST) опциона из стакана?
Илья Нечаев, «last» — это значение цены последней сделки, если сделок не было вернёт нуль. Для получения данных из стакана использовать «BID» и «OFFER»
 Вроде увидел s — цена базового контракта (фьючерса), получаю через функцию getParamEx(«SPBFUT», «Si**», «last»).param_value. оно?
avatar
Илья Нечаев, да, s — это текущая цена базового актива для расчитываемого опциона. Например: контракт SiM5 для пута Si90000BR5.
Алексей, и еще один вопрос на твой взгляд из опционов где сейчас больше всего ликвидность и объемы торгов (top5)
avatar
Илья Нечаев, не знаю. Меня сейчас интерисуют путы сишки, за ними начал наблюдение. Ликвидность есть на квартальных июньских путах. Ликвидность — не явная, а обеспечивается роботами каких-то алготрейдеров на центральном страйке и близких страйков к центральному, если давать этим роботам небольшую премию к теор цене. В принципе можно сформировать спред по приемлемой цене с помощью лимитных заявок.
Ничего себе сколько плюсов. Скопирую на всякий случай код(чтобы потом к нему никогда не возвращаться). Если столько интереса может и правда тут есть что-то. Коллеги что за ажиотаж? Что тут интересного расскажите. Ну сайт с поделками на заказ за деньги увидел(наверное кто-то платит) а что в коде то такого? Он же наверное не сильно отличается в плане полезности от тысяч вариантов расчёта средних(с изюминками)? Почему так ставятся лайки? Полезная тема? Я просто может потом(в другой жизни) на опционы взгляд брошу(и код этот как раз все мои проблемы решит).
avatar

__rtx, ага, в другой жизни ты научишься быть вежливым в сети и смартлаб сразу начнет отвечать на твои вопросы
Ты не понял, ответ мне и не нужен. Это называется сарказм. Тем более от таких как ты «МоЖЕТПригодИТЬСЯпОСТавьТЕЛАйк». Кроме таких как Вы(инфоцыган, продавцов ботов, писателей дзенов, ютюбщиков-тиктокеров и пр.) тут уже почти никого не осталось, поэтому если и пригодится то только такому же как ты «журналисту».

Банкир и кнопку - Поддержать автора выдели пожирней а то не так в глаза бросается. Будут больше скидывать. А то наверное бедствуешь.
avatar
Ты не понял, ответ мне и не нужен.
_____rtx, я то как раз понял твой снобизм. Мне такие хамоватые боты давно тут пытаются настроение создавать. Только пользы от вас — около нуля, в первый день немного есть; а во второй день приходится банить чтобы время не тратили.

теги блога Женатый Инвестор

....все тэги



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