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

 
Maxim Dmitrievsky:

у всех библиотек МО развитых, т.к. этот просто либы на плюсах

не удобно и долго с МО работать на низкоуровневых языках, особенно исследования

У меня просто не стоит вопрос выбора. И вообще, все это прикладное - я упор делаю на предикторы и немного целевые, и большее время уходит именно на разработку новых предикторов от бумаги до кода. Поэтому первый вопрос, которым я задаюсь - хорошая это была идея по добавлению новых предикторов или нет!? А будет более четкий ответ на этот вопрос, то в конечном итоге можно поискать и другие реализации/подходы интеграции в конечный код, а сейчас мне до этого далеко.

 
Igor Makanu:

увы, эта задача не имеет решения:

1. или пишите на стороннем языке(платформе) ТС, но получаете проблемы:

а) нет исторических данных

б) нет тестера

в) нет тестирования на демо-счете

Что стоит на стороннем языке:

1. загрузить историю в CSV,

2. Сделать тестер (это всего-лишь и не более чем цикл),

3. На демо-счете можно тестировать, скажем, через файловый обмен с терминалом. Если это делать через RAM-Disk, быстродействие как при обмене через память - Гигабайты в секунду.

Если система получится, а она с первого раза не получится, сэкономится масса времени на моделирование. А уж как в терминал ее потом запихнуть - вопрос решаемый.

 
Maxim Dmitrievsky:

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

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

ЗЫ: с МО пока в MQL долго разбираться, МАтлаб тут вроде и может помочь, но помню когда то устанавливал там все наглядно было и сеть нарисует и состояние каждого элемента сети можно было по шагам посмотреть, вроде NeuroSolutions , может позже займусь этим

 
Aleksey Vyazmikin:

У меня просто не стоит вопрос выбора. И вообще, все это прикладное - я упор делаю на предикторы и немного целевые, и большее время уходит именно на разработку новых предикторов от бумаги до кода. Поэтому первый вопрос, которым я задаюсь - хорошая это была идея по добавлению новых предикторов или нет!? А будет более четкий ответ на этот вопрос, то в конечном итоге можно поискать и другие реализации/подходы интеграции в конечный код, а сейчас мне до этого далеко.

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

 
Yuriy Asaulenko:

Что стоит на стороннем языке:

1. загрузить историю в CSV,

2. Сделать тестер (это всего-лишь и не более чем цикл),

3. На демо-счете можно тестировать, скажем, через файловый обмен с терминалом. Если это делать через RAM-Disk, быстродействие как при обмене через память - Гигабайты в секунду.

Если система получится, а она с первого раза не получится, сэкономится масса времени на моделирование. А уж как в терминал ее потом запихнуть - вопрос решаемый.

1. так и делаю в матлабе

2. хм, я пытался в Делфи давным давно все такое делать, благо не сделал, перешел на MQL, вижу и просадку вижу и визуально побарно как советник торговал, могу готовые индикаторы в качестве дополнительных фильтров добавить, могу трейлинги, усреднения...все могу увидеть в тестере, смоделировать все это нас стороннем софте..зачем? проще с нуля за 3-4 месяца изучить MQL и научиться писать советники по шаблону, я сейчас за 15 минут могу проверить в тестере любой граальный индикатор - пишу советника по своему готовому шаблону в виде процедурного программирования, т.е. просто подключаю готовые функции

3. можно, но у меня п.2 у меня все есть в MQL, чего нет допишу или подключу .dll


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

Или так или как 90% "трейдеров" в рунете торговать по примитивным ТС          )))

 
Maxim Dmitrievsky:

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

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

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

Сейчас у меня затянувшийся эксперимент на R идет по расщеплению корня дерева, т.е. после построения нового дерева (с применением генетики - детали не знаю ибо скрипт от Dr. Trader), я убираю корневой предиктор и строю дерево снова - процесс этот не быстрый - в среднем 3-4 дня занимает, так уже на 29 расщеплении я нахожусь, и что интересно появляются даже сейчас новые и интересные листы, которые работают в положительный профит на 2014-2018 годах (каждый год профит), а обучение идет на 2015-2017. Из этого следует, что алгоритмы построения деревьев до сих пор не так уж хороши по результату, раз упускают очевидные вещи, когда у них избыток хороших предикторов, а вот когда начинается голодание - появляются новые решения. В общем исходя из этого опыта я хочу попробовать подавать группами предикторы и посмотреть где будет наибольшая чувствительность. Потом с разными группами построить разные деревья, сделать из них коллегиальный орган по принятию решения и отправить торговать...

 
Aleksey Vyazmikin:

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

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

