Multicharts moving average crossover


Idealmente, você gostaria que um sinal filtrado fosse suave e livre de atrasos. Lag causa atrasos em seus comércios, e aumento lag em seus indicadores normalmente resultam em lucros mais baixos. Em outras palavras, os recém-chegados recebem o que resta na mesa depois que a festa já começou. É por isso que investidores, bancos e instituições em todo o mundo pedem a Jurik Research Moving Average (JMA). Você pode aplicá-lo exatamente como faria com qualquer outra média móvel popular. No entanto, JMAs melhorado timing e suavidade irá surpreendê-lo. A linha cinzenta dentada no gráfico simula ação de preço que começa em um intervalo de negociação baixo e, em seguida, intervalos para um intervalo de negociação mais alto. Uma vez que ninguém gosta de esperar à margem, um filtro de redução de ruído perfeito (linha verde) irá mover suavemente ao longo do centro da primeira faixa de negociação e, em seguida, saltar para o centro da nova gama de negociação quase imediatamente. EasyLanguage amp PowerLanguage Tutorial 8211 Lesson 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 Editor de PowerLanguage no tutorial PowerLanguage anterior 8211 lição 01, agora vamos construir sobre essa fundação. No caso de você não ter lido a última lição, eu sugeriria fazer isso primeiro, pois pode ajudá-lo a entender esta lição também. Começam com a lição de hoje. Abra o Editor de PowerLanguage e crie um novo estudo de Indicador. Vou chamar o meu ABCowerLanguage Lesson 02 8211 Moving Average para que eu possa encontrá-lo facilmente dentro do meu editor mais tarde. O nome é totalmente até você, é claro, e você poderia 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 principal uso de médias é como um filtro para suavizar os dados que você inseriu. A imagem exibe uma média móvel de 200 períodos simples que dá um resultado muito suave. A desvantagem desta suavidade é que você introduz mais atraso. Isso significa que a média torna-se menos responsiva a mudanças de preço. Se você der uma olhada na próxima imagem você verá como diferente o comportamento de um período 200 simples média móvel é quando você compará-lo com a média de período de verde 10. 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 sobre o resultado da média. Uma média móvel simples de 200 períodos calculará simplesmente uma soma dos últimos 200 pontos de dados e dividi-la 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 utilizadas 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. Numa média móvel ponderada, a ponderação diminuirá na progressão aritmética. Para a média exponencial diminuirá exponencialmente, daí o nome. Isto será como teoricamente como ele vai ficar para hoje. Se você quiser ler mais alguns detalhes sobre médias, você pode começar com este artigo da Wikipedia. Para maior compreensão desta lição, você não precisará dessas informações adicionais. Let8217s começar com a codificação da 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 8220Plot8221 reservada para isso e vamos usá-lo para fazer isso. Antes de começar com algo de programação, sempre é uma boa idéia dar um passo para trás e pensar sobre o que você está tentando realizar e como você vai fazê-lo. Como este estudo não é muito complexo, há apenas algumas coisas para refletir. Quando os estudos ficam 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. Nós queremos poder mudar o comprimento para a média com uma entrada assim que it8217s fácil personalizar. Para a média, precisamos somar a quantidade de valores que se correlacionam com a entrada de comprimento. Nós don8217t quer escrever o código para cada entrada de comprimento possível 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 idéia de como poderíamos conseguir isso? A resposta é que precisamos de uma instrução de iteração que pode ser executada repetidamente cada barra por um número específico de vezes (nossa entrada de comprimento). Eu sei que isso soa complicado, mas será bastante simples. Usaremos o 8220for loop8221 para esta tarefa. Este loop repete uma ou mais instruções para um número de iterações definido pelo usuário. O código EasyLanguage é executado de cima para baixo e normalmente da esquerda para a direita. Uma vez que uma linha de código é executada, a próxima linha é executada e assim por diante. No caso de a linha de código ser o começo de um loop, as linhas de código dentro do loop serão executadas para a quantidade especificada. Somente quando o loop for concluído a próxima linha de código após o loop ser executado. Um loop for olha e funciona da seguinte maneira: Uma variável numérica será incrementada (ou diminuída) com cada ciclo através do loop de seu valor inicial para seu valor final. Esta imagem exibe um loop básico com uma variável de contador numérico (ii neste caso) eo valor inicial de 0. As iterações serão feitas dez vezes até que o contador tenha atingido o valor de 9. Então o bloco de laço é executado o último Tempo e saiu. 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 contador. Então você pode acessá-lo para cada ciclo de ciclo e usá-lo para seus cálculos. Isto será útil para calcular a 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 ele é encerrado, também. O contador simplesmente diminui com cada iteração por um até atingir 0. Em Easylanguage você pode referenciar as palavras reservadas relacionadas a dados, variáveis ​​e funções de uma barra anterior muito fácil. Usando um número entre colchetes após a palavra reservada, cálculo ou variável retornará o valor para essa barra em particular. O número cresce a partir da barra atual (que você referência com 0) em incrementos de um. Quando você deseja armazenar o valor do bar8217s anterior fechar dentro de uma variável chamada PrevCloseValue você pode fazê-lo assim: Queremos construir nossa média usando o Close para as últimas X barras. Onde X é uma entrada para permitir mais flexibilidade. Você já sabe que queremos usar um loop para isso e acabamos de descobrir como podemos fazer referência a valores de fechamento para as barras anteriores. Isso deve ser suficiente para escrever o código para a parte principal do nosso indicador. Let8217s continuar criando a entrada e as seções variáveis. Você pode lembrar da última lição de que usar nomes de variáveis ​​significativas é uma boa prática de codificação e pode poupar muitos problemas mais tarde. Precisamos declarar uma entrada para que possamos alterar o comprimento da nossa média no gráfico. Além disso, queremos uma variável que contenha o somatório, uma para armazenar 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 assim que você é capaz de distinguir entre diferentes parcelas. Que é necessário como você pode usar até 999 parcelas em Multicharts. A palavra parcela reservada pode ter vários parâmetros como cor, tamanho do enredo e alguns mais. 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 uma segunda para o nome que queremos atribuir ao gráfico. O código final será algo como isto: Depois de compilar este código, estamos quase prontos para carregar o nosso indicador para um gráfico em Multicharts. Let8217s basta dar uma olhada nas propriedades do indicador em primeiro lugar. Você pode encontrá-los em - gt Arquivo - gt Propriedades ou clicando no símbolo Propriedades no menu (que deve ser a esquerda para Compilar). No separador Estilo, pode alterar a cor, o estilo da linha ea espessura do gráfico que criou. Se você for para a guia de propriedades, há várias opções para definir ou verificar, mas por agora você só pode querer certificar-se de que a opção 8220Same As Symbol8221 está marcada. Isso garantirá que o indicador seja aplicado diretamente em seu gráfico, em vez de um sub-quadro. 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 Multicharts você pode simplesmente inserir o indicador para este gráfico. Quando o indicador é aplicado o resultado deve ser semelhante à imagem acima. No entanto, este doesn8217t parece certo como este doesn8217t olhar como uma média móvel em tudo. A série de preços é quase uma linha lisa eo gráfico que vem de nosso indicador está aumentando somente. Com o E-Mini SampP 500 sendo na área de 18217800 um valor médio móvel de 10 bar para este mercado de 182179528217647 não é obviamente 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 em frente ao 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 se certificar de que o CloseValueSum doesn8217t ainda 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 indicador no gráfico. Usando a guia de estilo sob 8220Format Study8221 podemos alterar o resultado visual como estilo de linha, cor e espessura. Na guia 8220Inputs8221 você encontrará a entrada que você criou ea configuração padrão para o comprimento. Ao carregar uma segunda instância do estudo e usando uma cor diferente e comprimento 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 correta sinta-se livre para entrar em contato conosco com sua solução e vamos tentar ajudá-lo em tempo hábil. Eu tenho medo de apenas pedir a solução de trabalho won8217t embora, você precisa, pelo menos, ser capaz de mostrar que você colocar algum esforço para encontrar a solução, também. Como última dica você pode dar uma olhada em outros indicadores ou funções médias e encontrar alguma inspiração para o elo perdido lá. Espero que tenha gostado desta lição do tutorial Powerlanguage e estou ansioso para trabalhar com você na próxima. Copie e cole o código acima em seu ambiente de desenvolvimento no Tradestation ou MultiCharts como Indicador. Em seguida, clique em compilar ou verifique. Este código detecta se o preço de fechamento de hoje é maior ou menor que o preço de fechamento de ontem. (Isso pode ser colocado em gráficos diários ou gráficos minutos eo close1 refere-se à barra anterior ou dia anterior) Se você digitou close2 referiria a fechar 2 dias ou barras atrás em vez disso. Então temos a soma das últimas barras (comprimento 20). Para ver como ele funciona, você pode alterar esta linha de código plot1 (summove, quotup-downcountquot) para esse plot1 (move, quotup-downcountquot). Em seguida, clique em compilar. Você pode então ver o seu indicador traça uma linha que é 1, -1 ou 0 As entradas escritas na parte superior representam valores que podem ser alterados pelo usuário ao traçar o indicador no gráfico. Depois de plotar o indicador em seu formato original, você pode alterar o comprimento para 50 ou 20 ou 100 para ver como ele afeta o gráfico. As variáveis ​​são mostradas aqui como quotvarsquot e esses são valores que eu criei para armazenar os valores outputted pelas 3 linhas de código iniciando se close. E a variável summove. Soma de Summove (movimento, comprimento) Isto significa que o summove variável é criado a partir da soma das últimas barras de 20 barras (ou período de comprimento) com todos os valores 1 e -1 e 0. Você pode experimentar jogando ao redor com valores diferentes. Iniciantes exemplo no2 (Porcentagem de ponderação ajustável média móvel combinada) média lenta (close, length1) média rápida (close, length2) se value1lt0 então value10 se value1gt1 then value11 Você pode ler o código acima antes de criar este indicador e ver se você pode ver O que está fazendo Existem duas médias móveis utilizadas com comprimento lento de 50 e um comprimento rápido de 20, a entrada chamada factor é ajustável para atribuir uma ponderação a cada um. Se o fator for ajustado para 0.5 ele adicionará 50 da média lenta a 50 da média rápida e criará uma média combinada do período dois. Para ver os valores máximos do fator de ajuste médio lento em 1, para ver o gráfico construído inteiramente com a média mais rápida, você pode definir fator para 0. Você pode experimentar valores como 0,1 e 0,9 para ver os efeitos dos ajustes na ponderação. Se você usar o nome value1 ou value2 ou value 99 como variáveis, então você não precisa declarar os nomes desses na parte superior. Value2 1-factor é uma maneira muito agradável de obter 2 variáveis ​​para atribuir automaticamente 1 de uma parte e 99 da outra parte assim quando adicionado eles sempre 100 Limitar o erro do usuário, restringindo as entradas, tornando as variáveis ​​lê-los. (O código para value1 faz isso depois de ler a entrada de fator) Truques de código para tentar Se você olhar para as variáveis ​​lentas e rápidas você verá que ambos usam médias (média é este código significa média simples). Você pode tentar fazer o lento em uma média ponderada ou uma média exponencial e misturando-os para fazer a sua própria combinação de combinação média. Beginners example no3 (Indicador de tendência binário simples) se médio (close, fastlength) gt average (close, slowlength) então inicie binarytrend1 end else binarytrend -1 Este indictor decide a tendência quotbinaryquot, o que significa que ele converte em um número. Assim, a tendência de alta 1 tendência de baixa -1 eo valor inicial é atribuído como 0. Se você plotar a média móvel de 80 períodos e a média móvel de 12 períodos no gráfico, você pode verificar se o indicador de tendência está funcionando. Usando end else instruções para reduzir o comprimento do código. EG acima supõe que se a tendência não for 1, então ele deve ser -1. Truques de código para tentar Se você tentar usar outro método para atribuir a tendência é para cima ou para baixo e substituir o código com a sua idéia. POR EXEMPLO. Você usa o oscilador estocástico com acima de 50 sendo tendência de alta e abaixo de 50 sendo tendência de queda. O igual a 50 pode ser pego dizendo isso. Se stochastic é gt50 então conta como uptrend (código psuedo) Exemplo de iniciantes no4 (Algoritmo de ajuste de comprimento simples) se close mais alto (close, basiclength) ou close lower (close, basiclength) then start monitor monitor1-1 end monitormonitor10.5 if monitor Lt minlength então monitora minlength se monitor gt maxlength então monitor maxlength Esta é a primeira etapa de fazer um algoritmo para controlar o comprimento aplicado a um indicador. Você pode ver que se você traçar este indicador no subgrafo 2 varia entre 50 e 10 que são os comprimentos max e min permitidos. (Mas estas são entradas ajustáveis) Se o preço está fazendo um novo alto ou baixo para o período de comprimento básico que vai abrandar por 1 incremento de comprimento para cada barra que a condição é verdadeira. Se o preço não fazer um novo alto ou baixo para o mesmo período, reduzirá o comprimento de 0,5 incremento de comprimento para cada barra a condição é verdadeira. Truques de código para tentar Se você tentar alterar os valores de -1 e 0,5 para maiores ou menores quantidades você pode ajustá-lo para atender às suas necessidades. Abaixo vou mostrar-lhe como construir este código em um indicador de mudança de comprimento. Iniciantes exemplo n º 5 (Comprimento simples ajustando a média móvel ponderada) se close mais alto (close, basiclength) ou close lower (close, basiclength) então iniciar monitor monitor1-1 end monitormonitor10.5 se monitor lt minlength então monitor minlength se monitor gt maxlength então Monitor maxlength Você pode ver que outra variável foi adicionada que é uma média móvel ponderada eo truque aqui é substituir o campo usual de comprimento com o monitor de algoritmo que está ajustando o comprimento aplicado. Truques de código para tentar Se você plotar uma média ponderada de 20 períodos ao lado dele no subgrafo um. Você pode ver como o código acima do comprimento que muda a média é mais lento em algum período e mais rapidamente em outros períodos. O indicador acima é colocado no subgrafo no1 sobreposto ao preço. O código de exemplo no4 é colocado no sub 2. Você pode observar o algoritmo de alteração de comprimento em ação e ver como ele afeta a velocidade da média ponderada. Iniciantes exemplo no6 (Como evitar a divisão por zero erros) Divisão por zero é um problema freqüente experimentado na programação. A resposta é sempre infinita, então temos que evitar que qualquer coisa seja dividida por zero em primeiro lugar. Existem dois métodos para fazer isso. Se value1 0 então value1value10.0000000001 Então nós simplesmente adicionamos um número minúsculo a ele, que é tão pequeno que não fará muita diferença para as saídas. Se value1 ltgt 0 então value2 value3 value1 Isso força o computador a perguntar se o valor1 é 0 ou não antes de fazer seus cálculos. Se for 0, retornará o valor padrão que foi atribuído a value1 nas variáveis ​​quando você a criou. Iniciantes exemplo no7 (Como usar a transformação de Fisher)

Comments

Popular Posts