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

по

Значение волатильности в 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

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

Качаем исторические данные с MOEX!

Итак, передо мной, уверен, как и перед многими, встал вопрос поиска исторической информации с Мосбиржи. Немного зная python, я написал вот такой парсер:
import requests
import datetime
import pathlib

SECIDs = ["GAZP", "BANEP", "LKOH"]
DISK = "E"
for SECID in SECIDs:
    from_date = "2020-05-04"
    to_date = "2005-01-03"
    while str(to_date) != from_date:
        to_date = str(to_date)
        to_date = to_date.split('-')
        a = datetime.date(int(to_date[0]), int(to_date[1]), int(to_date[2]))
        b = datetime.timedelta(days=140)
        to_date = a + b
        pathlib.Path("{}:/{}/{}".format(DISK, "Database_MOEX", SECID)).mkdir(parents=True, exist_ok=True)
        filename = SECID + "_" + str(to_date) + ".csv"
        with requests.get("http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/tqbr/securities/{}.csv?date={}".format(SECID, to_date)) as response:
            with open("{}:/Database_MOEX/{}/{}".format(DISK, SECID, filename), 'wb') as f:
                for chunk in response.iter_content():
                    f.write(chunk)
Для начала пройдемся по его плюсам и минусам. Самый главный минус, что этот парсер качает только определенный период, который уникален для каждой акции, судя по всему для увеличения этого периода надо кинуть бирже на лапу:), и то что информация предоставляется за день, теперь перейдем к плюсам: можно выкачивать историю за определенный период для нескольких инструментов сразу (их количество ограничивается лишь количеством инструментов на мосбиржи), есть возможность назначать диск для сохранения информации, быстрота выгрузки данных.

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

Что сделают причиной кризиса в 2030-м году?

В этот раз Rothschild & K использовали животный страх людей заболеть и умереть. Страх людей перед «смертельным» вирусом сделали внешней причиной начала экономического кризиса и перезапуска цикла кредитования.

Людям нужен виновный в их проблемах. Поэтому, кризис должен иметь причину. Вирус — идеальный кандидат. Все его боятся и его хрен поймаешь. А банкиры остаются в стороне. Красота! Но....

Пройдет 10 лет и генератор прибыли Rothschild & K сделает полный оборот:

Что сделают причиной кризиса в 2030-м году?

И снова понадобится нечто, виноватое в снижении доходов и начале кризиса. Что это будет?

Снова используют надежный инструмент — страх смерти? Да… вполне возможно…

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