Блог им. sergeygaz

Как я искусственный интеллект торговать научил

Однажды великий гуру трейдинга и знаток анекдотов Александр Михайлович (который Герчик) в одном из своих семинаров рассказал про один случай, когда он пытался алгоритмизировать работу с уровнями и нанял целого математика, чтобы тот разработал мат.аппарат и запрограммировал сигналы для отбоя/пробоя. Целый математик бился над задачей как рыба об лед, но, видимо, математик он был так себе и поэтому задачу решить не смог.

Даже я, на тот момент имеющий в активе три класса церковно-приходской, долго недоумевал, как можно было не решить такую простейшую задачу. Это же легче легкого, думал я: хочешь запрограммировать горизонтальные уровни — тупо вбей в систему справочник круглых чисел, хочешь запрограммировать вершину параболы — пиши регрессию. И так далее.

Потом времена ушли далеко вперед и появился Искусственный Интеллект (ИИ), который легко решает эту задачу, даже без понимания, как оно должно работать.
Собственно, ИИ появился еще лет 50 назад. Но в те давние времена (уже почти былинные), когда и трава была зеленее и небо голубее, компьютерное железо было не способно решать задачи такого уровня. Сегодня ситуация изменилась.

ИИ сейчас развивается семимильными шагами.
У всех сейчас на слуху глубинное обучение, нейронные сети и прочий мэшинг лёнинг.
ИИ уже обыгрывает человека в шахматы, ИИ умеет определять, кто изображен на картинке. Доисторический ИИ давно умел распознавать дорожные знаки, а современный ИИ уже умеет водить машину без водителя.
ИИ уже умеет понимать человеческую речь и умеет переводить с любого языка на любой.
ИИ уже может узнать человека по его лицу.
ИИ уже сегодня может выдержать 5-тиминутный тест Тьюринга, а лет через 7 сможет пройти его полностью.


Так вот, мы все знаем, что основной критерий успешного трейдинга — научиться видеть тренды и паттерны. Тренды и паттерны дают понимание, куда дальше пойдет цена акции. Понимание дает статистическое преимущество, а преимущество позволяет зарабатывать.

Однажды у меня возникла идея: а не прикрутить ли ИИ к торговле и не обыграть ли мне это казино биржу?
Ведь ИИ сможет определять тренды и паттерны за меня, обучаясь самостоятельно.

Углубившись в эту тему, я с удивлением обнаружил, что появились отличные мощнейшие инструменты для работы с ИИ.

Во-первых, я открыл для себя такой гениальный язык, как Python.
Как думаете, сколько строчек занимает программа на питоне для распознавания текста из картинки? 4 строки!
А программа на питоне, читающая данные из Excel, выполняющая их фильтрацию и выводящая гистограмму? 6 строчек!!
В какой еще полноценной программе, работающей и на Windows и на Маке и на Линуксе, вы сможете нарисовать синусоиду всего за 5 строк кода?!

Во-вторых, для питона разработана огромная куча библиотек, в том числе мощнейшая библиотека для машинного обучения от самого Google, позволяющая строить нейронные сети всего за 30-40 строчек кода.


В итоге я создал нейронную сеть, которую обучил на 4 000 000 исторических котировках. Все по науке — обучающая выборка, валидационная, тестовая. Обучение — процесс тяжелый, требует хорошего железа и выполняется часами.

В итоге получилась модель, которая получает на входе примерно 30 параметров и предсказывает цену актива в следующем временном периоде.

Естественно, как и в любых других моделях, предсказать цену со 100% точностью невозможно. Да это и не нужно. Нейросеть в этом смысле не исключение, но точность модели на тестовой выборке получилась весьма высокой (о цифре умолчу) — совершенно точно дающей весомое статистические преимущество.

Из интересного:

— Логику принятия нейросетью решений объяснить нереально. Модель каким-то образом видит известные мне паттерны. Плюс она видит что-то еще, мне непонятное.

— Уровни таки работают (Тимофей, привет!). За все виды уровней не скажу, но проверенная мной пара вариантов — да.

— Технический анализ в отрыве от фундаментала — работает

— Предсказать цену актива в следующем году или даже в следующем месяце можно, но точность будет крайне низкая. Точность резко повышается при минимизации таймфрейма

★44
175 комментариев
Тема си   цифер (какое преимущество?) не раскрыта.
avatar
Anton Shabunin, раскрою, если надумаю продавать модель
avatar
sergeygaz, так хоть голый результат показали бы.

— Технический анализ в отрыве от фундаментала — работает
Зачёт! +100500
Наконец-то у меня будет доказательство )))
Впрочем, большинство роботов и до этого на 99% без ФА обходилось.
avatar
В итоге я создал нейронную сеть, которую обучил на 4 000 000 исторических котировках. Все по науке — обучающая выборка, валидационная, тестовая.    


Вы правда думаете что до Вас этого еще никто не делал? А если делал, и ничего путного не вышла, то где здесь наука?



avatar
Предсказать цену актива в следующем году или даже в следующем месяце можно, но точность будет крайне низкая

такой прогноз любой аналитеГ без всякого ИИ сделает
avatar
лям баксов сделал?
avatar
Kapeks, все впереди
avatar
sergeygaz, а ну ясно. тебя ждёт множество открытий.
avatar
Kapeks, например?
avatar
sergeygaz, например что все твои открытия имеют нулевое мат. ожидание)).
Леха Мартьянов (my-trade), я не строю иллюзий. Сейчас мат.ожидание с учетом проскальзываний и комиссий положительное. 

Я не исключаю, что в случае какой-либо движухи модель может не успеть переобучиться, но на то есть риск-менеджмент. 
avatar
Леха Мартьянов (my-trade), предлагаю проверить матожидание отбоя от зеленой (и оценить соотношение стоп-профит при отбое)



