Избранное трейдера Anatole
Часть 1.
Традиционно считается, что задача портфельной оптимизации, или задача Марковица, представляет собой некоторую самостоятельную задачу выбора такого портфеля активов, который обладал бы максимальной доходностью при минимальных рисках.
Прим. В качестве актива могут выступать ценные бумаги (акции), их производные (опционы) или торговые системы.
Решение задачи состоит из двух этапов:
Почему мы используем аналогию портфельной оптимизации с методами машинного обучения — Bag, Boost?! Потому что в действительности (и мы это продемонстрируем) нам абсолютно не важно, насколько хорошо динамику наших временных рядов прогнозируют «слабые» модели – нам важно только то, чтобы ошибки прогнозов наших моделей взаимно компенсировали бы друг друга в некотором интегральном смысле. Иными словами – в случае бустинга – ошибка прогноза линейной композиции была бы минимальной, а в случае портфельной оптимизации – была бы минимальной ошибка прогноза нелинейной композиции (то есть самого портфеля).
Всех приветствую!
Первый год публичной алго торговли закончился с результатом +100%.
Первый пост о моем пути к алготрейдингу тут
В этом посте подробно разберу результаты за прошлый год, а также попытаюсь ответить на вопрос – одурачен ли я случайностью?
На рисунке изменение депозита и фьючерса долл./руб.

Все системы торговали на фьючерсе долл./руб. Примерно 75% систем работают на волатильности, остальные пытаются поймать тренд. В начале года затишье, которое к концу марта привело к просадке в 30%. Ну а дальше роботы оседлали взрыв рынка. 8 августа вывел 10% от первоначального депо, в этот же период был удержан НДФЛ на всю сумму накопившегося дохода.
Красным цветом выделил зоны, где алгоритмы не смогли заработать на волатильности. То есть движения были, но они были «плохими». В эти периоды дневные свечи имели большие тени как с верху, так и снизу. Поэтому, не смотря на хорошую волатильность их возило по стопам. Зеленые зоны – экстремально низкая волатильность и сильные просадки.
Как широко известно, фундаментальный анализ компаний — занятие крайне бесперспективное, так как ведет только к потерям времени и капитала. Тем не менее, рискуя быть недостаточно мудрым, безоговорочно поверив в непреложные истины, я всё-таки попробую немного написать на данную тему. Побудило меня к этому, вероятно, бесполезному графоманству следующее:
--Массив с Тикерами, добавьте нужные тикеры
aTickerList = {"MSNG", "GAZP", "LKOH",
"SIBN", "GMKN","ROSN",
"SBER", "TATN", "NVTK",
"IRAO", "RSTI", "SBERP",
"PHOR", "SNGS", "TRNFP",
"VTBR", "FEES", "MVID",
"RASP", "MFON", "AFLT",
"MAGN", "ALRS", "MTSS", "MOEX",
"RTKM", "MGNT", "NLMK", "SNGSP",
"CHMF", "MTLR", "HYDR", "MFON",
"RSTI", "PLZL", "BANEP", "POLY"
};
--Функция поиска цены
function fGetPrice(sTickerName, sNum)
--Подключаемся к источнику данных
local ds=CreateDataSource("TQBR", sTickerName, INTERVAL_D1);
while (Error=="" or Error == nil) and ds:Size() ==0 do sleep(10) end;
if Error ~="" and Error ~=nil then message("Error: "..Error, 1) end;
local sSize=ds:Size();
local sCurrentPrice=ds:O(sSize);
local sLastWeekPrice7=0;
local sLastWeekPrice14=0;
--Берем цену закрытия свечи неделю назад
sLastWeekPrice7=ds:C(sSize-4);
--Берем цену закрытия свечи 2 недели назад
sLastWeekPrice14=ds:C(sSize-8);
--Вычисляем проценты
local sPrc7=math.floor((100-((sLastWeekPrice7*100)/sCurrentPrice))*100)/100;
local sPrc14=math.floor((100-((sLastWeekPrice14*100)/sCurrentPrice))*100)/100;
--Заполняем таблицу значениями
SetCell(t_id, sNum, 0, tostring(sTickerName));
SetCell(t_id, sNum, 1, tostring(sCurrentPrice),sCurrentPrice);
SetCell(t_id, sNum, 2, tostring(sLastWeekPrice7),sLastWeekPrice7);
SetCell(t_id, sNum, 3, tostring(sLastWeekPrice14),sLastWeekPrice14);
SetCell(t_id, sNum, 4, tostring(sPrc7),sPrc7);
SetCell(t_id, sNum, 5, tostring(sPrc14),sPrc14);
--Текущая цена больше цены прошлой недели - раскрашиваем зеленым
if sCurrentPrice>sLastWeekPrice7 then
fGreen(sNum);
end;
--Текущая цена меньше цены прошлой недели - раскрашиваем красным
if sCurrentPrice<sLastWeekPrice7 then
fRed(sNum);
end;
--Текущая цена больше цены прошлой недели и цена прошлой недели больше цены позапрошлой недели
--раскрашиваем желтым
if sCurrentPrice>sLastWeekPrice7 and sLastWeekPrice7>sLastWeekPrice14 then
fYellow(sNum);
end;
end;
--- Функция создает таблицу
function CreateTable()
-- Получает доступный id для создания
t_id = AllocTable();
-- Добавляет 6 колонок
AddColumn(t_id, 0, "Тикер", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 1, "Сегодня", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 2, "Неделя", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 3, "2 Недели", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 4, "Неделя (%)", true, QTABLE_INT_TYPE, 15);
AddColumn(t_id, 5, "2 Недели (%)", true, QTABLE_INT_TYPE, 15);
-- Создаем
t = CreateWindow(t_id);
-- Даем заголовок
SetWindowCaption(t_id, "7 Days");
-- Добавляем строки
for k,v in pairs(aTickerList) do
InsertRow(t_id, k);
end;
end;
--- Функции раскрашивают ячейки таблицы
function fRed(col)
SetColor(t_id, col, -1, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0));
end;
function fGreen(col)
SetColor(t_id, col, -1, RGB(157,241,163), RGB(0,0,0), RGB(157,241,163), RGB(0,0,0));
end;
function fYellow(col)
SetColor(t_id, col, -1, RGB(249,247,172), RGB(0,0,0), RGB(249,247,172), RGB(0,0,0));
end;
--Основная функция
function main()
-- Создаем таблицу
CreateTable();
--Пробегаемся по массиву тикеров
for k,v in pairs(aTickerList) do
fGetPrice(v, k);
end;
end;как выглядит в квике:
Рыночные Показатели (1872-2018)
Американский рынок на разных временных горизонтах с использованием годовой прибыли.
S & P с 1872 по 1957 год, а затем индекса S & P 500 с 1957 года. Данные скорректированы по дивидендам и инфляции.
Для 5-летних, 10-летних, и 20-летних периодов – частота потерь стремительно уменьшается.
Для 20-летних периодов инвестирования нет ни одного случая, когда рынок имел отрицательную доходность.

