Нейросети и с чем их употреблять (RomFil)

Верите ли Вы в возможности практического применение нейросетей в трейдинге


  • Всего проголосовало
    50

funny59

Гуру форума
Доброе время суток уважаемые форумчане!

Ранее в одной из веток взял на себя обязательства по описанию технологии нейросетей и их возможном применении в трейдинге – как на форексе, так в любой другой области.

Ввиду того, что писатель из меня ещё тот и я самоучка, поэтому применяемая мной в дальнейшем терминология – это так сказать мой сленг и сильно за это прошу не «пинать». Своё повествование буду вести не о внутреннем устройстве сетей, т.е. не о перцептроне и как там всё внутри (входные функции, приведение типов, масштабирование, нейроны, синапсы и пр.), а так сказать на более высоком уровне.

Для описания буду использовать Matlab, т.к. он у меня есть и я им владею в определённой степени. В принципе честно говоря не важен программа, важен сам принцип … :)

Итак, что такое нейросети? Как многие говорят – это чёрный ящик, у которого может быть N-ое количество входов и N-ое количество выходов. Многих я конечно могу расстроить, но по факту это так и есть. Но если абстрагироваться от общепринятых ярлыков я скажу, что большинство нейросетей это простые математические модель (ну иногда не простые, а динамические, нелинейные и пр.).

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

Что лично я понимаю под математической моделью? Простым языком даже трудно описать, но я попробую это сделать на примере. Возьмёт график (см. скрин ниже) – это два синуса 13Гц и 42Гц с разными амплитудами и начальными фазами с постоянной составляющей по уровню.
1586464171817.png
Формула что-то типа Y=A0+A1*SIN(F1+Q1)+A2*SIN(F2+Q2), но представим, что мы не знаем этих переменных, по которым построен сигнал. Но нам очень-очень надо сгенерировать точно такой же сигнал. Это можно сделать с помощью нейросети, которая после обучения будет генерировать этот сигнал.

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

Чтобы сгенерировать такой сигнал нам нужно определиться со входами. По каждую задачу разные подходы, но для нашей пусть это будет 10 отсчётов графика, а выходом будет следующее значение. Что мы имеем в итоге будет N-ое количество векторов входов и один выход следующего значения.

Далее формируем внутренности чёрного ящика – в нашем примере достаточно указать количество нейронов нейросети. Поскольку я использую Matlab и у меня есть определённый опыт, то для решения данной задачи буду использовать сеть fitnet (прочитайте про неё самостоятельно).

Получается, что на вход чёрного ящика мы подаём вектор из 10-ти значений, а выход одно значение. В целом ничего больше настраивать в матлабе не надо. Нейросеть получилась вот такая.
1586464190893.png
Внутри этого чёрного ящика обыкновенные математическая формула! Формула зависит от конкретного типа нейросети, а также количестве нейронов и прочих первичных настроек.

Далее проводится обучение нейросети. Происходит это методом подстройки коэффициентов формулы в зависимости от входов и выхода – в matlab есть несколько разных методов.

В результате данный конкретный пример с имеющимся сигналом за 1000 итераций обучения (подстройки математической формулы) или 12 секунд довёл точность до ошибки порядка 10-6, а то и лучше. Теперь с помощью обученной нейросети можем генерировать данный график:
1586464213635.png
Данный график построен при ошибке нейросети 4.4*10-7. Тоже, но с ошибкой 9,8*10-7 имеет совершенно другую форму графика:
1586464228111.png
Ну как Вам результаты??? Разброс на втором графике обусловлен нарастающей ошибкой, т.к. на вход нейросети мы подали полученные ею же данные. Входные данные начали со временем давать ошибку, которая в итоге привела к такому результату.

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

Как это применить в трейдинге? Да очень просто! Прогнозируя любые индикаторы или саму цену. Горизонт прогноза и его точность очень сильно зависит от выбранных входов и выходов. Универсального подхода к этому нет, а если бы был, то форекс бы уже разорили …

Всё описанное выше это затравка, т.к. методом проб и ошибок как мне кажется я смог создать данный «прибор», о котором в определённой степени буду рассказывать далее. Конечно все секреты не выдам, но направление, как и что подскажу.

Вот скрин прибора …
1586464540855.png
Сиреневые точки - это прогноз бирюзовой линии, только для обучения она сдвинута на пять баров вперёд, т.е. на выход нейросети при обучении подавалась бирюзовая линия, которая появляется по факту только через пять баров. Сиреневая линия это средняя от точек прогноза. Чуть позже беру на себя обязательства по записи видео работы «прибора».



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



С уважением, RomFil
 
Последнее редактирование модератором:

megapont

VIP-участник
Сиреневые точки - это прогноз бирюзовой линии, только для обучения она сдвинута на пять баров вперёд

Все это конечно интересно, но, что там с индикатором предсказывающим что будет через 5 баров? 😉
Будет?
 

funny59

Гуру форума
Все это конечно интересно, но, что там с индикатором предсказывающим что будет через 5 баров? 😉
Будет?
Приветствую! Честно говоря не понял вопроса ... :)
Будет? - это выложу ли я данного индюшка в открытый доступ? Скорее всего нет.
Цель данной ветки - это описание возможностей нейросетей и их практическое применение. Возможно, со временем, если у меня появится желание, либо необходимость, то возможно предложу, но это будет другая тема и ветка.
Здесь чуть позже (как скоро не скажу) выложу урезанную версию для реального опробования.
 

funny59

Гуру форума
Теперь продолжу про нейросети ... :) Сразу оговорюсь отвечать и писать в данной ветке буду по мере возможностей. В отличии от большинства я усиленно тружусь на работе ... :( У меня нет нерабочих дней ...
Выше написано про нейросеть fitnet - это нейросеть неплохо сопоставляет входы с выходами, т.е. она является сетью прямого распространения. Данная нейросеть хорошо работает над такими данными когда на выходе нужно численное значение, а что делать если нам надо распознать образ (участок на графике движения цены) или какой-либо пАттерн?
Для таких целей есть другие нейросети - самый простой пример это patternnet из того же matlab (конечно там есть более совершенные сети для кластеризации различных данных и более современные - на пример deepnet на автоэнкодерах ... :) но я ведь суть пытаюсь рассказать ... ).
Данные нейросети по моему мнению уже относятся к разряду нейросетей принятия решения, т.е. на выходе таких типов нейросетей можно получить сигнал из разряда - "бай", "селл", "возможно бай", "точно бай" и т.д.
Здесь используются точно такая же математическая модель - на вход нейросети может быть подано к примеру 200-300 значений различных индикаторов, а на выходом будет являться значения от 1 до 5. Это ничто иное как кластеризация, т.е. отнесение входного вектора к одному из заранее известных выходов.
Тут наверное некоторые могут сказать, так ведь есть такой инструмент как Карты Кохонена, либо более совершенный инструмент как SOINN (Self-Organizing Incremental Neural Network - почитайте про это сами) - и то и другое это разновидность нейросетей для разделения входных векторов на кластеры самостоятельно без учителя (что это также сами почитайте в интеренете). До этих типов нейросетей тоже можем дойти - это так сказать одна из составляющих частей искусственного интеллекта ...
Что-то в сторону ушёл от кластеризации ... :)

А может вообще зря всё это рассказываю??? Может совсем не требуется это народу ??? Может зря распинаюсь ... :)
 

funny59

Гуру форума
Решил про кластеризацию не писать ... :(
Вернусь к практическому применению fitnet.
Собственно в первом посте писал про возможность продолжения графика. Теперь как это использовать для предсказания.
Если посмотреть график любого инструмента - для наглядности возьмём золото (не знаю почему, но это тут я вспомнил кукурузника ... :) - он всё "кричал" что граали мимо проходят ... :)). Золото не получилось, что-то котировок нет со вчера в альпах ... :( Праздник однако сегодня ... Ну тогда фунт, тайм М1... :) На график бросим индюшок TEMA (в принципе можно и любой другой, но в последнее время я пришёл к выводу, что этот самый быстрый), который бы нам показывал значения индикатора М5 на тайме М1. Получим следующее:
1586498646125.png
Кто следит за моими перлами, тот читал наверное ветку https://forexsystemsru.com/threads/ochen-interesnaja-anomalija.88770/ где собственно я описал одну интересную вещь - если предсказать значение мувинга (конкретный тип и параметры нужно определить в процессе тонкой настройки) всего на один бар, то торговля становится прибыльной.
Так вот на скрине выше нам надо всего предсказать какого будет значение индикатора на 5 баров в будущем - почему 5? ДА потому что у нас тайм М1, а индикатор показывает значения на М5. Т.е. в начале появления "ступеньки" неизвестно какого будет её значение в конце.
А давайте накидаем на график того же индикатора, но уже чтобы он показывал нам значения с М1. Возьмём три индикатора с периодами 3, 6, 9. Забыл ранее указать, что индикатор на М5 имеет период 9. Тудаже ещё пару индикаторов с М% с периодами 3 и 6.
1586499216231.png
Все добавленные индюшки сделаны тонкими линиями.
Так вот со всей ответственностью я заявляю, что по параметрам индикаторов с более меньших периодов и меньших таймфреймов можно с определённой точностью предсказать будущее значение толстой линии.
1586499386327.png
Тут на скрине это толстая линия (это индикатор Jurik'a) сглажена простой линейной интерполяцией (бирюзовый цвет). А вот точки это прогноз.
Конечно спрогнозировать резкие скачки цены не реально, но когда цена планомерно двигается, в том числе и так называемое случайное блуждание поддаётся прогнозу.
Скажу сразу, что одних муввингов не достаточно, но тут надо экспериментировать, к примеру, закинуть во входные вектора значения осцилляторов.

Ну как-то так ... :) На этом пока всё. Поработать надо ... :)

С уважением, RomFil
 
Последнее редактирование:

funny59

Гуру форума
О!!! Ещё одна мысль "умная" пришла ... Это определение что флэт настал ... :)
Это если точки сиреневые в течение к примеру 4-5 баров с определённой точностью совпали с целевой, то это флэт! Данный подход позволит убедиться что это флэт в его начале, а не по факту его формирования ... :)
1586500974505.png
P.S. через 5 минут ... :)
1586501317966.png
 
Последнее редактирование:

funny59

Гуру форума
Ещё интересует мнение форумчан по вопросу голосования вверху начала темы ... :)
 

funny59

Гуру форума
О!!! Ещё одна мысль "умная" пришла ... Это определение что флэт настал ... :)
Это если точки сиреневые в течение к примеру 4-5 баров с определённой точностью совпали с целевой, то это флэт! Данный подход позволит убедиться что это флэт в его начале, а не по факту его формирования ... :)
Посмотреть вложение 374746
P.S. через 5 минут ... :)
Посмотреть вложение 374749
А вот и подтверждение ...
1586501627427.png
Это один и тот же участок, практически онлайн. :)
 

AlexeNP

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

funny59

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

хм... математическая модель должна быть максимально простой...
но не проще
Приветствую! Вот правильно сказано - "... хитросделанное усреднение ...". Это как раз я и хотел показать и от части с fitnet продемонстрировал выше, только никак слова правильные подобрать не смог. "Хитросделанность" в данном случае состоит в том, что обучение происходит на исходных данных, а конкретно выходные значения, которых при получения прогноза ещё по факту нет, они (выходные значения) будут посчитаны только через 5-8 баров (последние опыты показали, что ошибка прогноза на горизонт в 8 баров находится в пределах допустимых значений). В этом то и есть всё преимущество предлагаемого подхода.

