Избранное трейдера Роман Давыдов



Вначале стоит напомнить, для чего компании берут долгосрочный долг. Долгосрочный заём берётся для того, чтобы нарастить активы компании. Ведь мы знаем, что именно активы компании приносят выручку и, как следствие прибыль, кстати, последнее необязательно, если расходы компании превышают выручку.
С оставшихся денег, после выплаты всех текущих обязательств, компания может заплатить дивиденды акционерам, вывести и поделить прибыль, или нарастить собственный капитал, то есть активы.
Приветствую всех!
Сам я не программист, но решил написать скрипт, который будет выводить табличку по доходности синтетических облигаций (покупка акций/продажа фьючерса). Идея в получении дохода от контанго. Скрипт работает и табличка выводится, но через некоторое время появляется ошибка о недостатке памяти.
Подскажите, что я сделал не так?

<code>-- ©2022 by Aleksey Manin
-- Таблица расчета доходности синтетической облигации
-- Какие инструменты(тикеры) отслеживаем. Таблица пар тикер - площадка
tickers = {GAZP = {GAZP = "TQBR", GZZ2 = "SPBFUT"},
SBER = {SBER = "TQBR", SRZ2 = "SPBFUT"},
PLZL = {PLZL = "TQBR", PZZ2 = "SPBFUT"},
GMKN = {GMKN = "TQBR", GKZ2 = "SPBFUT"},
LKOH = {LKOH = "TQBR", LKZ2 = "SPBFUT"},
AFLT = {AFLT = "TQBR", AFZ2 = "SPBFUT"},
NVTK = {NVTK = "TQBR", NKZ2 = "SPBFUT"},
YNDX = {YNDX = "TQBR", YNZ2 = "SPBFUT"},
--MOEX = {MOEX = "TQBR", MXZ2 = "SPBFUT"},
ALRS = {ALRS = "TQBR", ALZ2 = "SPBFUT"},
VTBR = {VTBR = "TQBR", VBZ2 = "SPBFUT"},
SNGS = {SNGS = "TQBR", SNZ2 = "SPBFUT"},
MGNT = {MGNT = "TQBR", MNZ2 = "SPBFUT"},
NLMK = {NLMK = "TQBR", NMZ2 = "SPBFUT"},
MTSS = {MTSS = "TQBR", MTZ2 = "SPBFUT"},
ROSN = {ROSN = "TQBR", RNZ2 = "SPBFUT"}}
rows = {} -- Список строк в таблице по количеству тикеров
oblig_t = AllocTable() -- Указатель на саму таблицу
stopped = false -- Остановка скрипта
-- Функция вызывается перед вызовом main
function OnInit(path)
AddColumn(oblig_t, 0, "Ticker_BA", true, QTABLE_STRING_TYPE, 8) -- "Ticker"- название первого столбца в таблице
AddColumn(oblig_t, 1, "Lot_BA", true, QTABLE_INT_TYPE, 8) --
AddColumn(oblig_t, 2, "Ask_BA", true, QTABLE_DOUBLE_TYPE, 10) --
AddColumn(oblig_t, 3, "Ticker_F", true, QTABLE_STRING_TYPE, 10) --
AddColumn(oblig_t, 4, "Lot_F", true, QTABLE_INT_TYPE, 8) --
AddColumn(oblig_t, 5, "Bid_F", true, QTABLE_DOUBLE_TYPE, 10) --
AddColumn(oblig_t, 6, "Day_EXP", true, QTABLE_INT_TYPE, 10) --
AddColumn(oblig_t, 7, "Date_EXP", true, QTABLE_DATE_TYPE, 15) --
AddColumn(oblig_t, 8, "Dohod%", true, QTABLE_DOUBLE_TYPE, 10) --
AddColumn(oblig_t, 9, "Dohod", true, QTABLE_DOUBLE_TYPE, 10) --
CreateWindow(oblig_t) -- Создание окна таблицы
SetWindowCaption(oblig_t, "Синтетическая облигация") -- Даем название таблице
for ticker, two in pairs(tickers) do -- Перебираем пары БА-Фьючерс
rows[ticker] = InsertRow(oblig_t, -1) -- Заносим тикер в список строк
end
end
function Run()
for ticker, two in pairs(tickers) do -- Перебираем пары БА-Фьючерс
ask_ba = 0.0
bid_f = 0.0
lot_f = 0
for ticker_two, board in pairs(two) do -- Перебираем Тикеры внутри пары БА-Фьючерс
if ticker == ticker_two then -- Если Тикер БА
SetCell(oblig_t, rows[ticker], 0, ticker_two) -- Заполняем ячейке Тикера БА
SetCell(oblig_t, rows[ticker], 1, -- Заполняем лот БА
string.format("%u", getParamEx (board, ticker_two, "LOTSIZE").param_value))
ask_ba = getParamEx (board, ticker_two, "OFFER").param_value
SetCell(oblig_t, rows[ticker], 2, string.format("%.2f", ask_ba)) -- Аск БА
else -- Если Тикер фьючерса
SetCell(oblig_t, rows[ticker], 3, ticker_two) -- Заполняем ячейку Тикера фьючерса
lot_f = getParamEx (board, ticker_two, "LOTSIZE").param_value
SetCell(oblig_t, rows[ticker], 4, string.format("%u", lot_f))
bid_f = getParamEx (board, ticker_two, "BID").param_value
SetCell(oblig_t, rows[ticker], 5, string.format("%u", bid_f))
day_exp = getParamEx (board, ticker_two, "DAYS_TO_MAT_DATE").param_value
SetCell(oblig_t, rows[ticker], 6, string.format("%u", day_exp))
SetCell(oblig_t, rows[ticker], 7,
string.format("%u", getParamEx (board, ticker_two, "MAT_DATE").param_value))
--message('Дата:'..getParamEx (board, ticker_two, "MAT_DATE").param_type)
end
end
sum_ba = ask_ba * lot_f
--message('Тикер:'..ticker..' lot_f:'..lot_f..' sum_ba:'..sum_ba)
sum_year = (bid_f - sum_ba) / day_exp * 365
percent = sum_year * 100 / sum_ba
SetCell(oblig_t, rows[ticker], 8, string.format("%.2f", percent))
SetCell(oblig_t, rows[ticker], 9, string.format("%.2f", bid_f - sum_ba))
end
end
-- Функция вызывается перед остановкой скрипта
function OnStop(signal) stopped = true end
-- Функция вызывается перед закрытием квика
function OnClose() stopped = true end;
-- Основная функция выполнения скрипта
function main()
while not stopped do
Run()
sleep(10)
end
end</code>
Парный
Это когда берутся два инструмента. Их цена делиться одна на другую – получается отношение цены двух инструментов.
Когда это отношение вдруг меняется, мы один инструмент покупаем, а другой продаём. Ожидая что отношение инструментов вернётся в первоначальное состояние.
Парный Межбиржевой
Здесь берутся инструменты с разных бирж. Одинаковые. BTCUSDT с Binance и BTCUSDT с ByBib. Опять же, делятся друг на друга и полученное отношение в виде графика подвергается анализу.
Когда отношение инструментов меняется на какую-то велечину за определённое время — один инструмент покупаем, а другой продаём. Ожидая что отношение инструментов вернётся в первоначальное состояние.


