Блог им. silentium
Silentium est aurum.
Молчи, пока ты не в состоянии сказать нечто такое, что полезнее твоего молчания.
(кто-то умный и известный сказал)
В продолжение «Не нравятся нейронные сети? Вы просто не умеете их готовить. Рецепт. Ингредиенты, специи и прочее» http://smart-lab.ru/blog/327789.php и «Нейронные сети. Послевкусие. Заблуждения, ошибки, косяки. Первые 15 месяцев эксплуатации бота на нейронных сетях» http://smart-lab.ru/blog/329272.php
Я почему-то решила, что мои слова будут полезнее моего молчания на Смарт-Лабе. Только, когда я представляла эту пользу для себя, я имела в виду возникновение каких-то полезных связей и взаимовыгодного сотрудничества с другими трейдерами, работающими над созданием торговых алгоритмов на основе нейронных сетей. Этого пока по разным причинам не получилось. В качестве «побочного», но весьма приятного эффекта, получилось добавить заинтересованную аудиторию нашему «продажному» проекту – на сайте появилось … новых подписчиков. Хотя может так совпало – невозможно идентифицировать со СЛ эти люди или нет. Во всяком случае, это те, кто имеет желание зарабатывать на бирже, и имеет понимание, что в такой конкурентной среде идет борьба технологий.
Теперь о технологии. Технология сложна и неоднозначна. Мало быть хорошим кодером, надо не утратить желание постоянно познавать и экспериментировать. Нам повезло в своей команде иметь такого человека – понимающего рынок и нейронные сети. Не хочу грузить читателей историей поисков, проб и ошибок. Просто расскажу, как получилось то, что работает. Надеюсь, что основные понятия о нейронных сетях у вас уже есть.
Сначала была создана платформа на С++, которая формирует рабочую среду для стратегии (любой, не обязательно нейросетевой). Чтобы можно было подать на вход в платформу тиковые данные, и любая стратегия отработала бы как на реальном рынке. Стратегия стартует, создает свой набор индикаторов, открывает и закрывает сделки. Так можно прогнать любую стратегию на любом интервале времени.
Стратегии могут работать в двух режимах: боевой – формирует входы, подает их на НС и на основании ответа НС совершает сделку (этот режим нужен для тестирования готовых нейронок).
Второй режим – формирование примеров для обучения нейронной сети. Все то же самое, но пишет примеры сделок в файл. Пример состоит из набора входных данных (создается в платформе) и правильного ответа — buy или sell (создается в Матлабе).
Входы. Не могу я взять и просто выложить список наших входов. Это предмет долгих поисков. Каждый, кто хочет этим заниматься, должен сам определить свои данные, которые будут подаваться на входы НС. Могу сказать, что используются не абсолютные значения, а относительные (например, не цена, а отклонение от текущей цены).
Далее нормализация – приведение данных к единичному гиперкубу с равномерным распределением значений. Существует несколько способов таких преобразований — мы использовали свой.
Выгружаем данные входов в Матлаб (файл примеров – входная информация). В Матлаб формируем выходы. Примеры должны быть строго сбалансированными (сигналов buy и sell должно быть приблизительно одинаково), иначе у НС будет склонность к определенным сделкам (перекос).
Запускаем генетический алгоритм (ГА), который производит подбор лучшей архитектуры сети и лучшей комбинации входов. Выходные данные формируются по определенному алгоритму с параметрами, которые позволяют найти оптимальный диапазон и направление движения цены из каждой точки принятия решения.
Все тайные знания – в деталях. Если Вы будете этим заниматься, найдете свое «золотое сечение», возможно, лучше нашего.
Итак, сформированы варианты правильных ответов для обучения сетей, buy или sell. И создано множество нейронных сетей.
Для генетического алгоритма нейронную сеть описывает хромосома. Предположим, ГА создал 50 хромосом (сетей), для каждой вычисляет фитнесс-функцию, сравнивает эти хромосомы, выбирает из них лучшие, скрещивает их (или производит другие преобразования) и получает новые 50 сетей с лучшими параметрами. Таких итераций может быть много, например, 100.
Каждый набор параметров (хромосома) оценивается методом кросс-валидации (CV). Для этого по одной хромосоме создается множество сетей, которые обучаются и тестируются на разных периодах. Все это выполняет генетический алгоритм автоматически.
О CV можно почитать, например, здесь http://www.machinelearning.ru/wiki/index.php?title=CV
В результате на выходе ГА получаем популяцию из 50 сетей, из которых выбираем сети по параметрам, которые нам важны (например, фактор восстановления, просадка, равномерность графика профита).
Генетический алгоритм есть в Матлабе (GATool), но у нас – конечно же, свой.
Вообще в Матлабе есть библиотека NNTool, которая использовалась вначале. Она универсальна, но отстает от жизни – новых, необходимых вещей в ней нет, а дорабатывать ее сложно. Поэтому сейчас используется библиотека DeepLearnToolbox https://github.com/rasmusbergpalm/DeepLearnToolbox. Она была взята за основу и также доработана.
Далее сети проверяются в Матлабе на тестовом периоде, который не совпадает с периодом обучения. Для этого тоже написан свой тестер. Ну, Вы уже поняли, что у нас все свое.
В разных источниках разночтения по названиям периодов – период обучения, период тестирования, период валидации… Слава богу, что нет общепринятой терминологии. А то бы уже все давно понаделали своих сеток и разбогатели…
Для окончательной проверки готовые к использованию нейронные сети выгружаются из Матлаба и прогоняются на нашей платформе на точных тиковых данных с полной имитацией рыночной торговли.
Есть еще интересная вещь – мы можем объединять разные сети в портфель. Например, выбрать из генерации 10 сетей с близкими значениями по прибыли и просадке, с минимальной корреляцией времени просадок. Тогда на периоде получаем результат со средним значением прибыли и просадкой, ниже среднего значения по сетям. Это возможность при сохранении выбранного уровня риска в % получить больший доход.
Мы не останавливаемся, а идем дальше. Запущено тестирование сетей для других инструментов. Рассчитываются новые сети по новым технологиям. Цель – повышение доходности и уменьшение просадок. Надо же когда-нибудь соответствовать уровню ЛЧИ (это ж показатель, наверное). Хотя, если честно, просто хочется чтобы рутинную и нервную работу на рынке выполнял ИИ.
P.S. Чуть не забыла про картинки – их же все любят так. Смотрите — два предыдущих дня работы робота. Когда многие (и я в том числе) шортили рынок и лонговали доллар… Что она (EVA все-таки девочка) знала о вышках, пэйролзах, госпоже Йеллен? Да ничего. Просто у нее в «голове» на немаленьком сроке обучения было всЁ и всE: протоколы и минутки ФРС, Бернанке с куями, землетрясения и наводнения, военные конфликты и терракты. И она в плюсе. А мы все помним, как двигался рынок в эти моменты? Так зачем нам все это? Пусть работает робот! А мы будем работать над созданием более совершенных роботов!
Позвольте пару-тройку вопросов.
1. Сколь часто во времени расположены «точки принятия решений».
2. Нельзя ли «на пальцах» пояснить, как скрещиваются НС.
3. При кросс-валидации, у Вас на каждом шаге разбиение обучение/контроль одно и то же, или Вы делаете новое разбиение.
1. Точки принятия решения — каждые 5 минут.
2. На пальцах можно, конечно. Применяется много методов скрещивания для разных типов данных. Для одного типа данных тоже несколько вариантов скрещивания. Там очень серьезные модификации ГА. Например, типы скрещивания так же эволюционируют наряду со значениями.
3. Делаются N разбиений для одной хромосомы. Для каждого разбиения создается и полностью обучается новая сеть. Получается, что для одной хромосомы проводится N обучений и создается N сетей.
По пункту 3.
В динамике получается, что один и тот же кусок данных на одном этапе обучения входит в контрольную выборку, а на другом — в обучающую. То есть, имеет место процесс перемешивания. И если на одном шаге можно говорить о независимом контроле, то в целом процесс использует всю выборку как обучающую и риск переоптимизации возникает вновь, как ни крути.
Что касается пункта 3 — ключевое это в каком виде и какие данные подаются для обучения. НС прекрасны в теории, на практике очень многое зависит именно от исчерпывающих данных на входе. Так как рынки очень сильно зависят друг от друга (тот же Си от нефти), остается большим вопросом, можно ли полноценно в НС учесть все ньюансы поведения инструмента, не обучая ее на ВСЕЙ совокупности аффилированных инструментов. В полную самодостаточность и замкнутость отдельно взятого инструмента я не верю.
Исчерпывающие данные на входе — тоже недостижимая вещь.
Я вообще сторонник минималистских подходов. Поскольку ценовой ряд обладает очень низким соотношением сигнала к помехе, только очень грубые, обладающие малым числом факторов модели, имхо, должны устойчиво на нем работать. Когда я читаю автора, я понимаю, что они делают что-то совсем не такое. Но я также понимаю, что они это действительно делают. Возможно, что автор сам не до конца понимает, что делают другие участники коллектива.
так именно малая составляющая сигнала к помехе и есть основная причина. НС в первую очередь должно на исторических корреляциях отсеивать «посторонние» шумы, и вычленять чистый сигнал, чистый моментум движения цены.
Иначе будут либо длинные стопы, либо постояннный стопосъем.
Например РИ в моменте зависит от 10ков акций (через мамбу) и от нефти с ЕД (через СИ).
Часть движения РИ — это ее собственный ТА, а часть вибраций в моменте — это отражение вибраций в других инструментах. Так вот, НС должна их эффективно отсеивать, если она не только трендовая (что сделать легко и без НС) но и контртрендовая и вообще запильная (что и сложнее всего).
Для этого НС должна обучаться на всем массиве коррелирующих данных.
Но сложность подобной НС будет при этом достигать многомерных степеней элементов для расчета на каждое движение.
Потому что рынок это нерегулярный сигнал, не осциллятор в чистом виде
При предсказании более вероятного движения и его диапазона вопрос со стопами остается насущным.
Настоящему Мидасу нет смысла продавать свой дар за копейки..
Надеюсь вы поймете аллегорию
Даже 10 контрактов в РИ будут на таком роботе приносить больше каждый день, чем вы выручите за продажи. Другое дело, если эти 10 контрактов совершенно не гарантированны — но тогда и зачем покупать этот продукт?
Что за расчеты? Откуда доходность 70% годовых? Почему не 60%, и не 120%?
А то что успешная торговля наращивает депозит в этих 70% учитывается?
Вы ловко жонглируете математикой. Но если ваш бот ловит не только тренд, но и флэт, целевые показатели 70% годовых не так уж и много.
В общем лирика от тех, кто устраивает платные семинары. Типа рынок кормит нас хорошо. ей-богу. Но вот семинарские деньги не повредят. чито на мороженное.
Я знаю, что многие принимают более высокий риск. Я это проходила — не готова я к просадке больше 10% на старте. Потому что торгую не 1 и не 10 контрактов, наверное.
Я сейчас торгую Ри и Си в активной части, акции и облиги — в пассивной части портфеля. надеюсь, что комплексный подход понравится и Вашим инвесторам.
обсуждать как вы в процессе тестирования НС отсеиваете ошибки второго рода? Или как избегаете накопления статистической погрешности (генетического мусора), которая со временем может начать портить анализ? Так вы же сами признались, что вы не специалист
Получается НС не полностью динамические, а статические структуры, которые периодически перестраивают «фитнес-функциями». Отсюда либо рынок такой лабильный и постоянно меняется в структуре и движении, либо НС не совсем НС
«2. На пальцах можно, конечно. Применяется много методов скрещивания для разных типов данных. Для одного типа данных тоже несколько вариантов скрещивания. Там очень серьезные модификации ГА. Например, типы скрещивания так же эволюционируют наряду со значениями.»:
На пальцах вы налили воду.
В:«Как скрещиваются НС»
О: «Как-то скрещиваются. Много вариантов. Серьезные модификации. Они эволюционируют»
Нехотите отвечать по существу — ну так и напишите, ноу-хау.
Обычно воду наливают те, кто сам недопонимает как работает то что он продает/рекламирует или те, кто продает фуфел, но стремится запутать покупателя. Это сейчас не лично против вас, а наблюдения вообще.
Статьи о технологии тут нет, вы уж извините. Тут есть рекламный проспект
-Мы много работали
-Нашли специалистов
-Уникальная технология
-Мы берем и смешиваем, потом замешиваем, потом ибридинг
-Число интересующихся растет в… степени
-Все тесты положительны
-Мы продолжаем развиваться дальше
Я долгое время занимался продажами сложнейших програмных и аппаратных комплексов, так вот все рекламные проспекты «купите» были приблизительно такие… причем там хоть поподробнее была детализация )
По генетическому алгоритму.
Наш понимает три типа данных — битовые, целые и вещественные. Все три можно использовать в составе хромосомы одновременно. Для битовых применяется тип скрещивания «point» и «multipoint». Для целых они же, и еще «flat». Для вещественных они же, и еще «BLX» и «uniform». Применяемый тип скрещивания хранится в хромосоме как параметр, и обрабатывается ГА так же, как и все остальное. Некоторые типы скрещивания имеют параметры, они тоже в хромосоме и тоже эволюционируют. В результате выживают те методы, которые работают лучше.
Это все ускоряет сходимость, но на самом деле ГА — довольно простая штука и работает всегда, если правильно написана фитнес-функция. Все эти модификации были сделаны, когда проводились эксперименты по непосредственному обучению НС с помощью ГА. Это довольно тяжелая задача для ГА — подбирать одновременно несколько десятков тысяч параметров. ГА справился, сети обучались довольно эффективно. Но… полученные таким образом сети потеряли самую важную свою функцию — обобщающую способность. То есть, они показывали профит только на интервале обучения, а вне его — хаос. Поэтому я счел такой путь бесперспективным.
Наверное, можно обучать сети с помощью ГА, но для этого нужно намного большую обучающую выборку. А такой на финансовых рынках нет.
Поэтому ГА сейчас у нас используется для выбора архитектуры сети, входов, гиперпараметров обучения. А само обучение сетей осуществляется традиционными методами, вариантом градиентного спуска.
А почему не полноценный метод сопряженных градиентов?
Жуть какая.Это как сформирована НС, что на подаче тестовых данных она показывает профит, а на подаче свежих — хаос???
Какой же диапазон тестовых данных на вход подавался?
Не могу поверить, что на тестовых данных допустим за 2 месяца при прогоне — профит, а на текущих тут же хаос. Не меняется так быстро рынок и его структура
Спросите Вашего кодера, а он не пробовал радикально упрощать работающую сеть? То есть решить в каком-то смысле задачу понижения размерности.
обычная многослойка тем и страдает что очень зависит от фич (входных данных) я предлагал использовать ConvNet, но судя по объему вычислений (перебора моделей) не потянут
Т.к. было упомянуто что НС учитывают все выступления и прочие ЧС то варианта 2.
1) Психология рынка не зависит от ЧС, и ЧС — просто реперная точка чтобы случилось то что должно было случиться по любому
2) Психология рынка зеркальна к внешнему миру и можно по рынку ПРЕДСКАЗЫВАТЬ черные лебеди во внешнем рынке.
Конечно, вы можете сказать, что отображение реального рынка в торговый не полноценно, и у нас определенное хэширование, т.е. по тенденции в рынке нельзя определить какой конкретный ЧС будет во внешке.
Но это опять допущения.
Что на самом деле там в основе все просто, а НС — просто удобная маркетинговая обертка — что, кстати, хороший ход, возьму на вооружение.
Чтобы не утруждать Вас прочтением всей ленты — вот он:
Вопрос: 1.если бот работает уже 15 месяцев то почему его не было на лчи с постом о том какой ник выбран на лчи перед его началом а не после конца.
2. под каким ником будете участвовать на лчи 2016?
Ответ: Artemunak, спасибо за комментарий. Отвечу Вам:
2. В ЛЧИ 2016 участвовать не планировала.
1. По просьбе брокера один из счетов был подключен к ЛЧИ 2015. Ник, по-моему, мой — silentium.
Ничего показательного из этого не вышло. Потому что:
1. Исходя из принимаемого риска в 10% от начального капитала, если я правильно помню, на работу 1 контрактом фьюча РТС надо было располагать суммой около 100000 рублей. Естественно, не нужно все держать на брок счете (нужно, чтоб эти деньги просто были вне риска), поэтому на брок счете сумма, раза в 3-4 меньше. А расчеты % на ЛЧИ идут от изменений депозита. Соответственно, просадка, в которую я попала, завышена в 3-4 раза. А просадка была. И она есть у нас на графиках — как это скрыть?
2. Не получается сделать машинку для выигрыша на конкурсах. Имеем то, что имеем — альтернативу банковским %, относительно пассивный способ зарабатывать с низким риском.
Надеюсь, полно ответила на Ваш комментарий
1 реальная сделка за 1 день не репрезентативна, нужно штук 20, а лучше 50.
Ну, для начала стоит поблагодарить автора за то, что не пропал(а), и какая-то информация все же была дана.
Однако:
1. Судя по всему авторы ищут скорее покупателей, чем единомышленников (чисто IMHO), а для них глубокие подробности действительно не обязательны.
2. НС, которая тут описана, на мой взгляд слишком сложна. Я представлял себе торговые НС несколько проще, а учитывая особенности создания данной конкретной НС, мне проще написать вполне четкий алгоритм для обычного робота, с набором параметров, которые с определенной периодичностью будут проверяться и пересчитываться. В конце концов задача НС получить на входе набор параметров, совместить их между собой по определенному алгоритму (для НС, как я понимаю, это объединить разрозненные нейроны связями с определенными весами), далее получить на выходе вероятность и потенциал движения цены в определенную сторону в течение определенного периода времени. Обучение НС сводится к подаче тестовых наборов сигналов, которые должны быть взяты из реальных данных и провести сравнение выходного сигнала с результатами тестовых данных. На основании отклонений результатов должна быть произведена корректировка весов. Ну, дальше все понятно… Так вот, если я правильно понял автора, то данная НС не только веса корректирует в процессе обучения, но и позволяет себе изменять связи между нейронами. Возможно я ошибаюсь, но такой подход кажется мне весьма рискованным, и больше похожим на игру хаотического совмещения случайных данных. А учитывая трудозатраты на построение и реализацию такой НС, эффективность такого подхода также начинает вызывать сомнения.
3. Не смотря на написанное выше. Каждый из вариантов торговли имеет право на существование (в конце концов даже по астрологическим прогнозам торгуют). Пожелаю авторам успехов работе, а сам пожалуй еще больше отдалюсь от темы НС (ну не вижу я большого смысла на столько усложнять процесс покупки-продажи).
Желаю авторам сторицей оправдать затраты.
Чудовищно тяжелый труд!
Я одного понять не могу, вы используете DL библиотеку на просто громадном количестве сетей ( 50 хромосом * несколько сетей для каждой для CV * etc ) Какие у вас ресурсы вычислительные? DL по опыту работает только на больших количествах данных (от сотни тысяч примеров) Если я правильно помню у вас обычная многослойка, каков порядок количества нейронов, слоев, и связей?
Используете ли L2? Добавьте dropout если действительно DL, посмотрите как отразится на устойчивости результатов.
Может вопросы уже задавал (интервал между постами большой, память успевает забиться текущим проектом :)), сорри
— старый, когда ведется подбор архитектуры сети (архитектура может фиксироваться или развиваться, эволюционировать) и подбор параметров (или их комбинаций и пр) В качестве nn обычно используются многослойные сети с небольшим числом параметров (весов и нейронов) Бич многослойных сетей прямого распространения — сильно зависит от качества feature engineering.
— новый (deep learning), когда изначально сеть состоит из двух (или более) подсетей — одна для поиска лучших параметров (из существующих, желательно брать необработанный низкоуровневый сигнал), следующая за ней для решения основной задачи. Те задача перебора параметров методом ГА или др здесь проводится самой сетью. Ошибка распространяется по всей сети и вся сеть подстраивается одновременно. Количество параметров (нейроны и связи) здесь громадные. Количество слоев может исчисляться десятками и сотнями (последние исследования от microsoft research). Проблема переобучения здесь решается просто — dropout'ом — часть нейронов просто отключается и проверяется устойчивость сети (так исключается переобучение). Новый подход на практике нереально реализовать без GPU — неэффективно (в $) и затраты времени будут очень большие.
Авторы топика как я понял используют первый подход.
Немного по существу.
Пара цитат с вашего сайта:
Получается 6 месяцев по 4.2 сделки в день, т.е. всего было 504 сделки,
т.е. средняя сделка это 41500/504=82.3 пукта на 1 сделку.
Т.е. средняя сделка на тестовом периоде всего лишь восемь шагов цены? Это очень мало к сожалению… Пойдет для 1 контракта… пойдет для 10… но уже с трудом. фРТС не такой супер ликвидный как это принято о нем говорить. Т.е. 1-2-3 шага цены вы будете терять на входе и потом на выходе из сделки при торговле от 10 до 100 контрактов… Итого, после этого средняя сделка у вас упадет более чем в два раза. Если я неверно интерпретировал показатели вашей системы, поправьте меня. А пока совершенно понятен смысл, почему вы это продаете:) Молодцы:)
Как построена работа портфеля? Например, у вас 240 контрактов (точнее, у меня, конечно) и 6 голов. Значит, по 40 контрактов на голову.
1. 3 встали в лонг, 3 в шорт. В рынке — 0 позиций.
2. 2 встали в лонг и 4 в шорт. В рынке 80 контрактов в шорт.
3. 2 встали в шорт и 4 в лонг. В рынке 80 контрактов в лонг.
4. Все встали в лонг или в шорт. В рынке 240 контрактов в лонг или в шорт.
Эти позиции меняются динамически, минимальный срок изменений — 5 минут. Об этом было выше в чате.
Больше 273 контрактов не пробовала торговать (это был 13-головый портфель по 21 контракту). Не вижу проблемы сделать портфель из такого количества сетей одной генерации, чтобы можно было заложить туда до 500 контрактов и не толкаться в стакане плечами. Только есть же и другие инструменты, кроме фьючерса на индекс РТС.
Отсюда следует, почему мы продаем. Много инструментов, разумный, консервативный подход к риску, как следствие — требование весьма приличных сумм для обеспечения работы стратегий и весьма скромные цифры в % годовых. Можно постепенно заработать стратегиями для работы на других инструментах. Просто мы хотим сократить время на включение в работу всего, что сделано. Это как раз тот случай, когда время — деньги.
Сложнова-то. Как я понял, а я старался, но скорее всего не помогло, принцип этой нейросети, многокртное «усреднение» входных параметров… да и вобще не по мне это, как тут есть коммент надо попроще алгоритмы… они надёжней в том плане что если что-то пойдёт не так диагностировать где и что давольно просто… если же что-то пойдёт не так в этом алгоритме… даже лучше не начинать разбираться где это случилось..
Но для общего развития было интересно ознакомиться, спасибо!