public static double ValorWiliams_Percent_R(DadoBE dadoBE, int periodo) { //http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:williams_r DadoBE aux = dadoBE; List<DadoBE> dadosBE = new List<DadoBE>(); while (aux.Anterior != null && periodo > 0) { dadosBE.Add(aux.Anterior); periodo--; aux = aux.Anterior; } if (periodo > 0) return 0; else { double maior = dadosBE.Max(dado => dado.PrecoMaximo); double menor = dadosBE.Min(dado => dado.PrecoMinimo); double fechamentoAtual = dadoBE.Anterior.PrecoFechamento; double williams_R = (maior - fechamentoAtual) / (maior - menor) * 100; return williams_R; } }
public static double[] ValorArron_Up_Down(DadoBE dadoBE, int periodo) { int periodoAux = periodo; //http://www.grafbolsa.com/help/maisit.html //http://apligraf.com.br/suporte/estudos/aroon/ DadoBE aux = dadoBE; List<DadoBE> dadosBE = new List<DadoBE>(); while (aux.Anterior != null && periodoAux > 0) { dadosBE.Add(aux.Anterior); periodoAux--; aux = aux.Anterior; } if (periodoAux > 0) return new double[] { 0, 0 }; else { int indMaior = dadosBE.IndexOf(dadosBE.First(d => d.PrecoFechamento == (dadosBE.Max(dado => dado.PrecoFechamento)))); int indMenor = dadosBE.IndexOf(dadosBE.First(d => d.PrecoFechamento == (dadosBE.Min(dado => dado.PrecoFechamento)))); double arronUp = 1.0 / (periodo - 1) * indMaior; double arronDown = 1.0 / (periodo - 1) * indMenor; return new double[] { arronUp, arronDown }; } }
public static double ValorMediaMovel(DadoBE dadoBE, int n) { int count = 0; double somatorio = 0; DadoBE dadoBE_SMA = dadoBE.Anterior; for (int i = 0; i < n; i++) { if (dadoBE_SMA == null) break; count++; somatorio += dadoBE_SMA.PrecoFechamento; dadoBE_SMA = dadoBE_SMA.Anterior; } if (count == 0) return 0; return somatorio / count; }
public static List<DadoBE> PegarTodos(string papel) { List<DadoBE> listCotacoes = new List<DadoBE>(); DataTableReader dtr = null; try { dtr = RetornaDados(papel); while (dtr.Read()) { DadoBE cotacao = new DadoBE(); cotacao.Id = Convert.ToInt32(dtr["ID"]); cotacao.NomeReduzido = papel.ToUpper(); cotacao.DataGeracao = Convert.ToDateTime(dtr["DATAGERACAO"]); cotacao.CotacaoDolar = Convert.ToDouble(dtr["VALORDOLAR"]); //cotacao.CotacaoDolarNormalizado = NormalizarDado(cotacao.CotacaoDolar, "DOLAR"); cotacao.PrecoMaximo = Convert.ToDouble(dtr["PRECOMAXIMO"]); cotacao.PrecoMinimo = Convert.ToDouble(dtr["PRECOMINIMO"]); cotacao.PrecoAbertura = Convert.ToDouble(dtr["PRECOABERTURA"]); cotacao.VolumeNegociacao = Convert.ToInt64(dtr["VOLUMENEGOCIACAO"]); cotacao.PrecoFechamento = Convert.ToDouble(dtr["PRECOFECHAMENTO"]); /*cotacao.Id = (int)dtr["id"]; cotacao.NomeReduzido = dtr["nomeresumido"].ToString(); cotacao.DataGeracao = (DateTime)dtr["datageracao"]; cotacao.CotacaoDolar = Convert.ToDouble((decimal)dtr["valorDolar"]); //cotacao.CotacaoDolarNormalizado = NormalizarDado(cotacao.CotacaoDolar, "DOLAR"); cotacao.PrecoMaximo = Convert.ToDouble((decimal)dtr["PRECOMAX"]); cotacao.PrecoMinimo = Convert.ToDouble((decimal)dtr["PRECOMIN"]); cotacao.PrecoMedio = Convert.ToDouble((decimal)dtr["PRECOMED"]); cotacao.QuantidadeTotalNegociacoes = (int)dtr["QUANTIDADETOTALNEGO"]; cotacao.PrecoFechamento = Convert.ToDouble((decimal)dtr["precoabertura"]);*/ listCotacoes.Add(cotacao); } //Ordena pela data listCotacoes = listCotacoes.OrderBy(cot => cot.DataGeracao).ToList(); // TratarDesdobramento(listCotacoes); for (int indCotacao = 0; indCotacao < listCotacoes.Count - 2; indCotacao++) { listCotacoes[indCotacao].PrecoFechamento = listCotacoes[indCotacao + 1].PrecoFechamento; } //Elimina os 2 ultimos pq não tem o preço de fechamento nem o preço de fechamendo do dia seguinte listCotacoes = listCotacoes.Take(listCotacoes.Count - 2).ToList(); listCotacoes[0].Proximo = listCotacoes[1]; listCotacoes.Last().Anterior = listCotacoes[listCotacoes.Count - 2]; for (int i = 1; i < listCotacoes.Count - 1; i++) { listCotacoes[i].Proximo = listCotacoes[i + 1]; listCotacoes[i].Anterior = listCotacoes[i - 1]; } listCotacoes = PreencherIndices(listCotacoes); } catch (Exception ex) { throw new Exception("Erro ao recuperar os dados"); } finally { if (dtr != null) dtr.Dispose(); } return listCotacoes; //return listCotacoes.Skip(listCotacoes.Count / 10 * 8).ToList(); }