Тетта опциона (теоретическая скорость распада с течением времени) — это не просто «доход» для тейдера, занимающего короткую позицию.
Это компенсация риска потерь, с которым сталкивается инвестор в результате отрицательно асимметричной экспозиции к изменению базового актива.
Тетта-банда (https://www.reddit.com/r/thetagang/ ) и опционные гуру — шарлатаны хотят заставить вас поверить, что тетта — это форма альфы, или бесплатные деньги для истинно верующих.
Опционы — это выпуклые инструменты с асимметричной профилем выплат — покупатели могут заработать намного больше, чем они рискуют потерять, и наоборот для продавца.
Когда вы занимаете отрицательно асимметричную позицию, любое крупное движение приводит к убытку. Если базовый актив движется в благоприятном направлении, вы выигрываете от этого все меньше и меньше; если он движется против вас, вы теряете все больше и больше, поэтому мы можем записать стоимость опциона как:
V(x, t, v)
где x — цена базового актива, t — время, v — подразумеваемая волатильность, а V(.) — стандартный метод определения цены опциона (например, Блэк-Шоулз или биномиальное/триномиальное дерево)
Календарные спреды фьючерсных контрактов как отдельный инструмент МосБиржа внедрила ещё в июне 2013 года.
Сначала торговалось ограниченное количество контрактов, потом список расширился.
Сейчас торгуется более 50 календарей.
В начале торгов было много скептиков, но спустя 9 лет появилась ликвидность уже в 10 стаканах. Развиваемся постепенно ))
Так в чём смысл? Зачем этим торговать?
Самое простое нам объяснила МосБиржа в своем видео: