Quero calcular uma média móvel dos últimos, digamos, 20 números de uma coluna. Um problema é que algumas das células da coluna podem estar vazias, elas devem ser ignoradas. Exemplo: Uma média móvel dos últimos três seria (155167201) / 3. Eu tentei implementar isso usando média, deslocamento, índice, mas eu simplesmente não sei como. Eu estou um pouco familiarizado com macros, para que tal solução funcionaria bem: MovingAverage (A13) Obrigado por quaisquer dicas ou soluções perguntou Mar 12 11 às 15:36 Digite isso com controlshiftenter para torná-lo uma fórmula de matriz. Isto irá encontrar os últimos três valores. Se você quiser mais ou menos, altere as duas instâncias de 3 na fórmula para o que você quiser. Esta parte retorna o quarto maior número de linhas de todas as células que possuem um valor, ou 5 no seu exemplo, porque as linhas 6, 8 e 9 são da 1ª até a 3ª linhas mais altas com um valor. Esta parte retorna 9 TRUEs ou FALSEs com base em se o número da linha é maior que o 4º maior. Isso multiplica os valores em A1: A9 por esses 9 TRUEs ou FALSEs. TRUEs são convertidos para 1 e FALSEs para zero. Isto deixa uma função SUM como esta Porque todos os valores acima de 155 não satisfazem o critério do número da linha, o resultado é multiplicado por zero. Eu escrevi um pequeno script no VBA. Espero que ele faça o que quiser. Aqui você está: 1) Eu limitei para 360 células. Isso significa que o script não procurará mais de 360 células. Se você quiser alterá-lo, altere o valor inicial do contador. 2) O script retorna a média não arredondada. Altere a última linha para MovingAverage Round (CDbl (tmp / i), 2) 3) O uso é exatamente como você queria, basta digitar MovingAverage (a13) na célula. Quaisquer comentários são bem-vindos. Como calcular o EMA no Excel Aprenda a calcular a média móvel exponencial no Excel e no VBA e obtenha uma planilha eletrônica conectada à Web gratuitamente. A planilha recupera dados de estoque do Yahoo Finance, calcula a EMA (durante a 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 descubra por que a EMA é importante para os traders técnicos e analistas de mercado. Os gráficos históricos de preços de ações são frequentemente poluídos com muito ruído de alta frequência. Isso muitas vezes obscurece as principais tendências. Médias móveis ajudam a atenuar essas pequenas flutuações, dando a você uma percepção maior 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, menor a importância dos dados mais recentes. EMA é definido por esta equação. today8217s price (multiplicado por um peso) e yesterday8217s EMA (multiplicado por 1 weight) Você precisa dar o kickstart no cálculo do 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 2013 e 14 de janeiro de 2014. Traders técnicos frequentemente usam o cross-over de duas médias móveis 8211 com uma pequena escala de tempo e outro com uma longa 8211 escala de tempo para gerar sinais de compra / venda. Frequentemente, são utilizadas médias móveis de 12 e 26 dias. Quando a média móvel mais curta se eleva acima da média móvel mais longa, o mercado está tendendo para cima, este é um sinal de compra. No entanto, quando as médias móveis mais curtas ficam abaixo da média móvel longa, o mercado está caindo, esse é um sinal de venda. O Let8217s primeiro aprende como calcular o EMA usando funções de planilha. Depois disso, vamos descobrir como usar o VBA para calcular o EMA (e traçar automaticamente os gráficos). Calcular o EMA no Excel com as funções de planilha. Etapa 1. Let8217s dizem que queremos calcular a MME de 12 dias do preço das ações da Exxon Mobil8217s. Nós primeiro precisamos obter os preços das ações históricas 8211 você pode fazer isso com este downloader de cotação de ações em massa. Passo 2 . Calcule a média simples dos primeiros 12 preços com a função Average () do Excel8217s. No screengrab 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 da EMA acima. Você a terá calculado com sucesso em um indicador técnico importante, EMA, em uma planilha. Calcule o EMA com o VBA Agora, o let8217s mecaniza os cálculos com o VBA, incluindo a criação automática de gráficos. Eu não mostrei o VBA completo aqui (ele está disponível na planilha abaixo), mas vamos discutir o código mais crítico. Etapa 1. Faça o download das cotações de ações históricas para seu ticker do Yahoo Finance (usando arquivos CSV) e carregue-as no Excel ou use o VBA nesta planilha para obter cotações históricas diretamente no Excel. Seus dados podem ser parecidos com isto: Etapa 2. É aqui que precisamos exercitar algumas braincells 8211 precisamos implementar a equação EMA no VBA. Podemos usar o estilo R1C1 para inserir programaticamente fórmulas em células individuais. Examine o trecho de código abaixo. EMAWindow é uma variável que equivale à janela de tempo desejada numRows é o número total de pontos de dados 1 (o 8220 18221 é porque supomos que os dados de estoque reais começam na linha 2) o EMA é calculado na coluna h Assumindo que EMAWindow 5 e numrows 100 (isto é, 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 a EMA dos 95 restantes. data points Etapa 3 Essa função VBA cria um gráfico do preço de fechamento e da EMA. Ótimo trabalho em gráficos e explicações. Eu tenho uma pergunta embora. Se eu alterar a data de início para um ano mais tarde e observar os dados recentes da EMA, será visivelmente diferente quando usar o mesmo período de EMA com uma data de início anterior para a mesma referência de data recente. É isso que você espera. Isso dificulta a visualização de gráficos publicados com EMAs exibidos e não o mesmo gráfico. Shivashish Sarkar diz: Oi, eu estou usando sua calculadora EMA e eu realmente aprecio. No entanto, tenho notado que a calculadora não é capaz de plotar os gráficos para todas as empresas (mostra erro de tempo de execução 1004). Você pode por favor criar uma edição atualizada de sua calculadora em que novas empresas serão incluídas Deixe uma resposta Cancelar resposta Como o Free Spreadsheets Master Base de Conhecimento Recent PostsHere é um código que deve ser útil para aqueles que utilizam análise técnica na negociação e deseja testar estratégias no Excel. Calcula a média móvel simples, linearmente ponderada e exponencial. Além disso, apresentarei e explicarei as etapas para criar o formulário e o código do VBA. Inserir um UserForm 8211 Nome: MAForm Adicionar quatro rótulos dos controles de caixa de ferramentas 8211 Legendas como por acima de tela de impressão Adicione um ComboBox para a seleção de tipo de média móvel. Foi nomeado comboTypeMA Adicione dois controles RefEdit para o intervalo de entrada e o intervalo de saída. Adicione um TextBox para selecionar o período de média móvel Adicione dois botões: Nome: buttonSubmit, Legenda: Enviar e Nome: buttonCancel, Legenda: Cancelar Para gerar a lista suspensa para seleção de tipo MA e carregar o formulário do usuário, um novo módulo será inserido com o código abaixo. Os itens ComboBox com os tipos de médias móveis e o formulário do usuário serão carregados. Option Explicit Sub loadMAForm () Com MAFormboTypeMA. RowSource. AddItem Simples. AddItem Ponderado. AddItem Exponencial End Com MAForm. Show End Sub Abaixo está o código atribuído ao botão Submit. Private Sub buttonSubmitClick () Dim inputRange, outputFaixa como Intervalo O inputRange conterá a série de preços usada para calcular os MAs e o outputRange será preenchido com os valores das médias móveis. Dim inputPeriod As Integer O período da média móvel é declarado. Dim inputAddress, outputAddress As String Os intervalos de entrada e saída declarados como string. If comboTypeMA. Value ltgt Exponential E comboTypeMA. Value ltgt Simples E comboTypeMA. Value ltgt Weighted True Então MsgBox Por favor selecione um tipo de média móvel da lista. RefInputRange. SetFocus Exit Sub Esta parte do procedimento impõe as primeiras restrições em relação aos dados submetidos. Se o tipo de média móvel não estiver contido na lista suspensa, o procedimento não prosseguirá para a próxima etapa e o usuário será solicitado a selecioná-lo novamente. ElseIf RefInputRange. Value Then MsgBox Por favor, selecione o intervalo de entrada. RefInputRange. SetFocus Sair Sub ElseIf RefOutputRange. Value Then MsgBox Por favor, selecione o intervalo de saída. RefOutputRange. SetFocus Sair Sub ElseIf RefInputPeriod. Value Then MsgBox Selecione o período da média móvel. RefInputPeriod. SetFocus Sair Sub ElseIf Not IsNumeric (RefInputPeriod. Value) Em seguida, MsgBox O período médio de movimentação deve ser um número. RefInputPeriod. SetFocus Exit Sub End Se outras restrições forem criadas. O intervalo de entrada, o intervalo de saída e o período de entrada não devem ficar em branco. Além disso, o período de média móvel deve ser um número. inputAddress RefInputRange. Value Definir inputRange Intervalo (inputAddress) outputAddress RefOutputRange. Value Definir outputRange Intervalo (outputAddress) inputPeriod RefInputPeriod. Value Os argumentos para os intervalos inputRange e outputRange serão inputAddress e outputAddress serão declarados como cadeias. If inputRange. Columns. Count ltgt 1 Então o campo MsgBox Input pode ter apenas uma coluna. RefInputRange. SetFocus Exit Sub O inputRange deve conter apenas uma coluna. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Em seguida, MsgBox O intervalo de saída tem um número diferente de linhas que o intervalo de entrada. RefInputRange. SetFocus Exit Sub End If O inputRange e outputRange devem ter um número igual de linhas. Dim RowCount Como Integer RowCount inputRange. Rows. Count Dim cRow Como Integer ReDim inputarray (1 Para RowCount) Para cRow 1 Para RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Próximo cRow inputarray é declarado como array e elementos it8217s correspondem aos valores de cada linha do intervalo de entrada. Se inputPeriod gt RowCount Then MsgBox O número de observações selecionadas é o amp amp RowCount e o período é amp inputPeriod amp. O intervalo de entrada deve ter uma quantidade maior ou igual de elementos que o período selecionado. RefInputRange. SetFocus Exit Sub End Se Outra restrição for incluída 8211 O intervalo de entrada deve ter uma quantidade maior ou igual de elementos que o período. If inputPeriod lt 0 Then MsgBox O período médio móvel deve ser maior que 0. RefInputPeriod. SetFocus Sair Sub End If O período da média móvel deve ser maior que zero. ReDim outputarray (inputPeriod To RowCount) Como variante Além disso, as dimensões da matriz de outputarray são determinadas. O limite inferior da matriz é o valor de inputPeriod e o limite superior é o valor de RowCount (o número de elementos na inputRange). Abaixo parte do procedimento calculou a média móvel simples, se a seleção para comboTypeMA for simples. SMA ----------------------------------------- Se comboTypeMA. Value Simples Então Dim i , J As Integer Dim temp Como Double For i inputPeriod Para RowCount temp 0 Para j (i - (inputPeriod - 1)) Para i temp temp inputarray (j) Avançar j outputarray (i) temp / inputPeriod outputRange. Cells (i, 1 ).Value outputarray (i) Próximo i outputRange. Cells (0, 1).Valor SMA (amp inputPeriod amp) Basicamente, o procedimento calcula a média móvel dos últimos x números (x é igual ao inputPeriod), começando com o elemento do inputarray igual ao inputPeriod. Abaixo está um exemplo simplificado, que mostra cada etapa do procedimento. Neste exemplo, há quatro números (no01, no02, no03 e no04) da linha 1 para a linha 4 e o período da média móvel é 3. Após cada nova média móvel ser computada, cada célula da outputRange obterá o valor da média. outputarray. E depois que todas as médias móveis são calculadas, na célula acima de outputRange, um título será inserido contendo o tipo e período de média móvel. Esta próxima parte irá calcular a média móvel exponencial. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponencial e Dim alpha As Double alpha 2 / (inputPeriod 1) Para j 1 To inputPeriod temp temp inputarray (j) Próximo j outputarray (inputPeriod) temp / inputPeriod Primeiro, o valor de alfa é determinado. Como no cálculo, o valor do EMA é baseado no EMA anterior, o primeiro será a média móvel simples. Para i inputPeriod 1 Para RowCount outputarray (i) outputarray (i - 1) alpha (inputarray (i) - outputarray (i - 1)) Next i Começando com a segunda média móvel, eles serão computados com base na fórmula acima: EMA anterior mais alfa multiplicado pela diferença entre o número atual da matriz de entrada e o valor EMA anterior. Para i inputPeriod Para RowCount outputRange. Cells (i, 1).Value outputarray (i) Próximo i outputRange. Cells (0, 1).Valor EMA (amp inputPeriod amp) Assim como o código para SMA, o outputarray será preenchido e a célula acima outputarray representará o tipo e período da média móvel. Abaixo está o código para calcular a média móvel ponderada. WMA ------------------------------------------ ElseIf comboTypeMA. Value Ponderado e Dim temp2 Como Inteiro Para i inputPeriod Para RowCount temp 0 temp2 0 Para j (i - (inputPeriod - 1)) Para i temp temp inputarray (j) (j - i inputPeriod) temp2 temp2 (j - i inputPeriod) Próximo j outputarray (i ) temp / temp2 outputRange. Cells (i, 1).Valor outputarray (i) Próximo i outputRange. Cells (0, 1).Valor WMA (amp inputPeriod amp) End If A tabela abaixo contém as etapas para calcular cada variável usada para o cálculo WMA. Assim como no exemplo anterior, neste há os números no inputRange. e o período de entrada é 3. Abaixo está o código final do procedimento, que descarrega o formulário do usuário. Descarregar MAForm End Sub O procedimento abaixo é para o botão Cancel. Ele será adicionado no mesmo módulo. Privado Sub buttonCancelClick () Unload MAForm End Sub
No comments:
Post a Comment