Wednesday 13 September 2017

Simple Moving Average Vba Code


Rolling Average Table Below, analisaremos um programa no Excel VBA que cria uma tabela média móvel. Coloque um botão de comando em sua planilha e adicione a seguinte linha de código: Range (quotB3quot).Value WorksheetFunction. RandBetween (0, 100) Esta linha de código insere um número aleatório entre 0 e 100 na célula B3. Queremos que o Excel VBA tire o novo valor de estoque e coloque-o na primeira posição da tabela de média móvel. Todos os outros valores devem mover para baixo um local e o último valor deve ser excluído. Crie um evento de alteração de planilha. O código adicionado ao Evento de Mudança da Planilha será executado pelo Excel VBA quando você alterar uma célula em uma planilha. 2. Clique duas vezes em Sheet1 (Sheet1) no Project Explorer. 3. Escolha a Planilha na lista suspensa à esquerda. Escolha Alterar na lista suspensa direita. Adicione as seguintes linhas de código ao Evento de Mudança da Planilha: 4. Declare uma variável chamada newvalue do tipo Inteiro e dois intervalos (firstfourvalues ​​e lastfourvalues). Dim newvalue As Integer. Firstfourvalues ​​As Range, lastfourvalues ​​As Range 5. O Evento de Mudança de Planilha escuta todas as alterações na Sheet1. Só queremos que o Excel VBA faça algo se algo mudar na célula B3. Para conseguir isso, adicione a seguinte linha de código: Se Target. Address quotB3quot Then 6. Inicializamos o newvalue com o valor da célula B3, firstfourvalues ​​com Range (quotD3: D6quot) e lastfourvalues ​​com Range (quotD4: D7quot). Newvalue Range (quotB3quot).Value Set firstfourvalues ​​Range (quotD3: D6quot) Defina lastfourvalues ​​Range (quotD4: D7quot) 7. Agora vem o truque simples. Queremos atualizar a tabela de média móvel. Você pode conseguir isso substituindo os últimos quatro valores pelos primeiros quatro valores da tabela e colocando o novo valor de estoque na primeira posição. Lastfourvalues. Value firstfourvalues. Value Range (quotD3quot).Value newvalue 8. Não esqueça de fechar a instrução if. 9. Finalmente, digite a fórmula MÉDIA (D3: D7) na célula D8. 10. Teste o programa clicando no botão de comando. Aqui está um código que deve ser útil para aqueles que usam análise técnica na negociação e que desejam 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. Botão Sub privadoCancelClique () Descarregue MAForm End Sub, onde 2 (1 n) O subtítulo t é usado para indicar o tempo, por exemplo, T-1 refere-se ao período antes de t e n, a ser especificado pelo usuário, refere-se ao período médio da EMA. Por exemplo, o equivalente EMA de uma média móvel simples de 3 períodos tem n de 3. Quanto maior o valor de n, menor será. Isso resulta em um maior (1-) e mais de EMA t-1 é mantido em EMA t. O primeiro valor da EMA em uma série temporal pode assumir-se como uma média móvel simples de n dias8217 de preços. Alguns usuários também podem preferir iniciar o primeiro valor da EMA a partir do segundo período em que EMA no período 2 x período 2 preço (1 8211) x período 1 preço. Os usuários devem entender que a média móvel exponencial é realmente uma expansão de série infinita onde os preços anteriores têm um peso cada vez menor em EMA t. Considere o seguinte: Isso resulta em que o EMA é mais responsivo e menos volátil do que o equivalente em média móvel simples. Uma discussão mais detalhada sobre isso pode ser encontrada em meu artigo sobre filtros em finanças e análise técnica. O Método A usa funções, enquanto o Método B usa procedimentos secundários para calcular CMF. O método B é mais rápido e flexível. Cole este código na sua janela de código do ThisWorkBook no VBA. Clique direito neste WorkBook no Project Explorer e clique em View Code. Private Sub WorkbookOpen () O resto pertence a qualquer módulo Tells Excel para incluir estes na lista de funções, adicionar descrições para eles e criar uma nova categoria chamada Indicadores Técnicos. Macro Application. MacroOptions: EMA, Descrição: Retorna a média móvel exponencial. Amp Chr (10) amp Chr (10) amp Selecione os últimos períodos EMA ou o preço dos últimos períodos se o período atual for o primeiro. Amp Chr (10) amp Chr (10) amp Seguido pelo preço atual e n. Amp Chr (10) amp Chr (10) amp Chr (10) amp O fator de decaimento da média móvel exponencial é calculado como alpha2 (n1), Public Function EMA (EMAYesterday, price, n) EMA alpha price (1-alpha) EMAYesterday Uma vez que você terminou com o acima, você pode calcular a média móvel exponencial digitando em qualquer célula EMA (Last Period EMA, Current Price, n). Insira o preço do último período como EMA do último período se você estiver informando o primeiro EMA do seu conjunto de dados. Para executar o Método B, você deve copiar o subtítulo Runthis da página na Linha AccumulationDistribution para o seu módulo. Você também deve executar o EMA do submarino Runthis. Adicione a seguinte linha ao sub Runthis Coloque-o logo antes do End Sub E desative todas as outras macros que o Runthis ligará. Este sub começará a calcular EMA a partir de t2 em frente Sub EMA (fechar1 como Range, output As Range, n As Long) close0 close1 ( 1, 1).Address (False, False) close1a close1 (2, 1).Address (False, False) output1 output (1, 1).Address (False, False) output (2, 1).Value 2 (1 Amplificador amp n amplificador amp close1a (1-2 (1 amp. Amp)) saída do amplificador1 saída (2, 1).Value 2 (1 amp. Amp) amp close1a amplificador (1-2 (1 amp. Am)) amplificador Close0 Como o que você acabou de ler Digg it or Tipd it. O objetivo do Finance4Traders é ajudar os comerciantes a começar trazendo idéias e idéias imparciais. Desde o final de 2005, tenho desenvolvido estratégias comerciais de forma pessoal. Nem todos esses modelos são adequados para mim, mas outros investidores ou comerciantes podem achar úteis. Afinal, as pessoas têm metas e hábitos de investimento diferentes. Assim, Finance4Traders torna-se uma plataforma conveniente para disseminar meu trabalho. (Leia mais sobre Finanças4Traders) Por favor, use este site de forma apropriada e atenciosa. Isso significa que você deve citar o Finance4Traders pelo menos fornecendo um link para este site se você usar qualquer um de nossos conteúdos. Além disso, você não tem permissão para usar nosso conteúdo de forma ilegal. Você também deve entender que nosso conteúdo é fornecido sem garantia e você deve verificar de forma independente nosso conteúdo antes de confiar neles. Consulte a política de conteúdo do site e a política de privacidade ao visitar este site. 0 comentários: Publique um comentário Uma estratégia de negociação é muito semelhante a uma estratégia corporativa. Estudar criticamente seus recursos o ajudará a tomar decisões mais efetivas. (Leia mais) 8226 Compreendendo os indicadores técnicos Os indicadores técnicos são mais do que apenas equações. Indicadores bem desenvolvidos, quando aplicados cientificamente, são realmente ferramentas para ajudar os comerciantes a extrair informações críticas de dados financeiros. (Leia) 8226 Por que eu prefiro usar o Excel Excel apresenta dados para você visualmente. Isso torna muito mais fácil para você entender seu trabalho e economizar tempo. (Leia)

No comments:

Post a Comment