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
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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();
}
}
}
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.
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?
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!!!