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

 

Спасибо, посмотрел колонки, в принципе я тоже уже это делал - дельты, min, max, время, итд.

 

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

1) выгрузить данные из MT5: ohlc, время, индикаторы. На данном этапе дельты я добавлять не буду.

2) загрузить данные в R, добавить к ним огромное число новых колонок путём сложения, вычитания, min, max итд исходных. В R это сделать проще чем в mt5.

3) каким-то образом выбирать поднаборы входных данных (по колонкам). Можно сделать по примеру Алексея используя GenSA, или просто генетическую оптимизацию пакетом GA. Поскольку мне нужен просто бинарный результат на каждый вход (вкл/выкл), то GA по-моему имеет преимущество, у него есть бинарный режим работы. Но нужно попробовать и сравнить оба пакета.

4) анализ поднаборов входов. Это тоже есть в примере Алексея. Но я рискну сразу обучать модель на подвыборке входов, и использовать ошибку валидационных данных как результат. Лишь бы время обучения модели было не больше пары секунд.

5) вернуться на шаг 2, добавить новых посчитанных входов, выполнить остальные шаги, проходить такие циклы пока результат не перестанет улучшаться.

 

Я ещё немного поэкспериментировал по статье про Метод основных компонент. В примере из статьи есть нюанс что результат можно точно посчитать из входных данных. В моём случае, когда входных данных явно не достаточно, то этот метод начинает использовать шум для обучения. Получается , что если этот метод может достичь результата (r-squared) в 0,95 со всего парой компонент - то используемые в модели предикторы скорее всего верны. Если используя даже все компоненты, r-squared всё равно меньше 0,95 - то модель включает шум в свои вычисления. Однако примечательно что с добавлением дополнительных шумовых предикторов - r-sqaured понемногу падает. Я думаю что таким образом можно сравнивать между собой поднаборы предикторов - если r-squared больше, то и поднабор лучше.

 
Dr.Trader:


 

Я ещё немного поэкспериментировал по статье про Метод основных компонент. В примере из статьи есть нюанс что результат можно точно посчитать из входных данных. В моём случае, когда входных данных явно не достаточно, то этот метод начинает использовать шум для обучения. Получается , что если этот метод может достичь результата (r-squared) в 0,95 со всего парой компонент - то используемые в модели предикторы скорее всего верны. Если используя даже все компоненты, r-squared всё равно меньше 0,95 - то модель включает шум в свои вычисления. Однако примечательно что с добавлением дополнительных шумовых предикторов - r-sqaured понемногу падает. Я думаю что таким образом можно сравнивать между собой поднаборы предикторов - если r-squared больше, то и поднабор лучше.

На данный момент что мы вроде бы имеем по поводу предварительного отбора предикторов, которые "имеют отношение" к целевой переменной: у Алексея некий набор приемов и у меня. Не плохо бы иметь еще один. РСА очень привлекателен, так как широко известен, полно литературы.... При этом следует отметить, что существует большое число алгоритмов, которые вычисляют "важность" предикторов, но мне не удалось их использовать. А вот в совокупности с моим алгоритмов, практически любые из этих стандартных алгоритмов дают хорошие результаты - ошибка уменьшается на 5-7%.

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

 
Dr.Trader:

Спасибо, посмотрел колонки, в принципе я тоже уже это делал - дельты, min, max, время, итд.

 



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

 

1) выгрузить данные из MT5: ohlc, время, индикаторы. На данном этапе дельты я добавлять не буду.

2) загрузить данные в R, добавить к ним огромное число новых колонок путём сложения, вычитания, min, max итд исходных. В R это сделать проще чем в mt5.

3) каким-то образом выбирать поднаборы входных данных (по колонкам). Можно сделать по примеру Алексея используя GenSA, или просто генетическую оптимизацию пакетом GA. Поскольку мне нужен просто бинарный результат на каждый вход (вкл/выкл), то GA по-моему имеет преимущество, у него есть бинарный режим работы. Но нужно попробовать и сравнить оба пакета.

 Тут посоветую два момента соблюсти: первый - входы должны быть всевдостационарны относительно своего среднего. Второй - про механизм перебора колонок; да, у ГА есть бинарный режим. У GenSA нет, но я имитировал бинарный выбор.

 

4) анализ поднаборов входов. Это тоже есть в примере Алексея. Но я рискну сразу обучать модель на подвыборке входов, и использовать ошибку валидационных данных как результат. Лишь бы время обучения модели было не больше пары секунд.

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

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

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

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

И получаются фиговые результаты. А когда я ввожу в МТ4 для закрытия сделки несколько параллельно работающих условий, которые отрабатываются через оператор ИЛИ, у меня получается заиметь положительное ОМ даже вне выборки.

Таким образом, я подумал, а как бы мне симитировать в R прогнозирование исхода сделки на основе сразу нескольких условий. Например, если цена на достигла ТП в течение 3 часов, то закрывай. Но при этом параметр 3 часа не должен быть жестко закреплен, ведь его тоже надо подобрать оптимально. А если еще добавить такое условие, что если цена в течение 3 часов ушла в плюс, но не достигла ТП, то нужно подтянуть СТОП в безубыток.

При этом вход в позицию также предсказывается машиной.

Вот такая задача на уме. 

 
Alexey Burnakov:

Таким образом, я подумал, а как бы мне симитировать в R прогнозирование исхода сделки на основе сразу нескольких условий. Например, если цена на достигла ТП в течение 3 часов, то закрывай. Но при этом параметр 3 часа не должен быть жестко закреплен, ведь его тоже надо подобрать оптимально. А если еще добавить такое условие, что если цена в течение 3 часов ушла в плюс, но не достигла ТП, то нужно подтянуть СТОП в безубыток.