ориг
avatar
А в продакшн вывели? И если не секрет, как быстро такая штука принимает решения?
avatar
Андрей К, модель принимает решение мгновенно.
А вот обучение модели это долго (расчет идет 5-8 часов).

В продакшене модель пока использую в качестве советника. Следующий этап — сделать обвес и запустить полноценного робота
avatar
sergeygaz, 
А вот обучение модели это долго (расчет идет 5-8 часов).
чисто для саморазвития. А обучение — это свой написанный софт или питоновские готовые примочки? Поддерживает ли эта штука многопоточность распараллеливание? 5-8 часов в один поток? 
avatar
Андрей К, движок обучения встроен в библиотеку Google. Причем движок настолько мощный, что поддерживает и многопоточность и расчет на видеокартах. Облачное распараллеливание вроде есть, но я в эту тему подробно не углублялся.
Программно обучение выглядит просто (как все в питоне) и реализуется одной командой с кучей параметров

avatar
sergeygaz, спс, обзорно понятно =)
avatar
sergeygaz, как назвается движок от гугла?
Старый Маразматик, называется tensorflow
avatar
Старый Маразматик, Google Colaboratory с бекэндом keras+tensorflow
Андрей К, sergeygaz, для продакшен питон не подходит. Главная причина НЕ типобезопасный. 
avatar
¯ _ (ツ) _ / ¯, отлично подходит. Проблем с типами у меня никаких нет
avatar
sergeygaz, у вас айтишное оправдание " у меня все работает"
Что вы имеете в виду под «продакшен»? Разработка и работа системы только вами и для вас? 
Я представляю это, как разработка десятком программистов для тысяч клиентов и работе с реальными счетами. Несомненно, исследования проводятся на Python, удобство этого языка глупо отрицать, но разработка системы в продакшн обычно делают на типобезопасном ЯП.
avatar
¯ _ (ツ) _ / ¯, ну может для десятков тысяч клиентов питон чем-то там не подходит, но это не мой случай
avatar
¯ _ (ツ) _ / ¯, всё нормально подходит, как пример фонд MAN AHL — 25 кажется ярдов под управлением, вся разработка на Питоне, вообще вся. Не-ХФТ фонды вообще плотно применяют Питон, потому как исследования быстрее и проще внедрять при правильно выстроенном процессе.
Пафос Респектыч, А я и не отрицал удобство Python для исследований. Даже наоборот. 
MAN AHL — вся разработка на Питоне, вообще вся.
Вот прям вообще-вообще вся? Почему тогда они пишут:
Our systems are almost all running on Linux and most of our code is in Java, with some Python and TypeScript.
И ищут программистов Java, C#, pl/sql и ни одного питониста?
avatar
¯ _ (ツ) _ / ¯, где они это пишут? Я сказал только за MAN AHL фонд, вообще Man Group большая и ищет кого только не. Просто знаю, общался, видел. Да, вся вообще, ну 98% может ) 
¯ _ (ツ) _ / ¯, в предложении про исследования акцент был на том, что когда всё на Питоне, то результаты гораздо быстрее выкатывать в продакшен, улавливаешь?
Андрей К, сетки принимают решения очень быстро, так как, в основным это операции сложения и умножения над double
avatar
Какова доходность с момента боевого запуска на реальном счете в годовых?
avatar
trader_95, робота я еще не написал, создал только модель  и обучил ее. В бою пока использую в качестве советника. Робот — это следующий этап
avatar
использую в качестве советника

sergeygaz, поздравляю, уж думал, что один сетки хвалю.  
>> Предсказать цену актива в следующем году или даже в следующем месяце можно, но точность будет крайне низкая.

** в астрологии наоборот, труднее всего прогнозировать 5-ки (даже невозможно), а вот неделю или месяц… очень даже хорошо.

Впрочем, даже не цену, а тенденцию роста или падения по числам.
avatar
Astrolog, в астрономии тоже трудно прогнозировать траектории на 5-10 лет, а вот то, что на Землю метеорит свалится в следующем месяце, можно спрогнозировать довольно точно.
Интересно, как может точность повышаться с минимизацией фреймов.Чем ниже временной интервал, тем выше шанс попасть в квантовую суперпозицию.
avatar
ivanov petya, а если не существует этой квантовой суперпозиции? Где и кто ее доказал?
avatar
Андрей Герц, учёные ещё не могут доказать базовых свойств веществ и материи… но в микромире всё довольно странно. если сравнить с чёрными ящиками, то есть сходство.
avatar
Несколько лет назад аж целый русский стартап открылся. Целых 2 программиста стали рынок прогнозировать. Точность предсказания была закрытия следующего дня  — 95%, космос просто, потом оказалось что ребята прогнозируют не прирост цены, а саму цену. Вот сегодня цена акции $100, а на завтра прогнозируют 97.5 -102.5 и в 95% случаев оказываются правы!!

avatar
Ruslan Pankratov, модели оцениваются не по количеству точных предсказаний, а по отклонению (ошибке). Гуглите MSE и МАЕ.
Если на пальцах, MAE определяет ваш риск
avatar
Ruslan Pankratov, ну зря смеетесь, после http://searchface.ru/ я слегка прифигел от возможностей ИИ
avatar
trader_95, зашибись, попробовал с резюме фотку, нарыло все на меня по инету =)))
avatar
trader_95, немного страшно стало.
Индекс оптимизма, находит даже в кепке. Раньше ссылки на соц. сети выдавал, отключили. Искал девушек интересных профессий забавы ради, их мужей оленей можно найти, родителей. В общем сильная вещь это ИИ)) 
avatar
Ruslan Pankratov, у меня знакомый, спец по нейросетям, несколько лет назад мне такое же абсолютно заявление выдал)))
Логику принятия нейросетью решений объяснить нереально.
Не реально только тому кто не понимает как это работает. На самом деле все достаточно просто. Есть относительно небольшое число алгоритмов как работы нейрона, так и работы сети и для обучения/адаптации несколько штук. 

Ну и самое главное. Нейросети в современном представлении это даже близко не ИИ так что не надо их путать. 

И да, оно у вас или не работает или работает только на рынке определенного характера. 


Свин Копилкин (Дмитрий), объяснить работу нейросети просто — это же просто много нейронов (черных ящиков), принимающих решения по весу синапса( ветки). Но нереально понять логику принятия решений сложной нейросетью.

Конечно, моя нейросеть не универсальная, а заточена только под определенный тикер. Но никто же не мешает мне сделать еще 10 нейросетей под 10 новых эмитентов



avatar
sergeygaz, Есть конкурентные сети, однослойные, многослойные, комбинированные, ансамбли, лидирующие, с памятью состояния и без, со сбросом и без, комбинированные. И это сети, сами нейроны тоже просты до безобразия все они представляют из себя персептрон но отличаются только функцией активации и наличием/отсутствием обратной связи и сбросом. Понять ее логику — очень просто, достаточно подтянуть мат часть.

Что касается вашей нейросети то давайте посмотрим на ее потенциал с точки зрения математики.

У вас есть паттерны — формализовать условия при которых патерн будет 100% работать не может никто. Тот же ГИП он может сработать, а может и нет, уровень может сработать а может и нет. Т.е. гарантированная вероятность работы паттерна не превышает 1/2, ну допустим вам удалось привязать внешние условия и паттерн срабатывает в 2/3 случаев. 
Нейронная сеть не может гарантированно (100%) распознать паттерны, так как их внятно нельзя формализовать — в случае ГИП одно плечо может быть выше/ниже, голова может выделяться сильно или нет в ширину все это может быть 100 свечей а может и 10. Ну т.е. в лучшем случае распознование будет давать результат а 2/3 (это я очень оптимистичен), а теперь перемножим невнятный паттерн, на негарантированное распознавание и получим 44% при очень оптимистичном сценарии (и паттерн у вас рабочий и сеть тоже но вместе не алё).

Теперь еще прибавим «родовые травмы»:
переобучение — ложное срабатывание при избытке обучающих данных 
локальный экстремум — если сеть адаптивная и давала хорошие результаты в определенный период рынка она гарантировано идет в разнос при изменении характера рынка
избыточность данных/ложная корреляция — в данном случае речь идет про вспомогательный набор данных, например вы смотрите на доллар и его торгуете попутно загружая нефть
и еще куча всего.

Вы не видите проблемы в постройке мат модели у математика, вы не видите проблемы в написании нейросети, вы не видите по одном причине — вы дилетант в этом вопросе.
В этом нет ничего плохого, человек не может быть специалистом во всем. Но я призываю вас не попадать в плен ложного стереотипа что «на самом деле всё очень просто» только на основании того что у вас что-то где-то сработало. 

Я писал диссертацию по системам управления на нейронных сетях, и соблазн применить их в торговле у меня тоже был. И я их тоже делал. 

 

Свин Копилкин (Дмитрий), тоже показалось, что мнение дилетанта, много эмоций и мало конкретики у топикстартера.
Машковский Евгений, Глядя на ТС я вспоминаю себя на 2м курсе, когда нейросети еще небыли мейнстримом, и для того чтобы сделать сеть надо было паять ПЛИС или покупать контроллеры и проектировать под них обвязку (ну для очень богатых можно было купить матричные контроллеры с аппаратной эмуляцией нейросети) — моделировать на обычных компьютерах было очень тяжело и долго. 
Тоже все казалось очевидным и очень легким, но жизнь все расставила по своим местам — реализации оказались очень и очень тяжелыми и не всегда рабочими. 
Машковский Евгений, не больше, чем в вашем комменте :)
avatar
sergeygaz, сколько лет работаете с нейросетями в применении к трейдингу?
Свин Копилкин (Дмитрий), я не формализую паттерны. Модель ничего не знает ни про тренды, ни про паттерны. Она сама их, скажем так, понимает, обучаясь. 
Поэтому мне вовсе не нужно распознавать паттерны, определять ГИП и прочее. За меня это делает ИИ.

Проблема переобучения в ИИ существует, но моя модель сейчас не выглядит переобученной.

И, самое главное. Модель всего лишь дает сигнал купить или продать и позволяет просчитать нужный уровень риска. Дальше решение о входе в сделку принимает трейдер, исходя из его аппетита. Ну или робот, если его запрограммировать соответственным образом

avatar
sergeygaz, У вас не ИИ, а нейронная сеть. Между ИИ и нейронной сетью разница примерно такая же как между шестеренкой и вами. 

Ну да Бог с ним. Если вас устраивает работа — дерзайте, не ошибается тот кто ничего не делает. Вы главное не возлагайте слишком много надежд и денег.  
Свин Копилкин (Дмитрий), творческую задачу осмысления котировок и предложения решения решает компьютер. Чем не ИИ?
avatar
sergeygaz, тем что не творчески, а статистически. Это истекает из принципа роботы НС.
Свин Копилкин (Дмитрий), хм, так ведь тогда распознавание лиц тоже не творчески, а статически :)
avatar
sergeygaz, да. Только журналисты называют нейросети распознающие сети искусственным интеллектом. Классический случай:


 
Свин Копилкин (Дмитрий), а вы что называете ИИ? Разум, который картины рисует? Так и такое уже есть
avatar
sergeygaz, не называю.
Свин Копилкин (Дмитрий), неправда. Распознавание образов — классическая задача искусственного интеллекта. То что сейчас она решается на раз-два, не значит что она такая лёгкая. Просто люди привыкли. 
а это чудо на самом деле. Когда ребёнок посмотрев пару картинок, т.е. мазков на плоском листе, научается отличать бабочку от кошки, а стул от кресла, то это и есть распознавание образов. Ребёнок Спинозой не становится. Но тем не менее это чудесная задача решена, вне-алгоритмическим путём.
экспертные системы — вторая задача искусственного интеллекта.
тоже решённая.

