Discusión sobre el artículo "Usar Indicadores de MetaTrader 5 con la Estructura de Aprendizaje Automático ENCOG para Predicción de Series Cronológicas" - página 5

 
Valentin Petkov:

Hola chicos,

Intento portar este artículo a encog v.3.2 pero tengo problemas con las cajas de tiempo del paso 3. ¿Hay alguien capaz de hacer el paso 3?


Use Mine @Valentin petkov. estoy usando encog 3.3 . espero que te pueda ayudar ..

usando System;

using Encog.Util.CSV;

using Encog.App.Quant.Indicators;

usando Encog.App.Quant.Indicators.Predictive;

usando Encog.Util.Simple;

usando Encog.Neural.Networks;

usando Encog.Neural.Networks.Layers;

usando Encog.Motor.Redes.Activación;

usando Encog.Persist;

using Encog.App.Analyst;

usando System.IO;

usando Encog.App.Analyst.CSV.Normalize;

using Encog.App.Analyst.Wizard;

usando Encog.Util.Arrayutil;

usando Encog.Util.ArrayUtil;

usando Encog.ML.Data;


namespace Encog

{

public clase Programa

{

/// <summary>

/// El directorio en el que se almacenarán todos los archivos.

/// </summary>

public const String DIRECTORY = "tu directorio de archivos";


/// <summary>

/// El fichero de entrada que inicia todo el proceso. Este fichero debe descargarse desde NinjaTrader utilizando el objeto EncogStreamWriter.

/// </summary>

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


/// <summary>

/// Aplicamos un indicador de futuro predictivo y generamos un segundo fichero, con el campo predictivo adicional añadido.

/// </summary>

public const String STEP2_FILENAME = DIRECTORIO + "paso2_futuro.csv";


/// <summary>

/// A continuación se normaliza todo el archivo y se almacena en este archivo.

/// </summary>

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


/// <summary>

/// El archivo es time-boxed para crear datos de entrenamiento.

/// </summary>

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


/// <summary>

/// Finalmente, la red neuronal entrenada se escribe en este archivo.

/// </summary>

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


/// <summary>

/// El tamaño de la ventana de entrada. Este es el número de barras utilizadas para predecir la siguiente barra.

/// </summary>

public const int INPUT_WINDOW = 6;


/// <summary>

/// El número de barras hacia adelante que estamos tratando de predecir. Esto suele ser sólo 1 barra. El indicador de futuro utilizado en el paso 1 puede

/// bien mirar más hacia adelante en el futuro.

/// </summary>

public const int PREDICT_WINDOW = 1;


/// <summary>

/// El número de barras hacia adelante para buscar el mejor resultado.

/// </summary>

public const int RESULT_WINDOW = 5;


/// <summary>

/// El número de neuronas en la primera capa oculta.

/// </summary>

public const int HIDDEN1_NEURONS = 12;


/// <summary>

/// El error objetivo para entrenar.

/// </summary>

public const double TARGET_ERROR = 0.01;


static void Main(string[] args)

{

// Paso 1: Crear indicadores futuros

Console.WriteLine("Paso 1: Analizar Exportación NinjaTrader & Crear Indicadores de Futuro");

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("Indicadores externos encontrados: " + externalIndicatorCount);

Console.ReadKey();

// Paso 2: Normalizar

Console.WriteLine("Paso 2: Crear indicadores futuros");

var analyst = nuevo EncogAnalyst();

var wizard = nuevo AnalystWizard(analista);

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 = nuevo AnalystNormalizeCSV();

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

norm.ProduceOutputHeaders = true;

norm.Normalize(new FileInfo(STEP3_FILENAME));

// recuento de neuronas

int inputNeurons = INPUT_WINDOW * externalIndicatorCount;

int outputNeurons = PREDICT_WINDOW;

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

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

Consola.ReadKey();

// Paso 3: Caja de tiempo (opcional)

Console.WriteLine("Paso 3: CajaTemporal");

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; // indicadores externos

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


twcsv.Process(STEP4_FILENAME);

Console.ReadKey();

// Paso 4: Entrenar la red neuronal

Console.WriteLine("Paso 4: Entrenar");

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(red, entrenamiento, TARGET_ERROR);

EncogUtility.TrainConsole(red, entrenamiento,1);

Console.ReadKey();

// Paso 5: Guardar la red neuronal y las estadísticas

Console.WriteLine("Paso 5: Guardar red neuronal y campos normalizados");

Console.WriteLine("¿o aquí?");

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

Console.WriteLine("¿error aquí?");

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

Console.ReadKey();

}

}

}

 
¿Alguien ha tenido éxito portando a Encog 3.3? Parece que no hay intereses en hacer MQL compatible con ENCOG 3.3 o versiones posteriores. No entiendo por qué MQL no crea una red neuronal propia para metatrader, evitando un montón de trabajo para el común de los mortales.
 
tiagobr:
No entiendo por qué MQL no crea una red neuronal propia para metatrader, evitando mucho trabajo al común de los mortales.
Si buscas redes neuronales en mql5.com obtendrás un montón de artículos y códigos - todo el material está disponible para ti en el "plug and play". ¿No se adaptan a tus necesidades?
 

Hola,

Gracias por el artículo porque es muy útil para empezar a saber como desarrollar programas. Sin embargo soy novato y me gustaría saber como puedo ejecutar todos los pasos. Pude descargar los datos usando el script pero luego no se como realizo la normalización y el timeboxing en Metatrader. ¿Hay alguna información paso a paso sobre cómo ejecutar los códigos? Gracias de antemano y perdón por una pregunta tan básica.

Un saludo

 

Hola,

Estoy atascado en

7. Entrenamiento de Redes Neuronales

He descargado .Net Core, Visual Basic Code para Mac, Encog 3.3

¿Qué debo hacer ahora con Encog?

Gracias de antemano.

También hay enlaces rotos en el artículo.

¿Habrá alguna actualización?

es decir

cálculo de errores y algoritmos de entrenamiento

La documentación completa de ENCOG está disponible en línea.

 

HI ,nvesteo

He descargado el código de ejemplo, con MT5 carga neuralencogindicator mostrar excepción, pedir ayuda.


 

Hola chicos,

Realmente excelente artículo, pero yo no reproducir el mismo resultado.

Cuando se llama el indicador no se normaliza a 1 y -1 como ejemplo del artículo y trazar sólo una línea recta.

¿Alguien tiene este problema y resolverlo?

Archivos adjuntos:
 
Automated-Trading:

Intente cambiar el símbolo decimal a "." en lugar de "," en Panel de control->Región e idioma->Configuración adicional...


Este era mi problema. Cambia esto y solucionalo.

¡¡¡GRACIAS!!!

 
El indicador no hace ningún dibujo. Copiado archivos dll a diferentes lugares, todavía no hay resultado. ¿Alguna idea?
 
¿Puede funcionar con MT4?