На протяжении последних нескольких недель мне попался ряд заметок на тему семейного бюджета. В основном участники СмартЛаба рассказывали о своих расходах, а я хочу поделиться с Вами более широким взглядом на денежный поток. Для примера я взял свою семью. Вместо тысячи слов прикрепляю слайд.
Как у каждого бизнеса, так и у семейных финансов есть своя простая математическая формула. Моя задача, как инвестора – найти её. Если какой-то бизнес или семейные отношения перестают следовать формуле необходимо его продать, а отношения скорректировать.
Итак, основная формула семейных финансовых отношений заключается в том, чтобы создавать источники пассивного дохода. Вместе с женой мы долго трудились над их созданием. К таким источникам относятся, проценты по депозиту, купонные выплаты по облигациям, дивиденды по акциям, бизнес без нашего участия и проценты за выданные нами деньги в долг.
В данной статье приведено тестирование свечной модели CandleMax в программе Wealth-Lab. Я уже приводил описание и тестирование этой свечной модели на исторических данных по 32 наиболее ликвидным акциям МосБиржи с 22.09.1997 (начало торгов на ММВБ) и по 29.12.2018.
Вот эта статья:
Тестирование рабочей свечной модели на исторических данных
То тестирование было выполнено в Excel и вызвало ряд дополнительных вопросов, в частности некоторые читатели хотели увидеть эквити системы, а также получить больше статистической информации.
Скорее всего, эти пожелания так и остались бы без ответа, так как систему я не продаю, а для себя все давно уже решил и оттестировал, если бы не один комментарий к той моей статье. Этот комментарий был написан блогером JC_TRADER и содержал ссылку на тестирование моей системы в программе Wealth-Lab. Вот эта ссылка: https://jc-trader.livejournal.com/1628589.html
Пройдя по этой ссылке, я был просто обескуражен. По итогам проведенного JC_TRADER тестирования, система CandleMax позорно показала отношение прибыльных сделок к убыточным как 50.92% к 49.08% при отношении стоп-лосса к тэйк-профиту как 1:1. Соответственно, не могло быть и речи о том, чтобы использовать такую убогую систему, о чем и написали читатели блога JC_TRADER.
Люди приходят с депозитом грубо 50 тыр, им кто-то рассказал, что "опционы — грааль и вообще можно в легкую сделать +1000% за пару дней", встают на весь депозит (в лонг вставать ведь безопасно, мы же все помним про это, да?) — и через недельку с ужасом видят окровавленные ошметки счета. Понятно, что возиться дальше желание пропадает.
Потом приходят чуть поопытней. Им уже рассказали, что "профи в основном продают — и это легкие деньги. 50-60% годовых — не вопрос". Депозит уже тысяч 300. Продают края и, наверное, 5-10 недельных экспираций могут пройти вполне благополучно. Сначала продают по 1-2 лота, потом входят во вкус, продают по 10 лотов. Но бентли на эти копейки не купишь. Начинают грузить ГО по 50-80% в начальный момент. Дело же верное. Управление позицией примерно на уровне рассуждений: "Вот когда фьючерс дойдет до страйка, тогда и буду думать что делать. Или начну делать дельта-хедж, или отроллирую в следующий страйк