Избранное трейдера Anatole
Давайте соберем цену, потом разберем цену и сравним. Все будет производиться на ваших глазах в экселе. Файл, которого я прикладываю. ФАЙЛ https://cloud.mail.ru/public/27GB/5ipstzGrY .(в зеленые области вы будите вписывать разные цифры). Проверку на гетероскедастичность мы будем делать методом максимального правдоподобия. Во я загнул. Если просто. Мы возьмем две, хорошо известных нам стратегии и будем их прогонять на каждом шаге создания графика цены. Первая стратегия. Увеличение лота на один при убытке. Принцип опциона. И если у нас случайный процесс, то должно получаться 50/50. И удвоение позиции. Принцип мартингейта. И если у нас случайный процесс у=x^2, то у^2=x, мы всегда в плюсе. Давайте по шагам.
Шаг первый, лист W
Сгенерируем случайные числа. В экселе есть функция =случмежду(0;1). И 0 переведем в -1, а 1 в 1. У нас получился простой бинарный ряд из 1 и -1. Возьмем 100 таких цифр. Теперь посчитаем их сумму нарастающим итогом. К сумме предыдущей прибавить следующее (Total). И построим график изменения этой суммы. Назовем это «геометрическое Броуновское движение». Тогда, сумма всех случайных числе будет равна точке, куда пришел наш график. А сумма всех случайных чисел в квадрате, будет равна пройденному пути. А если каждый шаг происходит за 1 секунду. То это, одновременно, и время. И мы должны получить следующую зависимость. Берем 100, извлекаем корень квадратный и получаем 10. И это одно стандартное отклонение. И есть теорема, которая доказывает, что 68% траекторий будут заканчиваться в диапазоне от -10 до +10. Вы можете это проверить сами. В графе ТЕСТ введите число. Если сумма средних от -10 до +10, ставим 1, если больше 0. У вас будет получаться среднее 0,7, в среднем. То есть в 3 случаях из 10 мы будем выскакивать из -10 +10. И это уже не 50/50 вверх или в низ. Это уже 30/70.
Часть 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.