5 votos

¿Cómo se manejan los Calendarios en una .NET quant sistema?

He desarrollado una analítica de la plataforma en .NET, pero ahora tengo que abordar el problema de la limpieza de los datos que primero comienza por buscar agujeros en las series de tiempo, antes de que realmente está buscando para encontrar datos incoherentes.

En el universo que yo consideraba, no hay intradía de datos. Yo almacenar los últimos precios de cada día y el mes. Así, el primer paso, ¿cómo puedo asegurarme de que no hay agujeros?

  1. Puedo generar un vector de todas las fechas en las que debe tener un punto de
  2. Puedo comprobar que todas estas fechas tienen un punto en la DB

Esto está bien para los datos mensuales porque usted acaba de tomar el último día del mes.

Pero lo que sobre para datos diarios? Intercambio de vacaciones, días festivos, específicas de cada país de vacaciones, etc ahora entran en juego.

¿Cómo manejar esto .NETA? o incluso en general.

6voto

Thierry-Dimitri Roy Puntos 118

Como Freddy se ha mencionado, es en general, no es un problema para obtener la fiesta de datos. Pero hay un par más que tener en cuenta:

  • a veces, el mercado donde la seguridad está incluido en la lista no observar las fiestas locales
  • a veces el mercado no observar las vacaciones, pero la seguridad no
  • a veces es al revés
  • no todos los valores cotizados en un mercado en particular, siga las mismas reglas
  • diferentes plazas de mercado puede ofrecer la misma seguridad, pero con diferentes reglas de vacaciones
  • una gran cantidad de mercados y valores de la mitad de los días demasiado (es como la mitad de un día de fiesta)

Muchas de estas cuestiones se aplican para intradía solo datos, por eso no voy a entrar en mucho detalle aquí, depende de donde la plataforma se vaya. Pero como se puede ver, más de una classifcation problema en el largo plazo.

Hemos resuelto las vacaciones "problema" con la inversión, es decir, mantenemos el registro de comercio de días/horas. En nuestro sistema la entidad básica es una sesión. Un mercado para nosotros es una colección de estas sesiones. Seguridad en la otra mano tiene un OPOL mercado (listado principal) y posiblemente otros mercados, y para cada una de tales listado hay una colección de (posiblemente se superponen) sesiones. Si en una determinada fecha/hora hay una sesión activa para la seguridad en cualquier mercado, los datos deben estar allí.

Ahora, las vacaciones pueden afectar a los mercados o de las sesiones. Si el mercado se ve afectado no habrá sesiones de activo en que el día de los valores cotizados en ese mercado. Si una sesión está afectado, todos los valores atribuidos a la sesión permanecerá inactivo (por la duración de la sesión).

Así, en este sistema las reglas para las sesiones claramente dictar, si hay, y cómo encontrar agujeros en los datos (y también lo opuesto: los datos llegan incluso a pesar de que no hay ninguna actividad de la sesión de negociación).

Para el programática de bits: utilizamos bitsets y los bordes de los factores desencadenantes, cada vez que una sesión se activa su bit está establecido, siempre que se queda inactiva se borra el bit. Así que para cualquier punto en el tiempo, podemos decir inmediatamente lo que las sesiones se activa y a través de la seguridad<->sesión de la asociación hemos inmediatamente todos los valores afectados.

3voto

heavyd Puntos 327

Puedes intentar usar el .Puerto de red de QuantLib. Aquí hay una versión de QuantLib con C# enlaces. QuantLib ha calendarios para muchos países y en algunos países de varios calendarios (acciones frente bonos). Es bastante simple para comprobar si una fecha es un día de negociación dado un calendario.

Esta solución no va a solucionar algunos de los puntos planteados por hroptatyr.

2voto

Markus Olsson Puntos 12651

Simple, sólo tiene que importar uno de los muchos disponibles públicamente vacaciones calendarios (puede ser necesario hacer algunas importación de conversión a través de Excel o RegEx dentro .Net), tales como

http://www.roboforex.com/analytics/national-holidays/

y almacenar en una colección personalizada como Lista, donde la Fiesta es una clase que tiene los miembros, tales como "Mercado", "Fecha", ...

Basta para iterar a través de los datos históricos y generar un punto de precio si la fecha no está incluido en la colección para el mercado específico en cuestión. Tenga en cuenta que usted puede fácilmente realizar la búsqueda a través de Linq. Déjeme saber si usted está allí y tiene problemas con Linq. Feliz de ayudar.

P. S.: por supuesto, es mucho mejor si usted tiene acceso a Bloomberg o análisis de bases de datos, a continuación, usted puede importar fácilmente los datos a través de sus APIs.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X