Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 105

 
Dr.Trader:

Я предсказываю всего 2 класса - "купить" и "продать", то есть у меня всегда будет открыта какая-нибудь сделка. Работаю с одной моделью, не вижу смысла делать две модели дающие просто противоположные результаты.

Но хотелось бы постепенно перейти к 3 классам - "купить"/"закрыть всё и не торговать"/"продать". Это даст возможность торговать с более сложной стратегией. Я пару раз пробовал, но у меня были проблемы с обучением моделей на три класса, особенно если модель регрессионная с последующим округлением результата к классам.
Я думаю что стоит попробовать создать две модели, в которой оригинальные классы 1/0/-1 трансформированы в 1/0/0 для первой модели (только покупка), и 0/0/1 для второй модели (только продажа). Это приведёт к несбалансированным классам в каждой модели (количество примеров с одним классом гораздо больше чем с другим), но я нашёл хорошие метрики для оценки модели которые работают в таких условиях - F-score и kappa. Ничего толком в этом направлении ещё не делал, но такой план выглядит достаточно возможным.

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

Раздельное обучение на покупки и продажи частично решают эти проблемы. Я писал несколько страниц назад, каким образом, у меня две сетки, одна учится на покупки сигналы (1;0) - купить или ничего не делать, и другая на продажу (-1;0) - продать или ничего не делать. На выходе этих двух сеток переключатель, который сводит сигналы в схему (-1;0;1). Работа такого комитета сеток получается очень интересной: вначале идут хорошие сигналы на ООС, постепенно количество сигналов падает, то есть чаще ответ 0 на выходе (паттерны перестают узнаваться и это лучше, чем неверные торговые сигналы), и уже еще через некоторое время начинают появлятся неверные торговые сигналы (паттерны изменились). Так вот уже на этапе снижения количества сигналов ниже заданного порога можно и нужно считать началом необходимости нового обучения на свежих данных.

Но, вообще, по факту, нет никакого такого "обучения" и "тренировки". Всевозможные кроссвалидации и проверки на оос не дают и не могут дать эффекта которго от них ждут. Дело в том, что подобные ухищрения есть ни что иное как поиск а затем выбор тех значений, которые приближенно работают удовлетворительно и на участке обучения и на участке проверки, тоесть этот набор параметров уже изначально существует среди всех возможных их вариантах, и это равносильно выбору сразу на всем участке истории целиком.

Тем не менее использование двух моделей (в моем случае - две сетки) наилучшее, на мой взгляд, что можно применять из числа доступных на сегодняшний день методов "машинного обучения". Это не обучение и не тренировка, это способ оптимизации модели.

Реального обучения на сегодняшний день не существует. Распознавание таких же или похожих паттернов это не результат обучения, это результат запоминания. Обучение должно подразумевать некий мыслительный процесс (пусть и примитивнейший), который позволил бы рассуждать и делать выводы при получении новой информации, а так же способность генерации новой информации самостоятельно. Рынок требует именно такого подхода - мышление, чего на сегодняшний день нету, насколько мне известно. А то, чем мы пользуемся сегодня - запоминание, а не мышление, к сожалению. 

 
Andrey Dik:

Но, вообще, по факту, нет никакого такого "обучения" и "тренировки". Всевозможные кроссвалидации и проверки на оос не дают и не могут дать эффекта которго от них ждут. Дело в том, что подобные ухищрения есть ни что иное как поиск а затем выбор тех значений, которые приближенно работают удовлетворительно и на участке обучения и на участке проверки, тоесть этот набор параметров уже изначально существует среди всех возможных их вариантах, и это равносильно выбору сразу на всем участке истории целиком.

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

Вот у вас есть две нейронки - вы же не с потолка взяли их параметры? Слои, скорость обучения, торможение, контроль весов, и десятки других параметров которые есть у нейронок. Вы наверняка делали что-то вроде валк-форвард теста для определния подходящих параметров, что по своей сути тоже кроссвалидация. Я не верю что можно просто взять две нейронки с дефолтными параметрами, и начать сразу торговать в плюс.

 
Dr.Trader:

Я не верю что можно просто взять две нейронки с дефолтными параметрами, и начать сразу торговать в плюс.

Почему?
 
Dr.Trader:

1. Есть модели которые проходят кроссвалидацию, но не проходят тест на новых данных.

2. А есть модели которые могут пройти кроссвалидацию, и после этого как-то что-то торгуют в плюс.

3. Но если модель кроссвалидацию не прошла - то вообще нет смысла пытаться с ней торговать на новых данных.

4. На мой взгляд это очень хороший первый шаг для отбора предикторов и параметров модели.

5. Далее - валк форвард тест для того чтоб опредилить может ли модель на новых данных. Если не может - нужно что-то поменять.

6. Вот у вас есть две нейронки - вы же не с потолка взяли их параметры? Слои, скорость обучения, торможение, контроль весов, и десятки других параметров которые есть у нейронок. Вы наверняка делали что-то вроде валк-форвард теста для определния подходящих параметров, что по своей сути тоже кроссвалидация. Я не верю что можно просто взять две нейронки с дефолтными параметрами, и начать сразу торговать в плюс.

1. Да. Это не значит что модель плоха. Это может означать либо "недостаточную память" модели для предоставленного объема данных, а может означать что не найден тот набор параметров, который подходит для всего участка целиком вместе с участками обучения и участками валидации. Проблема в том, что нет способа определить, в чем именно проблема провала тестов на новых данных.

2. Да. Это означает "достаточную память". Можно получить тоже самое и в п.1 всего лишь сократив объем обучающих данных. То, что получен плюс на неизвестных данных, можно считать чистым "повезло", так как попались паттерны, которые такие же или очень похожи на те что система знает и при этом случились именно те реакции рынка, что случались ранее перед соответствующими паттернами. Проблема в том, что паттерны постоянно постепенно меняются, а иногда и внезапно резко и нет никаких гарантий на будущее.

3. Да. Но это не намного хуже, если она бы прошла, по выше озвученным причинам.

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

5. Валк-форвард единственный способ проверить работоспособность системы. Единственный. На мой взгляд если удастся создать систему эффективную хотя бы на 55-60% (то есть снижение эффективности на 30 и более % по сравнению с участками "обучения"), то можно считать что успех достигнут. Но и то это будет лишь означать, что найден компромисс между скоростью изменения рыночных паттернов и способностью системы запоминать необходимый объем информации, но это вовсе не будет означать что система "поглупела" на 30%, а будет означать, что система не узнаёт 30% новых или изменившихся старых.

6. Озвученный мной подход с двумя нейронками не означает "обучения" как такового. Это всего лишь то же "запоминание", просто применённое хитрым способом. Происходит всё тоже забывание старых и нераспознование новых паттернов как и у Вас, но зато не происходит торговли при незнакомых паттернах, торговля сходит на нет со временем, а дальше начинаются ложные сигналы. Я делаю (делал раньше) валк-форвард тестирование. при котором происходило новое обучение при снижении количества сделок на единицу времени ниже допустимого порога, поэтому получались разные по длине проверочные участки на валк форварде при одинаковых участках "обучения". Получалось как раз в среднем снижение эффективности на те самые 30%.    

 
Комбинатор:
Почему?

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

Сейчас например очень популярны свёрточные нейронные сети для классификации картинок. Их применение звучит очень просто (скачать библиотеку для Питона, и всё готово), но люди забывают что куча университетов уже десятилетия учавствуют в конкурсе "распознай картинку", где борются за каждый выигрышный процент. Модные сейчас вещи типа "раскрасить картинку под Ван Гога", или подменить лицо на картинке - это результат десятилетий работы университетов, со всеми их студентами и аспирантами (и профессорами наверное), которые тратят кучу времени на подгонку параметров модели, или на разработку новых моделей.
Для форекса это тоже возможно, но нужно потратить не меньше усилий. В этом случае выигрыш это реальная прибыль на форексе, поэтому конфигурациями моделей не хвастаются и в общий доступ не выкладывают, каждому новому участнику конкурса нужно начинать всё сначала.

 
Dr.Trader:

