Friday, 1 December 2017

Calcular exponencial mover média c #


Como calcular EMA no Excel Saiba como calcular a média móvel exponencial no Excel e VBA, e obtenha uma planilha gratuita na Web. A planilha recupera dados de estoque do Yahoo Finance, calcula EMA (ao longo da janela de tempo escolhida) e traça os resultados. O link de download está na parte inferior. O VBA pode ser visualizado e editado it8217s completamente grátis. Mas primeiro desvendar por que a EMA é importante para comerciantes técnicos e analistas de mercado. Os gráficos históricos de preços das ações são muitas vezes poluídos com muito ruído de alta freqüência. Isso muitas vezes obscurece as principais tendências. As médias móveis ajudam a suavizar essas pequenas flutuações, dando-lhe uma maior visão da direção geral do mercado. A média móvel exponencial atribui maior importância aos dados mais recentes. Quanto maior o período de tempo, menor será a importância dos dados mais recentes. EMA é definida por esta equação. Preço de hoje8217 (multiplicado por um peso) e ontem8217s EMA (multiplicado por 1 peso) Você precisa iniciar o cálculo EMA com um EMA inicial (EMA 0). Esta é geralmente uma média móvel simples de comprimento T. O gráfico acima, por exemplo, dá a EMA da Microsoft entre 1 de janeiro de 2017 e 14 de janeiro de 2017. Os comerciantes técnicos costumam usar o cross-over de duas médias móveis 8211 uma com um curto prazo E outro com uma escala de tempo longa 8211 para gerar sinais de buysell. Muitas vezes são utilizadas médias móveis de 12 e 26 dias. Quando a média móvel mais curta sobe acima da média móvel mais longa, o mercado está atualizado, isso é um sinal de compra. No entanto, quando as médias móveis mais baixas caem abaixo da média móvel longa, o mercado está caindo, isso é um sinal de venda. Let8217s primeiro aprende a calcular EMA usando funções de planilha. Depois disso, descobrimos como usar o VBA para calcular EMA (e traçar gráficos automaticamente) Calcule EMA no Excel com as Funções da Planilha Etapa 1. Let8217s dizem que queremos calcular o EMA de 12 dias do preço das ações da Exxon Mobil8217s. Primeiro, precisamos obter os preços históricos das ações 8211, você pode fazer isso com este programa de download de cotações de estoque a granel. Passo 2 . Calcule a média simples dos primeiros 12 preços com a função Average () do Excel8217s. No gráfico de tela abaixo, na célula C16, temos a fórmula MÉDIA (B5: B16) onde B5: B16 contém os primeiros 12 preços próximos, passo 3. Logo abaixo da célula usada na Etapa 2, insira a fórmula EMA acima. Lá você a possui. You8217ve calculou com sucesso um indicador técnico importante, EMA, em uma planilha. Calcule EMA com VBA Now let8217s mecaniza os cálculos com VBA, incluindo a criação automática de gráficos. Eu não mostrei o VBA completo aqui (it8217s disponível na planilha abaixo), mas discutiremos o código mais crítico. Passo 1. Faça o download de cotações de ações históricas para o seu ticker do Yahoo Finance (usando arquivos CSV) e carregue-os no Excel ou use o VBA nesta planilha para obter cotações históricas diretamente no Excel. Seus dados podem parecer algo assim: Etapa 2. É aqui que precisamos exercitar alguns braçulmanos 8211, precisamos implementar a equação EMA na VBA. Podemos usar o estilo R1C1 para programaticamente inserir fórmulas em células individuais. Examine o snippet de código abaixo. Folhas (quotDataquot).Range (quothquot amp EMAWindow 1) quotaverage (R-quot amp EMAWindow - 1 amp. QuotC-3: RC-3) quot Sheets (quatDataquot).Range (quothquot amp EMAWindow 2 amp. Quot: hquot amp numRows). FormulaR1C1 quotR0C-3 (2 (EMAWindow 1)) R-1C0 (1- (2 (EMAWindow1))) quot EMAWindow é uma variável que é igual à janela de tempo desejada numRows é o número total de pontos de dados 1 (o 8220 18221 é porque Nós assumimos que os dados reais do estoque começam na linha 2) o EMA é calculado na coluna h Supondo que EMAWindow 5 e numrows 100 (ou seja, existem 99 pontos de dados), a primeira linha coloca uma fórmula na célula h6 que calcula a média aritmética Dos primeiros 5 pontos de dados históricos A segunda linha coloca fórmulas nas células h7: h100 que calcula o EMA dos restantes 95 pontos de dados Etapa 3 Esta função VBA cria um gráfico do preço fechado e EMA. Defina EMAChart ActiveSheet. ChartObjects. Add (Esquerda: Range (quota12quot).Left, Width: 500, Top: Range (quota12quot).Top, Height: 300) Com EMAChart. Chart. Parent. Name quotema Chartquot Com. SeriesCollection. NewSeries. ChartType xlLine. Folhas de valores (quotdataquot).Range (quote2: equot amp numRows).XValues ​​Sheets (quotdataquot).Range (quota2: aquot amp numRows).Format. Line. Weight 1.Name quotPricequot End With With. SeriesCollection. NewSeries. ChartType xlLine. AxisGroup xlPrimary. Values ​​Sheets (quotdataquot).Range (quoth2: hquot amp numRows).Name quotEMAquot. Border. ColorIndex 1.Format. Line. Weight 1 End With. Axes (xlValue, xlPrimary).HasTitle True. Axes ( XlValue, xlPrimary).AxisTitle. Characters. Text quotPricequot. Axes (xlValue, xlPrimary).MaximumScale WorksheetFunction. Max (Sheets (quatDataquot).Range (quote2: equot amp numRows)).Axes (xlValue, xlPrimary).MinimumScale Int (WorksheetFunction. Min (Sheets (quatDataquot).Range (quote2: equot amp numRows))).Legend. Position xlLegendPositionRight. SetElement (msoElementChartTitleAboveChart).ChartTitle. Text quotClose Price amp quot amp EMAWindow amp quot-Day EMAquot End With Obtém esta planilha para a implementação completa da calculadora EMA com download automático de dados históricos. 14 pensamentos sobre ldquo Como calcular o EMA no Excel rdquo Última vez que eu baixei um de seus spreadsheets do Excel, ele causou que meu programa antivírus o sinalizasse como um PUP (potencial programa indesejável), pois aparentemente havia um código inserido no download que era adware, Spyware ou pelo menos potencial malware. Levou literalmente dias para limpar meu pc. Como posso garantir que eu apenas baixei o Excel. Infelizmente, há incríveis quantidades de malware. Adware e spywar, e você pode ser muito cuidadoso. Se é uma questão de custo eu não estaria disposto a pagar uma soma razoável, mas o código deve ser PUP grátis. Obrigado, não há vírus, malware ou adware em minhas planilhas. I8217ve programado eu mesmo e sei exatamente o que está dentro deles. Há um link de download direto para um arquivo zip na parte inferior de cada ponto (em azul escuro, negrito e sublinhado). Isso é o que você deve baixar. Passe o mouse sobre o link, e você deve ver um link direto para o arquivo zip. Eu quero usar o meu acesso a preços ao vivo para criar indicadores de tecnologia ao vivo (ou seja, RSI, MACD etc). Acabei de perceber para uma precisão completa, eu preciso de 250 dias de dados para cada estoque em oposição aos 40 que tenho agora. Existe algum lugar para acessar dados históricos de coisas como EMA, Ganho Médico, Perda Média, da mesma forma que eu poderia usar esses dados mais precisos no meu modelo. Em vez de usar 252 dias de dados para obter o RSI correto de 14 dias, eu poderia obter um externo Valor estimado para o Ganho médio e perda média e vá daqui, eu quero que meu modelo mostre resultados de 200 ações em oposição a alguns. Eu quero traçar múltiplo EMA BB RSI no mesmo gráfico e com base em condições gostaria de desencadear o comércio. Isso funcionaria para mim como um exemplo de backtutry de excel. Você pode me ajudar a traçar vários timeseries em um mesmo gráfico usando o mesmo conjunto de dados. Eu sei como aplicar os dados brutos a uma planilha de Excel, mas como você aplica os resultados de ema. Os gráficos ema em excel podem ser ajustados em períodos específicos. Obrigado kliff mendes diz: oi, Samir, primeiro agradeço um milhão por todo seu trabalho árduo ... trabalho excelente DEUS ABENÇOADO. Eu só queria saber se eu tenho dois ema plotados no gráfico, digamos 20ema e 50ema quando eles cruzam para cima ou para baixo pode a palavra COMPRAR ou VENDER aparecer no ponto de cruzamento vai me ajudar muito. Kliff mendes texas I8217m trabalhando em uma planilha de backtesting simples que8217ll gera sinais de buy-sell. Me dê algum tempo8230 Ótimo trabalho em gráficos e explicações. Ainda tenho uma pergunta. Se eu alterar a data de início para um ano depois e verificar dados recentes da EMA, é visivelmente diferente do que quando eu uso o mesmo período EMA com uma data de início anterior para a mesma referência de data recente. É isso que você espera. Torna difícil olhar para os gráficos publicados com EMAs mostrados e não ver o mesmo gráfico. Shivashish Sarkar diz: oi, estou usando sua calculadora EMA e eu realmente aprecio. No entanto, notei que a calculadora não é capaz de traçar os gráficos para todas as empresas (mostra o erro de tempo de execução 1004). Você pode criar uma edição atualizada da sua calculadora em que as novas empresas serão incluídas. Deixe uma resposta Cancelar resposta. Como a base de dados do Mestre livre, baseadas no conhecimento. Mensagens recentes. Não tenho certeza da solução correta, porém, uma vez que a soma da média de cada amostra apresentaria uma quantidade razoável De erro de arredondamento. Hmm. Eu me pergunto se separar a parte fracionária de toda a parte ajudaria. Divida toda a parte de cada número pela contagem. Mantenha três somas correntes: 1) A média das partes inteiras, 2) O restante de cada divisão, e 3) A parte fracionada de cada número. Cada vez que a parte inteira de um número é dividida, todo o resultado da peça é adicionado à soma de execução média e o restante é adicionado ao restante da soma em execução. Quando a soma de execução restante obtém um valor maior ou igual à contagem, é dividido pela contagem com o resultado da parte inteira adicionado à soma de execução média e o restante adicionado à soma de execução restante. Além disso, em cada cálculo, a parte fracionada é adicionada à soma de rotura fracionada. Quando a média é concluída, a soma de execução restante é dividida pela contagem e o resultado é adicionado à soma de execução média como um número flutuante. Por exemplo: agora o que fazer com a soma de fluxo fracionada. O perigo de transbordar é muito menos provável aqui, embora ainda seja possível, de modo que uma maneira de lidar com isso seria dividir a soma de execução fracionada pela contagem no final e adicioná-la ao nosso resultado: uma alternativa seria verificar a operação fracionada Soma em cada cálculo para ver se é maior ou igual a contar. Quando isso acontece, faça o mesmo que fazemos com o restante da soma corrente. Excelente Jomit Vaghela 6-Mar-07 21:00 Eu gostei do que você disse que pequenos empregos rapidamente se transformam em grandes empregos. Pensar na otimização enquanto a codificação é uma boa prática. Grande esforço e explicação. Parece-me como o uso de dias de espera da EMA quando é o primeiro dia (e consequentemente não há ontem) pode ser baseado em dados diferentes, dependendo de quais artigos você lê. Eu não sou um especialista em ações, então estou indo o que eu tenho lido. Eu li no artigo Dummies com o qual eu liguei, que pode ser feito da maneira que eu mostrei e que é começar com o primeiro valor de fechamento de dias como quatyesterdays EMAquot. Você também pode usar uma média dos dias de encerramento ao longo do período (SMA, eu suponho). Mas parece-me que isso é usado apenas para o primeiro valor calculado (e usado como quatyesterdays EMAquot na fórmula), não da maneira que você fez. Assim, na sua captura de tela da sua publicação anterior, esse valor SMA3 em 1020, 27.733, NÃO seria colocado na coluna para EMA3 em 1020, mas seria usado no cálculo para EMA3 em 1018 como quatyesterdays EMAquot. Então, enquanto o SMA3 tem um zero para 1018 e 1019, o EMA3 NÃO teria zeros lá. O EMA3 para essas 2 datas deve ser 28.017 e 27.909. Então, no meu código onde eu faltei os EMAs anteriores para o SMVClose, podemos alterá-lo da seguinte maneira: Novamente, isso é baseado no que eu li e no artigo de Dummies mostra isso também. Eu realmente acho que isso é o que você quer. Bonnie DeWitt C MVP Marcado como resposta por newandold Domingo, 21 de dezembro de 2017 5:33 AM Quinta-feira, 18 de dezembro de 2017 às 16:52 Isso será muito mais fácil se você mudar seu código para usar ListltEmaDatagt, como já mencionei em um Resposta anterior. É o que eu sugeri anteriormente: gtgtadd as propriedades SMA para essa classe de dados. Eu liguei para a classe EmaData, mas isso é porque eu pensei que você estava apenas calculando valores de EMA, mas você pode seguir em frente e adicionar as propriedades do SMA também. Em seguida, modifique seus métodos para usar o mesmo ListltEmaDatagt para calcular o primeiro SMA e, em seguida, EMA (você provavelmente precisará de vários loops através da Lista).ltlt Então, uma vez que você fez o loop da lista e calculou seus valores SMA, use o valor SMA correto para Seu EMA inicial será muito mais fácil. Basta usar o mesmo código de loop que mostrei em uma resposta anterior para calcular o EMA (mas use um EMA de partida diferente baseado em SMA, em vez do jeito que eu fiz). Bonnie DeWitt C MVP Marcado como resposta por newandold Domingo 21 de dezembro de 2017 5:33 Sexta-feira, 19 de dezembro de 2017 11:28 PM Sempre que você se encontrar precisando de simplificar o código, sempre pense em criar um novo método para colocar alguns dos Código. O que eu fiz foi colocar o código repetitivo em um novo método: então, em vez de fazer tudo isso no seu loop original, você simplesmente chamou o novo método em vez disso: não é muito mais limpo Bonnie DeWitt C MVP Marcado como resposta por newandold Domingo, 21 de dezembro de 2017 5:33 Sábado, 20 de dezembro de 2017 às 17h44 Todas as respostas De acordo com o seu título, você mencionou o Exponential Moving Average, você quer dizer EMA no PowerPivot. Se assim for, existe um fórum especial para o seu problema, aqui está o link, o SQL Server gt Power Pivot. Gtgt eu tento, mas eu não tinha em c como fiz na vb (também é muito, muito lento em vb) e o resultado em c é diferente, então vb Então, o que você deseja alcançar? Deseja alterar o código que você postou No Cor, qualquer outra coisa, tenha um bom dia. Estamos tentando entender melhor as opiniões dos clientes sobre a experiência de suporte social, então sua participação neste projeto de entrevista seria muito apreciada se você tiver tempo. Obrigado por ajudar a tornar os fóruns comunitários um ótimo lugar. Clique AQUI para participar da pesquisa. Quarta-feira, 03 de dezembro de 2017 às 07:03 Sobre suas perguntas em resumo 1. O código C e VB para a mesma implementação do algoritmo EMA retorna um resultado diferente. 2. Você VB Code é muito lento. Para a primeira pergunta. C retorna um erro resultado Se assim for, você pode compartilhar o código C como você implementa o algoritmo EMA para me deixar fazer um teste local. Muito agradeceria se você fornecer informações mais detalhadas. Para a Segunda Pergunta Estamos tentando entender melhor os pontos de vista do cliente sobre a experiência de suporte social, então a sua participação neste projeto de entrevista seria muito apreciada se você tiver tempo. Obrigado por ajudar a tornar os fóruns comunitários um ótimo lugar. Clique AQUI para participar da pesquisa. Quinta-feira, 04 de dezembro de 2017 às 10h17. Ainda não tenho certeza da sua pergunta, mas eu suspeito que tenha algo a ver com a cor da célula com base na comparação de alguns cálculos, acho que você está dizendo que a comparação é diferente em C do que em VB. O único que eu posso pensar para lhe perguntar é: seus valores são armazenados como duplos ou decimais. Os dobros não são bons ao fazer comparações, enquanto você não terá esse problema com decimais. Você deve definitivamente armazenar seus dados como variáveis ​​decimais. Heres uma postagem de blog que escrevi sobre o assunto: Bonnie DeWitt C MVP sexta-feira, 5 de dezembro de 2017 4:40 PM Períodos de tempo 3 Multiplicador: (2 (Períodos de tempo 43 1)) EMA x multiplicador 43 EMA (dia anterior) Gostaria Para aplicar a fórmula EMA usando o arquivo txt da vírgula e exibi-lo no datagridview 1- por item único como fluxo 2- por todos os itens (receberá o último evento da gravação) como fluxo após o cálculo, usarei a condição de fluxo para obter a cor de O datagridview os dados usando como arquivo txt Você continua mostrando as mesmas coisas uma e outra vez. Isso não ajuda nenhum de nós a descobrir exatamente onde você está tendo um problema. Você poderia simplesmente explicar onde você está preso e não repetir as fotos ou os dados de novo? Já vimos isso uma vez por ano. Se as comparações não estiverem corretas, pode ter algo a ver com duplo vs decimal, como eu disse anteriormente. Se você está preso em obter os dados de um arquivo de texto, então, em que parte você está preso. Se você está preso a exibir dados em uma grade, então, onde exatamente é o problema. Se não for nenhuma dessas coisas, então, qual é a pergunta que você precisa responder? Tenho certeza de que não sou o único confundido por isso. Bonnie DeWitt C MVP sexta-feira, 5 de dezembro de 2017 às 22:19 Você continua mostrando as mesmas coisas uma e outra vez. Isso não ajuda nenhum de nós a descobrir exatamente onde você está tendo um problema. Você poderia simplesmente explicar onde você está preso e não repetir as fotos ou os dados de novo? Já vimos isso uma vez por ano. Se as comparações não estiverem corretas, pode ter algo a ver com duplo vs decimal, como eu disse anteriormente. Se você está preso em obter os dados de um arquivo de texto, então, em que parte você está preso. Se você está preso a exibir dados em uma grade, então, onde exatamente é o problema. Se não for nenhuma dessas coisas, então, qual é a pergunta que você precisa responder? Tenho certeza de que não sou o único confundido por isso. Bonnie DeWitt C MVP como calcular EMA (média móvel exponencial) os dados de origem são arquivos de vírgula vírgula sábado, 06 de dezembro de 2017 5:24 AM Eu entendo a fórmula agora do link que você postou, a fórmula em si é bastante simples. Mas que parte disso você está tendo um problema com a leitura do arquivo de texto Ou o que fazer com os números, uma vez que você os leu do arquivo de texto Ou como exibi-los em uma grade Como sobre isso. Por que você não nos mostra partes do seu código, especificamente a parte com a qual você está tendo problemas. Isso pode ser mais fácil para todos, para que não tenhamos que adivinhar o que você precisa saber. E, apenas por um instante, eu gotejei quotcalculate ema cquot e encontrei alguns links que poderiam ajudar. Eu não sei com certeza, porque não consigo descobrir em que parte você está preso, mas confira: o último artigo faz uso de uma biblioteca gratuita de código aberto chamada TA-Lib, Technical Analysis Library (há um link para clicar no artigo). Bonnie DeWitt C MVP Editado por BonnieB MVP, Moderador sábado, 06 de dezembro de 2017 6:06 esclarecimentos sábado, 06 de dezembro de 2017 6:05 AM Você tentou passar pelo seu código no depurador logo após ler o arquivo de texto, o Por exemplo: se (ComName SplitString0) sempre for falso, você iniciou ComName para uma string vazia. ComSize, portanto, sempre será zero e seu próximo loop não fará nada. Então, há seu problema lá. Eu tentei executar seu código e a primeira coisa que fiz foi definir um ponto de interrupção do depurador depois de ler no arquivo de texto. É assim que encontrei esse problema. Tente usar o depurador para percorrer seu código. Isso irá ajudá-lo a localizar os problemas mais facilmente você mesmo. Bonnie DeWitt C MVP Sábado, 06 de dezembro de 2017 3:39 PM Eu modifico o código apenas o show ComName no DataGridView3 eo resto não está sendo exibido, mas quando eu clico na célula que ele irá mostrar e se eu clicar em outro que ele irá mostrar E o anterior será escondido novamente, o resultado que eu estou obtendo é SMA (média móvel simples) não para EMA (média móvel exponencial) Sábado, 06 de dezembro de 2017 5:26 PM somente o show ComName no DataGridView3 eo resto não está sendo exibido Mas quando eu clicar na célula irá mostrar e se eu clicar em outro, ele irá mostrar e o anterior será escondido novamente Eu não vejo esse comportamento. Tudo se mostra bem na minha grade. No designer, eu simplesmente soltei um DataGridView no meu formulário, entrei nas propriedades da grade e depois na coleção de colunas e adicionei as 6 colunas. Não fiz nada mais, e tudo se mostra bem. Você deve estar fazendo outra coisa em sua grade, o que está causando o comportamento que você vê, mas não tenho certeza, no topo da minha cabeça, o que pode estar causando isso. Talvez suas colunas não estejam suficientemente largas Ou você fez alguma formatação nelas Ou você está lidando com qualquer tipo de eventos de linha ou célula que possam estar fazendo coisas estranhas Bonnie DeWitt C MVP Sábado, 06 de dezembro de 2017 às 5:58 PM Eu vou verificá-lo Obrigado Sábado, 06 de dezembro de 2017 às 18:19 Você é bem-vindo. Mantenha-nos informados sobre o seu progresso Bonnie DeWitt C MVP Sábado, 06 de dezembro de 2017 10:14 PM para DataGridView3 está funcionando agora para a fórmula não funciona e eu tento isso também, mas ambos não funcionam o que eu não consigo alcançar O primeiro EMA ( Dia anterior) (soma dos últimos três (preço de fechamento) 3) Eu deveria usar o preço de fechamento como o início da EMA para que seja (27,1) stand de 27,733 o verde) considerando o final do período (como se EMA de 3 dias terá as últimas duas linhas como (0) porque é menos 3 Eu acho que você está dizendo que o verde para EMA3 deve ser 27,1 em vez de 27,33, mas os dois últimos estão corretamente em 0. Isso é correto Se Então, eu tenho uma solução simples para você. Não tenho certeza qual dos dois fragmentos de código que você acabou de mostrar na sua última publicação são os que você está usando agora, mas estou usando o código da sua publicação anterior (antes do último). Todos Você tem que fazer é fazer as seguintes mudanças: Isso deve fazê-lo. Isso funcionou para mim com a versão do código que estou usando. Bonnie D EWitt C MVP Domingo, 07 de dezembro de 2017 4:46 PM não está funcionando, mas abaixo estão os dados do arquivo de texto e o truque no EMA (dia anterior), como começará o início 1- usando o preço fechado como você fez Na sua última publicação 2 - usando a média móvel simples, você irá recodificar isso. Eu desisto Períodos de tempo 3 Multiplicador: (2 (Períodos de tempo 43 1)) EMA x multiplicador 43 EMA (dia anterior) Gostaria de aplicar a fórmula EMA usando o arquivo txt da vírgula e exibi-lo no datagridview 1- por item único como fluxo 2 - por todo o item (receberá o último evento do registro) como fluxo os dados usando como arquivo txt para obter mais informações sobre EMA não quando eu uso todo o código que eu fiz no arquivo txt grande será muito lento Muito obrigado Por toda a sua ajuda, eu realmente aprecio sim, mas não funciono para o arquivo de texto e esta é a primeira publicação que resolve a leitura EMA do arquivo txt da vírgula. Eu pesquiso na internet, mas não encontrei. Mesmo que eu o fizesse com o código acima que ainda não o fazia direito, eu fiz a média móvel simples em c da maneira que eu codifiquei acima, mas não é eficiente. É muito lento para o grande registro, há jQuery, mas eu preciso dele como c, então eu estou procurando um código diferente que pode lidar com um registro muito grande com a condição da cor da célula datagridview como abaixo int DLaetRow DataGridView3. Linhas. Count - 2 if (ema3 gt Math. Abs (((((2) (smvClose)) 100) 43 (smvClose))) DataGridView3. Linhas DLaetRow. Células 3. Estilo. Cor BackColor. LightGreen else if (ema3 lt Math. Abs (((((2) (smvClose)) 100) - (smvClose))) DataGridView3. Linhas DLaetRow. Células 3. Estilo. Cor BackColor. Red Editado por newandold Terça-feira, 09 de dezembro de 2017 9:33 PM Terça-feira, 09 de dezembro de 2017 9:32 PM OK, finalmente consegui um tempo para fazer isso, e eu deveria ter pensado em fazê-lo assim desde o começo. Crie uma classe EmaData para manter os valores calculados para cada linha de dados e use um ListltEmaDatagt para mantê-los todos. Então você pode fazer todos os cálculos em um loop através dos dados. É o que eu acabei com: Bonnie DeWitt C MVP Sábado, 13 de dezembro de 2017 5:59 PM obrigado por seu tempo e ajudá-lo é código rápido, foi feito usando o preço fechado, mas não foi o último preço fechado como iniciando Preciso de algumas mudanças, por favor, como fluxo, obrigado, este ótimo trabalho e por favor, eu posso ter isso também 2- por todos os itens (receberá o último evento do registro) como fluxo, obrigado, eu realmente aprecio isso Editado por newandold Sábado, 13 de dezembro , 2017 9:59 PM Recebi as informações sobre como calcular o EMA a partir deste link: Considero que os quotDummiesquot books são fontes autorizadas. Se você olhar para a grade que eles mostram para o cálculo, em nenhum lugar existem zeros para nenhum dos cálculos EMA. Então, é por isso que você não vê isso com meu código. Se você quiser torná-los zero, tudo o que você precisa fazer é mudar o código para configurá-lo para zero para a entrada apropriada (eu realmente não sei por que você quer isso, porém, ele não parece ser um resultado padrão para a EMA): Seu A segunda questão é simplesmente uma questão de obter a entrada dos últimos dias do SMVList, que seria SMVListSMVList. Count - 1. Tenho certeza de que você pode descobrir como conseguir isso e colocá-lo naquela segunda grade (Análise EMA). Bonnie DeWitt C MVP sábado, 13 de dezembro de 2017 10:17 PM Desculpe, postei algo incorretamente na minha publicação anterior. Uma vez que o SMVList está em ordem cronológica inversa, a última entrada de datas seria, na verdade, a primeira na lista, então você quer se mostrar como SMVList0. Eu também queria adicionar ao meu comentário sobre os zeros que não pertencem aos cálculos EMA. Parece fazer sentido com os cálculos SMA que você estava fazendo anteriormente, mas ainda não vejo sentido com os cálculos EMA (novamente, isso é de acordo com o link do livro Dummies, porque eu pessoalmente não conheço absolutamente nada sobre a EMA). Bonnie DeWitt C MVP Domingo, 14 de dezembro de 2017 2:42, e sobre esse item 2- por todos os itens (receberá o último evento do registro) como fluxo obtendo o último evento para todos os itens, como acima, eu o teste, mas como você vê Abaixo Editado por newandold domingo 14 de dezembro de 2017 às 4:02 domingo, 14 de dezembro de 2017 às 3:51 da manhã Sim, bem, obviamente, obtive-os ambos para trás, não me desculpe, mas você provavelmente poderia ter conseguido descobrir isso você mesmo. Mas, eu só quero salientar que isso enrola todos os outros cálculos, uma vez que a fórmula depende dos cálculos EMA dos dias anteriores (que não deve ser zero. Mas é quando você coloca essa mudança). Eu realmente não acho que isso faz sentido. Você olhou para o link que postei no artigo Dummies. Insira os valores da tabela desse link em seu arquivo de texto e você verá que meu código original corresponde ao que ele mostra na tabela. Mas, se você insistir em torná-los zero, então suponho que possamos superar isso sempre fazendo os dias anteriores EMA. Faça isso dessa maneira: ainda não concordo com isso, mas o que eu sei. Bonnie DeWitt C MVP Domingo, 14 de dezembro de 2017 5:47 AM Obrigado pelo seu esforço, o resultado não era tão necessário ou correto. Mas para o código foi muito bom para a velocidade de carregamento no datagradview. 1- obtenha a média móvel simples 2 - crie uma lista da (média móvel simples) deixe-nos tomar EMA3 a - usará o valor do último sma como o primeiro valor de ema no cálculo, mas ambos têm o mesmo período que 3 Eu adiciono Pic para explicar mais também Estou tentando fazê-lo usando seu código Editado por newandold Segunda-feira, 15 de dezembro de 2017 7:56 PM Desculpe-me por não poder gastar mais tempo neste agora. Você continua mudando o que deseja, ou pelo menos parece ser assim. O melhor que posso dizer agora é adicionar as propriedades SMA a essa classe de dados. Eu liguei para a classe EmaData, mas isso é porque eu pensei que você estava apenas calculando valores de EMA, mas você pode seguir em frente e adicionar as propriedades do SMA também. Em seguida, modifique seus métodos para usar o mesmo ListltEmaDatagt para calcular o primeiro SMA e, em seguida, EMA (você provavelmente precisará de vários loops através da Lista). Eu não acho que será muito difícil de fazer, eu simplesmente não posso mexer com isso agora. Mas, acho que você conseguirá descobrir isso. Bonnie DeWitt C MVP Terça-feira, 16 de dezembro de 2017 12:25 AM Você continua mudando o que você quer, ou pelo menos parece-me assim da minha antiga postagem O primeiro EMA (dia anterior) último preço fechado ou (soma dos últimos três (Preço de fechamento) 3) também da postagem antiga para obter mais informações sobre EMA se você gosta de marcar sua postagem como resposta. Eu farei isso, mas para outros whos que procuram EMA terão um resultado errado Editado por newandold terça-feira, 16 de dezembro de 2017 5 : 24:00 Parece-me como o uso de ontem EMA quando é o primeiro dia (e conseqüentemente não há ontem) pode ser baseado em dados diferentes, dependendo de quais artigos você lê. Eu não sou um especialista em ações, então estou indo o que eu tenho lido. Eu li no artigo Dummies com o qual eu liguei, que pode ser feito da maneira que eu mostrei e que é começar com o primeiro valor de fechamento de dias como quatyesterdays EMAquot. Você também pode usar uma média dos dias de encerramento ao longo do período (SMA, eu suponho). Mas parece-me que isso é usado apenas para o primeiro valor calculado (e usado como quatyesterdays EMAquot na fórmula), não da maneira que você fez. Assim, na sua captura de tela da sua publicação anterior, esse valor SMA3 em 1020, 27.733, NÃO seria colocado na coluna para EMA3 em 1020, mas seria usado no cálculo para EMA3 em 1018 como quatyesterdays EMAquot. Então, enquanto o SMA3 tem um zero para 1018 e 1019, o EMA3 NÃO teria zeros lá. O EMA3 para essas 2 datas deve ser 28.017 e 27.909. Então, no meu código onde eu faltei os EMAs anteriores para o SMVClose, podemos alterá-lo da seguinte maneira: Novamente, isso é baseado no que eu li e no artigo de Dummies mostra isso também. Eu realmente acho que isso é o que você quer. Bonnie DeWitt C MVP Marcado como resposta por newandold Domingo, 21 de dezembro de 2017 5:33 AM Quinta-feira, 18 de dezembro de 2017 4:52 PM obrigado demais para explicar isso Editado por newandold Sexta-feira, 19 de dezembro de 2017 2:00 PM sexta-feira, 19 de dezembro de 2017 1:51 PM Eu compartilho o código c Editado por newandold Sexta-feira, 19 de dezembro de 2017 10:09 PM Sexta-feira, 19 de dezembro de 2017 10:08 PM Recebo o último valor de SMA (média móvel simples ) Para ser o início do cálculo da EMA, pois a foto abaixo não é boa como sua maneira de codificar, não será rápido como seu código, mas para limpar onde começar o cálculo do EMA (o primeiro (ema3prev) agora como aplicar a linha. X3 Matemática. Rodada ((linha. SMVClose k3) 43 (ema3prev (1 - k3)), 3. MidpointRounding. AwayFromZero) sexta-feira, 19 de dezembro de 2017 10:23 PM Isso será muito mais fácil se você alterar seu código para usar ListltEmaDatagt, como já mencionei em uma resposta anterior. Heres o que eu sugeri anteriormente: gtgtadd as propriedades SMA para essa classe de dados. Liguei para a classe EmaDa Ta, mas isso é porque eu pensei que você estava apenas calculando valores de EMA, mas você pode seguir em frente e adicionar as propriedades SMA também. Em seguida, modifique seus métodos para usar o mesmo ListltEmaDatagt para calcular o primeiro SMA e, em seguida, EMA (você provavelmente precisará de vários loops através da Lista).ltlt Então, uma vez que você fez o loop da lista e calculou seus valores SMA, use o valor SMA correto para Seu EMA inicial será muito mais fácil. Basta usar o mesmo código de loop que mostrei em uma resposta anterior para calcular o EMA (mas use um EMA de partida diferente baseado em SMA, em vez do jeito que eu fiz). Bonnie DeWitt C MVP Marcado como resposta por newandold Domingo 21 de dezembro de 2017 5:33 Sexta-feira, 19 de dezembro de 2017 11:28 PM o que eu fiz e agora está trabalhando Eu tento adicionar EMA5 EMA9 EMA10 e assim por diante o código foi Muito longo é de jeito curto e profissional Preciso de seu toque este o código que é real é o seu código. Sou grato pela sua ajuda sábado, 20 de dezembro de 2017 às 15h43. Sempre que você precisar de simplificar o código, sempre pense em Criando um novo método para colocar um pouco do código. O que eu fiz foi colocar o código repetitivo em um novo método: então, em vez de fazer tudo isso em seu loop original, você simplesmente ligue para o novo método: não é muito mais limpo Bonnie DeWitt C MVP Marcado como resposta por newandold Domingo, 21 de dezembro de 2017 5:33 AM Sábado, 20 de dezembro de 2017 5:44 PM Como faço para que seja todo o índice como obter o último evento para todos os itens, como acima, quando eu tentar Recebo todos os registros de ambos (DATATWO E ONEDATA) agradeço pelo seu apoio e testei a modificação de seu código em l Dados de arge para itens de canto e foram rápidos o suficiente Sábado, 20 de dezembro de 2017 10:23 PM Quando você deseja obter os dados para ambos os itens, você pode usar um dicionário para armazenar múltiplas listas. Você precisaria mudar seu método MAByItem () para retornar um ListltEmaDatagt, então ficaria assim: E então, você ligaria para esse método um pouco diferente do que você estava chamando antes: Talvez seja necessário mudar algumas outras coisas no seu MAbyitem (), Porque não sei como você deseja exibir a outra grade com a qual estamos trabalhando. Talvez chame o método AddDataToGrid () aqui em vez do método MAbyitem (). E talvez passe a grade que você deseja como um parâmetro do método AddDataToGrid (). Mas, de qualquer forma, você deve descobrir o resto, espero. Bonnie DeWitt C MVP Domingo 21 de dezembro de 2017 12:28 Eu tento usar o código, mas tenho mais de 300 itens, mas não trabalho Editado por newandold Domingo 21 de dezembro de 2017 12:10 PM Domingo, 21 de dezembro de 2017 11 : 43 da manhã eu disse que você precisava mudar seu código um pouco mais, o ponto principal da minha última resposta era sobre usar um dicionário para armazenar as listas para ambos os itens. Eu não sabia sobre o seu método AllItems (), mas obviamente tem que ser um pouco diferente do seu método MAbyitem (). Volte a usar o dicionário, como mostrei na minha resposta anterior, mas use-o em seu método AllItems () como este: Bonnie DeWitt C MVP Domingo, 21 de dezembro de 2017 4:34 PM adicione o código abaixo do erro Eu tenho domingo, 21 de dezembro de 2017 7:32 PM Qual método é essa exceção ocorrendo em Eu não entendo por que você não está usando meu código, a parte em que todos esses cálculos são encapsulados em um método, o método CalcEmaX () que é chamado de O método CalcEma (). Eu pensei que você concordou que estava funcionando OK, então por que você está usando código diferente O que é svmTmpInt200 Isso é algo novo. Com base nas suas convenções de nomenclatura, isso parece indicar que ele tem um valor de 200. Eu acho que o problema é que SMVList. Count - svmTmpInt200 é negativo (porque sua Count é menor que 200), então, como você está fazendo o loop para trás, eu sou Sempre vai ser maior do que esse valor e, conseqüentemente, o loop não tem ponto de parada e eu continuo decrementando até que seja negativo também, então você obtém a exceção. Poste algum código relevante, por favor. Bonnie DeWitt C MVP Domingo, 21 de dezembro de 2017 9:02 PM Eu apenas adiciono mais Período e todo o código está aqui por isso está funcionando para o item de sinal para o (i gt SMVList. Count - svmTmpInt200) eu tento substituí-lo por diferentes De modo que não se limite ao Período específico sim, estou testando outra maneira de tomar seu código como minha referência Editado por newandold Domingo, 21 de dezembro de 2017 9:44 PM Domingo, 21 de dezembro de 2017 9:28 PM no código antigo que foi lento , Eu estava usando o cabeçalho do datagridview domingo 21 de dezembro de 2017 às 22:16 Você já tentou meu código. Você disse que funcionou bem e foi rápido. E, no entanto, você não está usando a forma como eu escrevi. Você seria muito melhor usando os métodos CalcEmaX () e AddDataToGrid () que contém todo esse código redundante (principalmente todos os ifs). Seu código é muito incomodado caso contrário (e você queria evitar isso). Mas, não é onde o problema atual é, porque o problema está em que você está tentando calcular o smaX para usar como seu ponto de partida do emaX. Eu acho que você pode criar um método CalcSmaX () para tornar o código de cálculo SMA um pouco mais limpo também, mas novamente esse não é o problema. O problema é que você não tem 200 linhas na sua lista e, no entanto, você obteve um loop que assume que você faz. Você precisa verificar seus limites: altere isso: for (int i SMVList. Count - 1 i gt SMVList. Count - svmTmpInt200 Eu--) para isso: int max SMVList. Count - svmTmpInt200 se (max lt 0) max 0 for (int i SMVList. Count - 1 i gt max i--) Bonnie DeWitt C MVP segunda-feira, 22 de dezembro de 2017 12: 11 de maio, obrigado por sua ajuda, sim, o código não é tão bom, mas vou recomeçar novamente segunda-feira, 22 de dezembro de 2017 8:35 PM Você está bem-vindo Esperamos que você possa fazer isso funcionar em breve 0) Bonnie DeWitt C MVP terça-feira, 23 de dezembro, 2017 4:42 PM A Microsoft está conduzindo uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn. Gostaria de participar da Microsoft 2017. Todos os direitos reservados.

No comments:

Post a Comment