English 中文 Español Deutsch 日本語 Português
preview
Эксперименты с нейросетями (Часть 6): Перцептрон как самодостаточное средство предсказания цены

Эксперименты с нейросетями (Часть 6): Перцептрон как самодостаточное средство предсказания цены

MetaTrader 5Торговые системы | 25 апреля 2023, 10:38
1 895 0
Roman Poshtar
Roman Poshtar

Введение

Добрый день, уважаемые пользователи сообщества MQL5. Одним из методов машинного обучения, который может быть использован для прогнозирования цен на рынке, является перцептрон. Использование перцептрона может быть полезным инструментом для трейдеров и инвесторов, которые стремятся получить дополнительную информацию о будущих ценах на рынке. 


Общие понятия

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

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

Принцип работы перцептрона

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

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

Преимущества использования перцептрона для прогнозирования цен на валютных рынках

  1. Использование перцептрона для прогнозирования цен на рынке Форекс имеет несколько преимуществ. Во-первых, перцептрон способен адаптироваться к изменениям на рынке и корректировать свои прогнозы в соответствии с новыми данными. Это делает его более эффективным, чем традиционные методы анализа данных, такие как статистический анализ и временные ряды, которые не всегда могут адаптироваться к изменениям на рынке.
  2. Во-вторых, перцептрон может работать с большим количеством входных факторов, что позволяет учитывать многие различные факторы, влияющие на цены. Это может привести к более точным прогнозам цен, чем традиционные методы анализа данных.
  3. В-третьих, перцептрон может быть обучен на больших объемах данных, что позволяет ему использовать множество исторических данных для обучения и прогнозирования цен.

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

Кроме того, при использовании перцептрона для прогнозирования цен можно столкнуться с проблемой переобучения, когда перцептрон становится слишком чувствительным к историческим данным и не может адаптироваться к новым изменениям на рынке. Для борьбы с этой проблемой можно использовать различные техники регуляризации, такие как 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).

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

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

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

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

  1. Количество нейронов в скрытом слое;
  2. Функция активации нейронов;
  3. Количество эпох обучения;
  4. Размер мини-пакетов данных для обучения.

Подбор оптимальных параметров может происходить методом проб и ошибок или с использованием алгоритмов оптимизации, таких как генетический алгоритм или метод оптимизации на основе градиента.


Примеры и практика

Сегодня в практическом задании мы рассмотрим пример советника на основе простого перцептрона с передачей в качестве входных параметров расстояния между двумя индикаторами 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 первых лучших форвард результатов тестирования:

Тест 1


Тест 2


Тест 3


Тест 4


Тест 5


Заключение

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

Спасибо за внимание, друзья, и до встречи!


Прикрепленные файлы |
Perceptron_MA_4.mq5 (39.73 KB)
NeuralNets.mqh (7.83 KB)
Как построить советник, работающий автоматически (Часть 10): Автоматизация (II) Как построить советник, работающий автоматически (Часть 10): Автоматизация (II)
Автоматизация ничего не значит, если вы не можете контролировать расписание его работы. Ни один работник не может быть эффективным при работе 24 часа в сутки. Несмотря на этот факт, многие считают, что автоматизированная система должна работать 24 часа в сутки. Хорошо всегда иметь возможность задавать временной интервал для эксперта. В этой статье мы обсудим, как правильно установить такой временной интервал.
Как построить советник, работающий автоматически (Часть 09): Автоматизация (I) Как построить советник, работающий автоматически (Часть 09): Автоматизация (I)
Хотя создание автоматического советника не является очень сложной задачей, однако без необходимых знаний может быть допущено много ошибок. В этой статье мы рассмотрим, как построить первый уровень автоматизации: он заключается в создании триггера для активации безубытка и трейлинг-стопа.
Как построить советник, работающий автоматически (Часть 11): Автоматизация (III) Как построить советник, работающий автоматически (Часть 11): Автоматизация (III)
Автоматизированная система без соответствующей безопасности не будет успешной. Однако безопасность не будет обеспечена без хорошего понимания некоторых вещей. В этой статье мы разберемся с тем, почему достижение максимальной безопасности в автоматизированных системах является такой сложной задачей.
Нейросети — это просто (Часть 38): Исследование с самоконтролем через несогласие (Self-Supervised Exploration via Disagreement) Нейросети — это просто (Часть 38): Исследование с самоконтролем через несогласие (Self-Supervised Exploration via Disagreement)
Одной из основных проблем обучения с подкреплением является исследование окружающей среды. Ранее мы уже познакомились с методом исследования на базе внутреннего любопытства. Сегодня я предлагаю посмотреть на ещё один алгоритм — исследование через несогласие.