Подобным подходом можно "хитросделано усреднять" и пытаться прогнозировать сколько угодно разных индикаторов, к примеру, штатные индюки WPR, CCI, Stoch, RSI и пр.

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

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

Самой простой системой принятия решений (конкретно в matlab) является дерево решений fitctree и fitrtree . Я к сожалению данную тему только начал изучать и добрался только до бинарных деревьев fitctree - это я так их называю, т.к. на выходе на численные значения, а либо -1, либо 0 , либо 1.

С уважением, RomFil
 

funny59

Гуру форума
Доброе время суток уважаемые коллеги!

Вот после бездарно проведённой рабочей недели я решил Вам сделать небольшой подарок. Сейчас всем трудно, особенно родителям учеников с этой удалённой учёбой … :):):)
Так что вдруг принесу немного радости … :)

Итак, что же это? Очень интересный индикатор … :) Он приложен к данному сообщению.

Правда это ещё так сказать сырец требующий доработки – всякие там проверки надо сделать на предмет «защиты от дурака», «красоту» навести и прочее. С Вами делюсь исключительно по причине заинтересовать и показать, что нейросети рулят … :)

Для работы индикатора нужно следующее:
  • Matlab R2018a
  • Немного времени и главное желание попробовать.
Теперь порядок запуска:

1) Для запуска индикатора надо сначала установить Matlab с Deep Learning Toolbox. Либо качайте его самостоятельно и устанавливаете, либо скачиваете отсюда -https://yadi.sk/d/XsG4Xi-ngT-r2A уже урезанную версию (скачанный архив надо просто разархивировать куда вздумается). Далее надо зарегистрировать установленный или скачанный matlab как COM объект. Для этого надо запустить CMD от имени администратора и перейдя в папку …\\R2018a\bin\ выполнить следующую команду:
1587119343217.png
На этом настройка Matlab’а завершена.

2) Теперь берём индюшок IND_RF768_T2ExS2E_M1 и бросаем его в папку со всеми индикаторами. Далее закидываем его на график. В принципе можно на любой, но для показа работы индюшка я ограничил его только таймом М1 – как известно на нём всё проверяется и если тут работает, то на любом другом будет работать и подавно … :)
Инструмент можно любой, но лучше евру или кабеля. На золоте у меня с первого раза не завелось – надо допиливать ещё. В итоге должно получиться что-то такое:
1587119376829.png

3) Далее берём файлик server_RF768.exe и кидаем его в папку …\MQL4\Files. Создаём ярлык к этому запускаемому файлу. Открываем свойства созданного ярлыка и в конце строки дописываем пару (выделил красным квадратом) и сохраняем изменения.
1587119401062.png
4) Теперь запускаем программу с помощью ярлыка. Забыл сказать, что для работы программульки надо .NET Framework 4.6.1. Запуск может быть продолжительным, т.к. при запускается ещё matlab. В результате должно открыться два окна:
1587119464697.png
Окно 1. В названии окна должна быть указан инструмент, который указали в ярлыке.
1587119482484.png
Окно 2.

Второе окно можно просто свернуть – оно не понадобиться. Пока оставил его визуализацию лишь для того , чтобы проконтролировать, что matlab запустился.
Основная программка – это первое окно. Это просто приложение, проверяющее файлы в папке …\MQL4\Files и отправляющее команды в matlab.

5) После первого запуска будут активны только кнопки TRAIN* и CLOSE. Для использования индикатора нужно провести обучение нейросетей.
Нажав кнопку “TRAIN T2E” через некоторое время должно выскочить вот такое окно:
1587119519304.png
Это начнётся обучение нейросети T2E. Надо дождаться окончания обучения - время обучения зависит от мощности ПК. После окончания обучения данное окно автоматически закроется и в приложении станет активна кнопка «START PREDICT T2E». Аналогично надо нажать кнопку “TRAIN S2E” для обучения нейросети S2E.

6) Надо руками проконтролировать обучение обоих нейросетей - в папке …\MQL4\Files должны появиться следующие файлы: NN_T2E_GBPUSD1.mat и NN_S2E_GBPUSD1.mat, где GBPUSD1 – это название пары где обучалось, размер фалов должен быть в районе 200кБ. Далее нажимаем кнопки «START PREDICT T2E» и «START PREDICT S2E». Нажатие кнопок подтверждается изменением надписей на «STOP PREDICT T2E» и «STOP PREDICT S2E» - это запуск работы предсказателя. После появления нового бара, либо нового тика (тут как повезёт, т.к. продукт ещё сырой … :) :) :)) на графике должны появиться вот такие точки:
1587119616807.png

7) Сиренивенькие точки это прогноз значения ступеньки в её конце. Как их интерпретировать – это дальнейшая работа, надо полученные результаты ещё проанализировать. Рисует всё это или нет не знаю! Надо наблюдать, а лучше всего скрины даже делать для анализа, но вроде как перспективно нерисующе. Нижние точки иногда прыгают, но это только визуализация хромает, внутри значения точные.

8) Завершение работы программульки лучше всего осуществлять кнопкой «CLOSE», т.к. если крестиком, то в фоне Matlab останется запущенным.

Ну на этом вроде всё. При запуске по любому будут вопросы – задавайте попробую отвечать.

С уважением, RomFil
 

Вложения

  • server_RF768.zip
    6,9 КБ · Просмотры: 94
  • IND_RF768_T2ExS2E_M1.zip
    42,2 КБ · Просмотры: 111
Последнее редактирование модератором:

funny59

Гуру форума
Этим индюшком, я хотел показать, что предсказание на один бар (4/5 бара если быть точнее) вполне реально. Прогноз на первом баре М1 ступеньки не всегда верен, вернее даже всегда не правда - это некоторая проблема переходного процесса при начале нового бара. Возможно как-то в будущем это можно исправить, но мне кажется и так нормально.
 
Последнее редактирование:

funny59

Гуру форума
За выходные попробую советника по данной теме запилить, возможно на мониторинг поставлю и будем все вместе наблюдать ... :):):)
 

Iryna78

Активный участник
Тема очень актуальная, спасибо! Сеть самообучающаяся? Или с учителем? Карты Кохонена сейчас пытаемся применить, экспериментируем... Пишите, будет интересно прочитать, что у вас получается. Возможно и свой индюк когда-то покажу на нейросети. Пишу на LabView. Результаты прогнозирования интересные получаются. Использую еще как входной вектор полином 3 и 5 порядков. Вначале сеть самообучается, а потом с учителем...
 

AlexeNP

Гуру форума
Тема очень актуальная, спасибо! Сеть самообучающаяся? Или с учителем? Карты Кохонена сейчас пытаемся применить, экспериментируем... Пишите, будет интересно прочитать, что у вас получается. Возможно и свой индюк когда-то покажу на нейросети. Пишу на LabView. Результаты прогнозирования интересные получаются. Использую еще как входной вектор полином 3 и 5 порядков. Вначале сеть самообучается, а потом с учителем...
а зачем полиномы, да еще в таких степенях?
 

AlexeNP

Гуру форума
Полиномы мне нравятся как прогноз свой строят... Но у каждого свои замороки. Я немного экспериментирую с разной "математикой";)
самый удачный пример прогнозирования, который я видел - это у в книге Ивахненко "Кибернетические предсказывающие устройства"... он там высоту волн прогнозировал, с помощью нейросети... и тоже использовал полином 3 степени
 

Iryna78

Активный участник
самый удачный пример прогнозирования, который я видел - это у в книге Ивахненко "Кибернетические предсказывающие устройства"... он там высоту волн прогнозировал, с помощью нейросети... и тоже использовал полином 3 степени
третья степень показывает близкий прогноз, пятая - немного дальше. Чем острее угол, тем точнее прогноз. Пока всё в стадии эксперимента, подробности когда-то опишу, если будет время...
 
Верх