Sunday 12 November 2017

Valor Medio Móvil Ponderado Exponencialmente C


¿Es posible implementar una media móvil en C sin necesidad de una ventana de muestras? He encontrado que puedo optimizar un poco, eligiendo un tamaño de ventana que es una potencia de dos para permitir el cambio de bits en lugar de dividir, pero no necesitar Un buffer sería bueno. ¿Existe una manera de expresar un nuevo promedio móvil sólo como una función del resultado anterior y la nueva muestra Definir un ejemplo de media móvil, a través de una ventana de 4 muestras para ser: Agregar nueva muestra e: Un promedio móvil se puede implementar recursivamente , Pero para un cálculo exacto de la media móvil tiene que recordar la más antigua muestra de entrada en la suma (es decir, el a en su ejemplo). Para una longitud N de media móvil se calcula: donde yn es la señal de salida y xn es la señal de entrada. Eq. (1) se puede escribir recursivamente como Así que siempre necesita recordar la muestra xn-N para calcular (2). Como señaló Conrad Turner, puede usar una ventana exponencial (infinitamente larga), que le permite calcular la salida sólo de la salida pasada y la entrada actual: pero esto no es una media móvil estándar (no ponderada) sino exponencial (Por lo menos en teoría) nunca se olvida nada (los pesos sólo se hacen más pequeños y más pequeños para las muestras en el pasado). Implementé un promedio móvil sin memoria de elementos individuales para un programa de seguimiento GPS que escribí. Empiezo con 1 muestra y divido por 1 para obtener la media actual. A continuación, añadir otra muestra y dividir por 2 a la actual media. Esto continúa hasta que consigo a la longitud del promedio. Cada vez después, agrego la nueva muestra, obtengo el promedio y elimino ese promedio del total. No soy un matemático, pero esto parecía una buena manera de hacerlo. Pensé que se convertiría en el estómago de un verdadero matemático, pero, resulta que es una de las maneras aceptadas de hacerlo. Y funciona bien. Sólo recuerde que cuanto más alto sea su longitud, más lento seguirá lo que desea seguir. Eso puede no importar la mayor parte del tiempo pero al seguir los satélites, si usted es lento, el rastro podría estar lejos de la posición real y parecerá malo. Usted podría tener una brecha entre el sat y los puntos finales. Elegí una longitud de 15 actualizado 6 veces por minuto para obtener suavizado adecuado y no llegar demasiado lejos de la posición real sentado con los puntos de pista suavizada. Respondió hace 2 días inicializar total 0, count0 (cada vez que vea un nuevo valor Entonces una entrada (scanf), una suma totalnewValue, un incremento (count), un promedio de división (total / count) Para calcular el promedio sobre sólo las 4 últimas entradas, requeriría 4 variables de entrada, tal vez copiando cada entrada a una variable de entrada más antigua, luego calculando la nueva media móvil como suma de las 4 variables de entrada, dividida por 4 Todos los insumos fueron positivos para hacer que el promedio de los cálculos responda 3 de febrero a las 4:06 que en realidad calculará el promedio total y NO el promedio móvil A medida que el conteo se hace más grande el impacto de cualquier nueva muestra de entrada se vuelve ndsh A las 13:53 Su respuesta 2016 Stack Exchange, IncExplorando La Volatilidad Media Voluntaria Exponencialmente Ponderada es la medida más común de riesgo, pero viene en varios sabores En un artículo anterior, mostramos cómo calcular la volatilidad histórica simple. Utilizamos la volatilidad para medir el riesgo futuro. Utilizamos los datos reales de los precios de las acciones de Google para calcular la volatilidad diaria basada en 30 días de datos de existencias. En este artículo, mejoraremos la volatilidad simple y discutiremos el promedio móvil exponencialmente ponderado (EWMA). Vs histórico. Volatilidad implícita En primer lugar, permite poner esta métrica en un poco de perspectiva. Existen dos enfoques generales: volatilidad histórica e implícita (o implícita). El enfoque histórico supone que el pasado es un prólogo que medimos la historia con la esperanza de que sea predictivo. La volatilidad implícita, por el contrario, ignora la historia que resuelve por la volatilidad implícita en los precios de mercado. Espera que el mercado conozca mejor y que el precio de mercado contenga, aunque implícitamente, una estimación consensual de la volatilidad. Si nos centramos sólo en los tres enfoques históricos (a la izquierda de arriba), tienen dos pasos en común: Calcular la serie de retornos periódicos Aplicar un esquema de ponderación En primer lugar, Calcular el retorno periódico. Ésa es típicamente una serie de vueltas diarias donde cada vuelta se expresa en términos continuamente compuestos. Para cada día, tomamos el registro natural de la relación de precios de las acciones (es decir, el precio hoy dividido por el precio ayer, y así sucesivamente). Esto produce una serie de retornos diarios, de u i a u i-m. Dependiendo de cuántos días (m días) estamos midiendo. Eso nos lleva al segundo paso: aquí es donde los tres enfoques difieren. En el artículo anterior (Usando Volatilidad Para Calcular el Riesgo Futuro), mostramos que bajo un par de simplificaciones aceptables, la varianza simple es el promedio de los retornos cuadrados: Obsérvese que esto suma cada uno de los retornos periódicos, luego divide ese total por el Número de días u observaciones (m). Por lo tanto, su realmente sólo un promedio de los retornos cuadrados periódico. Dicho de otra manera, cada cuadrado de retorno se da un peso igual. Por lo tanto, si alfa (a) es un factor de ponderación (específicamente, 1 / m), entonces una variante simple se parece a esto: El EWMA mejora en la varianza simple La debilidad de este enfoque es que todas las ganancias ganan el mismo peso. El retorno de ayer (muy reciente) no tiene más influencia sobre la varianza que el retorno de los últimos meses. Este problema se fija mediante la media móvil ponderada exponencialmente (EWMA), en la cual los rendimientos más recientes tienen mayor peso sobre la varianza. La media móvil exponencialmente ponderada (EWMA) introduce lambda. Que se denomina parámetro de suavizado. Lambda debe ser menos de uno. Bajo esta condición, en lugar de iguales ponderaciones, cada cuadrado de retorno es ponderado por un multiplicador de la siguiente manera: Por ejemplo, RiskMetrics TM, una empresa de gestión de riesgos financieros, tiende a utilizar un lambda de 0,94 o 94. En este caso, el primero Más reciente) cuadrado es ponderado por (1-0.94) (. 94) 0 6. El próximo cuadrado de retorno es simplemente un lambda-múltiplo del peso anterior en este caso 6 multiplicado por 94 5.64. Y el tercer día anterior el peso es igual (1-0.94) (0.94) 2 5.30. Ese es el significado de exponencial en EWMA: cada peso es un multiplicador constante (es decir, lambda, que debe ser menor que uno) del peso de los días anteriores. Esto asegura una varianza que está ponderada o sesgada hacia datos más recientes. (Para obtener más información, consulte la hoja de cálculo de Excel para la volatilidad de Google.) A continuación se muestra la diferencia entre la volatilidad y EWMA para Google. La volatilidad simple pesa efectivamente cada vuelta periódica en 0.196 como se muestra en la columna O (teníamos dos años de datos de precios de acciones diarios, es decir, 509 devoluciones diarias y 1/509 0.196). Pero note que la Columna P asigna un peso de 6, luego 5.64, luego 5.3 y así sucesivamente. Esa es la única diferencia entre la varianza simple y EWMA. Recuerde: Después de sumar la serie completa (en la columna Q) tenemos la varianza, que es el cuadrado de la desviación estándar. Si queremos volatilidad, necesitamos recordar tomar la raíz cuadrada de esa varianza. ¿Cuál es la diferencia en la volatilidad diaria entre la varianza y EWMA en el caso de Googles? Su significativo: La variación simple nos dio una volatilidad diaria de 2,4 pero la EWMA dio una volatilidad diaria de sólo 1,4 (ver la hoja de cálculo para más detalles). Aparentemente, la volatilidad de Googles se estableció más recientemente, por lo tanto, una simple varianza podría ser artificialmente alta. La variación de hoy es una función de la variación de los días de Pior Usted notará que necesitábamos calcular una larga serie de pesos exponencialmente decrecientes. No haremos la matemática aquí, pero una de las mejores características de la EWMA es que toda la serie se reduce convenientemente a una fórmula recursiva: Recursiva significa que las referencias de la varianza de hoy (es decir, es una función de la variación de días anteriores). Esta fórmula también se encuentra en la hoja de cálculo, y produce exactamente el mismo resultado que el cálculo de longitud larga. Se dice: La varianza de hoy (bajo EWMA) equivale a la varianza de ayer (ponderada por lambda) más la vuelta al cuadrado de ayer (pesada por uno menos lambda). Observe cómo estamos agregando dos términos juntos: la variación ponderada de ayer y la ponderada ponderada de ayer, la vuelta al cuadrado. Aun así, lambda es nuestro parámetro de suavizado. Un lambda más alto (por ejemplo, como RiskMetrics 94) indica una disminución más lenta en la serie - en términos relativos, vamos a tener más puntos de datos en la serie y van a caer más lentamente. Por otro lado, si reducimos el lambda, indicamos una mayor decaimiento: los pesos se caen más rápidamente y, como resultado directo de la rápida decaimiento, se utilizan menos puntos de datos. (En la hoja de cálculo, lambda es una entrada, para que pueda experimentar con su sensibilidad). Resumen La volatilidad es la desviación estándar instantánea de un stock y la métrica de riesgo más común. Es también la raíz cuadrada de la varianza. Podemos medir la varianza históricamente o implícitamente (volatilidad implícita). Al medir históricamente, el método más fácil es la varianza simple. Pero la debilidad con la varianza simple es que todas las ganancias obtienen el mismo peso. Así que enfrentamos un trade-off clásico: siempre queremos más datos, pero cuanto más datos tengamos, más nuestro cálculo se diluye por datos distantes (menos relevantes). La media móvil exponencialmente ponderada (EWMA) mejora la varianza simple asignando pesos a los retornos periódicos. Haciendo esto, ambos podemos usar un tamaño grande de la muestra pero también dar mayor peso a vueltas más recientes. (Para ver un tutorial de película sobre este tema, visite la Tortuga Biónica.) Algoritmo C para el promedio móvil exponencial de latencia cero Última modificación: 2012-08-13 He estado intentando implementar un corte de baja frecuencia en c que esencialmente toma una corriente de Números y suaviza la salida (filtrando el movimiento de alta frecuencia / jitter), sin embargo, es importante que los números ponderados frontales se consideran inmediatamente como los datos son críticos en el tiempo (es para controlar una base de simulación de movimiento utilizando la salida de un poco de software de juego ). Tengo un algoritmo de media móvil ponderada de trabajo, pero podría hacer con algo un poco más sensible en la parte delantera, y he encontrado esto: - El pseudo-código es como sigue: Entradas: Precio (NumericSeries), Period (NumericSimple) Variables: ZLEMA Factor de precio 2 / (Período1) Retardo (Período-1) / 2 Fin de más comenzar Factor ZLEMA (2Precio-Pricelag) (1 factor) ZLEMA1 fin Ive translated Lo en C y mi código es como sigue: Sin embargo, doesnt parecen comportarse bastante como Id esperar. Parece estar casi allí, pero a veces me dan un valor ligeramente inferior a todos los elementos de la cola (cuando son todos más altos). Mi cola y el número de elementos en él se pasan como parámetros, con el más reciente estar en la parte delantera en todo momento, también pasar un contador de incremento a partir de 0 como sea requerido por la función. No estoy seguro de Ive interpretado el significado de ZLEMA1 correctamente como no está claro en su pseudocódigo, por lo que he asumido que esto es la última llamada zlema y también estoy suponiendo que el precio realmente significa Price0. Tal vez Ive tiene este mal ¿Se supone que estoy copiando los valores reales zlema calculado de nuevo a mi cola original antes de la próxima llamada Yo no cambiar la cola original en todos los demás que simplemente cambiar todos los valores de uno al final e insertar lo último al principio . El código que utilizo para hacer esto es: Sería muy agradecido si alguien con una mejor comprensión de las matemáticas podría satisfacer sanidad comprobar esto para mí para ver si he conseguido algo ligeramente mal Gracias de antemano si puede ayudar En primer lugar gracias a todos por Su entrada, muy apreciado Eso tiene sentido, supongo, entonces supongo que lo mejor que puedo esperar es simplemente un promedio móvil exponencial, aceptando que habrá un pequeño retraso, pero esto será minimizado por la ponderación de peso más pesado que el dado en tipcial ponderado Media móvil Tengo este algoritmo también, pero un problema similar en que los valores no parecen muy correctos (a menos que sea la naturaleza de la fórmula). Por ejemplo, digamos que mi matriz contiene 16 valores, todos los 0.4775 - la salida es 0.4983, pero Id esperar que sea 0.4775 ¿Te parece bien a ti. / Promedio móvil exponencial. / Float ema (float vals, int numVals, int currentSample) factor estático float 0 static float lastema 0 float ema if (currentSample lt 1) ema vals0 factor 2.0 / ((float) numVals) 1.0) o bien ema (factor vals0) (1,0-factor)) lastema ema return ema A la inversa, a veces la salida es más baja que cada una de las entradas, incluso si todas son más altas. Se llama de la misma manera que zlema (.) Arriba, con un contador de incremento. La fórmula y el pseudocódigo para este están aquí: - autotradingstrategy. wordpress / 2009/11/30 / expo nential-mo ving-avera ge / Gracias de nuevo, disculpas por mi malentendido de algunos de los fundamentos :( Saludos cordiales, Chris J As Para el código que publiqué, youre correcto sobre la situación del tamaño de la matriz. Eso debe ser fijado fácilmente En cuanto a sus preguntas: 1) La constante del filtro representa un cutoff de la frecuencia. Utilicé un Digital Signal Processing (DSP) para esta técnica. Es. wikipedia. org/wi ki / Low-pas sfilter es una explicación sencilla. Desea la sección Realización de tiempo discreto. En mi caso el A es el RC-Constant del que hablan. Así que la frecuencia que corta es por encima de 1 / (2piA). Si usted no tiene una comprensión de la teoría de Frecuencia-Dominio, esto puede ser complicado. En su caso, cuanto más alto usted hace A, menor será la frecuencia que este filtro permitirá, lo que significa que suavizará la curva cada vez más. Cuanto más bajo lo haces, más ruido se permite en el sistema. Recuerde que A debe ser mayor o igual que 1 para ser efectivo. Volví a conectar el XLS, esta vez sin el cambio de rand () números. Ajuste la constante A y observe cómo quotsmoothsquot (o filtros) de las variaciones de alta frecuencia. 2) El último punto de la matriz de entrada tiene el valor más reciente. 3) Lo mismo ocurre con la matriz de salida. El último es el valor más reciente. 5) El NUMVALS es arbitrario. Puede agregar continuamente a la matriz de entrada y salida tantas veces como le gustaría y no afectaría el filtro. En particular, utilicé 49 puntos. Pero puedo eliminar fácilmente los últimos 20 y las primeras 29 salidas seguirían siendo las mismas. La función no se basa en cuántos puntos se están utilizando. Me gustaría mencionar que he desarrollado esta función para una conversión de una sola vez. Si desea hacer una conversión para el siguiente valor sobre la marcha podría probar algo más simple (como adjunto). Otra vez Im oxidado en c. Espero que esto sea correcto. La única cosa que usted necesitaría suministrar es la constante de entrada y filtro. Déjeme saber si esto ayuda.

No comments:

Post a Comment