Tutorial Multicharts 8211 Lição 04: Se instruções e ramificações condicionais Saiba como executar expressões de código com base nas condições Na lição today8217s, você aprenderá como controlar o fluxo do programa e executá-lo somente quando determinadas condições forem atendidas. É aqui que as instruções if são usadas. Você pode encontrá-los em basicamente todas as linguagens de programação de alto nível e eles são o mecanismo que impulsiona cada programa. Se as instruções podem, por exemplo, ser usadas para colorir uma média móvel de maneira diferente com base em sua relação com o fechamento de uma barra. Se você quiser fechar todas as posições abertas após um certo tempo, uma declaração if entrará em jogo. Caso você queira acionar um alerta quando uma condição predefinida for atendida, você também usará uma declaração if para isso. Esta lista pode continuar por algum tempo, mas eu acho que você já entendeu que se as instruções não são apenas muito úteis, mas também muito importantes. Nenhum tutorial de programação pode ser completo sem passar por cima deles e uma boa compreensão é essencial antes de podermos passar para coisas mais complexas. if8230then8230 A declaração 8220if8230then82308221 é a forma mais simples de uma instrução condicional. A condição é testada e, se for verdadeira, a seguinte instrução de código será executada. Se o teste for falso, nada será feito, pois a seguinte declaração de código não será executada. Quando digo que o teste é verdadeiro, não fique confuso e pense que você está limitado a condições de teste que incluam 8220true8221 apenas. No caso de 8220ii8221 ser uma variável numérica e 8220MyCondition18221 e 8220MyCondition28221 serem variáveis booleanas, estas são três instruções válidas para 8220if8230then82308221. No caso da primeira instrução, o código verifica 8220MyCondition1 false8221. Se 8220MyCondition18221 for realmente falso, o resultado do teste será de fato 8220true8221 (porque a expressão a checar é correspondida). Isso pode ser um pouco confuso no começo, mas se você se lembrar, nós fizemos verificações semelhantes na última lição trabalhando com o 8220 while loop8221. Você pode imprimir o resultado de um teste na barra de saída do Editor PL usando o comando de impressão. A instrução de código após a instrução 8220if8230then82308221 só será executada quando a condição de verificação for correspondida. Caso o teste retorne falso, o código continuará com a próxima parte. Se você quiser que seu código execute uma instrução se a condição de teste for verdadeira e outra, se for falsa, você poderá usar duas instruções 8220if8230then82308221 ou usar outro tipo de instrução. if8230then8230else8230 A instrução 8220if8230then8230else82308221 executará uma instrução de código se o teste de condição de verificação for true e uma segunda instrução se o teste for falso. Voltando ao nosso exemplo da média móvel, podemos mudar a cor da média de acordo com a relação do preço de fechamento para a média. Se o fechamento estiver acima da média, a média deve ser colorida em verde, se não for vermelha. Observe que isso significa que a média também seria colorida em vermelho caso o fechamento correspondesse à média. Usando a instrução 8220if8230then8230else8221 e a palavra reservada 8220SetPlotColor8221 fará o truque aqui. SetPlotColor possui dois parâmetros: O primeiro é o número do gráfico para o qual você deseja mudar a cor (it8217s 1 para Plot1 e 5 para Plot5 etc.) e o segundo é para a cor que você 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 mencionei, o caso em que o fechamento é igual à média também seria colorido em vermelho. Um recurso muito útil para as instruções 8220if82308221 é que você pode combiná-las ou aninhá-las para criar árvores lógicas mais complexas. Poderíamos alterar levemente a instrução 8220if8230then8230else8221 usada no código acima e adicionar uma terceira cor para o caso em que o fechamento corresponde à média. A peça de código agrupa uma instrução 8220if8230then82308221 e uma 8220if8230then8230else82308221 para realizar a tarefa. Por favor, note que apenas a última linha de código em um único 8220if8221 ou múltiplos 8220if8221 declarações agrupadas tem que ser seguido 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 block 8220if8230then begin8230end8221 é semelhante à instrução 8220if8230then8221, mas permite várias expressões de código entre o 8220begin8221 e o 8220end8221. O 8220begin8221 e 8220end8221 são comuns para instruções de bloco, é assim que eles começam e terminam. Ao compará-los com as 8220if8230then82308221 ou 8220if8230then8230else8221 regulares, em um bloco 8220if8230then start8230end8221, todas as declarações completas dentro do 8220begin8230end8221 devem ser seguidas por um ponto-e-vírgula. Let8217s adiciona uma instrução block simples à nossa média que traça uma cruz (para isso você precisa alterar o estilo de plotagem para cruzar nas propriedades) e nos dá um alerta quando a barra cheia está abaixo da média. if8230then begin8230end else begin8230end Claro que há também um 8220if8230then begin8230end else begin8230end8221 block statement se você quiser usar mais instruções de código dentro de uma ramificação condicional. Com isso e os outros 8220begin8230end else. 8221 há uma coisa a notar: O 8220end8221 após o primeiro 8220begin8221 não é seguido por um ponto-e-vírgula, apenas o último 8220end8221 que completa a instrução precisa do ponto-e-vírgula. Você também pode usar duas instruções 8220if8230then begin8230end8221 juntas assim, para destacar as barras que estão totalmente acima da média. once8230begin8230end Para o restante da sessão de today8217s, temos mais duas instruções para revisar. Nós usamos uma dessas declarações algumas vezes antes, então você já está familiarizado com ela. Como você pode supor, é a declaração 8220once8230begin8230end8221. Nós até usamos isso no início desta sessão, apenas sem uma condição de avaliação. O benefício dessa afirmação é que, uma vez que a expressão booleana se torna verdadeira pela primeira vez, ela nunca mais foi testada. Será apenas ignorado no código depois de ter sido executado uma vez. Isso, por exemplo, é ótimo para inicializar variáveis e fazer alguns cálculos que você só precisa fazer uma vez. Em geral, 8220once8221 inicia uma instrução que se parece com isto: A expressão booleana que segue 8220once8221 é opcional e pode ser deixada como você verá no próximo exemplo. Caso você tenha apenas uma declaração para 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 o 8220once8221 pode ser usado. O primeiro exemplo apagará a barra de saída e excluirá qualquer informação de impressão antiga. A segunda instrução de código fará o mesmo, mas como o código verifica 8220if CurrentBar 18221, essa verificação será executada novamente com cada execução de código. Com a instrução 8220once8221, o código será executado uma vez e depois não será verificado novamente. Em outras palavras, isso também lhe dá um desempenho um pouco melhor. O segundo exemplo mostra como calcular o movimento do tick e 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. Quando isso for verdade, o log de impressão de saída será limpo e um novo texto será impresso. switch / case A declaração 8220switch / case8221 é a declaração final que veremos hoje. A instrução switch e case é útil no gerenciamento de operações de ramificação condicional mais complexas. Em vez de aninhar várias 8220if8230else8221 ou outras instruções, várias seções de caso podem ser executadas com base na expressão de alternância. 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 instrução 8220switch / case8221. Crie o indicador abaixo e carregue-o em um gráfico. Em seguida, verifique os números diferentes para a entrada e o resultado da impressão na barra de saída. As instruções de impressão só são divididas em duas linhas para melhor legibilidade aqui, normalmente eu as deixaria em uma linha a menos que elas estivessem se tornando muito longas. O código passa a entrada 8220Number8221 por meio da instrução switch para a primeira expressão de correspondência de maiúsculas e minúsculas e executa a instrução a seguir. Se uma expressão de caso correspondente for encontrada, todas as instruções para esta expressão serão executadas e, em seguida, o código continuará após a instrução 8220switch / case8221. That8217s porque a declaração para o caso 2 a 5 nunca é executada 8211 o caso está incluído em 2 a 10 já. Troque a posição pelos dois casos e ambos podem ser executados dependendo da entrada do Número. A instrução 8220default8221 é opcional e você pode usá-la para garantir que uma instrução seja executada mesmo se nenhuma expressão de ocorrência for correspondida. Você pode usar várias instruções diferentes para cada caso, apenas usei apenas uma declaração de impressão para cada caso neste exemplo. As declarações que examinamos durante esta lição têm em comum que você pode aninhá-las 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 que um bom esboço de sua lógica é tão importante. Reserve algum tempo antes de iniciar a codificação, talvez desenhe um fluxograma ou uma árvore lógica. Isso pode realmente ajudar você a economizar muito tempo no final. Sei que já enfatizei isso antes e vou repeti-lo como importante. Aprender algo novo é muito mais fácil do que desaprender um mau hábito. Se você começar a aprender como codificar no EasyLanguage ou no PowerLanguage, tenha o bom hábito de planejar adequadamente sua programação antes de começar. Isso conclui a lição sobre instruções if e ramificação condicional. Também marca o fim 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. Aviso de Risco: Futuros de Negociação, Opções de Futuros e transações de câmbio de varejo fora da bolsa carregam níveis substanciais de risco e não são adequados para todos os investidores. Antes de decidir investir em instrumentos financeiros ou divisas estrangeiras, você deve considerar cuidadosamente se a negociação é adequada para você em função de suas circunstâncias, conhecimento e recursos financeiros. O alto grau de alavancagem pode funcionar contra você, assim como para você, e você pode perder todo ou mais do seu investimento inicial. TradeStation, PowerEditor, EasyLanguage e o logotipo EasyLanguage Specialist são marcas comerciais da TradeStation Technologies, Inc. Nem a TradeStation Technologies nem nenhuma de suas afiliadas reviram, certificaram, endossaram, aprovaram, desaprovaram ou recomendaram, e nem revisam, certificam, endossam, aprovar, desaprovar ou recomendar qualquer produto ou serviço que ofereça treinamento, educação ou consultoria sobre o uso do EasyLanguage. Copyright 2016 ABC Trading Group Todas as marcas registradas e direitos autorais são de propriedade de seus respectivos donos. EasyTutor de idiomas PowerLanguage Tutorial 8211 Lição 02: Codificando uma média móvel Criando o primeiro indicador real e expandindo o básico Depois de se familiarizar com o Editor PowerLanguage no PowerLanguage anterior tutorial 8211 lição 01, vamos agora construir sobre esta base. Caso você não tenha lido a última lição, sugiro fazer isso primeiro, pois ela pode ajudá-lo a entender essa lição também. Let8217s começam com a lição today8217s agora. Abra o Editor PowerLanguage e crie um novo estudo de indicador. Eu vou nomear o meu ABCPowerLanguage Lição 02 8211 Moving Average para que eu possa encontrá-lo facilmente dentro do meu editor mais tarde. O nome é totalmente sua e é claro que você pode até mudar depois. 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 lembra-se do termo média da matemática. O principal uso das médias é como um filtro para suavizar os dados inseridos. A imagem exibe uma média móvel simples de 200 períodos que proporciona um resultado muito suave. A desvantagem dessa suavidade é que você introduz mais lag. Isso significa que a média se torna menos sensível às mudanças no preço. Se você der uma olhada na próxima imagem, verá como é diferente o comportamento de uma média móvel simples de 200 períodos ao compará-la com a média do período de 10 verdes. O último é muito mais rápido em responder às mudanças de preço, 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 computará uma soma dos últimos 200 pontos de dados e a dividirá por 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 ambas ponderadas da mesma 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 possuem fatores de ponderação mais altos 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 diminuirá exponencialmente, daí o nome. Isso será o mais teoricamente possível para hoje. Se você quiser ler mais alguns detalhes sobre as médias, você pode começar com este artigo da Wikipedia. Para entender melhor esta lição, você não precisará desta informação adicional. Let8217s começam com a codificação da nossa média. Nosso indicador não deve apenas calcular uma média, mas deve mostrar o resultado em um gráfico. O EasyLanguage tem a palavra reservada 8220Plot8221 para isso e vamos usá-lo para fazer isso. Antes de começar a programar algo, é sempre bom dar um passo para trás e pensar sobre o que você está tentando realizar e como vai fazer. 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 ser capazes de alterar o comprimento da média com uma entrada para que seja fácil personalizar. Para a média, precisamos somar a quantidade de valores correlacionados ao comprimento de entrada. Não queremos escrever código para todas as entradas possíveis para o somatório. 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 ideia de como podemos fazer isso? A resposta é que precisamos de uma declaração de iteração que possa 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á bem simples. Usaremos o 8220 para loop8221 para esta tarefa. Esse loop repete uma ou mais instruções para um número específico de iterações definido pelo usuário. O código do 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 começo de um loop, as linhas de código dentro do loop serão executadas para o valor especificado. Somente quando o loop terminar a próxima linha de código após o loop ser executado. Um loop for parece e funciona da seguinte maneira: Uma variável numérica será incrementada (ou decrementada) com cada ciclo através do loop desde o seu valor inicial até o seu valor final. Esta imagem exibe um loop básico com uma variável de contador numérico (ii neste caso) e o valor inicial de 0. As iterações serão feitas dez vezes até que o contador atinja o valor de 9. Então o bloco de loop é executado pela última vez. tempo e saiu. Você não precisa incrementar o valor do contador, o código de loop cuida disso. O valor atual do contador 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 decrementar o contador a cada iteração. O valor inicial neste exemplo é 9, mas o loop é executado dez vezes até ser finalizado também. O contador simplesmente diminui a cada iteração em um até chegar a 0. No Easylanguage você pode facilmente referenciar palavras reservadas, variáveis e funções relacionadas a dados de uma barra anterior. Usando um número entre colchetes após a palavra reservada, o cálculo ou a variável retornará o valor para essa barra específica. O número cresce a partir da barra atual (que você faz referência com 0) em incrementos de um. Quando você quiser armazenar o valor do bar8217s anterior, feche dentro de uma variável chamada PrevCloseValue, você pode fazer 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 Close para as barras anteriores. Isso deve ser suficiente para escrever o código para a parte principal do nosso indicador. O Let8217s continua criando as seções de entrada e variável. Você pode se lembrar da última lição que usar nomes de variáveis significativos é uma boa prática de codificação e pode salvar muitos problemas mais tarde. Precisamos declarar uma entrada para podermos alterar o tamanho da nossa média no gráfico. Além disso, queremos uma variável que mantenha a soma, uma para manter o valor do contador e uma última para armazenar o valor médio. Para produzir o valor no gráfico, usaremos a palavra reservada Plot. Isto é seguido por um número para que você seja capaz de distinguir entre diferentes gráficos. O que é necessário, já que você pode usar até 999 gráficos em Multicharts. A palavra reservada da parcela pode ter vários parâmetros como cor, tamanho da parcela e outros. Vamos mantê-lo 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 gráfico. O código final será parecido com isto: Depois de compilar este código, estamos quase prontos para carregar nosso indicador em um gráfico em Multicharts. Let8217s é só dar uma olhada nas propriedades do indicador primeiro. Você pode encontrá-los em - gt File - gt Properties ou clicando no símbolo Properties no menu (deve ser o único a compilar). Na guia Estilo, você pode alterar a cor, o estilo de linha e a espessura do gráfico que você criou. Se você for para a guia de propriedades, existem várias opções para definir ou verificar, mas por enquanto você pode querer apenas certificar-se de que a opção 8220Same As Symbol8221 esteja marcada. Isso garantirá que o indicador seja aplicado diretamente no gráfico, em vez de um subcartículo. Agora você está pronto para aplicar o indicador em um gráfico de sua escolha. Quando você tem um gráfico aberto na janela principal Multicharts, basta inserir o indicador neste gráfico. Quando o indicador é aplicado, o resultado deve ser semelhante ao da captura de tela acima. No entanto, isso não parece correto, já que isso não parece uma média móvel. A série de preços é quase uma linha fixa e a parcela proveniente do nosso indicador está apenas a subir. 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 detalhe pequeno, mas muito importante que nos esquecemos de adicionar. Precisamos adicionar algo na frente do loop for. O loop simplesmente continua adicionando os valores das dez barras anteriores a cada nova barra. Isso é bom e queremos que ele faça exatamente isso, mas não queremos que ele adicione os novos valores aos valores antigos. Em outras palavras, você precisa certificar-se de que o CloseValueSum não mantenha os valores antigos quando o loop for for iniciado. 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 indicador8217s no gráfico. Usando a guia de estilo em 8220Format Study8221, podemos alterar o resultado visual, como estilo de linha, cor e espessura. Sob a aba 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 usar uma cor e um comprimento diferentes, você pode confirmar que o estudo apresenta um resultado diferente com uma entrada de comprimento diferente. Se você está tendo problemas para encontrar a correção correta, não hesite em contatar-nos com a sua solução e tentaremos ajudá-lo em tempo hábil. Eu tenho medo de apenas pedir a solução, mas você precisa pelo menos ser capaz de mostrar que também se esforçou para encontrar a solução. Como última dica, você pode dar uma olhada em outros indicadores médios ou funções e encontrar alguma inspiração para o elo perdido ali. Espero que tenham gostado desta lição tutorial do Powerlanguage e estou ansioso para trabalhar com você na próxima. Aviso de Risco: Futuros de Negociação, Opções de Futuros e transações de câmbio de varejo fora da bolsa carregam níveis substanciais de risco e não são adequados para todos os investidores. Antes de decidir investir em instrumentos financeiros ou divisas estrangeiras, você deve considerar cuidadosamente se a negociação é adequada para você em função de suas circunstâncias, conhecimento e recursos financeiros. O alto grau de alavancagem pode funcionar contra você, assim como para você, e você pode perder todo ou mais do seu investimento inicial. TradeStation, PowerEditor, EasyLanguage e o logotipo EasyLanguage Specialist são marcas comerciais da TradeStation Technologies, Inc. Nem a TradeStation Technologies nem nenhuma de suas afiliadas reviram, certificaram, endossaram, aprovaram, desaprovaram ou recomendaram, e nem revisam, certificam, endossam, aprovar, desaprovar ou recomendar qualquer produto ou serviço que ofereça treinamento, educação ou consultoria sobre o uso do EasyLanguage. Copyright 2016 ABC Trading Group Todas as marcas registradas e direitos autorais são de propriedade de seus respectivos donos. MultiCharts 10 MultiCharts é uma plataforma de negociação premiada Se você precisa de software de troca diária ou se investe por períodos mais longos, a MultiCharts possui recursos que podem ajudar a atingir suas metas comerciais . Gráficos de alta definição, indicadores e estratégias embutidos, negociação com um clique do gráfico e do DOM, backtesting de alta precisão, força bruta e otimização genética, execução automatizada e suporte para scripts EasyLanguage são todas as ferramentas-chave à sua disposição. A liberdade de escolha tem sido a ideia motriz dos nossos MultiCharts e você pode vê-los na ampla variedade de feeds e brokers de dados suportados. Escolha o seu método de negociação, teste-o e comece a negociar com qualquer corretor suportado que você goste que seja a vantagem do MultiCharts.
No comments:
Post a Comment