
Эксперименты с нейросетями (Часть 6): Перцептрон как самодостаточное средство предсказания цены
Введение
Добрый день, уважаемые пользователи сообщества MQL5. Одним из методов машинного обучения, который может быть использован для прогнозирования цен на рынке, является перцептрон. Использование перцептрона может быть полезным инструментом для трейдеров и инвесторов, которые стремятся получить дополнительную информацию о будущих ценах на рынке.
Общие понятия
Перцептрон - это простая нейронная сеть, состоящая из одного или нескольких нейронов, которые могут принимать входные данные, обрабатывать их и выдавать выходные данные. Перцептрон был разработан Фрэнком Розенблаттом в 1957 году и с тех пор нашел широкое применение в различных областях, включая финансовый анализ и прогнозирование цен на бирже.
Перцептрон может быть использован для решения задач классификации и регрессии, включая прогнозирование цен. В простейшем случае перцептрон состоит из одного нейрона, который принимает несколько входных переменных и выдает один выходной сигнал. Например, для прогнозирования цены на рынке Forex можно использовать следующие входные данные: курс валюты, объем торгов, индекс потребительских цен и другие факторы. После обработки этих данных нейрон выдает выходной сигнал, который представляет собой прогноз курса валютной пары.
Принцип работы перцептрона
Перцептрон работает на основе принципа обучения с учителем. Это означает, что перцептрон тренируется на исторических данных, которые содержат информацию о ценах в прошлом, чтобы определить зависимости между различными факторами и ценами на рынке. Эти данные используются для настройки весов нейрона, которые определяют важность каждого входного фактора для прогнозирования биржевых цен.
Перцептрон может работать в режиме обучения и в режиме предсказания. В режиме обучения перцептрон принимает на вход исторические данные и реальные цены на рынке Foreх, а затем настраивает свои веса таким образом, чтобы минимизировать ошибку прогнозирования.
Преимущества использования перцептрона для прогнозирования цен на валютных рынках
- Использование перцептрона для прогнозирования цен на рынке Форекс имеет несколько преимуществ. Во-первых, перцептрон способен адаптироваться к изменениям на рынке и корректировать свои прогнозы в соответствии с новыми данными. Это делает его более эффективным, чем традиционные методы анализа данных, такие как статистический анализ и временные ряды, которые не всегда могут адаптироваться к изменениям на рынке.
- Во-вторых, перцептрон может работать с большим количеством входных факторов, что позволяет учитывать многие различные факторы, влияющие на цены. Это может привести к более точным прогнозам цен, чем традиционные методы анализа данных.
- В-третьих, перцептрон может быть обучен на больших объемах данных, что позволяет ему использовать множество исторических данных для обучения и прогнозирования цен.
Однако, использование перцептрона для прогнозирования цен также имеет некоторые недостатки. Во-первых, перцептрон может оказаться чувствительным к выбросам или ошибкам в данных, что может привести к неточным прогнозам цен. Во-вторых, для обучения перцептрона требуется большое количество исторических данных, и если исторические данные не являются достаточно репрезентативными для текущей ситуации на рынке, то прогнозы перцептрона могут быть неточными.
Кроме того, при использовании перцептрона для прогнозирования цен можно столкнуться с проблемой переобучения, когда перцептрон становится слишком чувствительным к историческим данным и не может адаптироваться к новым изменениям на рынке. Для борьбы с этой проблемой можно использовать различные техники регуляризации, такие как L1 и L2 регуляризация, которые помогают контролировать веса нейрона и предотвращать переобучение.
Перцептрон может быть использован в сочетании с другими методами прогнозирования, такими как авторегрессионная модель (ARIMA) или экспоненциальное сглаживание (Exponential Smoothing), чтобы получить более точные и надежные прогнозы. Например, можно использовать перцептрон для прогнозирования долгосрочной тенденции цены, а ARIMA или Exponential Smoothing для короткосрочных прогнозов. Необходимо иметь в виду, что исторические данные, используемые для обучения перцептрона, могут не соответствовать текущим рыночным условиям. В таких случаях результаты прогнозирования могут быть неточными. Поэтому необходимо регулярно обновлять модель, чтобы она могла адекватно отражать изменения на рынке.
Параметры перцептрона для оптимизации
Перцептрон - это один из самых простых видов нейронных сетей, который состоит из входного слоя, скрытых слоев и выходного слоя. Он может быть использован для решения различных задач, таких как классификация, регрессия или обработка изображений. Однако, чтобы перцептрон работал эффективно, необходимо правильно подобрать его параметры.
Параметры перцептрона - это значения, которые задают его структуру и поведение. Они включают в себя количество скрытых слоев, количество нейронов в каждом слое, функцию активации, скорость обучения и многие другие. Правильно настроенные параметры позволяют перцептрону получить наилучшие результаты.
Вот несколько параметров перцептрона, которые могут быть оптимизированы:
Количество скрытых слоев
Количество скрытых слоев определяет сложность модели. Если модель слишком простая, то она может не справиться с задачей, а если слишком сложная, то может произойти переобучение. Поэтому количество скрытых слоев следует выбирать оптимальным образом, исходя из задачи, которую нужно решить.
Количество нейронов в каждом слое
Количество нейронов в каждом слое также влияет на сложность модели. Большое количество нейронов может увеличить точность предсказаний, но при этом увеличит время обучения. Нужно выбирать количество нейронов, оптимальное для конкретной задачи.
Ниже приведу пример регулирования количество нейронов на входном, скрытом и выходном слоях. Используется библиотека NeuralNets:
int OnInit() { // задаем количество нейронов на входном, скрытом и выходном слоях int n_inputs = 2; int n_hidden = 3; int n_outputs = 1; // создаем объект перцептрона CNeuralNet ann; // добавляем слои ann.AddLayer(n_inputs); ann.AddLayer(n_hidden, CNeuralNet::TANH); ann.AddLayer(n_outputs, CNeuralNet::TANH); // задаем параметры обучения ann.SetLearningRate(0.1); ann.SetMomentum(0.9); ann.SetMaxEpochs(1000); ann.SetDesiredAccuracy(90); // создаем массивы для хранения входных данных и целевых значений double inputs[][2] = {{0,0}, {0,1}, {1,0}, {1,1}}; double targets[] = {0, 1, 1, 0}; // обучаем перцептрон ann.Train((double*)inputs, targets, 4); // тестируем перцептрон double output; ann.Compute((double*)inputs[0], output); Print("0 XOR 0 = ", output); ann.Compute((double*)inputs[1], output); Print("0 XOR 1 = ", output); ann.Compute((double*)inputs[2], output); Print("1 XOR 0 = ", output); ann.Compute((double*)inputs[3], output); Print("1 XOR 1 = ", output); }
В этом примере мы создаем перцептрон с двумя входными нейронами, тремя скрытыми нейронами и одним выходным нейроном. Мы также задаем параметры обучения, такие как скорость обучения, момент и максимальное количество эпох. Затем мы создаем массивы для хранения входных данных и целевых значений и обучаем перцептрон на этих данных. После тестирования перцептрона на четырех различных входных данных и выводим результаты на экран.
Функция активации
Функция активации определяет, каким образом нейрон должен реагировать на входные данные. Существует множество функций активации, таких как сигмоида, ReLU и тангенс гиперболический. Выбор функции активации также зависит от задачи, которую нужно решить.
Ниже приведу пример использования разных функций активации:
int OnInit() { // задаем количество нейронов на входном и выходном слоях int n_inputs = 2; int n_outputs = 1; // создаем объект перцептрона CNeuralNet ann; // добавляем слои ann.AddLayer(n_inputs); ann.AddLayer(3, CNeuralNet::TANH); ann.AddLayer(n_outputs, CNeuralNet::SIGMOID); // задаем параметры обучения ann.SetLearningRate(0.1); ann.SetMomentum(0.9); ann.SetMaxEpochs(1000); ann.SetDesiredAccuracy(90); // создаем массивы для хранения входных данных и целевых значений double inputs[][2] = {{0,0}, {0,1}, {1,0}, {1,1}}; double targets[] = {0, 1, 1, 0}; // обучаем перцептрон ann.Train((double*)inputs, targets, 4); // тестируем перцептрон double output; ann.Compute((double*)inputs[0], output); Print("0 XOR 0 = ", output); ann.Compute((double*)inputs[1], output); Print("0 XOR 1 = ", output); ann.Compute((double*)inputs[2], output); Print("1 XOR 0 = ", output); ann.Compute((double*)inputs[3], output); Print("1 XOR 1 = ", output); }
В этом примере мы добавляем скрытый слой из трех нейронов и выбираем функции активации "tanh" для скрытого слоя и "sigmoid" для выходного слоя.
Скорость обучения
Скорость обучения определяет, как быстро нейронная сеть будет менять свои веса. Слишком большая скорость обучения может привести к переполнению, а слишком маленькая может привести к слишком долгому процессу обучения. Нужно выбирать скорость обучения, которая оптимальна для конкретной задачи.
Регуляризация
Регуляризация - это метод, который используется для предотвращения переобучия. Она заключается в добавлении дополнительных членов в функцию ошибки, которые штрафуют модель за слишком большие веса. Регуляризация позволяет уменьшить разброс предсказаний и повысить обобщающую способность модели.
Инициализация весов
Инициализация весов - это начальное задание весов для каждого нейрона в перцептроне. Неправильно инициализированные веса могут привести к сходимости модели к локальному минимуму функции ошибки, а не к глобальному минимуму. Поэтому необходимо выбрать правильный метод инициализации весов.
Размер батча
Размер батча определяет, сколько примеров данных будет использоваться за одну итерацию обучения. Слишком маленький размер батча может замедлить процесс обучения, а слишком большой размер может привести к переполнению памяти. Нужно выбрать размер батча, оптимальный для конкретной задачи.
Оптимизатор
Оптимизатор - это алгоритм, который используется для обновления весов модели в процессе обучения. Существует множество оптимизаторов, таких как стохастический градиентный спуск, Adam и RMSprop. Каждый оптимизатор имеет свои преимущества и недостатки, и выбор оптимального зависит от задачи.
В целом, оптимальные параметры перцептрона зависят от задачи, которую нужно решить. Необходимо экспериментировать с различными значениями параметров, чтобы найти оптимальный набор для конкретной задачи. Машинное обучение - это процесс итеративного улучшения модели, и правильно настроенные параметры являются ключевым фактором для достижения лучших результатов.
Передача индикаторов и цены в перцептрон для анализа рынка
Индикаторы - это математические формулы, которые используются для анализа рынка и помогают определить тренды, моменты входа и выхода, а также уровни поддержки и сопротивления. Некоторые из наиболее распространенных индикаторов, которые можно использовать в перцептроне для анализа рынка Форекс, включают в себя:
- Скользящая средняя (Moving Average);
- Индекс относительной силы (Relative Strength Index, RSI);
- Стохастический осциллятор (Stochastic Oscillator);
- MACD (Moving Average Convergence Divergence).
Передача цены закрытия и индикаторов в перцептрон позволяет модели учитывать различные аспекты анализа рынка и создавать более точные прогнозы цен. Например, модель может использовать скользящую среднюю для определения общей тенденции на рынке, а затем использовать стохастический осциллятор для определения точки входа в рынок.
Однако, передача большого количества индикаторов в перцептрон может привести к проблеме избыточности данных. Избыточность данных может привести к переобучению модели и низкой обобщающей способности. Поэтому необходимо выбирать наиболее значимые индикаторы для конкретной задачи анализа рынка.
Кроме того, передача данных в перцептрон требует правильной предобработки данных. Для примера, если данные содержат пропущенные значения,то необходимо решить эту проблему, например, заполнить пропущенные значения средними значениями или удалить строки с пропущенными значениями.
Необходимо подобрать оптимальные параметры для перцептрона, чтобы модель могла наилучшим образом обучаться и прогнозировать цены. Некоторые из основных параметров, которые необходимо оптимизировать, включают в себя:
- Количество нейронов в скрытом слое;
- Функция активации нейронов;
- Количество эпох обучения;
- Размер мини-пакетов данных для обучения.
Подбор оптимальных параметров может происходить методом проб и ошибок или с использованием алгоритмов оптимизации, таких как генетический алгоритм или метод оптимизации на основе градиента.
Примеры и практика
Сегодня в практическом задании мы рассмотрим пример советника на основе простого перцептрона с передачей в качестве входных параметров расстояния между двумя индикаторами Moving Average. Передадим расстояние между индикатором Moving Average со значение 1 и индикатором Moving Average со значением 24, будем использовать экспоненциальные Moving Average с закрытием по CLOSE, предварительно нормализируем эти значения переводом в пункты.
В качестве входных параметров используем расстояние на свечах 1,4,7,10, то есть 4 параметра. На выходе из перцептрона получим 2 значения открыть позицию на покупку и второе значение открыть позицию на продажу. Данные условия не являются эталоном, а приведены в качестве примера использования перцептрона. Наш сегодняшний пример будет самым простым. И так приступим.
Тут я предоставлю все параметры для оптимизации и форвард тестирования, чтобы дальше в тексте не повторяться:- Рынок Forex;
- Валютная пара EURUSD;
- Период H1;
- СтопЛосс 300 и ТейкПрофит 600. ТейкПрофит в советнике выставляется как СтопЛосс умноженный на 2;
- Режим оптимизации и тестирования «Только цены открытия», «Быстрая (генетический алгоритм)» и «Максимум комплексного критерия». Очень важно использовать режим «Максимум комплексного критерия» он показал более стабильные и прибыльные результаты по сравнению с «Максимальная прибыльность»;
- Диапазон оптимизации 3 года. С 2019.04.19 по 2022.04.19 . 3 года не является, каким-то критерием. Вы можете попробовать больше или меньше самостоятельно;
- Диапазон форвард тестирования 1 год. С 2022.04.19 по 2023.04.19.
- Начальный депозит 10000 единиц;
- Плече 1:500.
Оптимизация:
Параметры оптимизации советника:
Результаты оптимизации советника:
Ниже приведу 5 первых лучших форвард результатов тестирования:
Заключение
В заключение, перцептрон является мощным инструментом для прогнозирования цен на рынке Форекс. Он может быть использован как самостоятельное средство или в сочетании с другими методами анализа данных. Однако, для достижения наилучших результатов при использовании перцептрона для прогнозирования цен на рынке Форекс, необходимо учитывать его ограничения и принимать во внимание контекст исторических данных. Также необходимо иметь определенные знания и опыт в области торговли на рынке валют и понимать высокий риск, связанный с торговлей на рынке Форекс.
Спасибо за внимание, друзья, и до встречи!
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет, Роман,
Две замечательные статьи! Я только что прочитал обе впервые.
Поскольку я еще не изучал код, мне интересно узнать, является ли объект CNeuralNet переформулировкой ваших предыдущих расчетов перцептрона? Это выглядит очень интересно, поскольку первоначальные подходы Angle и fan терпят неудачу в моих форвардных тестах. Я использую EURUSD H4 с 1/1/2020 по 1/1/0203 в качестве обучения и использую 1/1/2023 по 5/1/2023 в качестве форвардных тестов.Угол не работает, так как есть расширенные тренды с паузами, которые срабатывают, но не разворачиваются, и стоп аут и банкротство счета с первым провалом около 1/2/2023, в то время как ваши тесты следуют этому провалу идеально. Веерный подход не берет ни одной сделки в форвардном тесте.
Оставайтесь в безопасности, я с нетерпением жду ваших следующих статей.
CapeCoddah
P.S.
Я только что просмотрел два ваших исходных файла, и у меня возникли вопросы.
Кажется, что в них отсутствуют части, основанные на исходных кодах из ваших предыдущих статей о перцептроне.
Предоставленный советник, похоже, является вашим советником по оптимизации. Однако он не использует объект CNeuralNet, который я ожидал увидеть.
Советник для форвард-теста отсутствует, так как советник Attached не использует результаты оптимизации GA в качестве входных данных для массива весов, например, массива EURUSD.
Или я упустил какое-то логическое изменение в философии перцептрона?
Привет, Роман,
Две замечательные статьи! Я только что прочитал обе впервые.
Поскольку я еще не изучал код, мне интересно узнать, является ли объект CNeuralNet переформулировкой ваших предыдущих расчетов перцептрона? Это выглядит очень интересно, поскольку первоначальные подходы Angle и fan терпят неудачу в моих форвардных тестах. Я использую EURUSD H4 с 1/1/2020 по 1/1/0203 в качестве обучения и использую 1/1/2023 по 5/1/2023 в качестве форвардных тестов.Угол терпит неудачу, так как есть расширенные тренды с паузами, которые срабатывают, но не разворачиваются и не дают стоп-аут и банкротство счета при первом провале около 1/2/2023, в то время как ваши тесты следуют этому провалу идеально. Веерный подход не берет ни одной сделки в форвард-тесте.
Оставайтесь с нами, я с нетерпением жду ваших следующих статей.
МысКодда
P.S.
Я только что просмотрел два ваших исходных файла и у меня есть несколько вопросов.
Кажется, что в них отсутствуют части, основанные на исходных кодах из ваших предыдущих статей о перцептроне.
Предоставленный советник, похоже, является вашим советником по оптимизации. Однако он не использует объект CNeuralNet, который я ожидал увидеть.
Советник прямого тестирования отсутствует, так как советник Attached не использует результаты оптимизации GA в качестве входных данных для массива весов, например, массива EURUSD.
Или я упустил какое-то логическое изменение в философии перцептрона?
Здравствуйте, мой друг. Я не очень хорошо тебя понимаю, поэтому прошу тебя излагать свои мысли постепенно. Оптимизация зависит от глубины влияния перцептрона, используемого в настройках. У каждой пары свои выводы. Также она зависит от количества проходов, так как их значение бесконечно.
Привет, Роман,
Я благодарен за быстрый ответ. Я думаю, что понимаю оптимизацию GA в том смысле, что результаты могут отличаться от прогона к прогону при использовании одинаковых таймфреймов, и что результаты будут отличаться в зависимости от даты начала, продолжительности теста и для каждой пары. Чего я не ожидал, так это того, что когда прогон в течение 3 лет обучения принесет 50% прибыли, советник потерпит неудачу через 5 дней, потеряв всю начальную позицию или не совершив ни одной сделки во время фактического прогона.
Моя конечная цель - разработать перцептронный советник для свинг-трейдинга, который обучается на фиксированную длину и работает только один месяц после последней даты периода обучения. Затем он будет повторно обучен на ту же длину, но период начала обучения будет на месяц позже, а затем будет работать второй месяц для фактических данных, как скользящая SMA. Я исхожу из того, что рынок Форекс постепенно меняет направление, и любая "обученная" сеть будет наиболее точной в первые несколько месяцев после обучения, а затем будет постепенно терять точность по мере изменения рыночных условий. Я также понимаю, что могут произойти значительные изменения на рынке, которые окажут прямое влияние на точность любой "обученной" сети. Такой тип изменений существенно повлияет на все последующие изменения.
По моим наблюдениям, угловой перцептрон хорошо чувствует начало разворотов до того, как они произойдут. К сожалению, он также хорош в обнаружении пауз в трендах и заключении сделок в ожидании разворота, который в данном случае не происходит.При продолжении тренда это приводит к значительным потерям из-за большого SL, который в начале реального теста приводит к потере стартовой позиции. Я думаю, что часть проблемы заключается в том, что 100 Perceptron loop требует адаптивной настройки для снижения общего количества сделок на основе баланса счета.
Мои непосредственные проблемы - из P.S. к моему первоначальному комментарию.
В ваших предыдущих сообщениях вы разместили советник для оптимизации (opt) и второй советник для тестирования торговли (trade). В этом сообщении есть только один: Советник Perceptron_MA_4. По моим ощущениям, этот советник можно использовать для запуска GA оптимизации, непосредственно соответствующей вашим ранним версиям OPT. Но в нем нет версии Trade для форвардного тестирования. Если это намеренно, я могу адаптировать этот советник для загрузки результатов GA, чтобы создать советник для форвардного тестирования.
В дополнение к советнику вы выложили объект класса NeualNet в качестве включаемого файла, который я не просматривал. Меня удивило то, что советник Perceptron_MA_4 не использует этот включаемый файл. Я ожидал, что будет оптимизирующая версия советника, которая включает класс CNeuralNet и использует одну из техник нормализации из вашей публикации в части 5. Я думаю, что создание класса объектов - это очень хорошее направление. Как объект, он становится очень простым для использования нескольких различных перцептронов одновременно в советнике, скажем, для сделок, настройки стоп-лосса или тейк-профита или, возможно, даже для создания адаптивной торговой стратегии с использованием альтернативных стратегий для трендов на плоском рынке. Да, я знаю, что несколько объектов будут требовать много времени для обучения.
Здравствуйте. Вы выбрали правильное направление. Если вам нужна помощь в решении конкретной задачи, напишите мне, и я постараюсь помочь. Просто напишите в приват.
Опубликована статья Эксперименты с нейронными сетями (часть 6): Перцептрон как самодостаточный инструмент прогнозирования цен:
Автор: Роман Поштар