Exemple #1
0
 void Awake()
 {
     configuracaoUI.efetuaConfiguracaoInicial();
     dados    = new Dados();                                //Acesso a dados atuais
     calculos = new CalculosUteis(telaExibicao.lossyScale); //Acesso a valores importantes
     configuracaoUI.configuraCaixaDeOcultamento(calculos.espacoVolumes + GraficoDeVelas.ESPACO_ENTRE_VOLUMES_CANDLES);
     GraficoDeVelas.setTransformTelaExibicao(telaExibicao);
     CurvasMedia.setPosiXFinalInicial(telaExibicao.position.x + telaExibicao.lossyScale.x / 2f, telaExibicao.position.x - telaExibicao.lossyScale.x / 2f);
     CurvasMedia.setPosiYInicialCandles(telaExibicao.position.y - telaExibicao.lossyScale.y / 2f + calculos.espacoVolumes + GraficoDeVelas.ESPACO_ENTRE_VOLUMES_CANDLES);
     LinhaTendencia.setPosX(telaExibicao.position.x - telaExibicao.lossyScale.x / 2f, telaExibicao.position.x + telaExibicao.lossyScale.x / 2f);
     LinhaTendencia.setPosY(telaExibicao.position.y - telaExibicao.lossyScale.y / 2f + calculos.espacoVolumes + GraficoDeVelas.ESPACO_ENTRE_VOLUMES_CANDLES, telaExibicao.position.y + telaExibicao.lossyScale.y / 2f);
     LinhaTendencia.setCalculosObj(calculos);
     UIController.setCalculosObj(calculos);
     GerenciaDivisorias.setCalculosObj(calculos);
     indiceAtual          = 0;
     elemNaTela           = 1;
     divisoriasInferiores = MIN_DIV_INF;
     divisoriasLaterais   = MIN_DIV_LAT;
     setarTema1();
     iteracoesIniciais = 0;
     indiceAtual       = MAX_ELEM_TELA - 1;
 }
Exemple #2
0
    public IEnumerator desenharGraficoVelas(OHLC[] arr, CalculosUteis uteis)
    {
        float hl, oc;
        int   vol;
        bool  alta;
        Color cor;
        //Declaração dos vetores fora do laço para não ter lixo de memória dinâmica da heap
        Vector3 dimHL = Vector3.zero, dimOC = Vector3.zero, dimVOL = Vector3.zero;
        Vector3 posiHL = Vector3.zero, posiOC = Vector3.zero, posiVOL = Vector3.zero;

        dimHL.z  = dimOC.z = dimVOL.z = 1f;
        posiHL.z = posiOC.z = posiVOL.z = 0f;
        float          iniYVolumes = telaExibicao.position.y - telaExibicao.lossyScale.y / 2f;
        float          iniYCandles = iniYVolumes + uteis.espacoVolumes + ESPACO_ENTRE_VOLUMES_CANDLES;
        float          posiX       = telaExibicao.position.x - telaExibicao.lossyScale.x / 2f + uteis.espessura / 2f;
        SpriteRenderer sprite      = quad.GetComponent <SpriteRenderer>();
        FracaoGrafico  f           = null;

        foreach (FracaoGrafico elem in lista)          //Limpando a lista
        {
            Destroy(elem.hl);
            Destroy(elem.oc);
            Destroy(elem.vol);
        }
        lista.Clear();
        foreach (OHLC elem in arr)
        {
            hl  = elem.high - elem.low;
            vol = elem.volume;
            if (elem.open > elem.close)
            {
                alta = false;
                oc   = elem.open - elem.close;
                cor  = corBaixa;
            }
            else
            {
                alta = true;
                oc   = elem.close - elem.open;
                cor  = corAlta;
            }
            dimHL.x = ESPESSURA_HL;
            dimHL.y = hl * uteis.alfaHL;

            dimOC.x = uteis.espessura;
            dimOC.y = oc * uteis.alfaHL;

            dimVOL.x = uteis.espessura;
            dimVOL.y = elem.volume * uteis.alfaVOL;

            posiHL.x = posiX;
            posiHL.y = iniYCandles + (elem.high - uteis.menorL) * uteis.alfaHL;

            posiHL.y -= dimHL.y / 2f;

            posiOC.x = posiX;
            if (alta)
            {
                posiOC.y = iniYCandles + (elem.close - uteis.menorL) * uteis.alfaHL;
                cor      = corAlta;
            }
            else
            {
                posiOC.y = iniYCandles + (elem.open - uteis.menorL) * uteis.alfaHL;
                cor      = corBaixa;
            }
            posiOC.y -= dimOC.y / 2f;

            posiVOL.x = posiX;
            posiVOL.y = iniYVolumes + dimVOL.y / 2f;
            posiVOL.z = -2f;

            f            = new FracaoGrafico();
            sprite.color = cor;
            f.hl         = Instantiate(quad, posiHL, Quaternion.identity);
            f.oc         = Instantiate(quad, posiOC, Quaternion.identity);
            sprite.color = corVolume;
            f.vol        = Instantiate(quad, posiVOL, Quaternion.identity);
            f.hl.transform.localScale  = dimHL;
            f.oc.transform.localScale  = dimOC;
            f.vol.transform.localScale = dimVOL;
            f.oc.transform.SetParent(f.hl.transform);
            f.vol.transform.SetParent(f.hl.transform);
            f.hl.transform.SetParent(transform);
            lista.Add(f);
            posiX += uteis.espessura + uteis.ESPACO;
        }
        yield return(null);
    }
Exemple #3
0
    public IEnumerator desenhaCurvasMedia(CalculosUteis uteis, Dados dados, int[] quantidades, bool[] desenhar, int elemNaTela, int indiceAtual)
    {
        int quantidadesLength = quantidades.Length;

        if (quantidadesLength == 0)
        {
            yield return(null);
        }
        Array.Sort(quantidades);
        OHLC[] elementos         = null;
        int    quantidadeBuscada = elemNaTela + quantidades[quantidadesLength - 1];
        int    inicio;

        if (quantidadeBuscada > indiceAtual + 1)
        {
            inicio            = 0;
            quantidadeBuscada = indiceAtual + 1;
        }
        else
        {
            inicio = indiceAtual - quantidadeBuscada;
        }
        //Buscando vetor com elementos para calculo das médias
        elementos = dados.retornaVetorOHLCParaCurvas(inicio, quantidadeBuscada);
        //Preparando variáveis para usar no calculo de média
        bool[]  mediaIncremental = new bool[quantidadesLength];
        int[]   N    = new int[quantidadesLength];
        float[] soma = new float[quantidadesLength];
        for (int i = 0; i < quantidadesLength; i++)
        {
            N[i]    = 0;
            soma[i] = 0f;
        }
        int   indiceDecremento;
        float incrementoPosiX = uteis.ESPACO + uteis.espessura;
        float posiX;
        float maiorMedia = float.MinValue, menorMedia = float.MaxValue;

        limpaListaCurvas();
        List <Vector3> mediasPontos = new List <Vector3>();
        float          mediaTmp, deltaMedia, alfaMedia;

        Vector3[] arrTmp;
        for (int i = 0; i < quantidadesLength; i++)
        {
            if (!desenhar[i])
            {
                continue;
            }
            posiX            = posiXFinal - (uteis.ESPACO + uteis.espessura) * elementos.Length + uteis.ESPACO + uteis.espessura / 2f;
            indiceDecremento = 0;
            maiorMedia       = float.MinValue;
            menorMedia       = float.MaxValue;
            foreach (OHLC elem in elementos)
            {
                soma[i] += elem.close;
                N[i]++;
                if (N[i] == quantidades[i])
                {
                    if (posiX >= posiXInicial)
                    {
                        mediaTmp = soma[i] / N[i];
                        mediasPontos.Add(new Vector3(posiX, mediaTmp, 0f));
                        if (mediaTmp > maiorMedia)
                        {
                            maiorMedia = mediaTmp;
                        }
                        if (mediaTmp < menorMedia)
                        {
                            menorMedia = mediaTmp;
                        }
                    }
                    N[i]--;
                    soma[i] -= elementos[indiceDecremento].close;
                    indiceDecremento++;
                }
                else
                {
                    if (posiX >= posiXInicial)
                    {
                        mediaTmp = soma[i] / N[i];
                        mediasPontos.Add(new Vector3(posiX, mediaTmp, 0f));
                        if (mediaTmp > maiorMedia)
                        {
                            maiorMedia = mediaTmp;
                        }
                        if (mediaTmp < menorMedia)
                        {
                            menorMedia = mediaTmp;
                        }
                    }
                }
                posiX += incrementoPosiX;
            }
            deltaMedia = maiorMedia - menorMedia;
            if (deltaMedia == 0f)
            {
                deltaMedia = 0.00000001f;
            }
            alfaMedia = uteis.espacoCandles / deltaMedia;

            arrTmp = mediasPontos.ToArray();
            for (int p = 0; p < arrTmp.Length; p++)
            {
                arrTmp[p] = new Vector3(arrTmp[p].x, posiYInicial + (arrTmp[p].y - menorMedia) * alfaMedia, 0f);
            }
            tracarLinhas(arrTmp, cores[i]);
            mediasPontos.Clear();
        }
        yield return(null);
    }
Exemple #4
0
 public static void setCalculosObj(CalculosUteis obj)
 {
     uteis = obj;
 }
Exemple #5
0
 public static void setCalculosObj(CalculosUteis uteis)
 {
     LinhaTendencia.uteis = uteis;
 }