예제 #1
0
        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;
            }
        }
예제 #2
0
        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 };
            }
        }
예제 #3
0
        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;
        }
예제 #4
0
        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();
        }