Thursday 18 January 2018

Implementação média móvel simples


Na minha aplicação comercial eu tenho ticks ao vivo dos preços das ações. Preciso manter a SMA. Vamos supor que eu quero SMA de 20 velas, onde a duração de cada vela é de 10 segundos. Isso significa que a cada 10 segundos eu tenho um ponto de verificação onde: eu encerro a vela atual e armazene o preço médio nos últimos 10 segundos. A média é (máximo - min) 2 Eu lanço uma vela nova e armazeno o último preço. Eu limpo a vela desactualizada. Eu atualizo o último preço da vela de formação atual e recalculo o SMA. Então, em qualquer marca, preciso recalcular SMA. Na maioria dos casos, apenas o preço da última vela é alterado (porque usamos o último preço). Uma vez por 10 segundos, eu preciso de um pouco mais de trabalho extra - preciso esquecer a média da vela desatualizada e armazenar a média da vela apenas criada. Você pode sugerir como implementar isso com menor latência. A baixa latência é um requisito primário. Pediu 28 de abril às 10:21 Não estou certo se esta é a abordagem que você está procurando, mas aqui está o pseudocódigo para SMAs muito rápidos. Média de Movimento Simples: Eu suponho que seus dados estão vindo na forma de algum fluxo e armazenados na localização de memória contínua (pelo menos com endereços mappáveis ​​continuamente). Assim, com duas adições e uma multiplicação (com 12000) você pode gerar médias móveis subsequentes para Os novos carrapatos. Média móvel exponencial: Essa é uma alternativa decente, como mencionado acima: Aqui não é realmente uma média móvel N-dia. É apenas uma média móvel ponderada com 87 pesos até os últimos N-dias, então quase N-dias é mais parecido. Nota sobre otimizações do compilador: Observe que ativar as opções SSE ou AVX, se disponível, habilitará uma aceleração maciça desses algoritmos, pois vários cálculos podem ser produzidos em um único ciclo de CPU. É pouco provável que o algoritmo produza um erro, a menos que as áreas de memória que estão sendo utilizadas também estão sendo alteradas por outro segmento. Quanto ao recálculo completo. Uma maneira de acelerar seu código é transferir esse processo para um segmento alternativo para que ele não bloqueie a execução do seu cálculo MA principal. Uma vez que isso é uma operação independente, seria muito fácil paralelizar esse código ndash hnk 14 de julho às 12:30 Então você precisa de uma fila, de tamanho bastante fixo, onde você pode adicionar itens de forma eficiente e remover o item mais antigo ( Para removê-lo do seu total em execução). Por que não std :: fila Isso pode se sentar em cima de vários recipientes, mas se você realmente tiver apenas 20 elementos, eu suspeito que um vetor funcionaria bem. (Remover um item requer mover todos os outros itens para baixo - mas mover blocos contíguos de memória é rápido.) Você pode querer comparar o desempenho com um deque ou lista. (A resposta pode depender do que você armazena para cada vela - apenas um único floatdoubleint, ou uma estrutura mais complexa) É possível implementar uma média móvel em C sem a necessidade de uma janela de amostras Achei que posso otimizar um pouco , Ao escolher um tamanho de janela que seja um poder de dois para permitir o deslocamento de bits em vez de dividir, mas não precisar de um buffer seria bom. Existe uma maneira de expressar um novo resultado de média móvel apenas como função do resultado antigo e da nova amostra. Definir um exemplo de média móvel, em uma janela de 4 amostras para ser: Adicionar nova amostra e: Uma média móvel pode ser implementada de forma recursiva , Mas para uma computação exata da média móvel você deve lembrar a amostra de entrada mais antiga na soma (ou seja, a no seu exemplo). Para um comprimento N média móvel você calcula: onde yn é o sinal de saída e xn é o sinal de entrada. Eq. (1) pode ser escrito de forma recursiva, então você sempre precisa se lembrar da amostra xn-N para calcular (2). Conforme demonstrado por Conrad Turner, você pode usar uma janela exponencial (infinitamente longa) em vez disso, o que permite calcular a saída apenas da saída passada e da entrada atual: mas esta não é uma média móvel padrão (não ponderada), mas exponencialmente Média móvel ponderada, onde as amostras no passado obtêm um peso menor, mas (pelo menos em teoria) você nunca esquece nada (os pesos ficam cada vez menores e menores para amostras no passado). Eu implementei uma média móvel sem memória de item individual para um programa de rastreamento GPS que eu escrevi. Eu começo com 1 amostra e divide por 1 para obter o valor médio atual. Em seguida, adicione uma amostra e divida em 2 para a média atual. Isso continua até chegar ao comprimento da média. Cada vez, adiciono na nova amostra, obtenho a média e retire essa média do total. Eu não sou matemático, mas isso pareceu uma boa maneira de fazê-lo. Eu pensei que isso tornaria o estômago de um verdadeiro matemático, mas, parece que é uma das maneiras aceitas de fazê-lo. E funciona bem. Basta lembrar que, quanto mais alto for seu comprimento, mais lento seguirá o que você deseja seguir. Isso pode não importar a maior parte do tempo, mas ao seguir os satélites, se você estiver lento, a trilha pode estar longe da posição real e parecerá ruim. Você poderia ter uma lacuna entre o Sáb e os pontos de fuga. Eu escolhi um período de 15 atualizado 6 vezes por minuto para obter um alisamento adequado e não chegar muito longe da posição real de SAT com os pontos de trilhos alisados. Respondido 16 de novembro 16 às 23:03 inicializar total 0, count0 (cada vez que vê um novo valor Então uma entrada (scanf), uma adicionar totalnewValue, um incremento (contagem), uma média de divisão (total total) Esta seria uma média móvel em relação a Todas as entradas Para calcular a média sobre apenas as últimas 4 entradas, seria necessário 4 variáveis ​​de entrada, talvez copiando cada entrada para uma variável de entrada mais antiga, calculando a nova média móvel. Como soma das 4 variáveis ​​de entrada, divididas por 4 (o turno direito 2 seria Bom, se todas as entradas fossem positivas para que o cálculo médio fosse respondido 3 de fevereiro 15 às 4:06 Isso realmente calculará a média total e NÃO a média móvel. À medida que a contagem aumenta, o impacto de qualquer nova amostra de entrada se torna ndash extremamente lento Hilmar Feb 3 15 às 13:53 Sua resposta 2017 Stack Exchange, IncSimple Média móvel - SMA BREAKING DOWN Média móvel simples - SMA Uma média móvel simples é personalizável, pois pode ser calculada para um número diferente de períodos de tempo, simplesmente por anúncio Ding o preço de fechamento do título por um número de períodos de tempo e, em seguida, dividindo este total pela quantidade de períodos, que dá o preço médio da garantia durante o período de tempo. Uma média móvel simples suaviza a volatilidade e facilita a visualização da tendência de preços de uma segurança. Se a média móvel simples aponta, isso significa que o preço de segurança está aumentando. Se está apontando, significa que o preço das garantias está diminuindo. Quanto mais tempo for a média móvel, mais suave será a média móvel simples. Uma média móvel de curto prazo é mais volátil, mas sua leitura está mais próxima dos dados de origem. Significado analítico As médias móveis são uma importante ferramenta analítica usada para identificar tendências de preços atuais e o potencial de uma mudança em uma tendência estabelecida. A forma mais simples de usar uma média móvel simples em análise é usá-lo para identificar rapidamente se uma segurança está em uma tendência de alta ou tendência de baixa. Outra ferramenta analítica popular, embora ligeiramente mais complexa, é comparar um par de médias móveis simples com cada cobertura de intervalos de tempo diferentes. Se uma média móvel simples de curto prazo estiver acima de uma média de longo prazo, espera-se uma tendência de alta. Por outro lado, uma média de longo prazo acima de uma média de curto prazo indica um movimento descendente na tendência. Padrões de negociação populares Dois padrões comerciais populares que usam médias móveis simples incluem a cruz da morte e uma cruz dourada. Uma cruz de morte ocorre quando a média móvel simples de 50 dias passa abaixo da média móvel de 200 dias. Isso é considerado um sinal de baixa, que outras perdas estão em estoque. A cruz de ouro ocorre quando uma média móvel de curto prazo quebra acima de uma média móvel de longo prazo. Reforçada pelos altos volumes de negociação, isso pode indicar que ganhos adicionais estão em armazém.

No comments:

Post a Comment