Создание нейронной сети для прогнозирования ценовых движений требует определенных знаний в области машинного обучения и программирования на 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)
Автор здесь на форуме то же участником является Редактирован: 1 февраля 2025, 13:25
5 ZERNO Сообщений: 53 - ZERNO
Автор в своих советниках функции АМ2 использует, что означает, что сам писать не умеет, а лишь слегка правит чижие коды.
20 alex30774 Сообщений: 769
для начала нужно что простое.
все то что выложено слишком сложно
35 AM2 Автор Сообщений: 16425 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий