У меня здесь на СмартЛабе уже около 50 статей по теме тренда.
Но… Последнее время много про Арбитраж.
Нужно ли в связи с этим думать, что тренд торговать не нужно? И что нужно торговать только арбитраж?
Рис. 1. Предлагаю подумать…
1 У тренда прибыль меньше чем у Арбитража
Да. И это – самая главная и сильная причина для того чтобы торговать Арбитраж. Конечно же, если смотреть только на это – надо оставлять только Арбитраж, а на тренд положить огромный болт.
По нашим тестам в прошлом квартале прибыли такие там средние за последние 5ть лет:
Тренд
5% убытка на 70% прибыли на одно плечо.
Арбитраж
10% максимальной просадки на 400% годовых на одно плечо.
Но!
Прибыль – это не всё. И вероятно даже это не самое главное что есть в трейдинге.
Для того чтобы стать алготрейдером или программистом – нужно сделать очень многое:
1) Прочитать кучу книг
2) Написать множество не нужных программ
3) Закончить несколько онлайн-курсов возможно
4) И на всё это нужно время…
В продолжении постов «Войти в IT», в которых я призываю тебя поменять свою профессию на более приличную. Я буду настаивать на том что:
Придётся научиться планировать свой день!
В этой статье и видео под ним, разговор пойдёт про такой феномен как «Планирование дня». Что поможет Вам успевать и поспать, и погулять, и отдохнуть, и… Прочитать 5ть книг по программированию за следующий год.
Как? Смотрим в видео:
Хорошо прибыльная и доступная версия арбитражей сегодня в обсуждении.
То что мы торгуем сами.
ИНДЕКСНЫЙ ОДНОНОГИЙ АРБИТРАЖ
Давайте разбираться с тем что это такое.
Рис. 1. Эквити из тестера, после Back-Forwards за год
В реале 2 недели. Пока + 7.5%.
1 Что такое одноногий индексный арбитраж?
Давайте сразу начнём с картинки индекса и как его рассчитывать:
Третий раз за неделю моешь машину – вместо того чтобы читать книгу по программированию?
Тебе сюда! Ибо программистами и алготрейдерами прокрастинаторы никогда не станут!
Рис. 1. Ну не могу же я читать книги, когда машина не помыта?
Камрады!
Продолжаю свою серию видео и статей про то как и зачем нужно идти в IT. И в заключении рассказываю о том, как найти в себе на это силы. Ибо для того чтобы стать программистом – нужно сделать очень много сложных дел.
На очереди такое понятие как:
ПРОКРАСТИНАЦИЯ
Это когда ты вместо важных дел, способных изменить твою жизнь навсегда – занимаешься делами приятными…
Что с этим делать, смотрим в видео:
Приветствую всех!
Сам я не программист, но решил написать скрипт, который будет выводить табличку по доходности синтетических облигаций (покупка акций/продажа фьючерса). Идея в получении дохода от контанго. Скрипт работает и табличка выводится, но через некоторое время появляется ошибка о недостатке памяти.
Подскажите, что я сделал не так?

<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>Почему арбитраж иногда называют статистическим? Иногда рыночно-нейтральным. А иногда просто Арбитраж.
Что за дела?
Рис. 1. На самом деле не всё так однозначно*
1 Введение
Отдельный пост с тем чтобы разъяснить некоторую путаницу с определениями. Ибо арбитражей десятки. Они имеют разные свойства. И про некоторые из этих свойств будем говорить сегодня.
Если Вы впервые с арбитражом столкнулись,
читайте всё по порядку:
1) https://smart-lab.ru/blog/845637.php
2) https://smart-lab.ru/blog/845962.php
3) https://smart-lab.ru/blog/846293.php
4) https://smart-lab.ru/blog/846417.php
5) https://smart-lab.ru/blog/847153.php
6) Вы здесь…
2 Рыночно нейтральный арбитраж
Группа стратегий, доходность которых не зависит от направления рынка.
Уметь торговать руками, для начала. И понимать, как работает рынок.
Об этом мало кто говорит, но очень небольшой поцент алготрейлеров, нормальных знаю, из тех, кто вырос из программиста или математика.
Для начала, если идете в алго-научитесь торговле руками! Иначе, разочаруетесь и решите, что алготрейлинг полная хрень
