AM2
Андрей

 
Уровень 35

  Торгую в компаниях:


Группа "Торговые системы"

Рейтинг 661



Создание нейронной сети для прогнозирования ценовых движений

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

### Шаг 1: Подготовка данных

Для начала нам нужно собрать исторические данные о цене закрытия за несколько недель. Эти данные будут использоваться для тренировки модели.

```mql5
# <Trade\Trade.mqh>
#include <Arrays\ArrayDouble.mqh>

// Загружаем исторические данные
int OnInit()
{
   ArrayDouble series;
   
   // Загрузка исторических данных по инструменту EURUSD на таймфрейме W1
   CopyClose("EURUSD", PERIOD_W1, 0, 100, series);
   
   // Тренировка и тестирование модели
   TrainAndTestModel(series);
   
   return(INIT_SUCCEEDED);
}
```


### Шаг 2: Создание нейронной сети

Мы будем использовать библиотеку `NeuralNetwork` для создания простой однослойной нейронной сети.

```mql5
#include <Trade\Trade.mqh>
#include <Arrays\ArrayDouble.mqh>
#include <NN\NeuralNetwork.mqh>

void TrainAndTestModel(const CArrayDouble &data)
{
   NeuralNetwork nn;
   
   // Настройка параметров нейронной сети
   int inputSize = 10;     // Количество входных нейронов (количество предыдущих баров)
   int hiddenSize = 20;    // Количество скрытых нейронов
   int outputSize = 1;     // Количество выходных нейронов (прогнозируемая цена закрытия)
   
   // Инициализация нейронной сети
   if(!nn.Create(inputSize, hiddenSize, outputSize))
      Print("Ошибка при создании нейронной сети");
      
   // Разделение данных на тренировочный и тестовый наборы
   int trainSize = data.Total() * 0.8;
   int testSize = data.Total() - trainSize;
   
   CArrayDouble trainData(trainSize), testData(testSize);
   for(int i=0; i<trainSize; i++)
      trainData[i] = data[i];
   for(int i=trainSize; i<data.Total(); i++)
      testData[i-trainSize] = data[i];
   
   // Тренировка модели
   double learningRate = 0.01;
   int epochs = 500;
   for(int e=0; e<epochs; e++)
   {
      for(int i=inputSize; i<trainSize; i++)
      {
         // Формирование входного вектора
         CArrayDouble inputs(inputSize);
         for(int j=i-inputSize; j<i; j++)
            inputs[j-i+inputSize] = trainData[j];
         
         // Прогон через модель
         CArrayDouble outputs(outputSize);
         nn.Forward(inputs, outputs);
         
         // Обновление весов
         CArrayDouble targets(outputSize);
         targets[0] = trainData[i];
         nn.Backward(targets, learningRate);
      }
   }
   
   // Тестирование модели
   double error = 0.0;
   for(int i=inputSize; i<testSize; i++)
   {
      // Формирование входного вектора
      CArrayDouble inputs(inputSize);
      for(int j=i-inputSize; j<i; j++)
         inputs[j-i+inputSize] = testData[j];
      
      // Прогон через модель
      CArrayDouble outputs(outputSize);
      nn.Forward(inputs, outputs);
      
      // Вычисление ошибки
      error += MathAbs(outputs[0] - testData[i]);
   }
   error /= testSize;
   
   // Вывод результатов
   Print("Средняя ошибка на тестовом наборе: ", error);
}
```


### Шаг 3: Использование модели для прогнозирования

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

```mql5
double PredictNextPrice(const CArrayDouble &data)
{
   NeuralNetwork nn;
   
   // Настройка параметров нейронной сети
   int inputSize = 10;     // Количество входных нейронов (количество предыдущих баров)
   int hiddenSize = 20;    // Количество скрытых нейронов
   int outputSize = 1;     // Количество выходных нейронов (прогнозируемая цена закрытия)
   
   // Инициализация нейронной сети
   if(!nn.Create(inputSize, hiddenSize, outputSize))
      Print("Ошибка при создании нейронной сети");
      
   // Формирование входного вектора
   CArrayDouble inputs(inputSize);
   for(int i=data.Total()-inputSize; i<data.Total(); i++)
      inputs[i-data.Total()+inputSize] = data[i];
   
   // Прогон через модель
   CArrayDouble outputs(outputSize);
   nn.Forward(inputs, outputs);
   
   return outputs[0]; // Возвращение предсказанной цены закрытия
}
```


### Заключение

Этот пример демонстрирует базовую реализацию нейронной сети для прогнозирования цены закрытия на один бар вперед на таймфрейме W1. Однако стоит отметить, что реальная торговля на финансовых рынках требует гораздо более сложных моделей и тщательного тестирования перед использованием в реальных условиях.
  • +3
  • Просмотров: 400
  • 1 февраля 2025, 11:19
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Торговые системы", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
19 марта 2024

Брокер для ваших роботов, 15 лет на рынке

Комментарии (3)

+
0
Приветствую! То же в тему, есть интересные идеи www.mql5.com/ru/users/koshtenko/publications
Автор здесь на форуме то же участником является
Редактирован: 1 февраля 2025, 13:25
avatar

  5  ZERNO Сообщений: 53 - ZERNO

  • 1 февраля 2025, 13:23
+
0
Автор здесь на форуме то же участником является

Автор в своих советниках функции АМ2 использует, что означает, что сам писать не умеет, а лишь слегка правит чижие коды.
avatar

  20  alex30774 Сообщений: 769

  • 1 февраля 2025, 14:38
+
0
я пока собираю информацию, как все это реализовать.
для начала нужно что простое.
все то что выложено слишком сложно
avatar

  35  AM2 Автор Сообщений: 16425 - Андрей

  • 1 февраля 2025, 13:53

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий