Блог им. sergeygaz
Однажды великий гуру трейдинга и знаток анекдотов Александр Михайлович (который Герчик) в одном из своих семинаров рассказал про один случай, когда он пытался алгоритмизировать работу с уровнями и нанял целого математика, чтобы тот разработал мат.аппарат и запрограммировал сигналы для отбоя/пробоя. Целый математик бился над задачей как рыба об лед, но, видимо, математик он был так себе и поэтому задачу решить не смог.
Даже я, на тот момент имеющий в активе три класса церковно-приходской, долго недоумевал, как можно было не решить такую простейшую задачу. Это же легче легкого, думал я: хочешь запрограммировать горизонтальные уровни — тупо вбей в систему справочник круглых чисел, хочешь запрограммировать вершину параболы — пиши регрессию. И так далее.
Потом времена ушли далеко вперед и появился Искусственный Интеллект (ИИ), который легко решает эту задачу, даже без понимания, как оно должно работать.
Собственно, ИИ появился еще лет 50 назад. Но в те давние времена (уже почти былинные), когда и трава была зеленее и небо голубее, компьютерное железо было не способно решать задачи такого уровня. Сегодня ситуация изменилась.
ИИ сейчас развивается семимильными шагами.
У всех сейчас на слуху глубинное обучение, нейронные сети и прочий мэшинг лёнинг.
ИИ уже обыгрывает человека в шахматы, ИИ умеет определять, кто изображен на картинке. Доисторический ИИ давно умел распознавать дорожные знаки, а современный ИИ уже умеет водить машину без водителя.
ИИ уже умеет понимать человеческую речь и умеет переводить с любого языка на любой.
ИИ уже может узнать человека по его лицу.
ИИ уже сегодня может выдержать 5-тиминутный тест Тьюринга, а лет через 7 сможет пройти его полностью.
Так вот, мы все знаем, что основной критерий успешного трейдинга — научиться видеть тренды и паттерны. Тренды и паттерны дают понимание, куда дальше пойдет цена акции. Понимание дает статистическое преимущество, а преимущество позволяет зарабатывать.
Однажды у меня возникла идея: а не прикрутить ли ИИ к торговле и не обыграть ли мне это казино биржу?
Ведь ИИ сможет определять тренды и паттерны за меня, обучаясь самостоятельно.
Углубившись в эту тему, я с удивлением обнаружил, что появились отличные мощнейшие инструменты для работы с ИИ.
Во-первых, я открыл для себя такой гениальный язык, как Python.
Как думаете, сколько строчек занимает программа на питоне для распознавания текста из картинки? 4 строки!
А программа на питоне, читающая данные из Excel, выполняющая их фильтрацию и выводящая гистограмму? 6 строчек!!
В какой еще полноценной программе, работающей и на Windows и на Маке и на Линуксе, вы сможете нарисовать синусоиду всего за 5 строк кода?!
Во-вторых, для питона разработана огромная куча библиотек, в том числе мощнейшая библиотека для машинного обучения от самого Google, позволяющая строить нейронные сети всего за 30-40 строчек кода.
В итоге я создал нейронную сеть, которую обучил на 4 000 000 исторических котировках. Все по науке — обучающая выборка, валидационная, тестовая. Обучение — процесс тяжелый, требует хорошего железа и выполняется часами.
В итоге получилась модель, которая получает на входе примерно 30 параметров и предсказывает цену актива в следующем временном периоде.
Естественно, как и в любых других моделях, предсказать цену со 100% точностью невозможно. Да это и не нужно. Нейросеть в этом смысле не исключение, но точность модели на тестовой выборке получилась весьма высокой (о цифре умолчу) — совершенно точно дающей весомое статистические преимущество.
Из интересного:
— Логику принятия нейросетью решений объяснить нереально. Модель каким-то образом видит известные мне паттерны. Плюс она видит что-то еще, мне непонятное.
— Уровни таки работают (Тимофей, привет!). За все виды уровней не скажу, но проверенная мной пара вариантов — да.
— Технический анализ в отрыве от фундаментала — работает
— Предсказать цену актива в следующем году или даже в следующем месяце можно, но точность будет крайне низкая. Точность резко повышается при минимизации таймфрейма
Зачёт! +100500
Наконец-то у меня будет доказательство )))
Впрочем, большинство роботов и до этого на 99% без ФА обходилось.
Вы правда думаете что до Вас этого еще никто не делал? А если делал, и ничего путного не вышла, то где здесь наука?
такой прогноз любой аналитеГ без всякого ИИ сделает
Я не исключаю, что в случае какой-либо движухи модель может не успеть переобучиться, но на то есть риск-менеджмент.
ориг
А вот обучение модели это долго (расчет идет 5-8 часов).
В продакшене модель пока использую в качестве советника. Следующий этап — сделать обвес и запустить полноценного робота
Программно обучение выглядит просто (как все в питоне) и реализуется одной командой с кучей параметров
Что вы имеете в виду под «продакшен»? Разработка и работа системы только вами и для вас?
Я представляю это, как разработка десятком программистов для тысяч клиентов и работе с реальными счетами. Несомненно, исследования проводятся на Python, удобство этого языка глупо отрицать, но разработка системы в продакшн обычно делают на типобезопасном ЯП.
sergeygaz, поздравляю, уж думал, что один сетки хвалю.
** в астрологии наоборот, труднее всего прогнозировать 5-ки (даже невозможно), а вот неделю или месяц… очень даже хорошо.
Впрочем, даже не цену, а тенденцию роста или падения по числам.
Если на пальцах, MAE определяет ваш риск
Ну и самое главное. Нейросети в современном представлении это даже близко не ИИ так что не надо их путать.
И да, оно у вас или не работает или работает только на рынке определенного характера.
Конечно, моя нейросеть не универсальная, а заточена только под определенный тикер. Но никто же не мешает мне сделать еще 10 нейросетей под 10 новых эмитентов
Что касается вашей нейросети то давайте посмотрим на ее потенциал с точки зрения математики.
У вас есть паттерны — формализовать условия при которых патерн будет 100% работать не может никто. Тот же ГИП он может сработать, а может и нет, уровень может сработать а может и нет. Т.е. гарантированная вероятность работы паттерна не превышает 1/2, ну допустим вам удалось привязать внешние условия и паттерн срабатывает в 2/3 случаев.
Нейронная сеть не может гарантированно (100%) распознать паттерны, так как их внятно нельзя формализовать — в случае ГИП одно плечо может быть выше/ниже, голова может выделяться сильно или нет в ширину все это может быть 100 свечей а может и 10. Ну т.е. в лучшем случае распознование будет давать результат а 2/3 (это я очень оптимистичен), а теперь перемножим невнятный паттерн, на негарантированное распознавание и получим 44% при очень оптимистичном сценарии (и паттерн у вас рабочий и сеть тоже но вместе не алё).
Теперь еще прибавим «родовые травмы»:
переобучение — ложное срабатывание при избытке обучающих данных
локальный экстремум — если сеть адаптивная и давала хорошие результаты в определенный период рынка она гарантировано идет в разнос при изменении характера рынка
избыточность данных/ложная корреляция — в данном случае речь идет про вспомогательный набор данных, например вы смотрите на доллар и его торгуете попутно загружая нефть
и еще куча всего.
Вы не видите проблемы в постройке мат модели у математика, вы не видите проблемы в написании нейросети, вы не видите по одном причине — вы дилетант в этом вопросе.
В этом нет ничего плохого, человек не может быть специалистом во всем. Но я призываю вас не попадать в плен ложного стереотипа что «на самом деле всё очень просто» только на основании того что у вас что-то где-то сработало.
Я писал диссертацию по системам управления на нейронных сетях, и соблазн применить их в торговле у меня тоже был. И я их тоже делал.
Тоже все казалось очевидным и очень легким, но жизнь все расставила по своим местам — реализации оказались очень и очень тяжелыми и не всегда рабочими.
Поэтому мне вовсе не нужно распознавать паттерны, определять ГИП и прочее. За меня это делает ИИ.
Проблема переобучения в ИИ существует, но моя модель сейчас не выглядит переобученной.
И, самое главное. Модель всего лишь дает сигнал купить или продать и позволяет просчитать нужный уровень риска. Дальше решение о входе в сделку принимает трейдер, исходя из его аппетита. Ну или робот, если его запрограммировать соответственным образом
Ну да Бог с ним. Если вас устраивает работа — дерзайте, не ошибается тот кто ничего не делает. Вы главное не возлагайте слишком много надежд и денег.
а это чудо на самом деле. Когда ребёнок посмотрев пару картинок, т.е. мазков на плоском листе, научается отличать бабочку от кошки, а стул от кресла, то это и есть распознавание образов. Ребёнок Спинозой не становится. Но тем не менее это чудесная задача решена, вне-алгоритмическим путём.
экспертные системы — вторая задача искусственного интеллекта.
тоже решённая.
я не в восторге от журналистов, но тут вы на них наговариваете.
интересная игра. удачи!
Элемент неожиданности запрограммировать в ИИ нельзя.
Для нивелирования резких просадок и сливов в стиле «все пропало» можно и нужно работать с риском.
А так рекомендую начать с Анаконды
потому что c# компилируемый
и даже бэйсик компилируемый с прошлого… века
зато год не интересует питон
потому что питон не компилируемый
и не понимаю как применять
не компилируемые языки программирования
1bas=1exe & 1cs=1exe
без установки оболочек
ведь C# есть внутри Win7 FrameWork
и ещё есть онлайн компиляторы
принимающие 1-страничные проекты
Но питон и правда нынче хорош… и быстр.
На бирже торгуют тысячи роботов, эксплуатирующих рыночные неэффективности. Будет тысяча первый
Так я так а что вы на выходе то получали? цену на каком расстоянии?
возьмите lightGBM и не нужны вам никакие нейросети, более чем уверен с вашим подходом результат на тестах быдет лучше.
По моему дилетантскому мнению, деревья решений для задач предсказания котировок не подходят, т.к. склонны уходить в переобучаемость.
Если вы фичи сами выдумываете и используете обычную сетку с полносвязными слоями с большой долей вероятности лучше сделать на деревьях. Сеть нужна, если вы сырые котировки пихаете и используете какую-то нетривиальную архитектуру вроде автокодировщиков для извлечения признаков из сырого сигнала.
Так вот. Я тоже засовывал в сетку кучу параметров Это были и индикаторы широко используемые, некоторые номинальные переменные итд.
Естественно обучал. Обучение по времени длилось несколько дней.
Accuracy была очень приличная.
На выходе она давала модель, которую можно было прикрутить к Easy Language для Омega Research в виде индикатора и использовать в реальной торговле.
Самое интересное было потом. Сетка начала мне давать сигналы. Робот начал их исполнять. И тут я на себе в полной мере ощутил «прелесть» торговли с использованием сети. Да, сеть дает сигналы, но сигналы эти совершенно непонятные. То есть объяснить и понять зачем и почему сеть выдает такой сигнал человеку НЕВОЗМОЖНО. Ведь модель — это всего лишь голые веса — ничего не говорящие человеческому сознанию. Поэтому для человека (для меня) сигналы, которые она выдавала выглядели ну очень непонятно, спорно и двусмысленно. Я поторговал с этими сетками примерно месяц. Получил небольшой минус и закончил этот аттракцион.
Наверное, время пришло попробовать еще раз.
Но все равно, я очень хорошо помню своё ощущения, когда я видел сигналы от нейросетки в то время. Ощущение, прямо скажем, не из приятных.
Главный минус, который был тогда, это то что Вы не знаете почему именно этот сигнал формируется. Казалось бы на ровном месте или совсем «поперек» против всех и вся. Очевидно, что сеть нашла какие-то состояния, зависимости, закономерности для входов, которые мне показались не столь очевидными, как хотелось бы.
Сеть обучалась по схеме «с учителем», то есть по моим ответам.
Протестировать БаскТестом я не смог, потому что я закладывал в модель несколько таймфреймов. А скрестить в BackTeste на Omege несколько таймфреймов не представлялось возможным.
В результате на реале я не увидел ейдж.
Единственное, что я бы отметил положительного — это то, что сеть торговала в более удачное время, чем обычные системы. То есть она, плутовка, понимала, что лучше торговать с утра, чем на Америке.
Вообще подбор параметров для модели (и их предобработка) это сильно творческая задача. Но именно от нее зависит качество сетки, так что приходится это делать
Сейчас больше 3-4 не рискую использовать, опасаясь переподгонки.
С ними ваша статья будет иметь больший вес, чем «а вот один парень на смартлабе написал...»
Закономерно. Диспесия процесс СБ растет пропорционально корню квадратному из длительности временного интервала.
Я тоже смотрю на нейросети.
Обучается оч. быстро на исторических данных, но на тестовом дата сете не очень.
Там есть место для «хитростей»
Топологию сети смысла скрывать нет.
Питон освоил мимоходом, т.к это оказался очень простой язык программирования (я пожалел, что в школе бейсик изучал). Но для меня это нннадцатый язык, мне, возможно. было проще
Вы можете очень быстро освоить «Machine Learning». Изучить все современные алгоритмы. Научиться их правильно применять. Все тропинки здесь уже протоптаны. Обучальщиков сеток тьма. Но это Вам ничего не даст.
Главное — это необходимо научиться правильно СТРОИТЬ МОДЕЛИ.
Это уже ближе к «Data Science». А вот это уже — искусство. А чистый «Machine Learning» — ремесло.
да есть у меня прошлый опыт на эту тему.
На практике (на своих деньгах), так сказать, прочувствовал.
Никогда не забуду.
_sg_, Блин, буквально сегодня случился аналогичный инсайт — если все библиотеки так доступны — должно быть какое-то другое конкурентное преимущество. Тут как в HFT — либо ты на острие технологий и быстрее остальных, либо же ты умнее. Т.е. если ты юзаешь стандартные библиотеки ML — ты должен быть умнее. И тут меня осенило, что у меня может быть конкурентное преимущество здесь, потому что искусство, модели — это намного больше про меня, чем математика.
Кстати, как по ощущениям — насколько много математики в ML если юзать стандартные библиотеки, в смысле требуется ли от тебя знание математики?
Так перекладываю ML из дальнего ящика в средний ящик)).
Ма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))
И Фсё — вот вся «сложность»
_sg_, Спасибо! Действительно выглядит не сильно страшно). Действительно, достаточно высокоуровнево.
Получается, условно говоря, что «как именно» остается под капотом, а ты оперируешь на уровне «что». Т.е. чтоб что-то интересное замутить, надо понимать что ты делаешь на каждом этапе или в каждой части алгоритма и для чего. А уж сделается оно само)). В принципе да, выглядит как будто бы это можно попробовать).
https://www.kaggle.com/competitions — вот здесь все Обучалкины соревнуются за вознаграждение. Код решений полностью открыт. Это хороший ресурс для изучения ML.
_sg_, Ага, спасибо. Но туда, наверно, нужно когда уже немного разобрался).
А вам чего не хватило чтобы оседлать ML для целей финансовых рынков? — того самого элемента искусства?
А сейчас я планирую к этому вернуться.
В качестве среды рекомендую установить анаконду
на тему Питона для начала есть два «Мировых компьютерных бестселлера»:
https://www.litres.ru/zed-shou/legkiy-sposob-vyuchit-python-25206565/
https://www.litres.ru/pol-berri/izuchaem-programmirovanie-na-python-25562287/
А вот это — самое то: Самое главное — то, что не вошло в текст, даже между строк: точность предсказаний цены на следующий день! Уверен, она высокая.
скажем простая исследовательская задача: возьмте все гепы из 10 проц квантиля и наверняка найдете какуюнибудь закономерность в поведении цены в следующие 10 минут. проблема с ии довольно хорошо известна та самая изъезженная нестационарность — причин для этого миллион — выходные, сдвиг времени, приход внешних денег, всякие события и тд и тп но если зачеррипикить определенные куски вручную можно сгладить эту самую нестационарность слегка. возможно глубокие сетки и могут работать в разных фазах рынка но как то лень не позволила поисследовать как следует
Я уже сегодня попался на одну, так что достаточно :)
если исползовать сахар и либы, там и одна строка может быть, что толку то? Это не говорит о «мощности»
Напишите короче на питоне вот это
Мое мнение — под каждую задачу есть наиболее подходящий язык. Под задачи ИИ сейчас лучше всего подходит питон
По поводу предсказания «цен» — так это ж неверно сформулированная задача, понятно что по любым «техническим» метрикам из машинного обучения вы там что-нибудь значимое выучите — например, что цены долгосрочно растут. Но с точки зрения торговли это будет результат ни о чем. Бэктест в студию, и если там будет Шарп хотя бы 2 — можно обсуждать.
Предсказание цены и расчет вероятности этого предсказания — это как раз самая правильная задача для трейдинга. Исходя из вероятности события выстраивается заявка с учетом рисковых параметров.
То, о чем вы пишите (что-нибудь значимое да выучите) в ИИ называется переобученностью
По факту — что конкретно такого может найти нейросеть, чего не может обнаружить тренированный человеческий глаз? В рыночных данных на графиках полезной информации гораздо меньше, чем ничего не значащей чепухи. А нейросеть будет там что-то пытаться искать. И ведь найдет! Но работать это не будет.
Если я смогу найти библиотеку лексического анализа английской речи (чтобы понимать твит положительный или отрицательный), то прикрутить твиты Трампа или вообще новостной поток конгресса будет очень просто. Например, можно частоту повторения слова «санкции» считать
С этого момента поподробнее. Какие котировки, как шёл процесс обучения и какой таймфрейм использовался?
Котировки — они и в Африке котировки. Но сетка, обученная на одних только котировках, не дает положительного мат.ожидания. Поэтому в параметры модели добавляются исторические значения и ряд индикаторов.
Теперь про обучение. Все просто и одновременно очень непросто.
Определяешь параметры нейросети, даешь ей на вход обучающую выборку. Запускаешь команду обучиться и идешь спать.
Математически, модель обучается за счет алгоритмов оптимизации (в основном это разновидности градиентного бустинга). Я использовал RMSProp и Adam.
Обучающий таймфрейм самый минимальный, который удалось достать.
Да, все так и есть.
Сеть предлагает решение, но почему оно именно такое объяснить порой невозможно.
Так-то понятно, что сеть распознала какую-то закономерность и теперь подстраивается под нее. Но выделить этот паттерн из модели никак нельзя.
Весь доступный набор данных (котировки и пр.) делится на части: 80-90% идет на обучение, остальное — на валидацию и на тестирование модели. В тестовые данные подмешиваются свежие котировки с борда
можете в личку написать, а то я не имею рейтинга?