Discussão do artigo "Usando Indicadores MetaTrader 5 com Estrutura de Aprendizado de Máquina ENCOG para Previsão das Séries Temporais" - página 5

 
Valentin Petkov:

Olá, pessoal,

Estou tentando transferir este artigo para o encog v.3.2, mas estou tendo problemas com as caixas de tempo da etapa 3. Alguém pode fazer a etapa 3?


Use o meu @Valentin petkov. Estou usando o encog 3.3. Espero que possa ajudá-lo.

using System;

using Encog.Util.CSV;

using Encog.App.Quant.Indicators;

using Encog.App.Quant.Indicators.Predictive; using Encog.App.Quant.Indicators.Predictive;

using Encog.Util.Simple;

using Encog.Neural.Networks;

using Encog.Neural.Networks.Layers; using Encog.Neural.Networks.Layers;

using Encog.Engine.Network.Activation; 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.App.Analyst.Wizard;

using Encog.Util.Arrayutil;

using Encog.Util.ArrayUtil; using Encog.Util.ArrayUtil;

using Encog.ML.Data;


namespace Encog

{

public class Program

{

/// <summary>

/// O diretório no qual todos os arquivos serão armazenados.

/// </summary>

public const String DIRECTORY = "seu diretório de arquivos";


/// <summary>

/// O arquivo de entrada que inicia todo o processo. Esse arquivo deve ser baixado do NinjaTrader usando o objeto EncogStreamWriter.

/// </summary>

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


/// <summary>

/// Aplicamos um indicador futuro preditivo e geramos um segundo arquivo, com o campo preditivo adicional adicionado.

/// </summary>

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


/// <summary>

/// Em seguida, o arquivo inteiro é normalizado e armazenado nesse arquivo.

/// </summary>

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


/// <summary>

/// O arquivo é cronometrado para criar dados de treinamento.

/// </summary>

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


/// <summary>

/// Finalmente, a rede neural treinada é gravada nesse arquivo.

/// </summary>

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


/// <summary>

/// O tamanho da janela de entrada. Esse é o número de barras usadas para prever a próxima barra.

/// </summary>

public const int INPUT_WINDOW = 6;


/// <summary>

/// O número de barras à frente que estamos tentando prever. normalmente é apenas 1 barra. o indicador futuro usado na etapa 1 pode

/// bem olhar mais para frente no futuro.

/// </summary>

public const int PREDICT_WINDOW = 1;


/// <summary>

/// O número de barras à frente para procurar o melhor resultado.

/// </summary>

public const int RESULT_WINDOW = 5;


/// <summary>

//// O número de neurônios na primeira camada oculta.

/// </summary>

public const int HIDDEN1_NEURONS = 12;


/// <summary>

/// O erro-alvo a ser treinado.

/// </summary>

public const double TARGET_ERROR = 0,01;


static void Main(string[] args)

{

// Etapa 1: criar indicadores futuros

Console.WriteLine("Etapa 1: analisar a exportação do NinjaTrader e criar indicadores futuros");

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();

// Etapa 2: normalizar

Console.WriteLine("Etapa 2: criar indicadores futuros");

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;

analista.Script.Normalize.NormalizedFields[3].Action = NormalizationAction.Normalize; - analista.Script.Normalize.NormalizedFields[4].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));

// contagem de neurônios

int inputNeurons = INPUT_WINDOW * externalIndicatorCount;

int outputNeurons = PREDICT_WINDOW;

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

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

Console.ReadKey();

// Etapa 3: Time-box (opcional)

Console.WriteLine("Etapa 3: Timebox");

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;

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();

// Etapa 4: treinar a rede neural

Console.WriteLine("Etapa 4: treinar");

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 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();

// Etapa 5: salvar a rede neural e as estatísticas

Console.WriteLine("Etapa 5: salvar a rede neural e os campos normalizados");

Console.WriteLine("ou aqui?");

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

Console.WriteLine("erro aqui?");

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

Console.ReadKey();

}

}

}

 
Alguém teve sucesso na portabilidade para o Encog 3.3? Parece que não há interesse em tornar o MQL compatível com o ENCOG 3.3 ou versões posteriores. Não entendo por que a MQL não cria uma rede neural própria para o Metatrader, evitando muito trabalho para os mortais comuns.
 
tiagobr:
Não entendo por que a MQL não cria uma rede neural própria para o Metatrader, evitando muito trabalho para os mortais comuns.
Se você pesquisar redes neurais em mql5.com, encontrará muitos artigos e códigos - tudo isso está disponível para você na base "plug and play". Eles não atendem às suas necessidades?
 

Hi,

Obrigado pelo artigo, pois ele é muito útil para começar a saber como desenvolver programas. No entanto, sou novato e gostaria de saber como posso executar todas as etapas. Eu poderia fazer o download dos dados usando o script, mas não sei como executar a normalização e o timeboxing no Metatrader. Há alguma informação passo a passo sobre a execução dos códigos? Agradeço antecipadamente e peço desculpas por uma pergunta tão básica.

Atenciosamente

 

Hi,

Estou preso em

7. Treinamento de rede neural

Fiz download do .Net Core, do Visual Basic Code para Mac e do Encog 3.3

O que devo fazer em seguida com o Encog?

Desde já, obrigado.

Também há links quebrados no artigo.

Haveria alguma atualização?

i.e.

cálculo de erros e algoritmos de treinamento

A documentação completa do ENCOG está disponível on-line.

 

Olá , nvesteo

Baixei o código de amostra, com o MT5 carregando a exceção de exibição do neuralencogindicator, peço ajuda.


 

Olá, pessoal,

O artigo é realmente excelente, mas não consegui reproduzir o mesmo resultado.

Quando chamo o indicador, ele não é normalizado para 1 e -1, como no exemplo do artigo, e o gráfico é apenas uma linha reta.

Alguém já teve esse problema e o resolveu?

Arquivos anexados:
 
Automated-Trading:

Tente alterar o símbolo decimal para "." em vez de "," em Painel de controle->Região e idioma->Configurações adicionais...


Esse era o meu problema. Altere isso e resolva o problema.

OBRIGADO!!!

 
O indicador não faz nenhum desenho. Copiei os arquivos dll para locais diferentes, mas ainda não obtive resultado. Alguma ideia?
 
Isso pode funcionar com o MT4?