Monday 17 July 2017

Simple Moving Average Vba


Aqui está um código que deve ser útil para quem usa análise técnica na negociação e quer testar estratégias no Excel. Ele calcula a média móvel simples, linearmente ponderada e exponencial. Além disso, vou apresentar e explicar as etapas para criar o formulário e o código VBA. Inserir um UserForm 8211 Nome: MAForm Adicionar quatro etiquetas dos controles Toolbox 8211 Legendas conforme a tela de impressão acima Adicionar uma ComboBox para a seleção de tipo de média móvel. Foi chamado comboTypeMA Adicione dois controles RefEdit para o intervalo de entrada e o intervalo de saída. Adicionar uma caixa de texto para selecionar o período médio móvel Adicionar dois botões: Nome: botãoSubmit, Legenda: Enviar e Nome: botãoCancelar, Legenda: Cancelar Para gerar a lista suspensa para a seleção do tipo MA e carregar o formulário do usuário, um novo módulo Será inserido com o código abaixo. Os itens da ComboBox devem ser preenchidos por tipos de médias móveis e o formulário do usuário será carregado. Option Explicit Sub loadMAForm () Com MAFormboTypeMA. RowSource. AddItem Simples. AddItem Ponderado. AddItem Exponential End Com MAForm. Show End Sub Abaixo está o código atribuído ao botão Enviar. Private Sub buttonSubmitClick () Dim inputRange, outputRange As Range O inputRange conterá a série de preços usada para computar as MAs e o outputRange será preenchido com os valores das médias móveis. Dim InputPeriod As Integer O período médio móvel é declarado. Dim inputAddress, outputAddress As String Os intervalos de entrada e saída declarados como string. Se comboTypeMA. Value ltgt Exponential e comboTypeMA. Value ltgt Simples e comboTypeMA. Value ltgt Weighted True Then MsgBox Selecione um tipo de média móvel da lista. RefInputRange. SetFocus Exit Sub Esta parte do procedimento impõe as primeiras restrições relativas aos dados enviados. Se o tipo de média móvel não estiver contido na lista suspensa, o procedimento não procederá ao próximo passo e o usuário será solicitado a selecioná-lo novamente. ElseIf RefInputRange. Value Então MsgBox Selecione o intervalo de entrada. RefInputRange. SetFocus Exit Sub ElseIf RefOutputRange. Value Então MsgBox Selecione o intervalo de saída. RefOutputRange. SetFocus Exit Sub ElseIf RefInputPeriod. Value Then MsgBox Selecione o período médio móvel. RefInputPeriod. SetFocus Exit Sub ElseIf Not IsNumeric (RefInputPeriod. Value) Então MsgBox Moving período médio 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 estar em branco. Além disso, o período médio móvel deve ser um número. InputAddress RefInputRange. Value Set inputRange Range (inputAddress) outputAddress RefOutputRange. Value Definir outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Os argumentos para inputRange e outputRange intervalos serão inputAddress e outputAddress declarados como strings. Se inputRange. Columns. Count ltgt 1 Então o intervalo de entrada MsgBox pode ter apenas uma coluna. RefInputRange. SetFocus Exit Sub O inputRange deve conter apenas uma coluna. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Então MsgBox O intervalo de saída tem um número diferente de linhas do 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 As Integer RowCount inputRange. Rows. Count Dim cRow As Integer ReDim inputarray (1 para RowCount) Para cRow 1 Para RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Next cRow inputarray é declarado como matriz e it8217s Corresponde aos valores de cada linha do intervalo de entrada. Se inputPeriod gt RowCount Then MsgBox O número de observações selecionadas é amplificador amp RowCount e o período é amplificador amplificador InputPeriod. 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 adicionada 8211 O intervalo de entrada deve ter uma quantidade maior ou igual de elementos do que o período. Se inputPeriod lt 0, então MsgBox Moving período médio deve ser superior a 0. RefInputPeriod. SetFocus Exit Sub End If O período médio móvel deve ser superior a zero. ReDim outputarray (inputPeriod To RowCount) Como Variant Também são determinadas as dimensões da matriz do outputarray. O limite inferior da matriz é o valor inputPeriod eo limite superior é o valor de RowCount (o número de elementos na entradaRange). Abaixo da parte do procedimento calculado a média móvel simples, se a seleção para comboTypeMA for simples. SMA ----------------------------------------- Se comboTypeMA. Value Simples Então Dim i J Como Inteiro Dim temp Como Duplo Para i inputPeriod Para Temporidade RowCount 0 Para j (i - (inputPeriod - 1)) Para i temp temp inputarray (j) Próximo j outputarray (i) entrada temporáriaPeriod outputRange. Cells (i, 1).Value outputarray (i) Next i outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) Basicamente, o procedimento calcula a média móvel dos últimos números x (x é igual ao inputPeriod), começando pelo elemento de O inputarray igual ao InputPeriod. Abaixo está um exemplo simplificado, que mostra cada etapa do procedimento. Neste exemplo, existem quatro números (no01, no02, no03 e no04) da linha 1 à linha 4 e o período médio móvel é 3. Após cada nova média móvel, cada célula do outputRange irá tirar o valor do Outputarray. E depois de todas as médias móveis são computadas, na célula acima do outputRange será inserido um título contendo o tipo e o período da média móvel. Esta próxima parte calculará a média móvel exponencial. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Then Dim Alfa Como duplo alfa 2 (entradaPeriodo 1) Para j 1 Para entrarPeriod temp temp temparrayar (j) Próximo j outputarray (inputPeriod) temp inputPeriod Primeiro o valor de alpha é determinado. Porque na computação, o valor da 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)) Próximo i Começando com a segunda média móvel, eles serão computados com base na fórmula acima: Anterior EMA plus alpha multiplicado pela diferença entre o número atual do inputarray e o valor EMA anterior. Para i inputPeriod Para RowCount outputRange. Cells (i, 1). Outputarray de Válido (i) Próximo i outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) Assim como o código para SMA, o outputarray será preenchido e A célula acima do outputarray representará o tipo eo período da média móvel. Abaixo está o código para calcular a média móvel ponderada. WMA ------------------------------------------ ElseIf comboTypeMA. Value Weighted Then Dim Temp2 As Integer 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). Outputarray de Válido (i) Próximo i outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) End If A tabela abaixo contém as etapas para calcular cada variável usada para o Cálculo de WMA. Assim como no exemplo anterior, neste há os números na entradaRange. E o período de entrada é 3. Abaixo está o código final do procedimento, que descarrega o formulário de usuário. Descarregar o MAForm End Sub O procedimento abaixo é para o botão Cancelar. Será adicionado no mesmo módulo. Private Sub buttonCancelClick () Descarregue MAForm End SubMoving Average Este exemplo ensina como calcular a média móvel de uma série temporal no Excel. Uma média móvel é usada para suavizar irregularidades (picos e vales) para reconhecer facilmente as tendências. 1. Primeiro, vamos dar uma olhada em nossas séries temporais. 2. Na guia Dados, clique em Análise de dados. Nota: não consigo encontrar o botão Análise de dados Clique aqui para carregar o complemento Analysis ToolPak. 3. Selecione Média móvel e clique em OK. 4. Clique na caixa Intervalo de entrada e selecione o intervalo B2: M2. 5. Clique na caixa Intervalo e digite 6. 6. Clique na caixa Escala de saída e selecione a célula B3. 8. Traçar um gráfico desses valores. Explicação: porque definimos o intervalo para 6, a média móvel é a média dos 5 pontos de dados anteriores e o ponto de dados atual. Como resultado, picos e vales são alisados. O gráfico mostra uma tendência crescente. O Excel não pode calcular a média móvel para os primeiros 5 pontos de dados porque não há suficientes pontos de dados anteriores. 9. Repita os passos 2 a 8 para o intervalo 2 e o intervalo 4. Conclusão: quanto maior o intervalo, mais os picos e os vales são alisados. Quanto menor o intervalo, mais perto as médias móveis são para os pontos de dados reais. 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 2013 e 14 de janeiro de 2014. 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 conhecimento do Mestre de Planilhas grátis Publicações recentes

No comments:

Post a Comment