Friday, November 25, 2016

Cálculo Del Promedio Móvil Exponencial C #


Skip () no está optimizado para IListltTgt. Siempre enumera los elementos omitidos. Esto significa que su algoritmo es O (n 2) por ninguna buena razón. Lo que debe hacer en su lugar es iterar manualmente sólo la parte requerida de la entrada en cada iteración usando para. Algo así como: (No me gusta usar GetRange () para esto, como en la respuesta tinstaafls, porque innecesariamente copia el marco en una nueva lista.) Si frameSize es grande, otra optimización sería no recalcular la suma del marco para cada índice. En su lugar, sólo tiene que añadir el elemento desde el frente y restar el elemento de la parte posterior: Si la longitud de los datos es n y frameSize es f. Entonces el algoritmo anterior sería O (fn), pero el mejorado sólo O (n). Otra cosa: por lo general no hay necesidad de crear tipos que derivan de List. Sólo use ListltPointPairgt directamente. Vista general Un Promedio móvil exponencial es un promedio de datos calculados durante un período de tiempo en el que los días más recientes reciben más peso. El promedio móvil exponencial se puede utilizar con cualquier precio incluyendo a: Hola, Bajo, Abierto y Cierre, o podría aplicarse a otros indicadores. Un promedio móvil exponencial suaviza una serie de datos, que es muy importante en un mercado volátil, ya que ayuda a eliminar el exceso de ruido de datos para que se puedan identificar tendencias significativas. Dundas Chart for Reporting Services tiene cuatro tipos de medias móviles: Simple. Exponencial. Triangular. Y Ponderado. La diferencia más importante entre las medias móviles anteriores es cómo pesan sus puntos de datos. Le recomendamos que lea Usando fórmulas financieras antes de continuar. El uso de fórmulas financieras proporciona una explicación detallada sobre cómo utilizar las fórmulas y también explica las diversas opciones disponibles para usted al aplicar una fórmula. FormulaFinancial (FinancialFormula. ExponentialMovingAverage, 20, Serie 1: Y2, Serie 2: Y) Un gráfico de líneas es una buena opción cuando se muestra una media móvil exponencial. Interpretación financiera: La media móvil exponencial se utiliza para comparar un valor con su promedio móvil exponencial. El promedio móvil exponencial da más influencia a los precios que son más recientes, y debido a este mecanismo de ponderación, el promedio móvil seguirá los precios mucho más rápido que un promedio móvil simple. El elemento más importante utilizado en el cálculo de la media móvil es el período de tiempo utilizado. Este período de tiempo debe ser igual al ciclo de mercado observado. El período de tiempo influye en el porcentaje que se utilizará como peso para los períodos más recientes. La media móvil exponencial es un indicador de retraso, y como tal siempre será el precio de seguimiento. Cuando el precio sigue una tendencia, entonces la media móvil exponencial estará muy cerca del precio. Cuando un precio sube, entonces el promedio móvil exponencial muy probablemente caerá por debajo del precio. Esto se debe a la influencia de los datos históricos. Cálculo: Para volver a calcular un promedio móvil exponencial, debe encontrar un porcentaje que se puede aplicar a los días más recientes. El porcentaje se puede determinar utilizando un período de tiempo: A continuación, el promedio móvil exponencial se calcula utilizando el precio de hoy, y los ayeres Media móvil exponencial: Ejemplo Este ejemplo demuestra cómo calcular un promedio móvil de 20 días usando el método Fórmula Véase tambiénMe gustaría desarrollar el cálculo Para la media móvil del precio de las acciones. Pero los cálculos más complejos se han planeado más adelante. Mi primer paso para saber cómo calcular el promedio móvil de manera eficiente. Necesito saber cómo tomar la entrada y devolver la salida de manera eficiente. Fecha y Precio considerados. Fecha, Precio y Media Movente. Si tengo 500 registros y quiero calcular el promedio móvil durante 5 días cuál es la forma effient en lugar de ir y venir en la matriz de fecha y precio de nuevo por favor sugerir cuál es la mejor manera de recibir la entrada (ArrayList, Table, array Etc) y devolver la salida. Nota: MA de hoy de 5 días será promedio de los últimos 5 días, incluyendo el precio de hoy. Ayer MA será la media de los últimos 5 días de ayer. Quiero mantener los días flexibles en lugar de 5 podría ser 9, 14, 20 etc. Jueves, 10 de abril de 2008 3:21 PM Si necesita un cálculo simple sin su esfuerzo que puede utilizar TA-Lib. Pero si desea que su cálculo sea más eficiente que TA-Lib, entonces puede crear su propio indicador técnico. TA-Lib es genial, pero el problema es que esta biblioteca sólo tiene métodos estáticos. Esto significa que cuando se necesita calcular los valores de la matriz SMA basados ​​en 500 barras de precios, se enviará toda la matriz de barras y se devolverá matriz de valores SMA. Pero si recibe un nuevo valor de 501-st entonces debe enviar de nuevo toda la matriz y TA-Lib de nuevo calculará y devolverá la matriz SMA de valores. Ahora imagine que necesita este indicador en el feed de precios reales, y para cada cambio de precio necesita un nuevo valor indicador. Si usted tiene un indicador no es un gran problema, pero si tiene cientos de indicadores de trabajo, podría ser un problema de rendimiento. Yo estaba en una situación así y empezar a desarrollar indicadores en tiempo real que son eficientes y hacer cálculos adicionales para la nueva barra de precios o para cambiar la barra de precios sólo. Desafortunadamente nunca he necesitado indicador SMA para mis sistemas comerciales, pero lo tengo para EMA, WMA, AD y otros. Uno de estos indicadores AD se publica en mi blog y se puede ver desde allí cuál es la estructura básica de mi clase de indicador en tiempo real. Espero que necesite pequeños cambios para implementar el indicador SMA, porque es uno de los más simples. La lógica es simple. Para calcular SMA todo lo que necesita es n valores de precio pasado. Así que la instancia de clase tendrá una colección de precios, que almacenará sólo el último n número de precios según se define SMA (en su caso 5). Así que cuando tengas una barra nueva, eliminarás la más antigua y añadirás una nueva y crearás un cálculo. Jueves, 10 de abril de 2008 16:04 Todas las respuestas Hay una biblioteca llamada TA-Lib que hace todo eso para usted y es de código abierto. Tiene unos 50 indicadores, creo. Weve lo utilizó en el ambiente de la producción y es muy eficiente y realible. Puede utilizarlo en C, Java, C, etc. Si necesita un cálculo simple sin su esfuerzo, puede utilizar TA-Lib. Pero si desea que su cálculo sea más eficiente que TA-Lib, entonces puede crear su propio indicador técnico. TA-Lib es genial, pero el problema es que esta biblioteca sólo tiene métodos estáticos. Esto significa que cuando se necesita calcular los valores de la matriz SMA basados ​​en 500 barras de precios, se enviará toda la matriz de barras y se devolverá matriz de valores SMA. Pero si recibe un nuevo valor de 501-st entonces debe enviar de nuevo toda la matriz y TA-Lib de nuevo calculará y devolverá la matriz SMA de valores. Ahora imagine que necesita este indicador en el feed de precios reales, y para cada cambio de precio necesita un nuevo valor indicador. Si usted tiene un indicador no es un gran problema, pero si tiene cientos de indicadores de trabajo, podría ser un problema de rendimiento. Yo estaba en una situación así y empezar a desarrollar indicadores en tiempo real que son eficientes y hacer cálculos adicionales para la nueva barra de precios o para cambiar la barra de precios sólo. Desafortunadamente nunca he necesitado indicador SMA para mis sistemas comerciales, pero lo tengo para EMA, WMA, AD y otros. Uno de estos indicadores AD se publica en mi blog y se puede ver desde allí cuál es la estructura básica de mi clase de indicador en tiempo real. Espero que necesite pequeños cambios para implementar el indicador SMA, porque es uno de los más simples. La lógica es simple. Para calcular SMA todo lo que necesita es n valores de precio pasado. Así que la instancia de clase tendrá una colección de precios, que almacenará sólo el último n número de precios según se define SMA (en su caso 5). Así que cuando tengas una barra nueva, eliminarás la más antigua y añadirás una nueva y crearás un cálculo. Thursday, April 10, 2008 4:04 PM Yo calcularía el promedio móvil en la base de datos a través de un procedimiento almacenado o en un cubo. Has mirado a Analysis Services, tiene la capacidad de calcular promedios móviles. Jueves, 10 de abril de 2008 16:05 Sí. TA-LIB es bueno pero puede no ser adecuado para mí. Cuando agrego nuevo valor o valor actualizado para el historial de registros haré el cálculo en una función separada solamente para esa nueva cotización y lo almacenaré en base de datos. Estoy planeando actualizar la cotización cada hora. Necesito hacer alrededor de 25 a 30 indicadores técnicos para 2200 acciones. El tiempo de ejecución de una llamada TA-Lib en una matriz de 10.000 elementos toma unos 15 milisegundos (en un Intel Core Duo 2.13 Ghz). Esta es la media de todas las funciones. Entre los más rápidos, SMA tarda menos de 2,5 milisegundos. El más lento, HTTRENDMODE, toma 450 milisegundos. Con menos elementos es más rápido. SMA toma alrededor de 0,22 milisegundos para 1000 elementos de entrada. La ganancia de velocidad es casi lineal (la sobrecarga de realizar la llamada de función es despreciable). En el contexto de su aplicación, TA-Lib es muy poco probable que sea su cuello de botella para el rendimiento de velocidad. También generalmente no recomiendo esta solución nquot quotlast. Lea a continuación para más detalles. Primero, una corrección a la instrucción de Boban. s Todas las funciones en TA-Lib también pueden calcular un solo último valor usando un mínimo de quotlast nquot elementos. Puede tener una matriz de tamaño 10000, tener datos inicializar sólo para los primeros 500 elementos, agregar un elemento y llamar a TA-Lib para calcular el SMA sólo para el elemento nuevo. TA-Lib mirará hacia atrás no más de lo necesario (si SMA de 5, entonces TA-Lib calculará un solo SMA usando los últimos 5 valores). Esto se hace posible con el parámetro startIdx y endIdx. Puede especificar un rango que se va a calcular o un valor único. En este escenario haría startIdx endIdx 500 para calcular el elemento 501st. Por qué esta solución quotlast nquot es potencialmente peligrosa para algunos? Independientemente de la elección de la solución Boban. s o TA-Lib consideran que el uso de un pequeño número finito de datos pasados ​​no funcionará bien con la mayoría de las funciones TA. Con SMA, es obvio que sólo necesita n elemento para calcular un promedio sobre el elemento n. No es tan simple con EMA (y muchas otras funciones TA). El algo a menudo depende del valor anterior para calcular el nuevo valor. La función es recursiva. Esto significa que todos los valores pasados ​​influyen en los valores futuros. Si decides quotlimitquot tu algo para usar sólo una pequeña cantidad de pasado n valor, no obtendrás el mismo resultado que alguien que calcula sobre un gran número de valores pasados. La solución es un compromiso entre velocidad y precisión. A menudo he discutido esto en el contexto de TA-Lib (lo llamo el período quotunstable en la documentación y el foro). Para mantenerlo simple, mi recomendación general es si no puedes hacer la diferencia entre un algo con una respuesta de impulso finito (FIR) de un algo con una respuesta de impulso infinita (IIR), serás más seguro para calcular sobre todos los datos que tienes disponible. TA-Lib especifica en el código cuál de sus funciones tiene un período inestable (IIR). Editado por mfortier Viernes 15 de Agosto de 2008 4:25 AM ortografía correcta Viernes 15 de Agosto de 2008 4:20 AM

No comments:

Post a Comment