Избранное трейдера Роман Давыдов
Вначале стоит напомнить, для чего компании берут долгосрочный долг. Долгосрочный заём берётся для того, чтобы нарастить активы компании. Ведь мы знаем, что именно активы компании приносят выручку и, как следствие прибыль, кстати, последнее необязательно, если расходы компании превышают выручку.
С оставшихся денег, после выплаты всех текущих обязательств, компания может заплатить дивиденды акционерам, вывести и поделить прибыль, или нарастить собственный капитал, то есть активы.
Приветствую всех!
Сам я не программист, но решил написать скрипт, который будет выводить табличку по доходности синтетических облигаций (покупка акций/продажа фьючерса). Идея в получении дохода от контанго. Скрипт работает и табличка выводится, но через некоторое время появляется ошибка о недостатке памяти.
Подскажите, что я сделал не так?
<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>
Любопытная заметка за 1875 год
Периоды, когда нужно зарабатывать деньги
А: Годы, когда происходят паники и будут происходить снова
В: Годы хорошего времени, высоких цен: в такое время нужно продавать акции и прочие ценности
С: Годы тяжелого времени, низких цен: нужно покупать акции, товары и пр., чтобы держать их до момента наступления хороших времен и тогда продать
Обратите внимание как довольно точно выпадают годы на «тяжелое время» и «время паники».
Это в очередной раз доказывает, что все события цикличны и довольно четко спланированы, никаких совпадений нет
Парный
Это когда берутся два инструмента. Их цена делиться одна на другую – получается отношение цены двух инструментов.
Когда это отношение вдруг меняется, мы один инструмент покупаем, а другой продаём. Ожидая что отношение инструментов вернётся в первоначальное состояние.
Парный Межбиржевой
Здесь берутся инструменты с разных бирж. Одинаковые. BTCUSDT с Binance и BTCUSDT с ByBib. Опять же, делятся друг на друга и полученное отношение в виде графика подвергается анализу.
Когда отношение инструментов меняется на какую-то велечину за определённое время — один инструмент покупаем, а другой продаём. Ожидая что отношение инструментов вернётся в первоначальное состояние.
Тетта опциона (теоретическая скорость распада с течением времени) — это не просто «доход» для тейдера, занимающего короткую позицию.
Это компенсация риска потерь, с которым сталкивается инвестор в результате отрицательно асимметричной экспозиции к изменению базового актива.
Тетта-банда (https://www.reddit.com/r/thetagang/ ) и опционные гуру — шарлатаны хотят заставить вас поверить, что тетта — это форма альфы, или бесплатные деньги для истинно верующих.
Опционы — это выпуклые инструменты с асимметричной профилем выплат — покупатели могут заработать намного больше, чем они рискуют потерять, и наоборот для продавца.
Когда вы занимаете отрицательно асимметричную позицию, любое крупное движение приводит к убытку. Если базовый актив движется в благоприятном направлении, вы выигрываете от этого все меньше и меньше; если он движется против вас, вы теряете все больше и больше, поэтому мы можем записать стоимость опциона как:
V(x, t, v)
где x — цена базового актива, t — время, v — подразумеваемая волатильность, а V(.) — стандартный метод определения цены опциона (например, Блэк-Шоулз или биномиальное/триномиальное дерево)
Календарные спреды фьючерсных контрактов как отдельный инструмент МосБиржа внедрила ещё в июне 2013 года.
Сначала торговалось ограниченное количество контрактов, потом список расширился.
Сейчас торгуется более 50 календарей.
В начале торгов было много скептиков, но спустя 9 лет появилась ликвидность уже в 10 стаканах. Развиваемся постепенно ))
Так в чём смысл? Зачем этим торговать?
Самое простое нам объяснила МосБиржа в своем видео: