Обсуждение статьи "Прогнозирование временных рядов в MetaTrader 5 при помощи библиотеки машинного обучения ENCOG" - страница 5

 
Valentin Petkov:

Привет, ребята,

Я пытаюсь перенести эту статью на encog v.3.2, но у меня проблема с таймбоксами шага 3. Кто-нибудь может сделать шаг 3?


Используйте мой @Valentin petkov. Я использую encog 3.3. Надеюсь, смогу вам помочь.

using System;

using Encog.Util.CSV;

using Encog.App.Quant.Indicators;

using Encog.App.Quant.Indicators.Predictive;

using Encog.Util.Simple;

using Encog.Neural.Networks;

using Encog.Neural.Networks.Layers;

using Encog.Engine.Network.Activation;

using Encog.Persist;

using Encog.App.Analyst;

using System.IO;

using Encog.App.Analyst.CSV.Normalize;

using Encog.App.Analyst.Wizard;

using Encog.Util.Arrayutil;

using Encog.Util.ArrayUtil;

using Encog.ML.Data;


пространство имен Encog

{

public class Program

{

/// <summary>

/// Каталог, в котором будут храниться все файлы.

/// </summary>

public const String DIRECTORY = "ваша директория файлов";


/// <summary>

/// Входной файл, с которого начинается весь процесс. Этот файл должен быть загружен из NinjaTrader с помощью объекта EncogStreamWriter.

/// </summary>

public const String STEP1_FILENAME = DIRECTORY + "mt4export.csv";


/// <summary>

/// Мы применяем индикатор прогнозируемого будущего и генерируем второй файл, в который добавлено дополнительное поле прогноза.

/// </summary>

public const String STEP2_FILENAME = DIRECTORY + "step2_future.csv";


/// <summary>

/// Далее весь файл нормализуется и сохраняется в этом файле.

/// </summary>

public const String STEP3_FILENAME = DIRECTORY + "step3_norm.csv";


/// <summary>

/// Файл обрабатывается по времени для создания обучающих данных.

/// </summary>

public const String STEP4_FILENAME = DIRECTORY + "step4_train.csv";


/// <summary>

/// Наконец, обученная нейронная сеть записывается в этот файл.

/// </summary>

public const String STEP5_FILENAME = DIRECTORY + "step5_network.eg";


/// <summary>

/// Размер окна ввода. Это количество баров, используемых для предсказания следующего бара.

/// </summary>

public const int INPUT_WINDOW = 6;


/// <summary>

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

/// заглянуть в будущее еще дальше.

/// </summary>

public const int PREDICT_WINDOW = 1;


/// <summary>

/// Количество баров вперед для поиска наилучшего результата.

/// </summary>

public const int RESULT_WINDOW = 5;


/// <summary>

/// Количество нейронов в первом скрытом слое.

/// </summary>

public const int HIDDEN1_NEURONS = 12;


/// <summary>

/// Целевая ошибка для обучения.

/// </summary>

public const double TARGET_ERROR = 0.01;


static void Main(string[] args)

{

// Шаг 1: Создание будущих индикаторов

Console.WriteLine("Шаг 1: Анализ экспорта NinjaTrader и создание будущих индикаторов");

ProcessIndicators ind = new ProcessIndicators();

ind.Analyze(new FileInfo(STEP1_FILENAME), true, CSVFormat.English); //.Analyze(STEP1_FILENAME, true, AnalystFileFormat.DecpntComma);

int externalIndicatorCount = ind.Columns.Count - 3;

ind.AddColumn(new BestReturn(RESULT_WINDOW, true)); // najlepszy zwrot w nastepnym RESULT_WINDOW

ind.Process(new FileInfo(STEP2_FILENAME));// Process(STEP2_FILENAME);

Console.WriteLine("Найдено внешних индикаторов: " + externalIndicatorCount);

Console.ReadKey();

// Шаг 2: Нормализация

Console.WriteLine("Шаг 2: Создание будущих индикаторов");

var analyst = new EncogAnalyst();

var wizard = new AnalystWizard(analyst);

wizard.Wizard(new FileInfo(STEP2_FILENAME), true, AnalystFileFormat.DecpntComma);

analyst.Script.Normalize.NormalizedFields[0].Action=NormalizationAction.PassThrough;

analyst.Script.Normalize.NormalizedFields[1].Action = NormalizationAction.PassThrough;


analyst.Script.Normalize.NormalizedFields[2].Action = NormalizationAction.Normalize;

analyst.Script.Normalize.NormalizedFields[3].Action = NormalizationAction.Normalize;

analyst.Script.Normalize.NormalizedFields[4].Action = NormalizationAction.Normalize;

analyst.Script.Normalize.NormalizedFields[5].Action = NormalizationAction.Normalize;

analyst.Script.Normalize.NormalizedFields[6].Action = NormalizationAction.Normalize;


var norm = new AnalystNormalizeCSV();

norm.Analyze(new FileInfo(STEP2_FILENAME), true, CSVFormat.English, analyst);

norm.ProduceOutputHeaders = true;

norm.Normalize(new FileInfo(STEP3_FILENAME));

// подсчет количества нейронов

int inputNeurons = INPUT_WINDOW * externalIndicatorCount;

int outputNeurons = PREDICT_WINDOW;

Console.WriteLine("inputneurons : {0}",inputNeurons);

Console.WriteLine("outputNeurons : {0}", outputNeurons);

Console.ReadKey();

// Шаг 3: Таймбокс (необязательно)

Console.WriteLine("Шаг 3: Таймбокс");

var twcsv = new TemporalWindowCSV();

twcsv.Analyze(new FileInfo(STEP3_FILENAME), true, CSVFormat.English);

twcsv.InputWindow = INPUT_WINDOW;

twcsv.PredictWindow = PREDICT_WINDOW;

int index = 0;

twcsv.Fields[index++].Action = TemporalType.Ignore;

twcsv.Fields[index++].Action = TemporalType.Ignore;

twcsv.Fields[index++].Action = TemporalType.Ignore;

for (int i = 0; i < externalIndicatorCount; i++)

twcsv.Fields[index++].Action = TemporalType.Input; // внешние индикаторы

twcsv.Fields[index++].Action = TemporalType.Predict; // PredictBestReturn


twcsv.Process(STEP4_FILENAME);

Console.ReadKey();

// Шаг 4: Обучение нейронной сети

Console.WriteLine("Шаг 4: Обучение");

Console.ReadKey();

IMLDataSet training = EncogUtility.LoadCSV2Memory(STEP4_FILENAME, inputNeurons, outputNeurons, true, CSVFormat.English,false);

BasicNetwork network = new BasicNetwork();

network.AddLayer(new BasicLayer(new ActivationTANH(), true, inputNeurons));

network.AddLayer(new BasicLayer(new ActivationTANH(), true, HIDDEN1_NEURONS));

network.AddLayer(new BasicLayer(new ActivationLinear(), true, outputNeurons));

network.Structure.FinalizeStructure();

network.Reset();


//EncogUtility.TrainToError(network, training, TARGET_ERROR);

EncogUtility.TrainConsole(network, training,1);

Console.ReadKey();

// Шаг 5: Сохраняем нейронную сеть и статистику

Console.WriteLine("Шаг 5: Сохранить нейронную сеть и нормализованные поля");

Console.WriteLine("или здесь?");

EncogDirectoryPersistence.SaveObject(new FileInfo(STEP5_FILENAME), network);

Console.WriteLine("ошибка здесь?");

//EncogDirectoryPersistence.SaveObject(new FileInfo(STEP5_FILENAME), analyst);

Console.ReadKey();

}

}

}

 
Удалось ли кому-нибудь портировать Encog 3.3? Похоже, что нет никакого интереса в том, чтобы сделать MQL совместимым с ENCOG 3.3 и более поздними версиями. Я не понимаю, почему MQL не создает собственную нейронную сеть для metatrader, избегая большого количества работы для простых смертных.
 
