Sunday 13 August 2017

Movendo Média Código Amostra


MetaTrader 4 - Expert Moving Average - perito para MetaTrader 4 O especialista em média móvel para a formação de sinais de comércio usa uma média móvel. Abertura e fechamento de posições são realizadas quando a média móvel encontra o preço na barra recentemente formada (o índice de barra é igual a 1). O tamanho do lote será otimizado de acordo com um algoritmo especial. O consultor especialista analisa a concorrência da média móvel e da tabela de preços de mercado. A verificação é executada pela função CheckForOpen (). Se a média móvel se encontrar com a barra de tal forma que a primeira for superior ao preço de abertura mas inferior a preço de fechamento, a posição de COMPRA será aberta. Se a média móvel atingir a barra de tal forma que a primeira é inferior ao preço de abertura mas superior ao preço de fechamento, a posição de VENDA será aberta. Money Management usado no especialista é muito simples, mas eficaz: o controle sobre cada volume de posição é realizada, dependendo dos resultados das transações anteriores. Este algoritmo é implementado pela função LotsOptimized (). O tamanho do lote básico é calculado com base no risco máximo permitido: O parâmetro MaximumRisk exibe a porcentagem de risco básico para cada transação. Geralmente possui um valor entre 0,01 (1) e 1 (100). Por exemplo, se a margem livre (AccountFreeMargin) é igual a 20.500 e as regras de gerenciamento de capital prescrevem o risco de uso de 2, o tamanho do lote básico fará 20500 0.02 1000 0.41. É muito importante controlar a precisão do tamanho do lote e normalizar o resultado com os valores permitidos. Normalmente, lotes fraccionados com passo de 0,1 são permitidos. Uma transação com volume de 0,41 não será realizada. Para normalizar, a função NormalizeDouble () é usada com precisão até 1 caractere após o ponto. Isso resulta no lote básico de 0,4. O cálculo do lote básico com base na margem livre permite aumentar os volumes de operação dependendo do êxito da negociação, ou seja, negociar com o reinvestimento. Este é o mecanismo básico com a gestão obrigatória do capital para o aumento da eficiência comercial. DecreaseFactor é a medida em que o tamanho do lote será reduzido após negociação não rentável. Os valores normais são 2,3,4,5. Se as transações precedentes não fossem lucrativas, os volumes subseqüentes diminuirão por um fator de DecreaseFactor para esperar pelo período não lucrativo. Este é o principal fator no algoritmo de gerenciamento de capital. A idéia é muito simples: se a negociação está aumentando com sucesso, o especialista trabalha com o lote básico fazendo lucro máximo. Após a primeira transação não rentável, o especialista irá reduzir a velocidade até que uma nova transação positiva é feita. O algoritmo permite desabilitar a redução de velocidade, para fazê-lo, é preciso especificar DecreaseFactor 0. O valor das últimas transações não lucrativas sucessivas é calculado no histórico de negócios. O lote básico será recalculado nesta base: Assim, o algoritmo permite efetivamente reduzir o risco que ocorre como resultado de uma série de transações não rentáveis. O tamanho do lote é obrigatoriamente verificado para o tamanho mínimo de lote permitido no final da função porque Os cálculos feitos anteriormente podem resultar no lote 0: O especialista é principalmente destinado a trabalhar com período diário, e no modo de teste - para fazer a preços fechados. Ele será comercial apenas na abertura de um novo bar, é por isso que os modos de cada carrapato modelagem não são necessários. Testando os resultados são representados no relatório. Eu sei que isso é possível com o impulso como por: Mas eu realmente gostaria de evitar usar impulso. Eu tenho googled e não encontrei qualquer exemplos adequados ou legível. Basicamente, eu quero acompanhar a média móvel de um fluxo contínuo de um fluxo de números de ponto flutuante usando os números de 1000 mais recentes como uma amostra de dados. Qual é a maneira mais fácil de conseguir isso que eu experimentei com o uso de uma matriz circular, média móvel exponencial e uma média móvel mais simples e descobriu que os resultados da matriz circular adequado às minhas necessidades. Se suas necessidades são simples, você pode apenas tentar usar uma média móvel exponencial. Simplificando, você faz uma variável de acumulador, e como seu código olha para cada amostra, o código atualiza o acumulador com o novo valor. Você escolhe um alfa constante que está entre 0 e 1 e calcula isso: Você só precisa encontrar um valor de alfa onde o efeito de uma determinada amostra dura apenas cerca de 1000 amostras. Hmm, Im realmente não tenho certeza que isso é adequado para você, agora que Ive colocá-lo aqui. O problema é que 1000 é uma janela muito longa para uma média móvel exponencial Não tenho certeza se há um alfa que iria espalhar a média nos últimos 1000 números, sem subfluxo no cálculo do ponto flutuante. Mas se você quisesse uma média menor, como 30 números ou assim, esta é uma maneira muito fácil e rápida de fazê-lo. Respondeu 12 de junho 12 em 4:44 1 em seu borne. A média móvel exponencial pode permitir que o alfa seja variável. Portanto, isto permite que ele seja usado para calcular médias de base de tempo (por exemplo, bytes por segundo). Se o tempo desde a última actualização do acumulador for superior a 1 segundo, deixe alfa ser 1.0. Caso contrário, você pode deixar alfa ser (usecs desde a última atualização1000000). Ndash jxh 12 de junho de 12 às 6:21 Basicamente eu quero acompanhar a média móvel de um fluxo em curso de um fluxo de números de ponto flutuante usando os mais recentes números de 1000 como uma amostra de dados. Observe que o abaixo atualiza o total como elementos como addedreplaced, evitando costal O (N) traversal para calcular a soma - necessária para a média - on demand. Total é feito um parâmetro diferente de T para suporte, e. Usando um longo longo quando totalizando 1000 s longos, um int para char s, ou um dobro ao total float s. Este é um pouco falho em que numsamples poderia ir passado INTMAX - se você se importa que você poderia usar um unsigned longa. Ou usar um membro de dados bool extra para gravar quando o recipiente é preenchido pela primeira vez enquanto ciclismo numsamples ao redor da matriz (melhor então renomeado algo inócuo como pos). Respondida em 12 de junho de 12 às 5:19, assume-se que o operador de quotvoid (amostra T) é realmente operador quotvoid (T amostra) quot. Ndash oPless Jun 8 14 at 11:52 oPless ahhh. Bem manchado. Na verdade, eu quis dizer para ser vazio operador () (T amostra), mas é claro que você poderia usar qualquer nota que você gostava. Will fix, obrigado. Ndash Tony D Jun 8 14 at 14: 27Quero desenvolver cálculo para a média móvel de preço de ações. Mas muitos cálculos complexos foram planejados mais tarde. Meu primeiro passo para saber como calcular a média móvel de forma eficiente. Eu preciso saber como tomar a entrada e retorno de saída de forma eficiente. Considerado data e preço de entrada. Data, Preço e Média Móvel. Se eu tiver 500 registros e eu quero calcular Moving média de 5 dias o que é a maneira effient em vez de ir para trás e para a matriz e Data de Preço novamente sugerir qual é a melhor maneira de receber entrada (ArrayList, Table, array Etc) e retorno de saída. Nota: MA de hoje de 5 dias será média dos últimos 5 dias, incluindo preço de hoje. Ontem MA será média dos últimos 5 dias de ontem. Eu quero manter os dias para ser flexível em vez de 5 ele poderia ser 9, 14, 20 etc Se você precisa de cálculo simples sem o seu esforço do que você pode usar TA-Lib. Mas se você quiser que seu cálculo seja mais eficiente do que o TA-Lib, então você pode criar seu próprio indicador técnico. TA-Lib é grande, mas o problema é que esta biblioteca tem apenas métodos estáticos. Isso significa que quando você precisa calcular os valores da matriz SMA com base em barras de preço 500, então você enviará toda a matriz de barras e ele retornará matriz de valores SMA. Mas se você receber novo valor 501-st, então você deve enviar novamente toda a matriz e TA-Lib novamente calculará e retornará SMA matriz de valores. Agora imagine que você precisa desse indicador no feed de preços reais, e para cada mudança de preço você precisa de um novo valor indicador. Se você tem um indicador não é um grande problema, mas se você tiver centenas de indicadores de trabalho, que poderia ser um problema de desempenho. Eu estava em tal situação e começar a desenvolver indicadores em tempo real que são eficientes e fazer cálculos adicionais para a nova barra de preço ou para a barra de preço alterado apenas. Unfortunatelly Eu nunca precisei SMA indicador para os meus sistemas de negociação, mas eu tenho tal para EMA, WMA, AD, e outros. Um desses indicadores AD é publicado no meu blog e você pode ver a partir daí o que é a estrutura básica da minha classe indicador em tempo real. Espero que você vai precisar de pequenas mudanças para implementar SMA indicador, porque é um dos mais simples. A lógica é simples. Para calcular SMA tudo que você precisa é n últimos preços. Assim instância de classe terá coleta de preços, que irá armazenar manter apenas último n número de preços como SMA é definido (no seu caso 5). Então, quando você tem um novo bar, você removerá o mais antigo e adicionará um novo e criará um cálculo. Quinta-feira, 10 de abril de 2008 16:04 Todas as respostas Há uma biblioteca chamada TA-Lib que faz tudo isso para você e é de código aberto. Ele tem cerca de 50 indicadores penso. Weve usou-o no ambiente da produção e é muito eficiente e realible. Você pode usá-lo em C, Java, C, etc Se você precisa de um cálculo simples sem o seu esforço do que você pode usar TA-Lib. Mas se você quiser que seu cálculo seja mais eficiente do que o TA-Lib, então você pode criar seu próprio indicador técnico. TA-Lib é grande, mas o problema é que esta biblioteca tem apenas métodos estáticos. Isso significa que quando você precisa calcular os valores da matriz SMA com base em barras de preço 500, então você enviará toda a matriz de barras e ele retornará matriz de valores SMA. Mas se você receber novo valor 501-st, então você deve enviar novamente toda a matriz e TA-Lib novamente calculará e retornará SMA matriz de valores. Agora imagine que você precisa desse indicador no feed de preços reais, e para cada mudança de preço você precisa de um novo valor indicador. Se você tem um indicador não é um grande problema, mas se você tiver centenas de indicadores de trabalho, que poderia ser um problema de desempenho. Eu estava em tal situação e começar a desenvolver indicadores em tempo real que são eficientes e fazer cálculos adicionais para a nova barra de preço ou para a barra de preço alterado apenas. Unfortunatelly Eu nunca precisei SMA indicador para os meus sistemas de negociação, mas eu tenho tal para EMA, WMA, AD, e outros. Um desses indicadores AD é publicado no meu blog e você pode ver a partir daí o que é a estrutura básica da minha classe indicador em tempo real. Espero que você vai precisar de pequenas mudanças para implementar SMA indicador, porque é um dos mais simples. A lógica é simples. Para calcular SMA tudo que você precisa é n últimos preços. Assim instância de classe terá coleta de preços, que irá armazenar manter apenas último n número de preços como SMA é definido (no seu caso 5). Então, quando você tem um novo bar, você removerá o mais antigo e adicionará um novo e criará um cálculo. Quinta-feira, 10 de abril de 2008 16:04 Eu calcularia a média móvel no banco de dados por meio de um procedimento armazenado ou em um cubo. Você já olhou no Analysis Services, ele tem a capacidade de calcular médias móveis. Quinta-feira, 10 de abril de 2008 16:05 Sim. TA-LIB é bom, mas pode não ser adequado para mim. Quando eu adicionar novo valor ou valor atualizado para o histórico de registros vou fazer o cálculo em uma função separada apenas para essa nova cotação e armazená-lo no banco de dados. Estou planejando atualizar a cotação a cada hora. Eu preciso fazer cerca de 25 a 30 indicadores técnicos para 2200 ações. Quinta-feira, 10 de abril de 2008 17:51 Tempo de execução de uma chamada TA-Lib em uma matriz de 10000 elementos leva cerca de 15 milissegundos (em um Intel Core Duo 2.13 Ghz). Esta é a média de todas as funções. Entre os mais rápidos, SMA leva menos de 2,5 milissegundos. O mais lento, HTTRENDMODE, leva 450 milissegundos. Com menos elementos é mais rápido. SMA leva cerca de 0,22 milissegundos para 1000 elementos de entrada. O ganho de velocidade é quase linear (a sobrecarga de realização da chamada de função é desprezível). No contexto de sua aplicação, TA-Lib é muito improvável que seja seu gargalo para desempenho de velocidade. Também eu geralmente não recomendo essa solução nquot quotlast. Leia abaixo para mais detalhes. Primeiro, uma correção para Boban. s declaração Todas as funções em TA-Lib também pode calcular um único último valor usando um mínimo de quotlast nquot elementos. Você pode ter uma matriz de tamanho 10000, ter dados inicializar apenas para os primeiros 500 elementos, adicionar um elemento e chamar TA-Lib para calcular o SMA somente para o novo elemento. TA-Lib vai olhar para trás não mais do que o necessário (se SMA de 5, em seguida, TA-Lib irá calcular um único SMA usando os últimos 5 valores). Isso é possível com o parâmetro startIdx e endIdx. Você pode especificar um intervalo a ser calculado ou um único valor. Neste cenário, você faria startIdx endIdx 500 para calcular o elemento 501st. Por que essa solução quotlast nquot é potencialmente perigosa para alguns Independentemente da escolha da solução Boban. s ou TA-Lib consideram que usar um pequeno número finito de dados passados ​​não funcionará bem com a maioria das funções TA. Com o SMA, é óbvio que você precisa apenas de elemento n para calcular uma média sobre o elemento n. Não é tão simples com EMA (e muitas outras funções TA). O algo geralmente depende do valor anterior para calcular o novo valor. A função é recursiva. Isso significa que todos os valores passados ​​influenciam os valores futuros. Se você decidir limpar o seu algo para usar apenas uma pequena quantidade de valor n passado, você não obterá o mesmo resultado que alguém que calcula sobre um grande número de valores passados. A solução é um compromisso entre velocidade e precisão. Muitas vezes discuti isso no contexto de TA-Lib (chamo-lhe o período quotunstable na documentação e fórum). Para mantê-lo simples, minha recomendação geral é se você não pode fazer a diferença entre um algo com uma resposta de impulso finito (FIR) de um algo com uma resposta de impulso infinita (IIR), você será mais seguro para calcular todos os dados que você tem acessível. TA-Lib especifica no código qual das suas funções tem um período instável (IIR). O código de amostra na guia Código Completo ilustra como calcular a média móvel de uma variável através de um conjunto de dados inteiro, em vez de As últimas N observações em um conjunto de dados, ou sobre as últimas N observações dentro de um grupo BY. Esses arquivos de amostra e exemplos de código são fornecidos pelo SAS Institute Inc. como é sem garantia de qualquer tipo, expressa ou implícita, incluindo mas não limitado às garantias implícitas de comercialização e adequação a um propósito específico. Os beneficiários reconhecem e concordam que o SAS Institute não se responsabiliza por quaisquer danos decorrentes da utilização deste material. Além disso, o SAS Institute não fornecerá suporte para os materiais aqui contidos. Esses arquivos de amostra e exemplos de código são fornecidos pelo SAS Institute Inc. como é sem garantia de qualquer tipo, expressa ou implícita, incluindo mas não limitado às garantias implícitas de comercialização e adequação a um propósito específico. Os beneficiários reconhecem e concordam que o SAS Institute não se responsabiliza por quaisquer danos decorrentes da utilização deste material. Além disso, o SAS Institute não fornecerá suporte para os materiais aqui contidos. Calcule a média móvel de uma variável através de um conjunto de dados inteiro, nas últimas N observações em um conjunto de dados ou nas últimas N observações dentro de um grupo BY.

No comments:

Post a Comment