MetaTrader 4 - Ejemplos Secretos del MetaTrader 4 Cliente Terminal: Indicadores No se puede imaginar el análisis de los mercados financieros sin indicadores técnicos en la actualidad. Usted puede crear sus propios indicadores o utilizar los incorporados. Los indicadores incorporados funcionan más rápido que los personalizados y tienen una serie de características que no se pueden implementar en indicadores personalizados. Por ejemplo, hay indicadores que se pueden adjuntar a un gráfico tanto en la ventana principal como en una subventana. Además, el indicador puede calcularse no sobre los valores de precio y / o volumen, sino sobre los valores de otro indicador. El uso inteligente de los indicadores incorporados ayudará a ir lejos sin dedicarse a la programación de los propios. Existen treinta indicadores incorporados en el terminal cliente MetaTrader 4. Condicionalmente, todos los indicadores se pueden dividir en cuatro grupos: osciladores indicadores de tendencia Bill Williams volúmenes indicadores. Los indicadores de tendencia ayudan a asignar el movimiento de precios en una dirección y detectar, sincronizadamente o con retraso, los momentos en que las tendencias cambian. Los osciladores permiten detectar tales giros de forma sincronizada o por adelantado. Los indicadores de Bill Williams tienen propiedades de osciladores e indicadores de tendencia. Los volúmenes no analizan los movimientos de los precios como son, sino la cantidad de garrapatas que tienen ingresos durante la barra. Tabla de resumen de indicadores incorporados Características Usando los enlaces de la tabla, puede ver el código fuente de un indicador personalizado que coincide con el incorporado. Descripciones de campo de la tabla o oscilador t indicador de tendencia b Indicador Bill Williams v volumen. S indicador se adjunta en una subventana por defecto m indicador se adjunta en la ventana principal de forma predeterminada. Asociación con s / m. Si el indicador puede o no estar asociado con el indicador ya adjunto en una o varias subventanas o en la ventana principal (m). Líneas adicionales. Las líneas adicionales, Indicadores anteriores Datos y Primeros indicadores Datos, aparecen en el campo Aplicar a en la ventana de propiedades de indicadores cuando se está arrastrando el indicador. Indicadores anteriores Datos: los datos del último indicador adjunto a la ventana principal oa una subventana. Si no hay indicadores adjuntos, los datos de indicadores anteriores son los datos del gráfico. Y el indicador que se adjuntará se construirá sobre la base del precio de cierre de la tabla. Primeros Indicadores Datos - datos del indicador que se adjuntó como el primero en la ventana principal o en una subventana. Si no hay indicadores adjuntos, los datos de los primeros indicadores son los datos del gráfico. Y el indicador que se adjuntará se construirá sobre la base del precio de cierre de la tabla. Período / turno. Disponibilidad de campos con los nombres correspondientes en la pestaña Parámetros de la ventana de propiedades de los indicadores. Aplicar para . Disponibilidad del campo Aplicar a en la ficha Parámetros de la ventana de propiedades de indicadores. Método . Disponibilidad del campo del mismo nombre en la pestaña Parámetros (opción del método de construcción del promedio móvil). Niveles. Disponibilidad de la pestaña Niveles. Cómo adjuntar indicadores a un gráfico Se puede conectar un indicador a un gráfico de seis maneras: utilizando el comando del menú principal: haciendo doble clic en el nombre del indicador en la ventana Navegador seleccionando el comando del menú contextual de la ventana Navegador: El indicador con el ratón en la ventana principal o en el otro subwindow indicadores (arrastrar y soltar). Las cinco primeras formas no difieren entre sí fundamentalmente. Llamémoslos modos predeterminados de fijación de indicadores. En este caso, el indicador se dibujará en el gráfico o en una subventana separada, como por defecto. El quinto método, el arrastrar, es más interesante. Algunos indicadores, cuando se arrastran al gráfico, se pueden calcular a partir de los valores de otro indicador ya adjunto al gráfico. Hay siete indicadores especiales: Bollinger Bands Commodity Channel Índice Sobres Momentum Moving Average Relativo Strength Index Desviación estándar. Los indicadores incorporados pueden combinarse con otros indicadores o calcularse sobre los valores de otros indicadores. Al combinar, el indicador que se va a adjuntar sólo se muestra sobre el indicador ya adjunto, pero tiene su propia escala y bordes. En este caso, los valores del indicador que se va a adjuntar se calculan a partir de los valores del precio del gráfico. Un indicador incrustado que se muestra en una subventana por defecto se puede combinar con el indicador ya adjunto en la subventana. Un indicador incrustado que se muestra en la ventana principal por defecto se puede combinar con el indicador ya adjunto en la ventana principal. La mayoría de los indicadores incrustados sólo se pueden conectar como en el modo predeterminado. Esos siete indicadores especiales pueden ser conectados tanto a la ventana principal como a una subventana. Cómo adjuntar a la ventana principal Indicadores que se abren en una subventana por defecto Los indicadores que se muestran a continuación se abren en una subventana por defecto: Indice de canal de mercancía Índice de fuerza relativa Momentum Desviación estándar Observemos las propiedades de estos indicadores con el ejemplo de Commodity Channel Index. Como ya se mencionó anteriormente, este indicador se abrirá de forma predeterminada en una ventana separada: Para adjuntar CCI a la ventana principal, hay que arrastrarla al gráfico. Las propiedades de los indicadores se verán como se indica a continuación: En realidad, el gráfico es al mismo tiempo el indicador. Por lo tanto, si no hay otros indicadores disponibles, los datos de los primeros indicadores y los indicadores anteriores son datos del propio gráfico y el método de dibujo de los valores de los indicadores anteriores no difiere de los valores de los primeros indicadores de ninguna manera. Por lo tanto, para adjuntar el indicador a la ventana del gráfico, uno tiene que arrastrar y soltarlo en el gráfico y seleccionar Datos de los primeros indicadores o Datos de los indicadores anteriores. El resultado obtenido: Indicadores Momentum, Índice de Fuerza Relativa y Desviación Estándar se adjuntan a la ventana del gráfico de la misma manera. Cómo adjuntar a una subventana Indicadores que se abren en la ventana principal por defecto Los indicadores de este grupo se enumeran a continuación: Consideremos la media móvil como un ejemplo. De forma predeterminada, este indicador se ve como sigue: El adjunto de la MA a una subventana separada, es necesario realizar algunas acciones más que para el ejemplo anterior. En primer lugar, debe crearse una ventana separada. Para ello, vamos a adjuntar al gráfico cualquier indicador que se pueda abrir en una subventana. Por ejemplo, MACD. Ahora, podemos arrastrar la media móvil a la ventana del MACD y seleccionar los datos de los indicadores anteriores o los primeros datos de los indicadores en la ventana de propiedades (ya que sólo hay un indicador en la subventana, el MACD, será el primero y el último) . Cuando una serie de indicadores están conectados a una subventana, siempre es posible detectar, cuál de ellos en la que se construye. Selección de indicadores anteriores Los datos se muestran como - gt, el de los primeros datos de indicadores - como gt. Hemos obtenido MACD con Media móvil superpuesta sobre ella. Podemos detenernos en esto, pero también podemos hacerlo para que sólo Media móvil permanezca en la ventana. Para ello, es necesario eliminar MACD. Pero, si sólo lo eliminamos, la media móvil, como indicador construido sobre los valores MACD, se eliminará, también. Por lo tanto, vamos a separar Media móvil de MACD en primer lugar. Vamos a calcular, por ejemplo, los valores Close. Ahora, el MACD se puede quitar, el Promedio móvil permanecerá en la ventana separada. Así, combinando propiedades de diferentes indicadores, se puede construir un sistema bastante complicado. Algunas Propiedades Comunes de los Indicadores Conexión Si el indicador a ser conectado se calcula en valores del indicador que tiene varias líneas (más de una), se calculará en valores de línea cero o la línea principal. En el código, esta línea se detecta utilizando valores del primer parámetro de la función SetIndexStyle. Así, por ejemplo, si el indicador que se va a adjuntar se calcula en el MACD, los valores de histograma se tomarán como los valores de los cálculos, ya que se determina en el código MACD: SetIndexStyle (0, DRAWHISTOGRAM). Muchos indicadores tienen, por defecto, fijo máximo y mínimo, por ejemplo, RSI tiene. En este caso, después de haber sido unido a otro indicador, por ejemplo, MACD, sus bordes pueden desalinear, es decir, RSI simplemente no coincidirá con la ventana MACD. Para corregir esto, es necesario desmarcar los campos de máximo y mínimo, y las escalas de indicadores serán independientes entre sí. Cuando una serie de indicadores están conectados a una subventana, siempre es posible detectar, cuál de ellos en la que se construye. En el ejemplo anterior, los indicadores se construyen de la siguiente manera: MACD adjunto calculado MA en los primeros datos de indicadores, es decir, en los valores de la MACD Calculado RSI en los datos de los primeros indicadores, es decir, de nuevo sobre los valores del MACD combinado CCI con MACD calculado Momentum en los datos de indicadores anteriores, es decir, sobre los valores de la CCI. Los indicadores incorporados se pueden superponer no sólo a otros indicadores incorporados, sino también a indicadores personalizados. Los principios de unión son los mismos. Por ejemplo: Cómo construir niveles Algunos indicadores permiten construir niveles. Para MA, uno puede construir un canal usando niveles. Para ello, es necesario ir a la pestaña Niveles y establecer algunos valores mediante el botón Añadir. Ahora, si hacemos que la línea MA coloree igual que el fondo, obtendremos el canal construido sobre el promedio móvil. Ficha de visualización Al final, consideremos una propiedad más de indicadores en el MetaTrader 4 Client Terminal. Todos los indicadores, tanto incorporados como personalizados, tienen esta propiedad. Además, puede aplicarse también a objetos, es decir, a herramientas analíticas gráficas y técnicas. No hay ningún secreto de que los datos analizados en diferentes marcos de tiempo del mismo símbolo pueden ser diferentes. Se pueden utilizar diferentes herramientas técnicas, incluyendo diferentes indicadores con diferentes configuraciones. Lo siguiente puede hacerse para no reajustar los indicadores una y otra vez cuando se conmuta entre períodos de tiempo: Especifique en la ventana de propiedades del indicador ese período de tiempo, al cual se anclará el indicador seleccionado. Y así sucesivamente para todos los indicadores y en todos los plazos. En el futuro, al cambiar entre ellos, podremos ver diferentes indicadores en diferentes marcos temporales. Queda sólo para guardar la plantilla que se utilizará en el futuro para otros símbolos. Ejemplo. En los plazos de H1 y M15, los mismos indicadores, MACD y MA, se adjuntan, pero con períodos diferentes. En H1: MACD con valores de 12, 26, 9 MA con el periodo de 7 se calcula en el MACD MA con el periodo de 5 se calcula en el MA (7). En M15: MACD con valores de 24, 52, 18 MA con el período de 28 se calcula en el MACD MA con el período de 20 se calcula en el MA (28). Como otros han mencionado, debe considerar un IIR (infinito Respuesta de impulso) en vez del filtro FIR (respuesta de impulso finito) que está utilizando ahora. Hay más, pero a primera vista los filtros FIR se implementan como convoluciones explícitas y filtros IIR con ecuaciones. El filtro IIR particular que uso mucho en los microcontroladores es un filtro de paso simple de un solo paso. Este es el equivalente digital de un simple filtro analógico R-C. Para la mayoría de las aplicaciones, éstas tendrán mejores características que el filtro de caja que está utilizando. La mayoría de los usos de un filtro de caja que he encontrado son el resultado de alguien que no presta atención en la clase de procesamiento de señal digital, no como resultado de necesitar sus características particulares. Si sólo desea atenuar las altas frecuencias que usted sabe son el ruido, un filtro de un solo paso de paso bajo es mejor. La mejor manera de implementar uno digitalmente en un microcontrolador es generalmente: FILT lt-- FILT FF (NEW-FILT) FILT es una pieza de estado persistente. Esta es la única variable persistente que necesita para calcular este filtro. NUEVO es el nuevo valor que se está actualizando el filtro con esta iteración. FF es la fracción del filtro. Que ajusta la pesadez del filtro. Mire este algoritmo y vea que para FF 0 el filtro es infinitamente pesado ya que la salida nunca cambia. Para FF 1, su realmente ningún filtro en absoluto, ya que la salida sólo sigue la entrada. Los valores útiles están intermedios. En los sistemas pequeños, se selecciona FF para que sea 1/2 N de modo que la multiplicación por FF se pueda realizar como un desplazamiento a la derecha por N bits. Por ejemplo, FF puede ser 1/16 y multiplicar por FF por lo tanto un desplazamiento a la derecha de 4 bits. De lo contrario este filtro sólo necesita un substracto y un agregado, aunque los números generalmente necesitan ser más anchos que el valor de entrada (más en precisión numérica en una sección separada a continuación). Normalmente tomo lecturas de A / D mucho más rápido de lo que se necesitan y aplico dos de estos filtros en cascada. Este es el equivalente digital de dos filtros R-C en serie, y se atenúa por 12 dB / octava por encima de la frecuencia de rolloff. Sin embargo, para las lecturas de A / D su generalmente más relevante mirar el filtro en el dominio del tiempo considerando su respuesta del paso. Esto le indica cuán rápido su sistema verá un cambio cuando cambie la cosa que está midiendo. Para facilitar el diseño de estos filtros (que sólo significa escoger FF y decidir cuantos de ellos a la cascada), uso mi programa FILTBITS. Se especifica el número de bits de cambio para cada FF en la serie de filtros en cascada y se calcula la respuesta de paso y otros valores. En realidad, por lo general, ejecutar esto a través de mi script wrapper PLOTFILT. Esto ejecuta FILTBITS, que hace un archivo CSV, luego traza el archivo CSV. Por ejemplo, aquí está el resultado de PLOTFILT 4 4: Los dos parámetros de PLOTFILT significan que habrá dos filtros en cascada del tipo descrito anteriormente. Los valores de 4 indican el número de bits de cambio para realizar la multiplicación por FF. Los dos valores FF son por lo tanto 1/16 en este caso. El rastro rojo es la respuesta de la etapa de la unidad, y es la cosa principal a mirar. Por ejemplo, esto le dice que si la entrada cambia instantáneamente, la salida del filtro combinado se establecerá en 90 del nuevo valor en 60 iteraciones. Si te importa el tiempo de solución de 95, entonces usted tiene que esperar alrededor de 73 iteraciones, y por 50 tiempo de solución sólo 26 iteraciones. El rastro verde le muestra la salida de una sola espiga de amplitud completa. Esto le da una idea de la supresión de ruido aleatorio. Parece que ninguna muestra causará más de un cambio de 2.5 en la salida. El rastro azul es dar una sensación subjetiva de lo que hace este filtro con el ruido blanco. Esto no es una prueba rigurosa, ya que no hay garantía de que exactamente el contenido de los números aleatorios elegidos como el ruido blanco de entrada para esta ejecución de PLOTFILT. Es sólo para darle una sensación áspera de cuánto será aplastado y lo suave que es. PLOTFILT, tal vez FILTBITS, y muchas otras cosas útiles, especialmente para el desarrollo de firmware PIC está disponible en la versión de software PIC Development Tools en mi página de descargas de software. Agregado acerca de la precisión numérica veo de los comentarios y ahora una nueva respuesta que hay interés en discutir el número de bits necesarios para implementar este filtro. Tenga en cuenta que la multiplicación por FF creará Log 2 (FF) nuevos bits por debajo del punto binario. En sistemas pequeños, FF se elige generalmente para ser 1/2 N de modo que esta multiplicación se realice realmente por un desplazamiento a la derecha de N bits. FILT es por lo tanto un entero de punto fijo. Tenga en cuenta que esto no cambia ninguna de las matemáticas desde el punto de vista de los procesadores. Por ejemplo, si está filtrando lecturas A / D de 10 bits y N 4 (FF 1/16), entonces necesita 4 bits de fracción por debajo de las lecturas A / D de enteros de 10 bits. Uno de los procesadores más, youd estar haciendo operaciones enteras de 16 bits debido a las lecturas de 10 bits A / D. En este caso, todavía puede hacer exactamente las mismas operaciones enteras de 16 bits, pero comience con las lecturas A / D a la izquierda desplazadas por 4 bits. El procesador no sabe la diferencia y no necesita. Hacer la matemática en todo enteros de 16 bits funciona si usted los considera 12,4 puntos fijos o enteros verdaderos de 16 bits (16,0 puntos fijos). En general, es necesario agregar N bits cada polo de filtro si no desea añadir ruido debido a la representación numérica. En el ejemplo anterior, el segundo filtro de dos tendría que tener 1044 18 bits para no perder información. En la práctica en una máquina de 8 bits que significa youd utilizar valores de 24 bits. Técnicamente sólo el segundo polo de dos necesitaría el valor más amplio, pero para la simplicidad del firmware usualmente utilizo la misma representación, y por lo tanto el mismo código, para todos los polos de un filtro. Normalmente escribo una subrutina o macro para realizar una operación de polo de filtro, y luego aplicarla a cada polo. Si una subrutina o macro depende de si los ciclos o la memoria del programa son más importantes en ese proyecto en particular. De cualquier manera, utilizo un cierto estado del rasguño para pasar NUEVO en la subrutina / la macro, que pone al día FILT, pero también las cargas que en el mismo estado del rasguño NUEVO estaba pulg. Esto hace fácil aplicar múltiples polos puesto que el FILT actualizado de un poste es El NUEVO de la siguiente. Cuando una subrutina, es útil tener un puntero apuntan a FILT en el camino, que se actualiza justo después de FILT a la salida. De esta manera la subrutina opera automáticamente en filtros consecutivos en memoria si se llama varias veces. Con una macro usted no necesita un puntero puesto que usted pasa en la dirección para funcionar en cada iteración. Ejemplos de código Aquí hay un ejemplo de una macro como se describe anteriormente para un PIC 18: Y aquí hay una macro similar para un PIC 24 o dsPIC 30 o 33: Ambos ejemplos se implementan como macros utilizando mi preprocesador de ensamblador PIC. Que es más capaz que cualquiera de las instalaciones macro incorporadas. Clabacchio: Otro problema que debería haber mencionado es la implementación de firmware. Puede escribir una subrutina de filtro de paso bajo de un solo polo una vez, luego aplicarla varias veces. De hecho, por lo general escribo una subrutina de este tipo para tomar un puntero en la memoria al estado del filtro, a continuación, hacer avanzar el puntero para que pueda ser llamado en sucesión fácilmente para realizar filtros multipolar. Ndash Olin Lathrop Apr 20 12 at 15:03 1. Muchas gracias por sus respuestas - todas ellas. Decidí usar este filtro IIR, pero este filtro no se utiliza como un filtro LowPass estándar, ya que necesito valorar los valores promedio de los contadores y compararlos para detectar cambios en un determinado rango. Ya que estos Valores van de dimensiones muy diferentes dependiendo de Hardware que quería tomar un promedio para poder reaccionar a estos cambios específicos de hardware automáticamente. Ndash sensslen May 21 12 at 12:06 Si se puede vivir con la restricción de un poder de dos números de elementos a la media (es decir, 2,4,8,16,32 etc), entonces la división se puede hacer fácil y eficientemente en un De bajo rendimiento micro sin división dedicada, ya que se puede hacer como un cambio de bits. Cada turno a la derecha es una potencia de dos por ejemplo: El OP pensó que tenía dos problemas, dividiendo en un PIC16 y la memoria para su amortiguador de anillo. Esta respuesta muestra que la división no es difícil. Es cierto que no aborda el problema de la memoria, pero el sistema SE permite respuestas parciales, y los usuarios pueden tomar algo de cada respuesta por sí mismos, o incluso editar y combinar las respuestas de otros. Dado que algunas de las otras respuestas requieren una operación de división, son igualmente incompletas, ya que no muestran cómo lograr esto de manera eficiente en un PIC16. Ndash Martin Apr 20 12 at 13:01 Hay una respuesta para un verdadero filtro de media móvil (también conocido como filtro de caja) con menos requisitos de memoria, si no te importa el downsampling. Su llamado un filtro integrador-peine en cascada (CIC). La idea es que usted tiene un integrador que tomar las diferencias de más de un período de tiempo, y la clave de ahorro de memoria dispositivo es que mediante el muestreo, no tienes que almacenar todos los valores del integrador. Se puede implementar utilizando el pseudocódigo siguiente: Su longitud media móvil efectiva es decimationFactorstatesize, pero sólo necesita mantener alrededor de las muestras de estado. Obviamente, puede obtener un mejor rendimiento si su stateize y decimationFactor son potencias de 2, de modo que la división y los operadores de resto se sustituye por cambios y máscara-ands. Postscript: Estoy de acuerdo con Olin que siempre debe considerar simples filtros IIR antes de un filtro de media móvil. Si no necesita la frecuencia-nulos de un filtro de vagón, un filtro de paso bajo de 1 o 2 polos probablemente funcione bien. Por otro lado, si está filtrando para fines de decimación (tomando una entrada de alta tasa de muestreo y promediándola para su uso por un proceso de baja velocidad), entonces un filtro de CIC puede ser justo lo que está buscando. (Especialmente si se puede usar statesize1 y evitar el ringbuffer en conjunto con sólo un único valor de integrador anterior) Theres algunos análisis en profundidad de la matemática detrás de la utilización de la primera orden IIR filtro que Olin Lathrop ya ha descrito en el Digital Signal Processing stack exchange (Incluye muchas imágenes bonitas). La ecuación para este filtro IIR es: Esto se puede implementar usando sólo números enteros y sin división usando el siguiente código (podría necesitar un poco de depuración como estaba escribiendo desde la memoria.) Este filtro se aproxima a una media móvil de Los últimos K muestras estableciendo el valor de alfa a 1 / K. Hacer esto en el código precedente definiendo BITS a LOG2 (K), es decir para K 16 fijado BITS a 4, para K 4 fijado BITS a 2, etc. (Mal verificar el código enumerado aquí tan pronto como consiga un cambio y Edite esta respuesta si es necesario.) Respondió Jun 23 12 at 4:04 Heres un filtro de paso bajo de un solo polo (promedio móvil, con frecuencia de corte CutoffFrequency). Muy simple, muy rápido, funciona muy bien, y casi no hay sobrecarga de memoria. Nota: Todas las variables tienen un alcance más allá de la función de filtro, excepto la pasada en newInput Nota: Este es un filtro de una sola etapa. Múltiples etapas se pueden conectar en cascada para aumentar la nitidez del filtro. Si utiliza más de una etapa, tendrá que ajustar DecayFactor (en relación con la frecuencia de corte) para compensar. Y, obviamente, todo lo que necesita son las dos líneas colocadas en cualquier lugar, no necesitan su propia función. Este filtro tiene un tiempo de aceleración antes de que el promedio móvil represente el de la señal de entrada. Si necesita omitir ese tiempo de aceleración, sólo puede inicializar MovingAverage al primer valor de newInput en lugar de 0 y esperar que el primer newInput no sea un outlier. (CutoffFrequency / SampleRate) tiene un intervalo entre 0 y 0,5. DecayFactor es un valor entre 0 y 1, por lo general cerca de 1. Flotadores de precisión simple son lo suficientemente buenos para la mayoría de las cosas, sólo prefiero dobles. Si necesitas pegarte con números enteros, puedes convertir DecayFactor y Factor de Amplitud en enteros fraccionarios, en los que el numerador se almacena como el entero, y el denominador es una potencia entera de 2 (así puedes cambiar a la derecha como el número Denominador en vez de tener que dividir durante el bucle del filtro). Por ejemplo, si DecayFactor 0.99 y desea utilizar números enteros, puede establecer DecayFactor 0.99 65536 64881. Y luego, cada vez que multiplique por DecayFactor en su bucle de filtro, simplemente cambie el resultado 16. Para más información sobre esto, un excelente libro thats En línea, capítulo 19 sobre filtros recursivos: www. dspguide / ch19.htm PS Para el paradigma de la media móvil, un enfoque diferente para establecer DecayFactor y AmplitudeFactor que puede ser más relevante para sus necesidades, digamos que desea que el anterior, alrededor de 6 elementos promediados juntos, hacerlo discretamente, youd añadir 6 elementos y dividir por 6, por lo que Puede establecer el AmplitudeFactor a 1/6, y DecayFactor a (1.0 - AmplitudeFactor). Respondió May 14 12 at 22:55 Todo el mundo ha comentado a fondo sobre la utilidad de IIR vs FIR, y en la división de poder de dos. La identificación apenas tiene gusto de dar algunos detalles de la puesta en práctica. Lo siguiente funciona bien en pequeños microcontroladores sin FPU. No hay multiplicación, y si mantienes N una potencia de dos, toda la división es de un solo ciclo de desplazamiento de bits. Búfer de anillo FIR básico: guarda un buffer de ejecución de los últimos N valores, y una SUM corriente de todos los valores en el búfer. Cada vez que entra una nueva muestra, resta el valor más antiguo del buffer de SUM, reemplázalo por el nuevo, añada la nueva muestra a SUM y SUM / N. Búfer de anillo IIR modificado: mantener una SUM corriente de los últimos N valores. Cada vez que llega una nueva muestra, SUM - SUM / N, agregue la nueva muestra y la salida SUM / N. Si le estoy leyendo bien, usted está describiendo un filtro IIR de primer orden, el valor que está restar es el valor más antiguo que está cayendo, pero es el promedio de los valores anteriores. Los filtros IIR de primer orden pueden sin duda ser útiles, pero no estoy seguro de lo que quiere decir cuando sugiere que la salida es la misma para todas las señales periódicas. A una frecuencia de muestreo de 10KHz, alimentar una onda cuadrada de 100Hz en un filtro de caja de 20 etapas producirá una señal que se eleva uniformemente para 20 muestras, se sienta alto para 30, cae uniformemente para 20 muestras y se sienta bajo para 30. Un primer orden Filtro IIR. Ndash supercat Aug 28 13 a las 15:31 producirá una onda que comienza a subir bruscamente y gradualmente se nivela cerca (pero no en) el máximo de entrada, luego empieza a caer bruscamente y gradualmente se nivela cerca (pero no) del mínimo de entrada. Comportamiento muy diferente. Ndash supercat August 28 13 at 15:32 Un problema es que un simple promedio móvil puede o no ser útil. Con un filtro IIR, puede obtener un filtro agradable con relativamente pocos calcs. La FIR que usted describe sólo puede darle un rectángulo en el tiempo - un sinc en freq - y no puede administrar los lóbulos laterales. Puede ser bien vale la pena para lanzar en un número entero multiplica para que sea una buena sintonía sintonizable FIR si se puede ahorrar las garrapatas del reloj. Ndash Scott Seidman: No hay necesidad de multiplicar si uno simplemente tiene cada etapa de la FIR o la salida de la media de la entrada a esa etapa y su valor almacenado anterior, y luego almacenar la entrada (si se tiene El rango numérico, se podría usar la suma en lugar de la media). Si ese filtro es mejor que un filtro de caja depende de la aplicación (la respuesta de paso de un filtro de caja con un retardo total de 1ms, por ejemplo, tendrá un pico d2 / dt desagradable cuando el cambio de entrada, y 1ms más tarde, pero tendrá El mínimo posible d / dt para un filtro con un retraso total de 1ms). Ndash supercat Como dijo mikeselectricstuff, si realmente necesita reducir sus necesidades de memoria, y no te importa su respuesta al impulso que es un exponencial (en lugar de un pulso rectangular), me gustaría ir para un filtro de media móvil exponencial . Los uso ampliamente. Con ese tipo de filtro, usted no necesita ningún búfer. Usted no tiene que almacenar N muestras pasadas. Solo uno. Por lo tanto, sus requisitos de memoria se redujo por un factor de N. También, no necesita ninguna división para eso. Sólo multiplicaciones. Si tiene acceso a aritmética de punto flotante, use multiplicaciones de coma flotante. De lo contrario, haga multiplicaciones enteras y desplaza hacia la derecha. Sin embargo, estamos en 2012, y te recomiendo que utilices compiladores (y MCUs) que te permitan trabajar con números de coma flotante. Además de ser más eficiente de la memoria y más rápido (usted no tiene que actualizar los elementos en cualquier búfer circular), yo diría que es también más natural. Porque una respuesta de impulso exponencial coincide mejor con la forma en que se comporta la naturaleza, en la mayoría de los casos. Un problema con el filtro IIR como casi tocado por olin y supercat pero aparentemente ignorado por otros es que el redondeo abajo introduce cierta imprecisión (y potencialmente sesgo / truncamiento). Suponiendo que N es una potencia de dos, y sólo se utiliza la aritmética entera, el desplazamiento a la derecha elimina sistemáticamente los LSB de la nueva muestra. Eso significa que la duración de la serie nunca podría ser, el promedio nunca tendrá en cuenta. Por ejemplo, supongamos una serie que disminuye lentamente (8, 8, 8, 7, 7, 7, 7, 6, 6) y asuma que el promedio es realmente 8 al principio. La muestra del puño 7 llevará la media a 7, independientemente de la resistencia del filtro. Sólo para una muestra. La misma historia para 6, etc. Ahora piensa en lo opuesto. La serie sube. El promedio se mantendrá en 7 para siempre, hasta que la muestra es lo suficientemente grande como para que cambie. Por supuesto, puede corregir el sesgo añadiendo 1 / 2N / 2, pero eso no resolverá realmente el problema de precisión. En ese caso la serie decreciente permanecerá para siempre en 8 hasta que la muestra sea 8-1 / 2 (N / 2). Para N4 por ejemplo, cualquier muestra por encima de cero mantendrá el promedio sin cambios. Creo que una solución para eso implicaría mantener un acumulador de los LSB perdidos. Pero no lo hice lo suficientemente lejos para tener el código listo, y no estoy seguro de que no perjudicaría la potencia IIR en algunos otros casos de series (por ejemplo, si 7,9,7,9 promedio a 8 entonces). Olin, su cascada de dos etapas también necesitaría alguna explicación. ¿Se refiere a la celebración de dos valores medios con el resultado de la primera alimentado en el segundo en cada iteración. ¿Cuál es el beneficio de esto? Esta funcionalidad es experimental y puede ser cambiada o eliminada completamente en una versión futura. Dada una serie ordenada de datos, la agregación Moving Average deslizará una ventana a través de los datos y emitirá el valor promedio de esa ventana. Por ejemplo, dados los datos 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. podemos calcular un promedio móvil simple con un tamaño de ventanas de 5 como sigue: Las medias móviles son un método simple para suavizar secuencial datos. Los promedios móviles se aplican típicamente a los datos basados en el tiempo, como los precios de las acciones o las métricas del servidor. El suavizado puede utilizarse para eliminar las fluctuaciones de alta frecuencia o ruido aleatorio, lo que permite visualizar las tendencias de frecuencia más bajas, como la estacionalidad. Syntaxedit Linearedit El modelo lineal asigna una ponderación lineal a los puntos de la serie, de modo que los puntos de datos antiguos (por ejemplo, aquellos al principio de la ventana) aportan una cantidad linealmente menor a la media total. La ponderación lineal ayuda a reducir el rezago detrás de la media de los datos, ya que los puntos más antiguos tienen menos influencia. Un modelo lineal no tiene configuraciones especiales para configurar Al igual que el modelo simple, el tamaño de la ventana puede cambiar el comportamiento de la media móvil. Por ejemplo, una pequeña ventana (ventana: 10) seguirá de cerca los datos y sólo suavizará las fluctuaciones de pequeña escala: En cambio, un promedio móvil lineal con una ventana más grande (ventana: 100) Suavizará todas las fluctuaciones de alta frecuencia, dejando sólo las tendencias de baja frecuencia y largo plazo. También tiende a quedarse atrás de los datos reales por una cantidad sustancial, aunque por lo general menos que el modelo simple: Multiplicative Holt-Wintersedit Multiplicative se especifica mediante el tipo de ajuste: mult. Esta variedad se prefiere cuando el efecto estacional se multiplica en función de sus datos. P. ej. Si el efecto estacional es x5 los datos, en lugar de simplemente agregarle. Los valores por defecto de alpha y gamma son 0.3 mientras que beta es 0.1. Los ajustes aceptan cualquier flotador de 0-1 inclusive. El valor predeterminado de period es 1. El modelo multiplicativo Holt-Winters puede ser Minimizado Multiplicativo Holt-Winters funciona dividiendo cada punto de datos por el valor estacional. Esto es problemático si cualquiera de sus datos es cero, o si hay vacíos en los datos (ya que esto resulta en un divid-by-cero). Para combatir esto, el mult Holt-Winters imprime todos los valores por una cantidad muy pequeña (110 -10) para que todos los valores no sean cero. Esto afecta al resultado, pero sólo mínimamente. Si sus datos son distintos de cero, o prefiere ver NaN cuando se encuentren ceros, puede desactivar este comportamiento con pad: false Predictionedit Todo el modelo de media móvil soporta un modo de predicción que intentará extrapolar en el futuro dada la corriente Suavizado, móvil promedio. Dependiendo del modelo y parámetro, estas predicciones pueden o no ser exactas. Las predicciones se habilitan agregando un parámetro de predicción a cualquier agregación de media móvil, especificando el número de predicciones que le gustaría anexar al final de la serie. Estas predicciones se espaciarán en el mismo intervalo que sus cubos: El simple. Lineales y de ewma, todos producen predicciones planas: convergen esencialmente en la media del último valor de la serie, produciendo un plano: Figura 11. Promedio móvil simple con ventana de tamaño 10, predecir 50 En contraste, el modelo holt puede extrapolar con base En tendencias constantes locales o globales. Si establecemos un valor beta alto, podemos extrapolar basándonos en las tendencias locales constantes (en este caso las predicciones bajan la cabeza, porque los datos al final de la serie se dirigían hacia abajo): Figura 12. Holt - Media móvil lineal Con ventana de tamaño 100, predecir 20, alfa 0,5, beta 0,8 En contraste, si elegimos una pequeña beta. Las predicciones se basan en la tendencia global constante. En esta serie, la tendencia global es ligeramente positiva, por lo que la predicción hace un viraje fuerte y comienza una pendiente positiva: Figura 13. Promedio móvil exponencial doble con ventana de tamaño 100, predecir 20, alfa 0,5, beta 0,1 El modelo holtwinters Tiene el potencial para entregar las mejores predicciones, ya que también incorpora las fluctuaciones estacionales en el modelo: Figura 14. Holt-Winters media móvil con ventana de tamaño 120, predecir 25, alfa 0.8, beta 0.2, gamma 0.7, período 30Moving Media Contenido DEFINICIÓN Moving Average (MA) es un indicador basado en precios, rezagado (o reactivo) que muestra el precio promedio de un valor en un período de tiempo determinado. Una media móvil es una buena manera de medir el impulso, así como para confirmar las tendencias. Y definir áreas de apoyo y resistencia. Esencialmente, los promedios móviles suavizan el ruido al intentar interpretar gráficos. El ruido se compone de fluctuaciones tanto de precio como de volumen. Debido a que un promedio móvil es un indicador de retraso y reacciona a los eventos que ya han ocurrido, no se utiliza como un indicador predictivo, sino más bien un interpretativo, utilizado para las confirmaciones y análisis. De hecho, Moving Averages forman la base de varias otras herramientas de análisis técnico conocidas como Bollinger Bands y el MACD. Hay algunos tipos diferentes de Promedios móviles que toman la misma premisa básica y agregan una variación. Los más destacados son el promedio móvil simple (SMA), el promedio móvil exponencial (EMA) y el promedio móvil ponderado (WMA) Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. TIPOS Los Promedios Móviles visualizan el precio promedio de un instrumento financiero durante un período de tiempo especificado. Sin embargo, hay algunos tipos diferentes de promedios móviles. Por lo general, difieren en la forma en que los diferentes puntos de datos se ponderan o se les da importancia. Promedio móvil simple (SMA) El Promedio móvil simple es una media móvil no ponderada. Esto significa que cada día en el conjunto de datos tiene la misma importancia y tiene el mismo peso. A medida que cada nuevo día finaliza, el punto de datos más antiguo es eliminado y el más nuevo se agrega al principio. CALCULO Promedio móvil ponderado ponderado (WMA) Promedio móvil ponderado es similar al SMA, excepto que el WMA añade importancia a los puntos de datos más recientes. A cada punto dentro del período se le asigna un multiplicador (el multiplicador más grande para el punto de datos más reciente y luego desciende en orden) que cambia el peso o la significación de ese punto de datos particular. Entonces, al igual que el SMA, una vez que se agrega un nuevo punto de datos al principio, el punto de datos más antiguo es expulsado. CALCULO El Promedio Móvil Exponencial (EMA) El Promedio Móvil Exponencial es muy similar a (y es un tipo de) WMA. La principal diferencia con la EMA es que los puntos de datos antiguos nunca salen de la media. Para aclarar, los puntos de datos antiguos conservan un multiplicador (aunque disminuyendo a casi nada) incluso si están fuera de la longitud de serie de datos seleccionada. CÁLCULO Media móvil exponencial doble CÁLCULO Promedio móvil exponencial triple CÁLCULO LOS BASES Medias móviles toma un conjunto de datos (precios de cierre durante un período de tiempo especificado) y genera su precio promedio. Ahora, a diferencia de un oscilador. Los promedios móviles no están restringidos a un número dentro de una banda o un rango de números determinado. El MA puede moverse a la derecha junto con el precio. Los plazos o períodos utilizados pueden variar de forma bastante significativa dependiendo del tipo de análisis técnico que se esté realizando. Un hecho que la mayoría siempre se recuerda sin embargo, es que los promedios móviles tienen retraso intrínsecamente incorporado en ellos. Lo que esto significa es realmente bastante simple. Cuanto más tiempo se utilice, más rezagos habrá. Del mismo modo, cuanto más corto sea el plazo, menos pierna habrá. Básicamente, los promedios móviles con plazos más cortos tienden a mantenerse cerca de los precios y se moverán justo después de que los precios se muevan. Los plazos más largos tienen datos mucho más engorrosos y sus movimientos se quedan atrás de los mercados se mueven mucho más significativamente. En cuanto a qué marcos de tiempo debe ser utilizado, realmente depende de la discreción de los comerciantes. Por lo general, cualquier período inferior a 20 días se considerará a corto plazo, cualquier cosa entre 20 y 60 sería a medio plazo y por supuesto cualquier cosa más de 60 días se vería a largo plazo. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Otra opción que se reduce a la preferencia de los comerciantes es qué tipo de Media móvil para su uso. Si bien todos los diferentes tipos de promedios móviles son bastante similares, tienen algunas diferencias que el comerciante debe ser consciente de. Por ejemplo, el EMA tiene mucho menos retraso que el SMA (porque pone una mayor importancia en precios más recientes) y por lo tanto se convierte más rápido que el SMA. Sin embargo, dado que el SMA da una ponderación igual a todos los puntos de datos, no importa cuán reciente, el SMA tiene una relación mucho más estrecha con áreas de importancia como el tradicional de apoyo y resistencia. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. QUÉ BUSCAR Al examinar algunos de estos usos comunes para los promedios móviles, tenga en cuenta que es la discreción de los comerciantes que el promedio móvil, en particular, desean utilizar. En los ejemplos siguientes, habrá instancias escritas de Promedios móviles (MA), Promedios móviles simples (SMA), Promedios móviles exponenciales (EMA) y Promedios móviles ponderados (WMA). A menos que se especifique lo contrario, estos indicadores pueden considerarse intercambiables en términos de principios rectores detrás de sus usos básicos. Identificación básica de tendencias El uso de un promedio móvil para confirmar una tendencia en el precio es realmente una de las maneras más básicas pero efectivas de usar el indicador. Tenga en cuenta que, por su diseño, los promedios móviles informan de lo que ya ha ocurrido y que también tienen en cuenta toda una serie de eventos pasados al calcular su fórmula. Esto es lo que hace que un promedio móvil sea una buena herramienta de análisis técnico para confirmaciones de tendencias. Las reglas generales son las siguientes: Una media móvil a largo plazo que está claramente en la subida es la confirmación de una tendencia alcista. Una media móvil a largo plazo que está claramente en la baja es la confirmación de una tendencia bajista. Debido a las grandes cantidades de datos considerados al calcular una media móvil a largo plazo, se necesita una cantidad considerable de movimiento en el mercado para hacer que la MA para cambiar su curso. Un MA a largo plazo no es muy susceptible a los cambios rápidos de precios en lo que respecta a la tendencia general. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Apoyo y Resistencia Otro uso bastante básico para los Promedios Movibles es identificar áreas de apoyo y resistencia. En términos generales, las medias móviles pueden proporcionar apoyo en una tendencia alcista y también pueden ofrecer resistencia en una tendencia a la baja. Mientras que esto puede trabajar para períodos más cortos (20 días o menos), el apoyo y la resistencia proporcionados por los promedios móviles, pueden llegar a ser aún más evidentes en situaciones de más largo plazo. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Crossovers Crossovers requiere el uso de dos medias móviles de longitud variable en el mismo gráfico. Las dos medias móviles deben ser de dos longitudes diferentes. Por ejemplo, un promedio móvil simple de 50 días (medio plazo) y un promedio móvil simple de 200 días (a largo plazo) Las señales o oportunidades comerciales potenciales ocurren cuando el SMA de plazo más corto cruza por encima o por debajo del SMA a largo plazo. Crossover alcista Ocurre cuando el SMA de plazo más corto cruza por encima del SMA a largo plazo. También conocido como una cruz de oro. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Bearish Crossover Ocurre cuando el SMA de plazo más corto cruza por debajo del SMA a largo plazo. También conocido como una Cruz Muerta. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Es imprescindible, sin embargo, que el comerciante se da cuenta de las deficiencias inherentes a estas señales. Este es un sistema que se crea combinando no sólo uno sino dos indicadores rezagados. Ambos indicadores reaccionan sólo a lo que ya ha sucedido y no están diseñados para hacer predicciones. Un sistema como éste definitivamente funciona mejor en una tendencia muy fuerte. Mientras que en una tendencia fuerte, este sistema o uno similar puede realmente ser absolutamente valioso. Crossovers de precios Si usted toma la configuración de dos medias móviles que se discutió en la sección anterior y agrega el tercer elemento de precio, hay otro tipo de configuración llamada un crossover de precios. Con un crossover de precios comienza con dos medias móviles de diferentes longitudes de término (al igual que con el crossover mencionado anteriormente). Usted utiliza básicamente el término medio a largo plazo para confirmar la tendencia a largo plazo. Las señales entonces ocurren cuando el precio cruza por encima o por debajo de la media móvil más corta que va en la misma dirección de la tendencia principal, a largo plazo. Al igual que en el ejemplo anterior, vamos a usar un promedio móvil de 50 días y un promedio móvil de 200 días. El precio de crucero alcista supera los 50 SMA mientras que el 50 SMA supera los 200 SMA. El 200 SMA está confirmando la tendencia. El precio y la SMA a corto plazo están generando señales en la misma dirección que la tendencia. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. Precio bajista: el precio cruza por debajo de los 50 SMA, mientras que el 50 SMA está por debajo de los 200 SMA. El 200 SMA confirma la tendencia. El precio y la SMA a corto plazo están generando señales en la misma dirección que la tendencia. Este es un gráfico interactivo. Los usuarios pueden desplazarse por el gráfico incrustado o hacer clic en Hacerlo en vivo para abrir el gráfico completo en una ventana de navegador independiente. RESUMEN Un analista técnico de experiencia sabrá que debe tener cuidado al usar promedios móviles (al igual que con cualquier indicador). No hay duda sobre el hecho de que son identificadores de tendencia. Eso puede ser un valioso pedazo de información. Sin embargo, es importante tener siempre presente que son indicadores rezagados o reactivos. Moving Averages nunca estará a la vanguardia cuando se trata de predecir los movimientos del mercado. Lo que pueden hacer, sin embargo, es como muchos otros indicadores que han resistido la prueba del tiempo, proporcionar un nivel adicional de confianza a una estrategia comercial o sistema. Cuando se utiliza junto con indicadores más activos, puede al menos estar seguro de que en lo que respecta a la tendencia a largo plazo, que está buscando para el comercio en la dirección correcta. CÓMO USAR EN TRADINGVIEW Navegue a www. tradingview / En la página de destino, ingrese un símbolo y haga clic en Iniciar gráfico En la barra de herramientas en la parte superior de la tabla seleccione Indicadores y elija el que desea agregar a su gráfico. Para realizar cambios en el indicador, deberá acceder a la ventana de formato. Puede acceder a la ventana de formato haciendo clic en el botón Formato azul en el encabezado de gráfico junto al nombre del indicador o haciendo clic derecho en el indicador en el gráfico y seleccionando Formato. ENTRADAS Longitud El período de tiempo que se utilizará para calcular la media móvil. 9 días es el valor predeterminado. Origen Determina qué datos de cada barra se utilizarán en los cálculos. Cerrar es el valor predeterminado. Desplazamiento Cambiar este número moverá el promedio móvil hacia adelante o hacia atrás en relación con el mercado actual. 0 es el valor predeterminado. STYLE MA Puede cambiar la visibilidad de la MA, así como la visibilidad de una línea de precios que muestra el valor real actual de la MA. También puede seleccionar el color MAs, espesor de línea y estilo de línea. PROPIEDADES Último valor en la escala de precios Alterna la visibilidad de los últimos valores de la media móvil en la escala de precios. Argumentos en el encabezado Cambia la visibilidad del nombre de los indicadores y la configuración en la esquina superior izquierda del gráfico. Scaling Escala el indicador a la derecha oa la izquierda. Mejore sus cálculos de la raíz media Guardar en Mi biblioteca Seguir comentarios Brian NeunaberFebruary 16, 2006 Los sistemas digitales en tiempo real requieren a menudo el cálculo de una media de la raíz, tal como una raíz - (RMS) o la magnitud media de una señal compleja. Mientras que el promedio puede ser implementado eficientemente por la mayoría de los microprocesadores, la raíz cuadrada puede no ser - especialmente con hardware de bajo costo. Si el procesador no implementa una función de raíz cuadrada rápida, debe implementarse en software aunque esto produzca resultados precisos, puede que no sea eficiente. Un método común para calcular la raíz cuadrada es el método de Newtons, el cual converge iterativamente en una solución usando una estimación inicial. Puesto que estaban calculando la raíz cuadrada de un valor medio variable lentamente, el valor de la media raíz anterior hace una buena estimación. Además, podemos combinar el método de Newtons iterativo con un averager recursivo de primer orden, resultando en un método super-eficiente para calcular la media de raíz de una señal. En este artículo, III desarrollará y presentará tres algoritmos recursivos eficientes para calcular la media de la raíz, ilustrando cada método con diagramas de flujo de señales y código de ejemplo. En cierta medida, cada uno de estos métodos cambia la complejidad del hardware para el error. III comparar el rendimiento computacional y el error de cada método y sugerir hardware adecuado para cada implementación. Media de la raíz La media de la raíz se calcula como la raíz cuadrada de la media en el tiempo de su entrada. Este promedio puede ser recursivo o no recursivo, y III revisar brevemente el caso general para ambos. Promedio no recursivo Promedio no recurrente, o media móvil. Es la suma ponderada de N entradas: la entrada de corriente y N -1 entradas anteriores. En terminología de filtrado digital, esto se denomina respuesta de impulso finito. O filtro FIR: El uso más común de la media móvil normalmente establece los pesos tales que a n 1 / N. Si tuviéramos que trazar estos pesos en función del tiempo, veríamos la ventana de la señal de entrada que se promedia en un punto dado en el tiempo. Esta ventana 1 / N se denomina ventana rectangular porque su forma es un rectángulo N-by-1 / N. Existe un truco para calcular el promedio 1 / N, de modo que no es necesario que todas las muestras N se ponderen y se sumen con cada cálculo de salida. Puesto que los pesos no cambian, usted puede agregar simplemente la entrada ponderada más nueva y restar la entrada ponderada nésima de la suma anterior: Mientras que esta técnica es computacionalmente eficiente, requiere el almacenaje y la gerencia circular del almacenador intermediario de N muestras. Por supuesto, muchas otras formas de ventana se utilizan comúnmente. Tıpicamente, estas formas de ventana se asemejan o son una variación de un coseno elevado entre 8211pi / 2 y pi / 2. Estas ventanas pesan las muestras en el centro más que las muestras cerca de los bordes. En general, sólo debe utilizar una de estas ventanas cuando exista una necesidad específica, como aplicar un filtro específico a la señal. La desventaja de estas ventanas es que la complejidad computacional y los requisitos de almacenamiento aumentan con N. Promedio recursivo El promedio recursivo es la suma ponderada de la entrada, N entradas anteriores y M salidas anteriores: La más simple de estas en términos de complejidad computacional y almacenamiento (mientras sigue siendo útil) es el promedio recursivo de primer orden. En este caso, el promedio se calcula como la suma ponderada de la entrada actual y la salida anterior. La media recursiva de primer orden también se presta a una optimización cuando se combina con el cálculo de la raíz cuadrada, que bien se discutirá en breve. En contraste con el promedio no recursivo, la ventana de promedios recursivos de primer orden es una exponencial decadente (Figura 1). Técnicamente, el promedio recursivo tiene una ventana infinita, ya que nunca decae todo el camino a cero. En la terminología de filtrado digital, esto se conoce como respuesta de impulso infinita, o filtro IIR. A partir de la Figura 1, vemos que las muestras anteriores se ponderan más que las muestras posteriores, lo que nos permite definir algo arbitrariamente un tiempo de promediación para el promedio recursivo. Para el caso de primer orden, definimos el tiempo de promediado como el tiempo al que la respuesta de impulso se ha decaído hasta un factor de 1 / e. O aproximadamente 37, de su valor inicial. An equivalent definition is the time at which the step response reaches 18211(1/ e ), or approximately 63, of its final value. Other definitions are possible but will not be covered here. The weighting of the sum determines this averaging time to ensure unity gain, the sum of the weights must equal one. As a consequence, only one coefficient needs to be specified to describe the averaging time. Therefore, for first-order recursive averaging, we compute the mean level as: where x ( n ) is the input, m ( n ) is the mean value, and a is the averaging coefficient. The averaging coefficient is defined as: where t is the averaging time, and f S is the sampling frequency. The root-mean may then be calculated by taking the square root of Equation 4: where y ( n ) is the root-mean. Efficient computation methods Googling fast square root will get you a plethora of information and code snippets on implementing fast square-root algorithms. While these methods may work just fine, they dont take into account the application in which the square root is required. Oftentimes, you may not need exact precision to the last bit, or the algorithm itself can be manipulated to optimize the computation of the square root. I present a few basic approaches here. Only calculate it when you need it Probably the simplest optimization is to only calculate the square root when you absolutely need it. Although this may seem obvious, it can be easily overlooked when computing the root-mean on every input sample. When you dont need an output value for every input sample, it makes more sense to compute the square root only when you read the output value. One example of an application when this technique can be used is RMS metering of a signal. A meter value that is displayed visually may only require an update every 50 to 100ms, which may be far less often than the input signal is sampled. Keep in mind, however, that recursive averaging should still be computed at the Nyquist rate. Logarithms Recall that: If youll be computing the logarithm of a square root, its far less computationally expensive to simply halve the result instead. A common example of this optimization is the calculation of an RMS level in dB, which may be simplified as follows: Newtons Method Newtons Method (also called the Newton-Rapson Method) is a well known iterative method for estimating the root of an equation. 1 Newtons Method can be quite efficient when you have a reasonable estimate of the result. Furthermore, if accuracy to the last bit is not required, the number of iterations can be fixed to keep the algorithm deterministic. We may approximate the root of f ( x ) by iteratively calculating: (9) If we wish to find , then we need to find the root to the equation f ( y ) y 2 - m . Substituting f ( y ) into Equation 9, we get: Rearranging Equation 9, we get: where y ( n ) is the approximation of the square root of m ( n ). Equation 11 requires a divide operation, which may be inconvenient for some processors. As an alternative, we can calculate and multiply the result by m to get . Again using Newtons Method, we find that we may iteratively calculate the reciprocal square root as: and calculate the square root as: Although Newtons Method for the reciprocal square root eliminates the divide operation, it can be problematic for fixed-point processors. Assuming that m(n) is a positive integer greater than 1, yr(n) will be a positive number less than one--beyond the range of representation for integer numbers. Implementation must be accomplished using floating-point or mixed integer/fractional number representation. Root-mean using Newtons Method A subtle difference between Equations 10 and 11 is that m becomes m ( n ), meaning that were attempting to find the square root of a moving target. However, since m ( n ) is a mean value, or slowly varying, it can be viewed as nearly constant between iterations. Since y ( n ) will also be slowly varying, y ( n -1) will be a good approximation to y ( n ) and require fewer iterations--one, we hope--to achieve a good estimate. To calculate the root-mean, one may simply apply Newtons Method for calculating the square root to the mean value. As long as the averaging time is long compared to the sample period ( t 6262 1/ f S ), one iteration of the square root calculation should suffice for reasonable accuracy. This seems simple enough, but we can actually improve the computational efficiency, which will be discussed in one of the following sections. Using reciprocal square root Unlike the iterative square-root method, however, the iterative reciprocal square-root requires no divide. This implementation is best suited for floating-point processing, which can efficiently handle numbers both greater and less than one. We present this implementation as a signal flow diagram in Figure 2. The averaging coefficient, a . is defined by Equation 5, and z 82111 represents a unit sample delay. A code listing for a C class that implements the computation in Figure 2 is presented in Listing 1. In this example class, initialization is performed in the class constructor, and each call to CalcRootMean() performs one iteration of averaging and square-root computation. Listing 1. C class that computes the root-mean using Newtons Method for the reciprocal square root Using direct square root Lets go back and take a closer look at Equation 11. Newtons method converges on the solution as quickly as possible without oscillating around it, but if we slow this rate of convergence, the iterative equation will converge on the square root of the average of its inputs. Adding the averaging coefficient results in the following root-mean equation: where a is defined by Equation 5. Now y ( n ) converges to the square root of the average of x ( n ). An equivalent signal-flow representation of Equation 14 is presented in Figure 3. Here, an additional y ( n 82111) term is summed so that only one averaging coefficient is required. Note that x ( n ) and y ( n 82111) must be greater than zero. A code listing for a C class that implements the computation shown in Figure 3 is presented in Listing 2. As in the previous example, initialization is performed in the class constructor, and each call to CalcRootMean() performs one iteration of averaging/square-root computation. Listing 2. C class that implements the floating-point version of Figure 3 With some care, Figure 3 may also be implemented in fixed-point arithmetic as shown in Listing 3. In this example, scaling is implemented to ensure valid results. When sufficient word size is present, x is scaled by nAvgCoeff prior to division to maximize the precision of the result. Listing 3. C class that implements the fixed-point version of Figure 3 Divide-free RMS using normalization Now well look at the special case of computing an RMS value on fixed-point hardware that does not have a fast divide operation, which is typical for low-cost embedded processors. Although many of these processors can perform division, they do so one bit at a time, requiring at least one cycle for each bit of word length. Furthermore, care must be taken to insure that the RMS calculation is implemented with sufficient numerical precision. With fixed-point hardware, the square of a value requires twice the number of bits to retain the original datas precision. With this in mind, we manipulate Equation 14 into the following: Although the expression x ( n ) 2 8211 y ( n 82111) 2 must be calculated with double precision, this implementation lends itself to a significant optimization. Note that a /2 y ( n 82111) acts like a level-dependent averaging coefficient. If a slight time-dependent variance in the averaging time can be tolerated--which is often the case--1/ y ( n 82111) can be grossly approximated. On a floating-point processor, shifting the averaging coefficient to the left by the negative of the exponent approximates the divide operation. This process is commonly referred to as normalization . Some fixed-point DSPs can perform normalization by counting the leading bits of the accumulator and shifting the accumulator by that number of bits. 2 In both cases, the averaging coefficient will be truncated to the nearest power of two, so the coefficient must be multiplied by 3/2 to round the result. This implementation is shown in Equation 16. Figure 4 is the signal-flow diagram that represents Equation 16. Just as in Figure 3, x ( n ) and y ( n 82111) must be greater than zero. A sample code listing that implements Figure 4 is shown in Listing 4. This assembly-language implementation is for the Freescale (formerly Motorola) DSP563xx 24-bit fixed-point processor. Listing 4. Freescale DSP563xx assembly implementation of divide-free RMS using normalization Of course, this method can be implemented even without fast normalization. You can implement a loop to shift x ( n ) 2 8211 y ( n 82111) 2 to the left for each leading bit in y ( n 82111). This will be slower but can be implemented with even the simplest of processors. Higher Order Averaging Higher order recursive averaging may be accomplished by inserting additional averaging filters before the iterative square root. These filters may simply be one or more cascaded first-order recursive sections. First-order sections have the advantage of producing no overshoot in the step response. In addition, there is only one coefficient to adjust and quantization effects (primarily of concern for fixed-point implementation) are far less than that of higher-order filters. The implementer should be aware that cascading first-order sections changes the definition of averaging time. A simple but gross approximation that maintains the earlier definition of step response is to simply divide the averaging time of each first-order section by the total number of sections. However, it is the implementers responsibility to verify that this approximation is suitable for the application. Second-order sections may also be used, if you want (for example) a Bessel-Thomson filter response. If second-order sections are used, its best to choose an odd-order composite response since the averaging square-root filter approximates the final first-order filter with Q 0.5. Care must be taken to minimize the overshoot of this averaging filter. Adjusting the averaging time of this filter in real time will prove more difficult, since there are a number of coefficients that must be adjusted in unison to ensure stability. Results Three methods of calculating the RMS level are compared in Figure 5. The averaging time is set to 100ms, and the input is one second of 1/ f noise with a 48kHz sampling frequency. The first trace is the true RMS value calculated using Equation 6. The second trace is the RMS calculation using Equation 14. The third trace is the no-divide calculation of Equation 16. The fourth trace is the RMS value using the reciprocal square-root method of Equation 13. For the most part, the four traces line up nicely. All four approximations appear to converge at the same rate as the true RMS value. As expected, the largest deviation from the true RMS value is the approximation of Equation 16. This approximation will have the greatest error during large changes in the level of the input signal, although this error is temporary: the optimized approximation will converge upon the true RMS value when the level of the input signal is constant. The errors between the three approximations and the true RMS value are shown in Figure 6. The error of the RMS approximation using Equation 14 slowly decreases until it is below 1E82117, which is sufficient for 24-bit accuracy. The optimized approximation of Equation 16 is substantially worse, at about 1E82114, but still good enough for many applications. The approximation that uses the reciprocal square root is in the noise--less than 1E82119. For highly critical floating-point applications, this is the efficient method of choice. As you would expect, the errors discussed above will be worse with shorter averaging times and better with longer averaging times. Table 1 summarizes the approximate error versus averaging time of these three methods, along with suitable hardware architecture requirements. Suitable for average reader By combining recursive averaging with Newtons method for calculating the square root, youll gain a very efficient method for computing the root-mean. Although the three methods I presented here are developed for different hardware and each, to some degree, trades off hardware capabilities for error, most of you should find one of these methods suitable for your application. Brian Neunaber is currently digital systems architect of software and firmware at QSC Audio Products. He has designed real-time digital audio algorithms and systems for QSC and St. Louis Music and has an MSEE from Southern Illinois University. You may contact him at brianneunaberqscaudio . Endnotes: 1. D. G. Zill. Calculus with Analytic Geometry, 2nd ed. . PWS-Kent, Boston, pp. 170-176, 1988. 2. Motorola. DSP56300 Family Manual, Rev. 3, Motorola Literature Distribution, Denver, 2000. In 1996, an article in Dr Dobbs journal presented a square root algorithm that uses only shifts and adds--no multiplies and certainly no divides. It can be found here: www. ddj/documents/s962/ddj9604l/ (requires registration). Ive been using this in every job and every project ever since--its by far the fastest integer square root around, and Im amazed that its still so little known. Try it out--youll never look back - Paul Hills LandisGyr Ltd United Kingdom
Guía Para La Beginner039s Bloomberg Terminal Bienvenido a la Guía de principiantes para Bloomberg. Esta parte de la guía está dirigida a nuevos usuarios de Bloomberg, y proporcionará una visión general de cómo utilizar un terminal Bloomberg. Si usted es un usuario más experimentado, o si después de leer esta guía que desee entrar en más detalles sobre las capacidades Bloombergs, por favor estar en la búsqueda de la Guía avanzada a Bloomberg que pronto seguir. (Para más información, véase el Day Trading Estrategias para principiantes.) 13En esta guía básica, vamos a examinar cómo registrarse para, instalar y acceso Bloomberg. a continuación, vamos a pasar a cubrir la navegación básica en el sistema Bloomberg. Navegando Bloomberg es algo único en el que el sistema utiliza un teclado especial con unas llaves que son diferentes de las que se encuentran en un teclado normal. Por lo tanto, la sección de navegación de esta guía será importante para los recién llegados. 13Después de la obtenci...
Comments
Post a Comment