я не в восторге от журналистов, но тут вы на них наговариваете.
avatar
ПBМ, Вы не правы. Распознавание образов это отнюдь не задача для искусственного интеллекта. Она решается, в некотором приближении, и классическими методами. Это не  более чем статистическая задача, если понимать принцип работы нейросети. Но если этого не понимать, то это становится «чудом», таким же как самобеглые повозки без лошадей, и летающие стальные птицы.
Свин Копилкин (Дмитрий), да вы кажется тут пытаетесь доказать что самый умный по сравнению с. 
интересная игра. удачи! 
avatar
ПBМ, Упаси меня боже доказывать кому-то что-то. Особенно верующим в плоскую землю и во вред прививок. 
Свин Копилкин (Дмитрий), угу… если товарищ своим воображением не представляет что он ищет и как будет работать сетка, то скорее всего не сможет адекватно подобрать архитектуру и сложность сети, и в итоге после счастливых победоносных тестов где-то потом в бою скорее всего вскроется жопа...  а может и не вскроется...  ))
я так понимаю вы Keras использовали? а какую архитектуру взяли?
avatar
Yodo, tensorflow + keras. Многослойная прямая нейросеть
avatar
Ну круто чё). Вряд ли ML сам по себе будет преимуществом в трейдинге при текущей степени его доступности. Но вот в совокупности с каким-то ещё преимуществом может прилично выстрелить. Рад, если у вас это получилось.
avatar
Replikant_mih, 
при текущей степени его доступности.
а что не так? платный?
avatar
Андрей К, Наобот) — обучения есть, библиотеки — есть.
avatar
«точность модели на тестовой выборке получилась весьма высокой». ключевое слово -тестовой )
avatar
monko, ну а на какой еще выборке ее проверять? Для меня сейчас все новые реальные котировки — тестовые
avatar
sergeygaz, — Предсказать цену актива в следующем году или даже в следующем месяце можно, но точность будет крайне низкая. ну а на какой еще выборке ее проверять?
Выборки- это замечательно! Но нужно вносить элемент неожиданности. Например всё чётко, а вот 25 декабря 18 года, на нефти, когда весь мир отдыхал, а мы торговали цена реально шла на НОЛЬ! И я был в позе. Просто меняйте исторические данные делая неожиданные нереальные ямы или пики, а ИИ пусть предсказывает. )))  Пусть цену Si предсказывает )))) Ну и когда всё освоите проведите стресс -тест, при включённом оборудовании выдерните вилку из сети и понаблюдайте за ИИ в этот момент. Если ИИ пройдёт два таких простейших теста, то можно думать о внесении денег на депозит.
Диванный аналитик-практик, модели нельзя учить на нереальных данных — они тогда правильно предсказывать перестанут.

Элемент неожиданности запрограммировать в ИИ нельзя.
Для нивелирования резких просадок и сливов в стиле «все пропало» можно и нужно работать с риском.
avatar
sergeygaz, Элемент неожиданности запрограммировать в ИИ нельзя.
А у человека можно. До сих пор помню заморозку вкладов в 90-х., дефолт 98 и 2008 годы. ИИ должен знать, что всегда может прилететь.
Диванный аналитик-практик, если на ноутбуке решается, акк выручит. А вот если сеть оборвать и заменить на медленную мобильную… Или исходные минутки заменить часовиками…
а в какой среде работаете? направьте пожалуйста с чего начать?
avatar
Гриша, я работаю вообще без среды. Блокнот и консоль.
А так рекомендую начать с Анаконды
avatar
Так вы задачу регрессии решали, предсказывая цену в следующий момент времени? На каком примерно таймфрейме получились хорошие результаты?
avatar
Schurik, на минутном
avatar
sergeygaz, надеюсь, R^2 смотрели на тестовой выборке? Он одним числом показывает, является ли прогноз статистически значимым.
avatar
Schurik, я смотрел не R^2, а RMSE
avatar
sergeygaz, проверьте R^2, это одна строчка кода. А то величина ошибки — вещь весьма субъективная. Кажется, что ошибка невелика, а на самом деле, никакой статистической значимости прогноза нет и в помине. Предсказывать именно саму цену (или иными словами изменение цены) даже с горизонтом 1 минута видится крайне сложной задачей. Статистика R^2 сразу же покажет, есть что-то в вашем прогнозе или это иллюзия…
avatar
Schurik, так RMSE это суть то же самое
avatar
недавно я выучил c# до нужного уровня
потому что c# компилируемый

и даже бэйсик компилируемый с прошлого… века

зато год не интересует питон
потому что питон не компилируемый

и не понимаю как применять
не компилируемые языки программирования
Логарифм Интегралович, да какая разница, компилируемый язык или нет. Устанавливаете питон и все программы на питоне становятся рабочими, как и все остальное
avatar
мой выбор:

1bas=1exe & 1cs=1exe
без установки оболочек

ведь C# есть внутри Win7 FrameWork

и ещё есть онлайн компиляторы
принимающие 1-страничные проекты
Логарифм Интегралович, что касается tensorflow, то у них есть апи для с/с++, обучаете свою модель на питоне, потом пользуете ее где угодно, в целом удобно :) сам еще правда не пробовал. 
Но питон и правда нынче хорош… и быстр.
avatar
Грааль на персептроне? Хм, звучит не очень свежо…
avatar
wrmngr, ага. ИИ вообще 50 лет уже
avatar
Ближе к практике, думаю розовые очки потрескаются изрядно.
Машковский Евгений, никаких розовых очков у меня нет.
На бирже торгуют тысячи роботов, эксплуатирующих рыночные неэффективности.  Будет тысяча первый
avatar
Что у вас там за нейронная сеть которая на 30 фичах 5 часов считает? O_o… тем более если вы GPU использовали… хотя у всех железо разное )
Так я так а что вы на выходе то получали? цену на каком расстоянии? 