tiagobr:
Я не понимаю, почему MQL не создает собственную нейронную сеть для metatrader, избавляя простых смертных от лишней работы.
Если поискать на mql5.com нейронные сети, то можно найти множество статей и кодов - все это доступно для вас по принципу "подключи и работай". Разве они не подходят для ваших нужд?
 

Привет,

Спасибо за статью, потому что она очень полезна для того, чтобы начать разбираться в разработке программ. Однако я новичок и хотел бы знать, как я могу выполнить все шаги. Я могу загрузить данные с помощью скрипта, но тогда я не знаю, как мне выполнить нормализацию и таймбоксинг в Metatrader. Есть ли пошаговая информация о выполнении кодов? Заранее спасибо и извините за столь банальный вопрос.

С наилучшими пожеланиями

 

Привет,

Я застрял на

7. Обучение нейронным сетям

Я загрузил .Net Core, Visual Basic Code for Mac, Encog 3.3.

Что мне делать дальше с Encog?

Заранее спасибо.

В статье также есть неработающие ссылки.

Будут ли какие-нибудь обновления?

т.е.

алгоритмырасчета ошибок и обучения

Полная документация ENCOG доступна онлайн.

 

Здравствуйте , nvesteo

Скачал пример кода, при загрузке МТ5 neuralencogindicator display exception, прошу помощи.


 

Привет, ребята,

Действительно отличная статья, но у меня не получилось воспроизвести тот же результат.

При вызове индикатора он не нормализуется к 1 и -1, как в примере из статьи, а строит просто прямую линию.

Кто-нибудь сталкивался с такой проблемой и решил ее?

 
Automated-Trading:

Попробуйте изменить десятичный символ на "." вместо "," в Панель управления->Регион и язык->Дополнительные настройки...


Это была моя проблема. Измените это и решите проблему.

СПАСИБО!!!

 
Индикатор не делает никаких рисунков. Копировал dll-файлы в разные места, все равно результата нет. Есть идеи?
 
Может ли это работать с MT4?