Из опыта торговли экспертами я ТП и СЛ не люблю. Если торговая система построена правильно, то её собственные выходы из сделок будут эффективнее чем выход по тп и сл.

Оптимальные значения СЛ и ТП меняются со временем, тут нету стабильного константного значения. Можно найти какие-то тп и сл которые улучшат эффективность торговой системы на определённом участке, но в таком случае за пределами этого участка эффективность стратегии упадёт. СЛ лучше не двигать, а держать на расстоянии "что-то пошло не так", и вообще перестать торговать если цена достигнет сл, для анализа ошибок и оптимизации торговой стратегии. 

Но таки есть какие-то хитрые самооптмизирующиеся советники, которые используют TP. Я так понимаю что нужно закладывать константный TP уже в саму обучающую выборку. Например в моём случае результат обучения модели 0/1 - цена упала/выросла за следующий бар. Но, если цена сначала выросла и достигла уровня TP, затем к концу бара упала ниже начальной - в обучающую выборку нужно ставить результат "1" а не "0" (ибо сделка закроется с профитом по тп, и до конца бара больше торговли не будет). ТП обычно небольшой, меньше 50 пунктов (5 пипс на четырёхзнаке). СЛ - больше в десятки раз, только на случай "всё пошло не так". TP для фронттеста или торговли оптимизировать нельзя, использовать только тот что был использован при создании обучающей выборки. Такие успешные стратегии я реально видел, я думаю в этом направлении можно копать.

 
Dr.Trader:

Из опыта торговли экспертами я ТП и СЛ не люблю. Если торговая система построена правильно, то её собственные выходы из сделок будут эффективнее чем выход по тп и сл.


А ее собственные выходы как формулируются? По времени только?

 

Если вы говорите, что закрывать через час, но если внутри часа пробит ТП, то это будет исход 1, значит уже используются сложные условия на закрытие.

 

Про ТП 5 пунтов, а СЛ в десятки раз больше - как вариант, но такой ТП будет съедать прибыль. 

 

Я с вами на этой и прошлой неделе разделен часовыми поясами, поэтому не получается живого диалго. В Калифорнии по работе сусю..

 

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

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

 В тестере МТ я оптимизирую на основе баланса и фактора восстановления. В R я оптимизирую точность угадывания направлений или предсказания ценовых разниц. Это разные вещи, как ни крути.

Может быть попытаться в R написать свою функцию потерь для метода обучения, где будет максимизироваться профит, например. Эту функцию можно подставить в некоторые методы обучения. 

 
Alexey Burnakov:

Я с вами на этой и прошлой неделе разделен часовыми поясами, поэтому не получается живого диалго. В Калифорнии по работе сусю..

 

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

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

 В тестере МТ я оптимизирую на основе баланса и фактора восстановления. В R я оптимизирую точность угадывания направлений или предсказания ценовых разниц. Это разные вещи, как ни крути.

Может быть попытаться в R написать свою функцию потерь для метода обучения, где будет максимизироваться профит, например. Эту функцию можно подставить в некоторые методы обучения. 

В последнее время я реализую следующий план.

Взял свой старый трендовый  советник на индикаторах. Советник полноценный, торгует на реале.

Далее.

Ищу в нем недостатки и эти недостатки пытаюсь уменьшить с помощью  R. 

Например.

Генеральное направление беру со старшего бара. Но при внимательном рассмотрении по времени имеется чудовищное запаздывание в терминах младших баров особенно. Так если это D1, а торгую на М5, то получается, что за направление я беру чуть ли не позавчерашние данные. Даже предсказание на один шаг вперед для D1 с ошибкой в 30%  радикально улучшило доходность советника, а главное повысило уверенность, что не сольет.

Может быть такой путь - предсказание в R некоторых элементов готового, пусть плохого советника с целью его модернизации?

Как Вам такая идея? 

 

Недавно писал статью для smart-lab. Слабоватое сообщество, но кое-что полезное получил:

 

http://smart-lab.ru/search/topics/?q=%D0%B4%D0%BB%D1%8F+%D0%BB%D1%8E%D0%B1%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9+fx 

 
СанСаныч Фоменко:

В последнее время я реализую следующий план.

Взял свой старый трендовый  советник на индикаторах. Советник полноценный, торгует на реале.

Далее.

Ищу в нем недостатки и эти недостатки пытаюсь уменьшить с помощью  R. 

Например.

Генеральное направление беру со старшего бара. Но при внимательном рассмотрении по времени имеется чудовищное запаздывание в терминах младших баров особенно. Так если это D1, а торгую на М5, то получается, что за направление я беру чуть ли не позавчерашние данные. Даже предсказание на один шаг вперед для D1 с ошибкой в 30%  радикально улучшило доходность советника, а главное повысило уверенность, что не сольет.

Может быть такой путь - предсказание в R некоторых элементов готового, пусть плохого советника с целью его модернизации?

Как Вам такая идея? 

Идея интересная. у меня тоже есть советники работающие. Может быть я подумаю, как их обновить. Но мне непонятно что именно надо улучшать? Чему нужно обучать машину?

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

То есть, не совсем понятно, что именно вы будете делать. 

 
Alexey Burnakov:

Идея интересная. у меня тоже есть советники работающие. Может быть я подумаю, как их обновить. Но мне непонятно что именно надо улучшать? Чему нужно обучать машину?

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

То есть, не совсем понятно, что именно вы будете делать. 

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

0,7*0,99=0,693

а это ниже чем у систем по отдельности.

Аминь. Лучше стараться улучшать исходную систему без "контролирующих".