Я не верю что можно просто взять две нейронки с дефолтными параметрами, и начать сразу торговать в плюс.

Конечно, я тоже не верю в это. Потому что будет означать создание мыслящей машины, которую нужно обучить всего лишь один раз в её жизни. До мыслящих машин человечество ещё очень далеко.
 
Andrey Dik:

Раздельное обучение на покупки и продажи частично решают эти проблемы. Я писал несколько страниц назад, каким образом, у меня две сетки, одна учится на покупки сигналы (1;0) - купить или ничего не делать, и другая на продажу (-1;0) - продать или ничего не делать.

В моём тернарном классификаторе тоже две сетки, но с разными скрытыми слоями и обе классифицируют прогноз следующего направления цены, т.е. 1 либо -1. На выходе стоит переключатель, который в случае если одна из сеток выдаёт на выходе 1, а другая -1 (противоречат друг другу), то переключатель выдаёт 0 - ничего не делать.

С покупкой и продажей для значения зависимой переменной всё понятно, т.к. их можно определить по факту - последующим после паттерна направлением движения цены. Но тут возникает каверзный вопрос на засыпку, по какому условию Ваши бинарные классификаторы помечают зависимую переменную в 0 - ничего не делать?

Ведь такого состояния в виде фактов в природе не существует, ИМХО.

 
Andrey Dik:

5. ...

6. ...

С этими пояснениями звучит правдоподобно. А насколько редкими паттернами вы торгуете? Скажем, если есть обучающие примеры с классами "открыть позицию на покупку" и "закрыть все сделки", то какое будет процентное соотношение этих классов? Я могу предположить что классу buy соответствуют резкие скачки цены вверх на сотни пунктов, то есть количество класса buy около 10% от всех обучающих примеров?
 
Andrey Dik:

1. Да. Это не значит что модель плоха. Это может означать либо "недостаточную память" модели для предоставленного объема данных, 

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

 1) Есть такая сеть которая умеет до обучаться, если в нее поступают данные которые ей ранее не известны, может вам будет интересно почитать , сеть называется SOINN https://www.google.com.ua/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=soinn

 2) Я тоже об этом писать уже устал, более того практически доказал то что рынок ходит против своей же статистики даже обяснил саму механику - почему так происходит, и все обучения в классическом виде к нему не применимы, но это никому не интересно, все делают тоже что и делали 

Google
Google
  • www.google.com.ua
Голосовой поиск – это очень удобно! Чтобы найти нужную информацию, скажите "О'кей, Google" и произнесите запрос.
 
Yury Reshetov:

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

С покупкой и продажей всё понятно, т.к. их можно определить по факту - последующим после паттерна направлением движения цены. Но тут возникает каверзный вопрос на засыпку, по какому условию Ваши бинарные классификаторы помечают зависимую переменную в 0 - ничего не делать?

Ведь такого состояния в виде фактов в природе не существует, ИМХО.

SELL   BUY  Интерпритация

-1        0           sell

0         0         забор

0         1           buy

-1        1         забор

 Вот таблица переключателя. Из него видно, что сигналы возникают, когда сигналы сеток есть и не противоречат друг другу. После обучения паттерны распознаются и происходит успешная торговля, со временем показания начинают либо противоречить друг другу (на выходе 0 - забор), либо обе сетки перестают узнавать паттерны (на выходе 0 - забор). Поэтому со временем происходит снижение количества сделок, тоесть принцип "не уверен - не торгуй".

Но, похоже, Ваш вопрос заключается в другом: как заставить соответствующую сетку покупать/продавать, вместо того, что бы сидеть на заборе? - ответ прост, система балов. Баллы начисляются за правильные ответы, а за неправильный и забор штрафы. Нужно подобрать соотношение балов, это тоже задачка та ещё, ведь нужно добиться слаженной работы двух сеток в итоге, но результат стоит того, что бы помучится.

Имхо, на бай и селл паттерны разные. В этом и идея, как и у Вас наверное.