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
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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();
}
}
}
No entiendo por qué MQL no crea una red neuronal propia para metatrader, evitando mucho trabajo al común de los mortales.
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?
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!!!