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; }
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); }
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); }
public static void setCalculosObj(CalculosUteis obj) { uteis = obj; }
public static void setCalculosObj(CalculosUteis uteis) { LinhaTendencia.uteis = uteis; }