internal static List<Treinamento> ClonarTreinamentos(List<Treinamento> treinamentos) { List<Treinamento> treinamentosRetornar = new List<Treinamento>(); foreach (Treinamento treinamento in treinamentos) { Treinamento treinamentoClone = new Treinamento(); foreach (double valInput in treinamento.Input) { treinamentoClone.Input.Add(valInput); } foreach (double valOutput in treinamento.Output) { treinamentoClone.Output.Add(valOutput); } treinamentoClone.Data = treinamento.Data; treinamentosRetornar.Add(treinamentoClone); } return treinamentosRetornar; }
public static List<Treinamento> RecuperarTreinamentoRN(List<DadoBE> dadosBE, List<Versao> versoes, int tamanhoTendencia) { List<Treinamento> treinamentos = new List<Treinamento>(); for (int i = 0; i < dadosBE.Count - 1; i++) { Treinamento treinamento = new Treinamento() { Data = dadosBE[i].DataGeracao }; foreach (Versao versao in versoes) { switch (versao) { case Versao.V6001: treinamento.Input.AddRange(dadosBE[i].ValorBollinger); break; case Versao.V6002: treinamento.Input.AddRange(dadosBE[i].AnaliseMediaMovelSimples5Dias); break; case Versao.V6004: treinamento.Input.AddRange(dadosBE[i].AnaliseWilliams_Percent_R_14P); break; case Versao.V6008: treinamento.Input.AddRange(dadosBE[i].AnaliseWilliams_Percent_R_28P); break; case Versao.V6016: treinamento.Input.AddRange(dadosBE[i].AnaliseArron_Up_Down); break; case Versao.V6032: treinamento.Input.AddRange(dadosBE[i].DuracaoTendencias); break; default: throw new Exception(); break; } } //double variacao = Math.Abs(dadosBE[i].Anterior.PrecoFechamento - dadosBE[i].PrecoFechamento) / dadosBE[i].Anterior.PrecoFechamento; //if (dadosBE[i].Anterior.PrecoFechamento > dadosBE[i].PrecoFechamento) // treinamento.Output.Add(0.5 - variacao); //else // treinamento.Output.Add(0.5 + variacao); //if (dadosBE[i].Anterior.PrecoFechamento > dadosBE[i].PrecoFechamento) // treinamento.Output.AddRange(new List<double>() { 0, 1 }); //else // treinamento.Output.AddRange(new List<double>() { 1, 0 }); double variacao = 0; for (int j = i; j < i + tamanhoTendencia && j < dadosBE.Count; j++) { if (dadosBE[j].Proximo != null) variacao += dadosBE[j].Proximo.PrecoFechamento - dadosBE[j].PrecoFechamento; } //Tendencia de alta if (variacao > 0) { treinamento.Output.AddRange(new List<double>() { 1, 0 }); } //Tendencia de baixa else { treinamento.Output.AddRange(new List<double>() { 0, 1 }); } treinamentos.Add(treinamento); } return treinamentos.Where(trein => trein.Input.Any(inp => inp > 0)).ToList(); }