Обсуждение статьи "Прогнозирование временных рядов в MetaTrader 5 при помощи библиотеки машинного обучения ENCOG" - страница 5
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, ребята,
Я пытаюсь перенести эту статью на 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();
}
}
}
Я не понимаю, почему MQL не создает собственную нейронную сеть для metatrader, избавляя простых смертных от лишней работы.
Привет,
Спасибо за статью, потому что она очень полезна для того, чтобы начать разбираться в разработке программ. Однако я новичок и хотел бы знать, как я могу выполнить все шаги. Я могу загрузить данные с помощью скрипта, но тогда я не знаю, как мне выполнить нормализацию и таймбоксинг в Metatrader. Есть ли пошаговая информация о выполнении кодов? Заранее спасибо и извините за столь банальный вопрос.
С наилучшими пожеланиями
Привет,
Я застрял на
7. Обучение нейронным сетям
Я загрузил .Net Core, Visual Basic Code for Mac, Encog 3.3.
Что мне делать дальше с Encog?
Заранее спасибо.
В статье также есть неработающие ссылки.
Будут ли какие-нибудь обновления?
т.е.
алгоритмырасчета ошибок и обучения
Полная документация ENCOG доступна онлайн.
Здравствуйте , nvesteo
Скачал пример кода, при загрузке МТ5 neuralencogindicator display exception, прошу помощи.
Привет, ребята,
Действительно отличная статья, но у меня не получилось воспроизвести тот же результат.
При вызове индикатора он не нормализуется к 1 и -1, как в примере из статьи, а строит просто прямую линию.
Кто-нибудь сталкивался с такой проблемой и решил ее?
Попробуйте изменить десятичный символ на "." вместо "," в Панель управления->Регион и язык->Дополнительные настройки...
Это была моя проблема. Измените это и решите проблему.
СПАСИБО!!!