возьмите lightGBM и не нужны вам никакие нейросети, более чем уверен с вашим подходом результат на тестах быдет лучше.
avatar
Denis, lightGBM это же дерево решений?

По моему дилетантскому мнению, деревья решений для задач предсказания котировок не подходят, т.к. склонны уходить в переобучаемость.
avatar
sergeygaz, можно подумать сеть не уходит в переобучение. Для этого валидацию и делают, чтобы понят, реальную точность и степень переобучения. 
Если вы фичи сами выдумываете и используете обычную сетку с полносвязными слоями с большой долей вероятности лучше сделать на деревьях. Сеть нужна, если вы сырые котировки пихаете и используете какую-то нетривиальную архитектуру вроде автокодировщиков для извлечения признаков из сырого сигнала. 
avatar
Лет примерно 10 назад я тоже пытался обучать нейросети. Был такой нейрошел 2.
Так вот. Я тоже засовывал в сетку кучу параметров Это были и индикаторы широко используемые, некоторые номинальные переменные итд.
Естественно обучал. Обучение по времени длилось несколько дней. 
Accuracy была очень приличная.
На выходе она давала модель, которую можно было прикрутить к Easy Language для Омega Research в виде индикатора и использовать в реальной торговле.
Самое интересное было потом. Сетка начала мне давать сигналы. Робот начал их исполнять. И тут я на себе в полной мере ощутил «прелесть» торговли с использованием сети. Да, сеть дает сигналы, но сигналы эти совершенно непонятные. То есть объяснить и понять зачем и почему сеть выдает такой сигнал человеку НЕВОЗМОЖНО. Ведь модель — это всего лишь голые веса — ничего не говорящие человеческому сознанию. Поэтому для человека (для меня) сигналы, которые она выдавала выглядели ну очень непонятно, спорно и двусмысленно. Я поторговал с этими сетками примерно месяц. Получил небольшой минус и закончил этот аттракцион.
Наверное, время пришло попробовать еще раз.
Но все равно, я очень хорошо помню своё ощущения, когда я видел сигналы от нейросетки в то время. Ощущение, прямо скажем, не из приятных.


avatar
_sg_, небольшой минус по итогу при точном исполнении всех сигналов НС? А бэктест за тот же период сигналы там же дает?
avatar
Friendly Deep Space, то что некоторые ордера не исполнялись — это нормально — это рынок.
Главный минус, который был тогда, это то что Вы не знаете почему именно этот сигнал формируется. Казалось бы на ровном месте или совсем «поперек» против всех и вся. Очевидно, что сеть нашла какие-то состояния, зависимости, закономерности для входов, которые мне показались не столь очевидными, как хотелось бы.

Сеть обучалась по схеме «с учителем», то есть по моим ответам.
Протестировать БаскТестом я не смог, потому что я закладывал в модель несколько таймфреймов. А скрестить в BackTeste на Omege несколько таймфреймов не представлялось возможным.

В результате на реале я не увидел ейдж.

Единственное, что я бы отметил положительного — это то, что сеть торговала в более удачное время, чем обычные системы. То есть она, плутовка, понимала, что лучше торговать с утра, чем на Америке.
avatar
30 параметров — это что, хотя бы навскидку, приблизительно
avatar
SergeyJu, это сама котировка, объемы, исторические срезы и ряд индикаторов
avatar
sergeygaz, сократить число параметров не пытались? 
avatar
SergeyJu, а зачем? Сокращение параметров ухудшает модель. Так то можно и по 1 параметру предсказывать, но качество будет никакое
avatar
sergeygaz, Вы проверяли, что сокращение любого одного из 30 параметров ухудшает? 
avatar
SergeyJu, конечно, влияние многих параметров я проверял отдельно.

Вообще подбор параметров для модели (и их предобработка) это сильно творческая задача. Но именно от нее зависит качество сетки, так что приходится это делать

avatar
sergeygaz, я об этом же. Я всегда пытаюсь (а) понять силу влияния каждого фактора (б) по возможности сократить их число. 
Сейчас больше 3-4 не рискую использовать, опасаясь переподгонки. 
avatar
SergeyJu, а к торговле как модель прикрутили? ордера ставите руками?
avatar
sergeygaz, роботы, однако. Когда параметров мало, робота можно писать хоть в машинных кодах. 
avatar
Билли, нам нужны пруфы. Пруфы и стейты. :)
С ними ваша статья будет иметь больший вес, чем «а вот один парень на смартлабе написал...» 
avatar
Автор, приведите примеры работы системы, пожалуйста.
avatar
Точность резко повышается при минимизации таймфрейма

Закономерно. Диспесия процесс СБ растет пропорционально корню квадратному из длительности временного интервала.
avatar
Хотя бы структуру слоев нейросети насписал.

Я тоже смотрю на нейросети.
Обучается оч. быстро на исторических данных, но на тестовом дата сете не очень. 
avatar
smit, структура слоев нейросети и входные параметры это ноу-хау модели
avatar
sergeygaz, совсем нет.
Там есть место для «хитростей»
Топологию сети смысла скрывать нет.
avatar
sergeygaz, 
это сама котировка, объемы, исторические срезы и ряд индикаторов
вот это уже  информация о системе
avatar
Интересна тема программирования. Как научиться нейросетки на питоне юзать? Какой у вас опыт?
Александр Элс, опыт разработки нейросетей и питона до старта задачи у меня был нулевой.

Питон освоил мимоходом, т.к это оказался очень простой язык программирования (я пожалел, что в школе бейсик изучал). Но для меня это нннадцатый язык, мне, возможно. было проще
avatar
Александр Элс, я юзаю Tensorflow c Keras
avatar
Александр Элс, 
Вы можете очень быстро освоить «Machine Learning». Изучить все современные алгоритмы. Научиться их правильно применять. Все тропинки здесь уже протоптаны. Обучальщиков сеток тьма. Но это Вам ничего не даст.
Главное — это необходимо научиться правильно СТРОИТЬ МОДЕЛИ.
Это уже ближе к «Data Science». А вот это уже — искусство. А чистый «Machine Learning» — ремесло.
avatar
_sg_, очень правильно сказано!
avatar
sergeygaz, 
да есть у меня прошлый опыт на эту тему.
На практике (на своих деньгах), так сказать, прочувствовал.
Никогда не забуду.
avatar

_sg_, Блин, буквально сегодня случился аналогичный инсайт — если все библиотеки так доступны — должно быть какое-то другое конкурентное преимущество. Тут как в HFT — либо ты на острие технологий и быстрее остальных, либо же ты умнее. Т.е. если ты юзаешь стандартные библиотеки ML — ты должен быть умнее. И тут меня осенило, что у меня может быть конкурентное преимущество здесь, потому что искусство, модели — это намного больше про меня, чем математика. 

 

Кстати, как по ощущениям — насколько много математики в ML если юзать стандартные библиотеки, в смысле требуется ли от тебя знание математики?

 

Так перекладываю ML из дальнего ящика в средний ящик)).

avatar
Replikant_mih, 
Маchine Learning можно перекладывать уже в Первый ящик, потому что ничего сложного там нет.
Достаточно будет знания ОСНОВ линейной алгебры (матрицы, вектора, операции с ними, собственные значения итд), ОСНОВ статистики, матанализ основы. Сейчас уже тензоры в моде — Погуглите «Tensorflow».

Но в принципе вся математика от Вас скрыта в функциях.
А все разновидности ML имеют вполне схожие схемы и технологии применения.

Ниже приведу пример кода обучения Сверточной Нейронной Сети, специально для Вас, чтобы Вы увидели, что математики, как таковой,  в нем нет. Только последовательность функций.

# Загружаем данные
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
# Размер мини-выборки
batch_size = 32
# Количество классов изображений
nb_classes = 10
# Количество эпох для обучения
nb_epoch = 1
# Размер изображений
img_rows, img_cols = 32, 32
# Количество каналов в изображении: RGB
img_channels = 3

# Нормализуем данные
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

# Преобразуем метки в категории
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

# Создаем последовательную модель
model = Sequential()
# Первый сверточный слой
model.add(Conv2D(32, (3, 3), padding='same',
input_shape=(32, 32, 3), activation='relu'))
# Второй сверточный слой
model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
# Первый слой подвыборки
model.add(MaxPooling2D(pool_size=(2, 2)))
# Слой регуляризации Dropout
model.add(Dropout(0.25))

# Третий сверточный слой
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
# Четвертый сверточный слой
model.add(Conv2D(64, (3, 3), activation='relu'))
# Второй слой подвыборки
model.add(MaxPooling2D(pool_size=(2, 2)))
# Слой регуляризации Dropout
model.add(Dropout(0.25))
# Слой преобразования данных из 2D представления в плоское
model.add(Flatten())
# Полносвязный слой для классификации
model.add(Dense(512, activation='relu'))
# Слой регуляризации Dropout
model.add(Dropout(0.5))
# Выходной полносвязный слой
model.add(Dense(nb_classes, activation='softmax'))

# Задаем параметры оптимизации
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
# Обучаем модель
model.fit(X_train, Y_train,
batch_size=batch_size,
epochs=nb_epoch,
validation_split=0.1,
shuffle=True,
verbose=2)

# Оцениваем качество обучения модели на тестовых данных
scores = model.evaluate(X_test, Y_test, verbose=0)
print(«Точность работы на тестовых данных: %.2f%%» % (scores[1]*100))

И Фсё — вот вся «сложность» 

avatar

_sg_, Спасибо! Действительно выглядит не сильно страшно). Действительно, достаточно высокоуровнево.

Получается, условно говоря, что «как именно» остается под капотом, а ты оперируешь на уровне «что». Т.е. чтоб что-то интересное замутить, надо понимать что ты делаешь на каждом этапе или в каждой части алгоритма и для чего. А уж сделается оно само)). В принципе да, выглядит как будто бы это можно попробовать).

avatar
Replikant_mih, 
https://www.kaggle.com/competitions  — вот здесь все Обучалкины соревнуются за вознаграждение. Код решений полностью открыт. Это хороший ресурс для изучения ML.
avatar

_sg_, Ага, спасибо. Но туда, наверно, нужно когда уже немного разобрался). 

А вам чего не хватило чтобы оседлать ML для целей финансовых рынков? — того самого элемента искусства?

avatar
Replikant_mih, тогда (2005 — 2007) технологии были недостаточно развитыми, чтобы без геморра, можно было использовать NN. А потом был 2008 год. Да и работа основная отнимала много времени.
А сейчас я планирую к этому вернуться.
avatar
_sg_, аа, ясн.
avatar
Нейросети к биржам еще в 90-е пытались прикрутить. Не понимаю чего нового нынче.
avatar
chizhan, ничего, кроме того. что они уже там работают
avatar
Судя по всему, получен обычный курвефиттинг (зевает)
avatar
ivanovr, судя по чему? )
avatar
По каким ресурсам питон изучали? Что порекомендуете? 
avatar
Dmitryy, я тут плохой советчик, так как никаких курсов не кончал и книг не читал. Изучал по примерам. Отдельные вопросы гуглил.

В качестве среды рекомендую установить анаконду
avatar
Dmitryy,
на тему Питона для начала есть два «Мировых компьютерных бестселлера»: 

https://www.litres.ru/zed-shou/legkiy-sposob-vyuchit-python-25206565/

https://www.litres.ru/pol-berri/izuchaem-programmirovanie-na-python-25562287/
avatar
Теперь осталось чтоб этот ИИ спиз… л несколько ярдов у своего хозяина (типа как у Грефа) и свалил в виртуальную реальность 
с 1 апреля, что ли 
avatar
Знатный прикол, зачет! Александр Михайлович,  три класса церковно-приходской, Искусственный Интеллект (ИИ), Тьюринг.
А вот это — самое то:
Предсказать цену актива в следующем году или даже в следующем месяце можно, но точность будет крайне низкая.
Самое главное — то, что не вошло в текст, даже между строк: точность предсказаний цены на следующий день! Уверен, она высокая.
avatar
тема с ии это следующий этап раскорячинга обычных зависимостей.
скажем простая исследовательская задача:  возьмте все гепы из 10 проц квантиля и наверняка найдете какуюнибудь закономерность в поведении цены в следующие 10 минут. проблема с ии довольно хорошо известна та самая изъезженная нестационарность — причин для этого миллион — выходные, сдвиг времени, приход внешних денег, всякие события и тд и тп но если зачеррипикить определенные куски вручную можно сгладить эту самую нестационарность слегка. возможно глубокие сетки и могут работать в разных фазах рынка но как то лень не позволила поисследовать как следует
Я же правильно понимаю, что это — первоапрельская шутка?!
Я уже сегодня попался на одну, так что достаточно :)
avatar
Ivan Nasyrov, здесь серьезные люди обсуждают серьезные вещи
avatar
Во-первых, я открыл для себя такой гениальный язык, как Python.
Как думаете, сколько строчек занимает программа на питоне для распознавания текста из картинки? 4 строки!

если исползовать сахар и либы, там и одна строка может быть, что толку то? Это не говорит о «мощности»

Напишите короче на питоне вот это

Observer := Object clone

Observable := List clone do(
   register := getSlot("push")
   notify := method(message, self foreach(observer, observer update(message)))
)
Newspaper := Observable clone do( addNews := method(news, notify(news)))

Citizen := Observer clone do(
   create := method(name, self clone lexicalDo(name := name))
   update := method(message, writeln( name .. " узнал следующее: " .. message))
)

newspaper := Newspaper clone

newspaper do(
   register(Citizen create("Иван"))
   register(Citizen create("Василий"))
   addNews("Наблюдатель - поведенческий шаблон проектирования")
)
avatar
sortarray sortarray, вот питоновский вариант

from abc import ABCMeta, abstractmethod

class Observer(metaclass=ABCMeta):
    """
    Абстрактный наблюдатель
    """

    @abstractmethod
    def update(self, message: str) -> None:
        """
        Получение нового сообщения
        """
        pass

class Observable(metaclass=ABCMeta):
    """
    Абстрактный наблюдаемый
    """

    def __init__(self) -> None:
        """
        Constructor.
        """
        self.observers = []     # инициализация списка наблюдателей

    def register(self, observer: Observer) -> None:
        """
        Регистрация нового наблюдателя на подписку
        """
        self.observers.append(observer)

    def notify_observers(self, message: str) -> None:
        """
        Передача сообщения всем наблюдателям, подписанным на события
        данного объекта наблюдаемого класса
        """
        for observer in self.observers:
            observer.update(message)

class Newspaper(Observable):
    """
    Газета, за новостями в которой следят тысячи людей
    """

    def add_news(self, news: str) -> None:
        """
        Выпуск очередной новости
        """
        self.notify_observers(news)

class Citizen(Observer):
    """
    Обычный гражданин, который любит читнуть с утра любимую газетку
    """

    def __init__(self, name: str) -> None:
        """
        Constructor.

        :param name: имя гражданина, чтоб не спутать его с кем-то другим
        """
        self.name = name

    def update(self, message: str) -> None:
        """
        Получение очередной новости
        """
        print('{} узнал следующее: {}'.format(self.name, message))

if __name__ == '__main__':
    newspaper = Newspaper()                 # создаем небольшую газету
    newspaper.register(Citizen('Иван'))     # добавляем двух человек, которые
    newspaper.register(Citizen('Василий'))  # ... ее регулярно выписывают
    # ... и вбрасываем очередную газетную утку
    newspaper.add_news('Наблюдатель - поведенческий шаблон проектирования')
avatar
sortarray sortarray, не увидел принципиальной разности в коде по этим портянкам.

Мое мнение — под каждую задачу есть наиболее подходящий язык. Под задачи ИИ сейчас лучше всего подходит питон

avatar
Это 1 апреля или серьезно?
Сергей Кузнецов, это и 1 апреля и серьезно
avatar
что там Ваша нейросеть про завтрашний SI говорит?
avatar
Корреляция размера свечи и объема решает.Маленький додж и маленький объем.Большая марибоза и большой объем.Это две крайности.Остальные формы промежуточные.Но если нельзя предсказать объем, то и нельзя предсказать цену. Мораль — если перемены гармоничны(объем предсказуем) можно торговать, а если не гармоничны, то торговать опасно.Простой пример аллигаторы Вильямса .3 частоты должны найти резонанс ради тренда, иначе боковик. Дам подсказку для улучшения аллигаторов.Тренд любит нечетные серии, а коррекция -четные серии новых перемен. Числа на спирали квадрата 9 Ганна нам в помощь, но только в рост.В падение простая арифметика.Не четные потому что есть срединная фаза где объем максимален.Относительно этой точки цено график(импульс) симметричен в прошлое и будущее.Я не программист, но торгую и читаю 25 лет.Это мои мысли.Еще книга Чарльза Миллера -циклы и волны в компьютерном моделировании… -нам в помощь.В идеале цена есть сумма четных гармоник с коэф-м 4 .



avatar
Если уж вам питон понравился, то представляю что будет, когда научитесь писать на R. Впрочем, если все ограничивается только нейронками и не лезете в линейную алгебру — может и ничего.
По поводу предсказания «цен» — так это ж неверно сформулированная задача, понятно что по любым «техническим» метрикам из машинного обучения вы там что-нибудь значимое выучите — например, что цены долгосрочно растут. Но с точки зрения торговли это будет результат ни о чем. Бэктест в студию, и если там будет Шарп хотя бы 2 — можно обсуждать.
avatar
MadQuant, может R тоже язык хороший, но библиотека ML разработана под питон, поэтому пришлось учить его.

Предсказание цены и расчет вероятности этого предсказания — это как раз самая правильная задача для трейдинга. Исходя из вероятности события выстраивается заявка с учетом рисковых параметров.

То, о чем вы пишите (что-нибудь значимое да выучите) в ИИ называется переобученностью
avatar
Нейросети часто хорошо справляются с поиском взаимосвязей между входными данными и результатом, но только если эта взаимосвязь есть! В противном случае на этапе тренинга сети получается подгонка (курвафиттинг). Именно поэтому нейросети в трейдинге не пользуются популярностью — им, как правило, скармливают ничего не значащий рыночный шум. Как результат — неработающие модели.

По факту — что конкретно такого может найти нейросеть, чего не может обнаружить тренированный человеческий глаз? В рыночных данных на графиках полезной информации гораздо меньше, чем ничего не значащей чепухи. А нейросеть будет там что-то пытаться искать. И ведь найдет! Но работать это не будет.
avatar
Михаил К., нейросеть для того и предназначена, чтобы искать еще неизвестные паттерны и зависимости. Очень часто, решения, которые предлагает модель, нельзя объяснить человеческой логикой, потому что нейросеть видит глубже и дальше
avatar
sergeygaz, я согласен, но, еще раз — только при условии, что в исходных данных (точнее, в динамике изменений исходных данных) есть связь с динамикой изменений результата. Явная или скрытая — нейросеть ее найдет. Но если никакой связи нет — будет подгонка под историю. И дело в том, что в тех данных, что обычно скармливают нейросетям (значения индикаторов, цены открытия/закрытия) нет прогнозной ценности. Отсюда и результат соответствующий. 
avatar
И не забудьте в заложить в свою систему твиты Трампа !  
avatar
плюс-трейдер, это делается легко 3 строчками кода.

Если я смогу найти библиотеку лексического анализа английской речи (чтобы понимать твит положительный или отрицательный), то прикрутить твиты Трампа или вообще новостной поток конгресса будет очень просто. Например, можно частоту повторения слова «санкции» считать
avatar
В итоге я создал нейронную сеть, которую обучил на 4 000 000 исторических котировках.

С этого момента поподробнее. Какие котировки, как шёл процесс обучения и какой таймфрейм использовался?
avatar
Abstract, эта тема требует отдельного поста
avatar
sergeygaz, коротко ответь, развёрнутого ответа не нужно. 
avatar
Abstract, коротко тут не ответишь.

Котировки — они и в Африке котировки. Но сетка, обученная на одних только котировках, не дает положительного мат.ожидания. Поэтому в параметры модели добавляются исторические значения и ряд индикаторов.

Теперь про обучение. Все просто и одновременно очень непросто.
Определяешь параметры нейросети, даешь ей на вход обучающую выборку. Запускаешь команду обучиться и идешь спать.
Математически, модель обучается за счет алгоритмов оптимизации (в основном это разновидности градиентного бустинга). Я использовал RMSProp и Adam.

Обучающий таймфрейм самый минимальный, который удалось достать.
avatar
Перечитал сегодня еще раз комменты. Правильно ли я понял, что эти сети принимают решение и извне, разрабу, очень сложно объяснить почему принято такое решение? То есть будет сигнал на трейд, а почему не ясно. Правильно ли я понял?
avatar
Андрей К, 

Да, все так и есть.

Сеть предлагает решение, но почему оно именно такое объяснить порой невозможно.

Так-то понятно, что сеть распознала какую-то закономерность и теперь подстраивается под нее. Но выделить этот паттерн из модели никак нельзя.

avatar
Вы на классификацию или на регрессию обучали? Какая разница в обучающей и тестовой?
avatar
day0markets, регрессия.

Весь доступный набор данных (котировки и пр.) делится на части: 80-90% идет на обучение, остальное — на валидацию и на тестирование модели. В тестовые данные подмешиваются свежие котировки с борда
avatar
sergeygaz, sergeygaz  в ваши 30 параметров входило обучения мувингов? Интересен ваш опыт именно в этом направлении.  Наработанные алгоритмы у меня на языке примитивном для метастока. Я когда-то так и не осилил нейросети. Не знаю, смогу ли сейчас вернуться к этому. Зависит от вашего ответа
avatar
jur line, мувинги это скользящие средние? я их не использовал
avatar
sergeygaz, какой индикатор вы использовали для обучения,?
можете в личку написать, а то я не имею рейтинга?
avatar
sergeygaz, а подскажи, почему нет информации про использовании глубокого обучения с подкреплением в трейдинге?? это же должно работать на практике??
avatar
ivanov petya, это работает. Информации нет, потому что все деньги зарабатывают :)
avatar
я думаю ваша сеть не может этого smart-lab.ru/blog/530433.php
avatar
Mister X, сеть ищет и эксплуатирует рыночные неэффективности
avatar
sergeygaz, это все ищут, только на этом и можно заработать
avatar
4000000? у вас сеть не переобучилась? 
avatar

теги блога sergeygaz

....все тэги



UPDONW
Новый дизайн