SVS696 Опубликовано 22 августа, 2017 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 22 августа, 2017 (изменено) Нашел на mql5 codebase, вижу огромные перспективы, если удастся довести хотя бы до уровня сигналов сезонности, то можно считать победой.Название Индикатора: BPNN PredictorСайт продажи: https://www.mql5.com/ru/code/9002Автор: gpwrДоп. Инфо:Вкратце о теории нейронных сетей:нейронные сети — регулируемая модель, в которой выход — это функция входа. Она состоит из нескольких уровней:входной уровень, который содержит входные данные;скрытый уровень, содержащий узлы обработки, которые и называются нейронамивыходной уровень, состоящий из одного или нескольких нейронов, выходные данные которых являются выходными данными всей сети.Все узлы смежных уровней соединены между собой. Эти соединения называются синапсами. Каждый синапс имеет назначенный коэффициент, по которому данные, передающиеся через синапс, умножаются. Этот коэффициент называется весовым (w[j][k]). В нейронной сети прямого распространения (Feed-Forward Neural Network, FFNN) данные распространяются от входов к выходам. Здесь пример FFNN с одним входным слоем, одним выходным и двумя скрытыми слоями.Топология FFNN часто сокращается следующим образом: - - -...- . Сеть, изображенная выше, может быть обозначена как 4-3-3-1.Данные обрабатываются нейронами в два этапа, соответственно обозначенные на рисунке знаками суммирования и ступеньки.[list type=decimal]Все входные параметры умножаются на связанные с ними весами и суммируются. Итоговые суммы обрабатываются функцией активации нейронов, чей выходной параметр и есть выходной параметр нейрона. Это функция активации нейронов, которая дает нелинейность в модели нейронной сети. Без этого нет смысла в скрытых слоях, а сама нейронная сеть становится просто линейной авторегрессионной моделью. Вложенные файлы библиотек функций нейронных сетей позволяют выбрать одну из трех функций активации:сигмоид sigm(x)=1/(1+exp(-x)) (#0) гиперболический тангенс tanh(x)=(1-exp(-2x))/(1+exp(-2x)) (#1) рациональная функция x/(1+|x|) (#2) Порог активации этих функций x=0. Этот порог может быть сдвинут вдоль оси X благодаря дополнительным входным параметрам каждого нейрона, так называемому входному смещению, которое также имеет собственный вес.Количество входов, выходов, скрытых слоев, нейронов в них и значения весов синапсов полностью описывает FFNN, то есть, нелинейную модель, которую она создает. Чтобы найти значения весов, сеть необходимо обучить. Во время обучения с учителем в сеть поступают несколько наборов прошлых входных параметров и соответствующие им ожидаемые выходы. Веса оптимизированы для достижения наименьшей погрешности между ожидаемыми выходами и теми, что дала сеть. Простейший метод оптимизации весов - обратное распространение ошибок, которое представляет собой метод градиентного спуска. Прилагаемая сюда обучающая функция Train() использует вариант этого метода, называемый Improved Resilient back-Propagation Plus (iRProp+). Метод описан здесь:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.1332Основной недостаток градиентных методов оптимизации на основе градиентов — в том, что они часто находят локальный минимум. ДЛя таких неупорядоченных рядов, как, например, ценовые, поверхность ошибок обучения имеет очень сложную форму с большим количеством локальных минимумов. Для таких данных лучше подходит такой метод обучения, как генетический алгоритм.Прилагаемые файлы:BPNN.dll - файл библиотеки BPNN.zip - архив всех файлов, необходимых, чтобы скомпилировать BPNN.dll в C++ BPNN Predictor.mq4 - индикатор, прогнозирующий будущие цены открытия BPNN Predictor with Smoothing.mq4 - индикатор, прогнозирующий сглаженные цены открытия Файл BPNN.cpp содержит две функции: Train() и Test(). Train() используется для обучения сети на основе полученных входных данных и ожидаемых выходных значений. Test() используется для вычисления выходов сети с использованием оптимизированных весов, найденных посредством функции Train().Здесь список входных (зеленые) и выходных (синие) параметров Train():double inpTrain[] - входные обучающие данные (одномерный массив, содержащий двухмерные данные, первыми идут те, что получены ранее)double outTarget[] - выходные ожидаемые данные для обучения (двухмерные данные в одномерном массиве, первыми идут старейшие)double outTrain[] - одномерный массив выходных данных, хранящий выходные данные сети, полученные в процессе обученияint ntr - # наборов обученияint UEW - Use Ext. Веса для инициализации (1=use extInitWt, 0=use rnd)double extInitWt[] - одномерный массив входных параметров для хранения трехмерного массива внешних начальных весов double trainedWt[] - Одномерный массив выходов для хранения трехмерного массива весов, полученных в процессе обучения int numLayers - # слоев, включая входной, скрытые и выходной int lSz[] - # нейронов в слоях. lSz[0] # входов сетиint AFT - тип функции активации нейроновint OAF - 1 — разрешенная функция активации для выходного слоя i; 0 — запрещеннаяint nep - Максимальное # эпох обученияdouble maxMSE - Максимальное MSE; обучение останавливается в тот момент, когда однократно достигается maxMSE.Здесь список входных (зеленых) и выходных (синих) параметров для функции Test():double inpTest[] - входные параметры теста (двухмерные данные в одномерном массиве, старейшие идут вначале)double outTest[] - Одномерный массив выходных параметров для сохранения выходных данных сети после обучения (старейшие идут вначале)int ntt - # наборов в тестированииdouble extInitWt[] - одномерный массив входов для сохранения трехмерного массива внешних начальных весовint numLayers - # слоев, включая входной, скрытый и выходной int lSz[] - # нейронов в слоях. lSz[0] # входов сетиint AFT - Тип функции активации нейронов (0:sigm, 1:tanh, 2:x/(1+x))int OAF - 1 — разрешенная функция активации для выходного слоя; 0 — запрещеннаяОт того, используется ли функция активации в выходном слое (значение параметра OAF), зависит характер выходов. Если выходы бинарные, что часто встречается в случае решения проблем классификации, то функция активации должна использоваться в выходном слое (OAF=1). Пожалуйста, обратите внимание на то, что функция активации #0 (сигмоид) имеет уровни насыщения 0 и 1, а функции активации #1 and #2 — уровни насыщения -1 и 1. Если в выходах сети будут содержаться ценовые прогнозы, то в этом слое функция активации не нужна (OAF=0).Описание: BPNN Predictor.mq4 - прогнозы будущей цены открытия. Входы сети — относительные изменения цены:x=Open[test_bar]/Open[test_bar+delay]-1.0где замедление рассчитывается как число Фибоначчи (1,2,3,5,8,13,21..). Выход сети - спрогнозированное следующее относительное изменение цены. Функция активации в выходном слое выключена.Входные параметры индикатора:extern int lastBar - последний бар в прошлых данныхextern int futBars - # будущих баров для прогнозаextern int numLayers - # слоев, включая входной, скрытый и выходной(2..6)extern int numInputs - # входовextern int numNeurons1 - # нейронов в первом скрытом или выходном слое extern int numNeurons2 - # нейронов во втором скрытом или выходном слое extern int numNeurons3 - # нейронов в третьем скрытом или выходном слое extern int numNeurons4 - # нейронов в четвертом скрытом или выходном слое extern int numNeurons5 - # нейронов в пятом скрытом или выходном слое extern int ntr - # наборов обученияextern int nep - максимальное # эпохextern int maxMSEpwr - наборы maxMSE=10^maxMSEpwr; обучение останавливается extern int AFT - тип функции активации (0:sigm, 1:tanh, 2:x/(1+x))Индикатор строит три кривых на графике:красная - прогноз будущей цены черная - прошлые цены открытия, которые во время обучения были использованы как ожидаемые выходы сети голубая - выходы сети, полученные при обучении на заданных входных данных BPNN Predictor with Smoothing.mq4 - спрогнозированные сглаженные будущие цены открытия Используется EMA-сглаживание с периодом smoothPer.Общие настройки:[list type=decimal]Скопируйте приложенный файл BPNN.DLL в C:\Program Files\MetaTrader 4\experts\libraries В терминале: Tools - Options - Expert Advisors - Allow DLL imports Также вы можете скомпилировать ваш собственный файл DLL с использованием исходного кода в BPNN.zip.Рекомендации:Сеть с тремя слоями (numLayers=3: один входной, один скрытый и один выходной) обычно достаточна в подавляющем большинстве случаев. В соответствии с теоремой Цыбенко, сеть с одним скрытым слоем способна аппроксимировать любую непрерывную многомерную функцию с любой желаемой степенью точности. Сеть с двумя скрытыми слоями способна аппроксимировать любую дискретную многомерную функцию. Оптимальное количество нейронов в скрытом слое может быть найдено методом проб и ошибок. Следующие "правила большого пальца" можно найти в литературе: # скрытых нейронов = (# входов + # выходов)/2, или SQRT(# входов * # выходов). Отчет об ошибках обучения демонстрируется в специальном окне эксперта. Для генерализации количество обучающих наборов должно быть в 2 - раз больше общей цифры весов в сети. К примеру, по умолчанию BPNN Predictor.mq4 использует сеть с параметрами 12-5-1. Общая сумма весов составляет (12+1)*5+6=71. Поэтому число обучающих наборов должно быть как минимум 142. Общее представление о генерализации и "меморизации" (переобучении) демонстрируется на графике ниже. Входные данные в сети должны быть преобразованы в стационарные. Цены на Forex - не стационарные, а динамические. Также рекомендуется нормализовать входные параметры в диапазон -1 ... +1. На графике ниже показана линейная функция y=b*x (x-вход, y-выход), выходы которой искажены шумом. Этот добавленный шум приводит к тому, что функция измерения выходов (черные точки) отклоняется от прямой линии. Функция y=f(x) может быть модифицирована добавлением данных из нейронной сети. Сеть с большим количеством весов может исключить ошибки в измерении данных. Ее поведение показано на графике как красная кривая, проходящая через все черные точки. Тем не менее, эта красная линия не имеет ничего общего с оригинальной линейной функцией (зеленая линия). Когда эта нейронная сеть используется для прогнозирования будущих значений y(x), это приводит к крупным ошибкам из-за "рандомности" добавленного шума.В ответ на публикацию этих кодов, автор обращает к вам небольшую просьбу. Если вы способны создать прибыльную торговую систему на основе этого кода, пожалуйста поделитесь со мной своей идеей на электронный адрес vlad1004@yahoo.com.Удачи!Скачать:Добавлено: 22-08-2017 12:59:11 :-? При перезапуске индюк выдает совершенно разные прогнозы (стоковые параметры) это тики так влияют или что? :-?Добавлено: 22-08-2017 13:03:41Индюк со сглаживанием чуть стабильнее работает, но тоже при полном перезапуске выдает разные результатыДобавлено: 22-08-2017 13:10:24Запустил несколько экземпляров BPNN Predictor with Smoothing и вот что я получил...Добавлено: 22-08-2017 13:16:47на h1 почти без разбросов :-? 8-}Добавлено: 22-08-2017 13:35:17от H1 и ниже вообщем без разбросовBPNN.zip Изменено 25 августа, 2017 пользователем Pavel888 12 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Conky Опубликовано 23 августа, 2017 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 23 августа, 2017 (изменено) Что существуют формулы нейронных сетей это без порнно хорошие вещи.Грацыяс :d. Изменено 2 сентября, 2017 пользователем Conky Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dioxin vTrend Опубликовано 8 октября, 2017 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 8 октября, 2017 на рынке все намного проще :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
zombie_knt Опубликовано 19 января, 2019 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 19 января, 2019 а LSTM есть? ну или что-то из группы RNN Ссылка на сообщение Поделиться на другие сайты More sharing options...
oblacko Опубликовано 27 января, 2019 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 27 января, 2019 У меня не работает, терминал просто вырубается при скидывании на график Ссылка на сообщение Поделиться на другие сайты More sharing options...
zombie_knt Опубликовано 28 января, 2019 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 28 января, 2019 для всех изучающих эту тему, могу сказать только , что ценовые данные предварительно нужно прогнать через регрессию дерева принятия решений(AdaBoostRegression(DecissionTree)), по параметрам не подскажу (на данный момент все компы сдохли, слава электрикам!!!), ну а затем уже изгаляться или с обычными нейронами, ну а лучше специально предназначенными для временных рядов рекуррентными сетями типа SimpleRNN, LSTM, GRU. На Кагле только что закончили конкурс с предсказаниями использую новостную ленту, в претендентах на победу модель на LSTM с качеством 0.59(на некоторых акциях до 0.75) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Art_Best Опубликовано 8 июня, 2021 Поделиться [Индикатор] Ценовой прогноз с использованием нейронных … Опубликовано 8 июня, 2021 Установил на график, DLL поместил в Libraries, но изображение не появляется. Что делать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти