Sunday 20 August 2017

Múltiplas Variáveis De Média Em Movimento


EasyLanguage amp PowerLanguage Tutorial 8211 Lição 02: Codificação de uma média móvel Criando o primeiro indicador real e expandindo os conceitos básicos Depois de se familiarizar com o PowerLanguage Editor no tutorial anterior PowerLanguage 8211 lição 01, agora vamos construir nesta base. Caso você não tenha lido a última lição, sugiro fazer isso primeiro, pois também pode ajudá-lo a entender esta lição. Let8217s começam com a lição today8217s agora. Abra o PowerLanguage Editor e crie um novo estudo de indicadores. Eu chamarei o meu ABCPowerLanguage Lesson 02 8211 Moving Average para que eu possa encontrá-lo facilmente dentro do meu editor mais tarde. O nome é totalmente válido para você, e você pode até mesmo mudá-lo mais tarde. Como a última parte do nome do indicador sugere, vamos criar e traçar uma média móvel hoje. Você provavelmente já viu uma média móvel em um gráfico antes ou lembre-se da média do termo de matemática. O uso principal para médias é como um filtro para suavizar os dados que você inseriu. A imagem exibe uma média móvel simples de 200 períodos que dá um resultado muito suave. A desvantagem dessa suavidade é que você apresenta mais atraso. Isso significa que a média se torna menos sensível às mudanças no preço. Se você olhar para a próxima imagem, você verá o quanto o comportamento de uma média móvel simples de 200 períodos é quando você a compara com a média do período 10 verde. O último é muito mais rápido em responder às mudanças de preços, mas, por sua vez, há muito mais 8220noise8221 na média. Existem muitos tipos diferentes de médias que variam principalmente no impacto que cada ponto de dados tem no resultado da média. Uma média móvel simples de 200 períodos simplesmente calculará uma soma dos últimos 200 pontos de dados e dividirá em 200. O resultado é uma média que dá a cada ponto de dados a mesma influência (o mesmo valor) no resultado. A primeira barra e a última barra que fazem parte da média são ponderadas da mesma forma para o resultado. Duas outras médias proeminentes e comumente usadas são a média móvel exponencial e a média móvel ponderada. Ambos têm maiores fatores de ponderação para os pontos de dados mais recentes. Em uma média móvel ponderada, a ponderação diminuirá na progressão aritmética. Para a média exponencial, ele diminuirá exponencialmente, daí o nome. Isso será tão teoricamente quanto ele vai conseguir para hoje. Se você quiser ler mais detalhes sobre médias, você pode começar com este artigo da Wikipédia. Para uma maior compreensão desta lição, você não precisa mais desta informação adicional. Let8217s começam com a codificação de nossa média. Nosso indicador não deve apenas calcular uma média, mas deve produzir o resultado em um gráfico. EasyLanguage tem a palavra reservada 8220Plot8221 para isso e nós vamos usá-lo para fazer isso. Antes de começar com a programação de algo, sempre é uma boa idéia dar um passo atrás e pensar sobre o que você está tentando realizar e como você vai fazer isso. Como este estudo não é muito complexo, há apenas algumas coisas para pensar. Quando os estudos se tornam mais complexos, você pode economizar muito tempo com um bom planejamento antecipado. O objetivo é um estudo que calcula e traça uma média móvel simples. Queremos poder alterar o comprimento da média com uma entrada, portanto, é fácil de personalizar. Para a média, precisamos somar a quantidade de valores que correlacionam a entrada de comprimento. Nós não queremos escrever código para cada entrada de comprimento possível para a soma. Isso significa que o código precisa ser capaz de calcular todas as entradas de comprimento possíveis por conta própria. Você já tem uma idéia de como podemos conseguir isso. A resposta é que precisamos de uma declaração de iteração que pode ser executada repetidamente em cada barra por um número específico de vezes (nossa entrada de comprimento). Eu sei que isso parece complicado, mas será bastante simples. Usaremos o 8220for loop8221 para esta tarefa. Este loop repete uma ou mais instruções para um número específico de iterações definido pelo usuário. O código EasyLanguage é executado de cima para baixo e geralmente da esquerda para a direita. Uma vez que uma linha de código é executada, a próxima linha é executada e assim por diante. Caso a linha de código seja o início de um loop, as linhas de código dentro do loop serão executadas pelo valor especificado. Somente quando o loop terminar a próxima linha de código após o loop ser executado. A for loop parece e funciona da seguinte maneira: Uma variável numérica será incrementada (ou diminuída) com cada ciclo do loop a partir do seu valor de início até seu valor final. Esta imagem exibe um loop básico para uma variável de contador numérico (ii neste caso) e o valor inicial de 0. As iterações serão realizadas dez vezes até que o contador tenha atingido o valor de 9. Então o bloco de loop é executado o último Tempo e saída. Você não precisa incrementar o valor do contador, o código do loop cuida disso. O valor do contador atual será armazenado na variável do contador. Então, você pode acessá-lo para cada ciclo de loop e usá-lo para seus cálculos. Isso será útil para calcular nossa média. O loop for também pode diminuir o contador com cada iteração. O valor inicial neste exemplo é 9, mas o loop é executado dez vezes até que seja encerrado, também. O contador simplesmente diminui com cada iteração por um até atingir 0. Na Easylanguage, você pode referenciar palavras reservadas, variáveis ​​e funções reservadas a dados de uma barra anterior muito fácil. Usando um número entre colchetes seguindo a palavra reservada, cálculo ou variável retornará o valor para esta barra particular. O número cresce a partir da barra atual (que você faz referência com 0) em incrementos de um. Quando você deseja armazenar o valor do anterior bar8217s próximo a uma variável chamada PrevCloseValue você pode fazê-lo assim: queremos construir nossa média usando o Close para as últimas barras X. Onde X é uma entrada para permitir mais flexibilidade. Você já sabe que queremos usar um loop para isso e acabamos de descobrir como podemos referenciar os valores de Close para as barras anteriores. Isso deve ser suficiente para escrever o código para a parte principal do nosso indicador. Let8217s continuam criando as seções de entrada e variável. Você pode lembrar da última lição que o uso de nomes variáveis ​​de variáveis ​​é uma boa prática de codificação e pode salvar muitos problemas mais tarde. Precisamos declarar uma entrada para que possamos alterar o tamanho da nossa média no gráfico. Além disso, queremos uma variável que contenha o somatório, um para manter o valor do contador e um último para armazenar o valor médio. Para exibir o valor no gráfico, usaremos a palavra reservada Plot. Isto é seguido por um número para que você possa distinguir entre lotes diferentes. O que é necessário, pois você pode usar até 999 parcelas em Multicartas. A palavra reservada reservada pode ter vários parâmetros como cor, tamanho do gráfico e alguns mais. Vamos manter isso simples aqui e usar Plot1 com apenas dois parâmetros 8211 o primeiro para a expressão numérica a ser plotada e um segundo para o nome que queremos atribuir ao enredo. O código final será algo assim: depois de compilar este código, estamos quase prontos para carregar nosso indicador em um gráfico em Multicartas. Let8217s apenas dê uma olhada nas propriedades do indicador primeiro. Você pode encontrá-los sob - gt File - gt Properties ou clicando no símbolo Properties no menu (deve ser o único para Compile). Sob a guia Estilo, você pode alterar a cor, o estilo da linha e a espessura para o gráfico que você criou. Se você for para a guia de propriedades, há várias opções para configurar ou verificar, mas, por enquanto, você só pode querer certificar-se de que a opção 8220Same como Symbol8221 esteja marcada. Isso assegurará que o indicador seja aplicado diretamente em seu gráfico em vez de um subchart. Agora você está pronto para aplicar o indicador a um gráfico de sua escolha. Quando você tem um gráfico aberto na janela principal Multicartas, você pode simplesmente inserir o indicador neste gráfico. Quando o indicador é aplicado, o resultado deve ser semelhante à captura de tela acima. No entanto, isso não parece certo, pois isso não parece uma média móvel. A série de preços é quase uma linha plana e o gráfico que vem do nosso indicador está aumentando apenas. Com o E-Mini SampP 500 na área de 18217800, um valor médio móvel de 10 bar para este mercado de 182179528217647 obviamente não está correto. Isso aponta para um problema em nossos cálculos. Você tem uma idéia do que o código está faltando. Na verdade, é apenas um pouco, mas um detalhe muito importante que nós esquecemos de adicionar. Precisamos adicionar algo na frente do loop for. O loop simplesmente continua adicionando os valores das dez barras anteriores com cada nova barra. Isso está bem e nós queremos que ele faça exatamente isso, mas nós não queremos que ele adicione os novos valores aos valores antigos. Em outras palavras, você precisa se certificar de que CloseValueSum doesn8217t ainda mantenha os valores antigos quando o loop for inicia. Com a adição de uma linha ao código, o resultado é exatamente o que queríamos alcançar. Também podemos alterar a aparência do indicador8217 na tabela. Usando a aba estilo sob 8220Format Study8221, podemos alterar o resultado visual como estilo de linha, cor e espessura. Sob a guia 8220Inputs8221 você encontrará a entrada que você criou e a configuração padrão para o comprimento. Ao carregar uma segunda instância do estudo e usando uma cor e comprimento diferentes, você pode confirmar que o estudo dá um resultado diferente com uma entrada de comprimento diferente. Se você está tendo problemas para encontrar a correção, sinta-se à vontade para nos contatar com sua solução e tentaremos ajudá-lo em tempo hábil. Tenho medo de pedir apenas a solução, mas, pelo menos, você pode mostrar que você também envolveu algum esforço para encontrar a solução. Como última sugestão, você pode dar uma olhada em outros indicadores ou funções comuns e encontrar alguma inspiração para o link perdido. Eu espero que você tenha gostado desta lição do tutorial de Powerlanguage e estou ansioso para trabalhar com você no próximo. Tutoriais de múltiplas classificações 8211 Lição 04: Declarações if e ramificação condicional Aprenda como executar expressões de código com base em condições. Na aula today8217s, você aprenderá como Controle o fluxo do seu programa e faça executá-lo apenas quando certas condições forem atendidas. É aqui que se as instruções são usadas. Você pode encontrá-los basicamente em todas as linguagens de programação de alto nível e são o motor que impulsiona cada programa. Se as instruções podem, por exemplo, ser usadas na coloração de uma média móvel de forma diferente com base na sua relação com o fim de uma barra. Se quiser fechar todas as posições abertas após um determinado período de tempo, uma instrução if entrará em jogo. Caso queira ativar um alerta quando uma condição predefinida for atendida, você também usará uma declaração if para isso. Esta lista pode durar bastante tempo, mas acho que você já entende que se as declarações não são apenas muito úteis, mas também muito importantes. Nenhum tutorial de programação poderia ser completo sem passar por cima deles e um bom entendimento é essencial antes que possamos mudar para coisas mais complexas. If8230then8230 A instrução 8220if8230then82308221 é a forma mais simples de uma declaração condicional. A condição é testada e se it8217s for verdadeira, a seguinte declaração de código será executada. Se o teste for falso, nada será feito porque a seguinte instrução de código não será executada. Quando eu digo que o teste é verdadeiro, don8217t fica confuso e pensa que está limitado a condições de teste que incluem apenas 8220true8221. No caso de 8220ii8221 é uma variável numérica e 8220MyCondition18221 e 8220MyCondition28221 são variáveis ​​booleanas, estas são três declarações válidas de 8220if8230then82308221. No caso da primeira declaração, o código verifica se 8220MyCondition1 false8221. Se 8220MyCondition18221 realmente for falso, o resultado do teste será, de fato, 8220true8221 (porque a expressão a verificar é correspondida). Isso pode ser um pouco confuso no início, mas se você se lembrar, fizemos verificações similares na última lição trabalhando com o loop8221 de 8220. Você pode imprimir o resultado para um teste para a barra de saída do editor PL usando o comando de impressão. A instrução de código que segue a instrução 8220if8230then82308221 só será executada quando a condição de verificação for correspondida. No caso de o teste retornar falso, o código continuará com a próxima parte. Se você deseja que seu código execute uma declaração se a condição de teste for verdadeira e outra se it8217s for falso, você pode usar duas instruções 8220if8230then82308221 ou usar outro tipo de declaração. If8230then8230else8230 A instrução 8220if8230then8230else82308221 executará uma declaração de código se o teste de condição de verificação for verdadeiro e uma segunda instrução se o teste for falso. Voltando ao nosso exemplo de média móvel, podemos alterar a cor da média de acordo com a relação do preço de fechamento com a média. Se o fechamento estiver acima da média, então a média deve ser colorida em verde, se ela não for vermelha. Observe que isso significa que a média também seria de cor vermelha no caso de o próximo corresponder à média. Usando a instrução 8220if8230then8230else8221 e a palavra reservada 8220SetPlotColor8221 fará o truque aqui. SetPlotColor tem dois parâmetros: o primeiro é o número do gráfico que deseja alterar a cor (it8217s 1 para Plot1 e 5 para Plot5 etc.) e o segundo é para a cor que deseja que o gráfico use. Conforme planejado, a média mudará sua cor agora de acordo com a relação da barra próxima à média. Como eu mencionei o caso em que o fechamento é igual à média também seria colorido em vermelho. Uma característica muito útil para instruções 8220if82308221 é que você pode combiná-las ou aninhá-las para criar árvores de lógica mais complexas. Poderíamos alterar ligeiramente a indicação 8220if8230then8230else8221 usada no código acima e adicionar uma terceira cor para o caso em que o próximo corresponde à média. A peça de código agrupa um 8220if8230then82308221 e uma indicação 8220if8230then8230else82308221 para executar a tarefa. Observe que apenas a última linha de código em uma única 8220if8221 ou várias instruções agrupadas 8220if8221 deve ser seguida por um ponto e vírgula. If8230then begin8230end As instruções 8220if8230then8221 e 8220if8230then8230else82308221 são ótimas se você tiver apenas uma expressão de código que deve ser executada. Para blocos de código mais complexos você terá que usar instruções de bloco. A instrução de bloco 8220if8230then begin8230end8221 é semelhante à instrução 8220if8230then8221, mas permite várias expressões de código entre o 8220begin8221 e o 8220end8221. Os 8220begin8221 e 8220end8221 são comuns para instruções de bloco, é assim que eles começam e finalizam. Ao compará-los às instruções regulares 8220if8230then82308221 ou 8220if8230then8230else8221 em um bloco 8220if8230then begin8230end8221, todas as instruções completas dentro do 8220begin8230end8221 devem ser seguidas por um ponto e vírgula. Let8217s adiciona uma declaração de bloco simples à nossa média que traça uma cruz (para isso, você precisa alterar o estilo do enredo para cruzar as propriedades) e nos dá um alerta quando a barra completa está abaixo da média. If8230then begin8230end else begin8230end Claro que também há uma declaração de bloco 8220if8230then begin8230end else begin8230end8221 se você quiser usar mais instruções de código dentro de um ramo condicional. Com este e o outro 8220begin8230end else else. 8221 há uma coisa a observar: o 8220end8221 após o primeiro 8220begin8221 não é seguido por um ponto-e-vírgula, apenas o último 8220end8221 que conclui a declaração precisa do ponto e vírgula. Você também pode usar duas instruções 8220if8230 até begin8230end8221 assim, para destacar as barras que estão totalmente acima da média. Once8230begin8230end Para o restante da sessão de hoje8217s, temos mais duas declarações para passar. Nós usamos uma dessas declarações um par de vezes antes para que você já esteja familiarizado com isso. Como você pode ter adivinhando a indicação 8220once8230begin8230end8221. Nós até o utilizamos no início desta sessão, apenas sem uma condição de avaliação. O benefício desta afirmação é, uma vez que a expressão booleana se torna verdade pela primeira vez, it8217s nunca testaram novamente. Apenas será ignorado no código depois de ter sido executado uma vez. Isso, por exemplo, é excelente para inicializar variáveis ​​e fazer alguns cálculos que você só precisa fazer uma vez. Em geral, 8220once8221 inicia uma declaração que se parece com isto: A expressão booleana que segue 8220once8221 é opcional e pode ser deixada como you8217ll ver no próximo exemplo. No caso de você ter apenas uma declaração a ser executada uma vez, você também pode deixar as palavras reservadas 8220begin8221 e 8220end8221. A imagem abaixo contém três exemplos de como 8220once8221 poderia ser usado. O primeiro exemplo irá limpar a barra de saída e excluir qualquer informação de impressão antiga lá. A segunda instrução de código fará o mesmo, mas conforme o código verifique se o 8220if CurrentBar 18221 esta verificação será realizada novamente com cada execução de código. Com a indicação 8220once8221, o código será executado uma vez e depois não marcado novamente. Em outras palavras, isso também lhe dá um desempenho um pouco melhor. O segundo exemplo mostra como calcular o movimento do tiquete e os espaços decimais de um símbolo e armazenar os resultados em duas variáveis. O último exemplo mostrado, verifica se o dia no gráfico é uma segunda-feira. Uma vez que isso seja verdade, o registro de impressão de saída será apagado e um novo texto será impresso. Switch case A indicação 8220switch case8221 é a declaração final que veremos hoje. A indicação do switch e do caso é útil no gerenciamento de operações de ramificação condicional mais complexas. Em vez de aninhar múltiplas 8220if8230else8221 ou outras instruções, várias seções de maiúsculas podem ser executadas com base na expressão do switch. Isso parece muito mais difícil do que realmente é. Let8217s dê uma olhada em um exemplo de código simples que ajudará a esclarecer a indicação 8220switch case8221. Crie o indicador abaixo e carregue-o em um gráfico. Em seguida, verifique diferentes números para a entrada e o resultado da impressão na barra de saída. As declarações de impressão são divididas somente em duas linhas para melhor legibilidade aqui, normalmente eu as deixaria em uma linha, a menos que elas se tornassem muito longas. O código passa a entrada 8220Number8221 através da instrução switch para a primeira expressão de caso correspondente e executa a seguinte declaração. Se uma expressão de caso correspondente for encontrada, todas as declarações para esta expressão são executadas e, em seguida, o código continua após a indicação 8220switch case8221. Por essa razão, a afirmação para o caso 2 a 5 nunca foi executada. O caso já está incluído em 2 a 10. Troque a posição para os dois casos e ambos podem ser executados dependendo da entrada do Número. A indicação 8220default8221 é opcional e você pode usá-la para certificar-se de que uma instrução é executada, mesmo que nenhuma expressão de caso seja correspondida. Você também pode usar várias declarações diferentes para cada caso, eu apenas usei uma declaração de impressão para cada caso neste exemplo. As declarações que analisamos durante esta lição têm em comum que você pode aninhar e agrupá-las para uma lógica mais complexa. Às vezes, você terá que ser bastante criativo para alcançar o que você tem em mente. Por isso, um bom resumo da sua lógica é tão importante. Leve algum tempo antes de começar com a codificação, talvez desenhe um fluxograma ou uma árvore lógica. Isso pode realmente ajudar você a economizar muito tempo no final. Eu sei que enfatizei isso antes e digo isso de novo como importante. Aprender algo novo é muito mais fácil do que desencadear um mau hábito. Se você começar a aprender a codificar em EasyLanguage ou PowerLanguage, torne seu bom hábito para planejar adequadamente sua programação antes de começar. Isso conclui a lição sobre afirmações e ramificações condicionais. Também marca o final das primeiras lições básicas e com as seguintes lições, mergulharemos mais na programação e daremos uma olhada em novas idéias e teorias ao longo do caminho.

No comments:

Post a Comment