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

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

в R такое можно реализовать? 

немного о себе: я ни разу не  программист,   R мой первый язык который я изучаю месяц с хвостиком

 
mytarmailS:

в R такое можно реализовать? 

немного о себе: я ни разу не  программист,   R мой первый язык который я изучаю месяц с хвостиком

вот примерно процесс обучения НС с подачей ей инфы о результататх торговли. Ну, можно попробовать написать свою функцию и подавать ее в качестве custom fitness function в какой-нибудь пакет R. Но надо сначала понять, какой пакет R такое позволяет. Возможно, придется писать саму НС и делать это нужно на плюсах отдельным пакетом. ( R сам по себе медленный.

Дело в том, что это очень необычное дело. Обычно фитнесс-функции не кастомизируемы, за одним исключением, которое я знаю. Максимум, что я делал, это в пакете caret писал свою функцию, по максимуму значения которой отбирается набор параметров обучения в ходе кроссвалидации. Но при этом сама машина обучается стандартно. То есть, решение мое не совсем то, что нужно. Понимаете? 

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

Надо еще поискать:

 

http://stackoverflow.com/questions/25510960/how-to-implement-own-error-function-while-using-neuralnet-package-in-r

/go?link=https://stackoverflow.com/questions/36425505/own-error-function-including-weights-for-neuralnet-in-r

 

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

how to implement own error function while using neuralnet package in R?
how to implement own error function while using neuralnet package in R?
  • stackoverflow.com
I am trying to implement a customized error function in package neuralnet in R. Normally ’sse’ and ’ce’ which stand for the sum of squared errors and the cross-entropy are used to calculate...
 

по второй ссылке написано что нужно код переписывать в пакете ннет

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

 

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

Такое постепенное уменьшение ошибки делается по очереди используя все обучающие примеры, проходя их снова и снова. То есть тут не получится взять и вставить какой-нибудь Sharpe ratio как требуемый результат торговли, подойдёт только ошибка которую можно посчитать отдельно для каждого обучающего примера. Можно использовать какую-то свою функцию для расчёта ошибки, но и она тоже будет расчитываться отдельно для каждого обучающего примера, а не на все примеры сразу. Я не могу придумать как оценку всей торговли можно разделить на все отдельно взятые примеры.

 

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

 
Dr.Trader:

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

Такое постепенное уменьшение ошибки делается по очереди используя все обучающие примеры, проходя их снова и снова. То есть тут не получится взять и вставить какой-нибудь Sharpe ratio как требуемый результат торговли, подойдёт только ошибка которую можно посчитать отдельно для каждого обучающего примера. Можно использовать какую-то свою функцию для расчёта ошибки, но и она тоже будет расчитываться отдельно для каждого обучающего примера, а не на все примеры сразу. Я не могу придумать как оценку всей торговли можно разделить на все отдельно взятые примеры.

 

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

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

 

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

 

Спасибо за подробные прояснения Dr.Trader!

 Вы знаете наверное самое лучшее и правильное было бы обучать на самих разворотах даже того же зигзага, то есть давать три состояния 1)разворот вверх

2)разворот вниз

3)не разворот

 но обучиться ли, это довольно сложно ловить развороты, плюс перекос по количеству наблюдений ,   классов "не разворот" будет в десятки а может и в сотни раз больше

 А какие вы предикторы используете и какие результаты?

 Я вот начал спектральный анализ осваивать, первые пробы оказались на много качественней  чем просто с индикаторами, запускал через rattle , ошибка на обучении и проверке получилась 6% , но когда начал переносить код в R то ошибка сильно поднялась где то до 30% если не ошибаюсь, Сан Саныч говорит что переобучение , в общем пока мне многое не понятно

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

 
mytarmailS:

по второй ссылке написано что нужно код переписывать в пакете ннет

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

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

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

 You can use basically every error function that can be differentiated.

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