Избранное трейдера _sg_

по

Новичкам. Как подсчитать HV для фьюча Ri? Для чего нужна Дисперсия?

Доброе утро, страна (пока писал топик, было еще утро).

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

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

Всё очень просто. Они высчитывают всего лишь 2 параметра: IV и HV, где

IV — ожидаемая волатильность,
HV — историческая волатильность.

Если IV>HV, то они продают волатильность, если IV<HV, то они покупают волатильность.

Как всё просто, да?

Просто. Но есть очень много нюансов.

Сегодня разберемся с одним из параметров, а именно с HV.

Историческая волатильность.

Историческая волатильность определяется как стандартное отклонение логарифмических изменений цены, взятых через равные интервалы времени. Поскольку наиболее надежными обычно считаются расчетные цены, самый распространенный метод определения волатильности предполагает использование именно изменений расчетной цены (а есть еще способ, когда мы не знаем расчетных цен, а знаем максимумы и минимумы, считаем через них, но нам это неинтересно).

( Читать дальше )

Об опционах без зауми.

    • 16 мая 2020, 16:40
    • |
    • 3Qu
  • Еще

Для начала, все таки, немного зауми.

1. Об опционах рекомендую почитать книгу — А.Н.Балабушкин Опционы и фьючерсы. Кратко, сжато, все по делу и без воды. Много хорошей математики. В общем, математику можно пропустить, нужно уловить только общий смысл — о чем эта математика.
2. На сайте eLearning есть 6-7 бесплатных лекций Твардовского — просто, ясно, доступно. Он хорошо и интересно излагает. Смотрел лет 10 назад, 2 раза. Очень рекомендую.

Теперь непосредственно об опционных стратегиях.
Простейшей стратегией является — покупка опциона. Если цена базового актива (БА) растет или будет расти — покупаем опцион CALL вне денег, в нескольких страйках (лучше не более 4-5) от центрального. Если БА падает, аналогично покупаем опцион PUT. Больше стоимости опциона при его покупке вы никак не проиграете (хотя, теперь уж и не знаю )). ГО опциона равно его стоимости, и об этом можно не беспокоится.

Теперь более сложная стратегия для совсем ленивых. Если вы считаете, что актив будет хорошо расти или падать, на центральном страйке покупаем CALL и PUT — такая позиция называется Стрэддл. Теперь, куда бы не пошла цена БА, мы будем в выигрыше. Однако, если цена за пару дней никуда существенно не сдвинется, мы проиграем из за уменьшения внутренней стоимости опциона. Это называется временной распад.
Позиция Стрэддл хороша тем, что думать вообще ни о чем не надо, однако, она, пожалуй, очень, даже слишком, дорогая, и, далеко не самая хорошая за такие-то деньги.) Вообще, начинающим в позиции типа Стрэддлы лучше не лезть.

Пожалуй наилучшей позицией в опционах является Стрэнгл. Суть его в том, что мы покупаем опцион CALL вне денег в нескольких страйках от центрального (тоже желательно не более 4-5), и примерно симметрично ему покупаем опцион PUT. Теперь, как и в случае со Стрэддлом, куда бы цена не пошла, мы получаем прибыль. Такая позиция гораздо дешевле Стреддла, и у нее есть масса других преимуществ, но это уже ближе к зауми.
Ну, и недостатки у Стрэнгла аналогичны Стрэддлу — если цена 2-3 дней никуда существенно не пойдет, мы опять получим убытки от временного распада.
Кроме того, Стрэнгл сложнее конструировать, чем Стрэддл, для которого вообще думать не надо.
В опционах есть такой параметр — Дельта, это скорость изменения цены опциона от изменения цена БА
       Дельта = (Изменение стоимости опциона)/(Изменение стоимости БА)
Т.е., на сколько рублей изменится стоимость опциона, при изменении стоимости БА на 1 рубль. От страйка к страйку эта скорость меняется, и при приближении нашего опциона к центральному страйку и переходе опциона в деньги она будет возрастать.
Дельта транслируется в Quik, и ее можно добавить в таблицу опционов.
При выборе Стрэнгла желательно, чтобы параметры Дельта для опционов CALL и PUT были равны или близки друг к другу. Можно купить несколько опционов CALL и PUT в разных страйках, чтобы суммы их Дельт были примерно равны для CALL и PUT. Если же вы считаете, что актив скорее пойдет, например вверх, то Дельту для CALL можно выбрать и побольше, чем для PUT. И наоборот, в случае уменьшения стоимости БА.
Графически позиция Стрэнгл выглядит так:



( Читать дальше )

Значение волатильности в Quik и манипуляции в опционах

Давайте сразу все точки над И. Я не гений опционных конструкций, я только учусь. Торгую только от покупки колла или пута, иногда страхуя покупкой-продажей фьючерса. Вот на что я обратил вчера внимание — цена на опцион RI вчера каталась на горках, от хорошего падения, до бытрого роста. Есть такой параметр-волатильность опциона. Он, насколько я понимаю, в гениальной формуле Блэка-Шоулза принимает участие в расчете премии по опциону. А значит, влияет на вашу вариационную маржу. Можно построить график волатильности в Quik, но в график попадают только текущие данные, без исторических. Т.е. фактически закрыл терминал, потерял график значения волатильности. Можно конечно попробовать выгружать в таблицы Excel, но кому охота париться. Я держу путы по RI и вчера мои опционы вошли в деньги и даже были на страйк глубже. НО… премия, рассчитанная системой, как-то не особо выросла и по факту, мне зачислили маржи ну копеечки. Я расстроился, закрыл бОльшую часть позиции, оставив парочку опционов «на посмотреть». И вечером, когда цена базового актива пошла против меня, я получил, внезапно, минусовую маржу больше, чем от закрытия части позиции «в деньгах». Вот так номер. Мне показалось, именно показалось, я не записывал значения волы в эти моменты, что вола при росте базового актива в путах была выше, чем при входе опциона в деньги. Я любитель теории заговоров и мне кажется, что кто-то, не будем показывать пальцем, манипулирует значением волатильности, помогая продавцам опционов (читай, маркетмейкерам) зарабатывать деньги. Я вообще не удивляюсь этой истории, так как, с моей точки зрения, ситуация с нефтяными опционами и поведение биржи были так же манипуляцией с целью заработка маркет-мейкеров. Я не собираюсь уходить с ММВБ, но я прошу ММВБ и разрабочиков квика сохранять значения исторической волатильности по инструментам, расчитывать значение волатильности честно, без оглядки на доходы маркет-мейкеров и не портить окончательно имидж честной конторы. 

( Читать дальше )

Опыт доработки QLua-скриптов для QUIK 8.5.2

    • 15 мая 2020, 16:29
    • |
    • _sk_
  • Еще
В новой версии терминала QUIK 8.5.2 произведён апгрейд языка Lua для написания торговых скриптов с версии 5.1 до версии 5.3. Это нужно для того, чтобы корректно обрабатывать 19-значные номера заявок и сделок на срочном рынке МосБиржи. Типа number в Lua 5.1 не подходит: там все числа хранятся как double, соответственно целые числа до 2^53 = 9 007 199 254 740 992 записываются без потери точности, а 19-значные номера заявок и сделок будут больше этой границы.

Версия Lua 5.3 обратно несовместима с Lua 5.1. Я почти не использовал внешние библиотеки и для меня было два важных изменения: отказ от module (это было сделано в версии 5.2) и введение целочисленной арифметики (версия 5.3).

Для избавления от использования module пришлось переработать много кода, хотя изменения были несложные. Приведу пример. Раньше был такой код Arrays.lua для работы с массивами:

--
-- Выполнение действий с массивами.
--

local pairs = pairs
local type = type

module(...)

--- Создать копию массива (таблицы)
-- @return копию массива (таблицы)
function copy(array)
    local copy_array = {}
    if type(array) ~= "table" then
        return array
    end
    for k, v in pairs(array) do
        if type(v) == "table" then
            copy_array[k] = copy(v)
        else
            copy_array[k] = v
        end
    end
    return copy_array
end

--- Узнать, начинается ли индексация в массиве с нуля или с единицы.
-- @return 0 или 1
function base(array)
    if array[0] ~= nil then
        return 0
    else
        return 1
    end
end

--- Вычислить число элементов в массиве.
-- @return число элементов в массиве
function size(array)
    local n = 0
    for _, _ in pairs(array) do
        n = n + 1
    end
    return n
end

--- Проверить пустой или нет массив.
-- @return true/false
function isEmpty(array)
    for _, _ in pairs(array) do
        return false
    end
    return true
end

--- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1.
-- @return первый индекс массива, где ничего не записано
function firstEmptyIndex(array)
    local i = 1
    while array[i] ~= nil do
        i = i + 1
    end
    return i
end


( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Профучастники попросили Мосбиржу частично компенсировать убытки при торгах майскими фьючерсами WTI

Национальная ассоциация участников фондового рынка (НАУФОР) направила в «Московскую биржу» письмо с просьбой рассмотреть вопрос о возможности участия биржи в реструктуризации убытков клиентов при торгах фьючерсами на нефть WTI в апреле 2020 года.

Письмо имеется в распоряжении «Интерфакса».

Как сообщалось ранее, 20 апреля в 19:23 МСК цена торгуемого на «Мосбирже» фьючерсного контракта на нефть Light Sweet Crude Oil (соответствует поставочному контракту WTI на бирже NYMEX) с исполнением 21 апреля 2020 года опустилась до нижней границы ценового коридора — $8,84 за баррель. В отсутствие решения об увеличении лимита колебаний цен этого контракта участники торгов не имели возможность совершать сделки с ним по ценам, более низким, чем вышеуказанная нижняя граница. При этом бирже NYMEX, входящей в CME Group, торги Light Sweet Crude Oil Futures, от значения расчетной цены которого зависит цена исполнения российского фьючерсного контракта, продолжались, стоимость контракта NYMEX доходила до минус $40,32. «Московская биржа» приняла решение о приостановке торгов фьючерсным контрактом в дневную торговую сессию 21 апреля 2020 года и об исполнении фьючерсного контракта 



( Читать дальше )

Бесплатный робот на quik XoraX боковик на lua, нефть Brent

    • 13 мая 2020, 22:26
    • |
    • XoraX
  • Еще
Робот очень хорошо держит боковик в определённом диапазоне. Точку входа соответственно надо искать самому, желательно если вы уверены что рынок уже будет в боковике и идти ему некуда. Робот будет совершать покупку и выставлять заявку на продажу с установленным профитом в панели управления. Можно установить чтобы он покупал только по 2 или 3 контракта, просто устанавливаете 3 контракта «add» и он будет покупать и продавать 3 контракта, но не более того что разрешено. На последнем скрине например установлено покупать до 10 контрактов. 
При падении, если тренд пошел вниз, робот совершает так же покупку, но постоянно старается увеличить промежуток покупки.
Если робот ранее покупал на текущем участке(промежутке) то он не будет покупать здесь, пока не продаст.


Бесплатный робот на quik XoraX боковик на lua, нефть Brent
Бесплатный робот на quik XoraX боковик на lua, нефть Brent

( Читать дальше )

Моделирование Торговых Систем на Python. 2.

    • 12 мая 2020, 10:29
    • |
    • 3Qu
  • Еще

Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].

В комментариях к предыдущему топику меня критиковали за неоптимальность кода Python. Однако, текст читают люди с совершенно разной подготовкой — от почти не знающих Python или знающих другие языки программирования, до продвинутых пользователей. Последние легко могут обнаружить неоптимальность кода и заменить его своим. Тем не менее, код должен быть доступен и новичкам, возможно не обладающим знанием пакетов и продвинутых методов. Поэтому, в коде я буду, по возможности, использовать только базовые конструкции Python, не требующие глубоких знаний, и которые могут легко читаться людьми, программирующими на других языках. Вместе с тем, по мере изложения, без фанатизма, буду вводить и новые элементы Python.
Если вы хотите как-то улучшить или оптимизировать код, приводите его в комментариях — это только расширит и улучшит изложенный материал.

Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:



( Читать дальше )

Исторические данные с ММВБ (мой велосипед)

По мотивам поста https://smart-lab.ru/blog/616708.php

Вот и мой велосипед на питоне для получения котировок с Мосбиржи

from urllib import request, error
from json import loads
import pprint


class GetRawDataException(Exception):
	pass

class GetPricesException(Exception):
	pass

def get_prices(start_date: str, end_date: str, ticker: str) -> dict:
	"""
		Возвращает словарь: {дата:цена закрытия}
	"""
	req = 'https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/{}.json?from={}&till={}'.format(ticker, start_date, end_date)
	contents = get_raw_data(req)
	try:
		data = loads(contents)
		prices = {x[1] : x[11] for x in data['history']['data']}
		return(prices)		
	except Exception as err:
		raise GetPricesException(err)


def get_raw_data(req: str) -> str:
	"""
		Возвращает результат запроса к серверу Мосбиржи
	"""
	try:
		contents = request.urlopen(req).read()
		return(contents)
	except URLError as err:
		raise GetRawDataException(err)


try:
	prices = get_prices('2019-05-23', '2019-05-30', 'GAZP')
	pprint.pprint(prices)
except GetRawDataException as err:
	print('Error getting raw data: ', str(err))
except GetPricesException as err:
	print('Error parsing json: ', str(err))

Вывод данных происходит с помощью функции get_prices(). Механизм простой: формируется url для GET-запроса. Мосбиржа в ответ присылает json, из которого забираются нужные данные и выводятся на экран.

Есть и другие способы получения данных: yfinance, pandas-datareader и универсальный BeautifulSoup, ещё более универсальный Selenium. Но это уже совсем другая история...


Починка websockets-криптоконнектора как повод поговорить о парадигме конкурентного программирования (питон)

В общем, решил как-то я написать websockets коннектор к одной криптобирже на С++. Решил, что неплохо было бы найти работающий простеникий коннектор и адаптировать его под себя. На С++ вообще ничего вменяемого найти не получилось, зато нашел нечто на питоне:
github.com/Crypto-toolbox/hitbtc
Штука показалась годной и стал я ее переводить на С++… Кстати, весьма полезное занятие оказалось — узнал определенные вещи из современных стандартов С++11/14, т.к. без них переводить питоновский код — много, долго и грустно)) И вот, в какой-то момент я подумал, что неплохо было бы проверить, а коннектор питоновский, который я взял за образец — он-то вообще работает?? Оказалось, что нет) Пакет websocket для работы с соединениями за 2 года устрарел и не работает, например, вот в этом месте:
self.conn = websocket.WebSocketApp(
            self.url,
            on_open=self._on_open,
            on_message=self._on_message,
            on_error=self._on_error,
            on_close=self._on_close
        )
пакет больше не экспортирует класс WebSocketApp, документацию вменяемую найти сразу не получилось и поэтому возникла потребность заменить websocket на что-то более актуальное. И это актуальное нашлось: websockets.readthedocs.io/en/stable/intro.html

( Читать дальше )

....все тэги
UPDONW
Новый дизайн