Сейчас у меня затянувшийся эксперимент на R идет по расщеплению корня дерева, т.е. после построения нового дерева (с применением генетики - детали не знаю ибо скрипт от Dr. Trader), я убираю корневой предиктор и строю дерево снова - процесс этот не быстрый - в среднем 3-4 дня занимает, так уже на 29 расщеплении я нахожусь, и что интересно появляются даже сейчас новые и интересные листы, которые работают в положительный профит на 2014-2018 годах (каждый год профит), а обучение идет на 2015-2017. Из этого следует, что алгоритмы построения деревьев до сих пор не так уж хороши по результату, раз упускают очевидные вещи, когда у них избыток хороших предикторов, а вот когда начинается голодание - появляются новые решения. В общем исходя из этого опыта я хочу попробовать подавать группами предикторы и посмотреть где будет наибольшая чувствительность. Потом с разными группами построить разные деревья, сделать из них коллегиальный орган по принятию решения и отправить торговать...

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

завтра уже подумаю об этом, спать охото :)

кстати, в mql5 есть стандартные классы ctree и cnode для построения бинарных деревьев. Если знать как их использовать для датамайнинга.. но я не знаю, но у вас, похоже, что-то такое и есть

 
Maxim Dmitrievsky:

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

завтра уже подумаю об этом, спать охото :)

кстати, в mql5 есть стандартные классы ctree и cnode для построения бинарных деревьев. Если знать как их использовать для датамайнинга.. но я не знаю, но у вас, похоже, что-то такое и есть

"Корень дерева", в моем языке, - это самый первый предиктор, который разбивает на другие ветви дерево - обычно на две части (но есть и другие варианты).

"Расщепление дерева" - исключение корневого предиктора из выборки перед повторной обработкой данных.

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

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

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

Про классы ctree и cnode ничего не знаю, как и про ООП в целом - с программированием так же не шибко хорошо, поэтому тут без программиста в коде классов наврятли можно разобраться...

 
Aleksey Vyazmikin:

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

Про классы ctree и cnode ничего не знаю, как и про ООП в целом - с программированием так же не шибко хорошо, поэтому тут без программиста в коде классов наврятли можно разобраться...

да там больше вопрос как именно строить, и зачем. Их можно и через генетику ветвить в оптимизаторе, но это уже не будет похоже на ваше. Скорее, будет похоже на дерево алгоритмов, которое оптится, и они как бы послойно усложнятся сами по себе что-ли.. когда оптимум достигнут то в оптимизаторе отсеять лишние. Это просто как вариант, не факт что рабочий

 
Maxim Dmitrievsky:

да там больше вопрос как именно строить, и зачем. Их можно и через генетику ветвить в оптимизаторе, но это уже не будет похоже на ваше. Скорее, будет похоже на дерево алгоритмов, которое оптится, и они как бы послойно усложнятся сами по себе что-ли.. когда оптимум достигнут то в оптимизаторе отсеять лишние. Это просто как вариант, не факт что рабочий

Сложно обсуждать, если не понимаешь сути кода...

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

В общем у меня получилось 9 групп - разбивал их по логике заложенной в предикторы, даже более обобщенна чем просто по логике. Получил 512 комбинаций групп, ниже на графике виден разброс финансового результата в зависимости от комбинации групп - для отбора использовал метрику "Precision", сет что и на днях - без изменения, целевая columns_100, дерево 4 уровня, итераций всего 1000 сделал.

На таблице показан результат всего сета со всеми предикторами - 1710 единиц, а так же максимальный - 3511 и минимальный - 607 результат.


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

Вот как выглядит аккумуляция показателей на графике

Конечно, форма кривых зависит от алгоритма комбинации, так как все имеют одинаковое число нулей и единиц, то все равно итоговый результат справедлив. А он таков - на таблице ниже.



Из таблицы следует, что отключение 1, 8 и 9  группы оказывает хорошее влияние на улучшение финансового результата.

Посмотрим на комбинацию лучшего финансового результата



И теперь на комбинацию худшего результата 



В целом метод оценки сработал - в лучшем результате действительно присутствует не заблокированная группа 3,4,5,7 и заблокированы худшие, в то время как в худшем варианте ситуация почти зеркальная.

Вывод - данный подход имеет право на жизнь и может агрессивно выявить негативно влияющие группы предикторов.

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

Десятка лучших и худших комбинаций:

Ну и надо посмотреть, а что будет с другой целевой...

И вот ещё график - на нем четко видно. чем больше правильных решений (Proc_All - дельта правильных/неправильных решений относительно всех решений (нули и единицы в сумме)), тем больше прибыль, особенно, если это правильные входы на сделку (Proc_1_V02) относительно всех входов.


Причина обращения: