3 votos

Cómo organizar los datos históricos, incluyendo retirado de la lista

De trabajo con baja o de la compra de empresas plantea algunas dificultades en la forma de organizar los datos de precios de backtesting. He sido backtesting algunos algoritmos de inversión libre en los datos de Yahoo! donde no tengo el problema de trabajar con sociedades excluidas de la comilla. Simplemente puedo tomar ajustado cierra como autoridad precios. Puedo guardar los datos en la memoria utilizando una (Python) pandas DataFrame.

Para la exclusión de comilla, la situación es un poco más complicado, y me pregunto cómo manejarla de modo que cuando empieza la venta de datos que no han sobreviviente de sesgo, puedo ponerlo en un formato uniforme para efectos del objetivo de backtesting.

El caso más simple es que la compañía simplemente se fue a la quiebra. Por ejemplo, LEH (Lehman Bros) en algún momento me fui a 0. Pero hay otros casos:

  • Compras de acciones de la empresa compradora (como probablemente suceda con TSLA y SCTY). ¿Cómo no sobreviviente de sesgo de los datos frente a esta situación? Si estoy de backtesting, es decir, desde 1996, y un evento que había sucedido en el año 2000, el ajustado cierra para SCTY-X simplemente pista TSLA-X después de la compra de la fecha? De lo contrario, habría que de alguna manera manualmente el novio de datos, que sería un dolor.

  • Compras totales de efectivo (PFZ la compra de MDVN, por ejemplo) también no son realmente el mismo que mantener el cierre ajustados a un precio fijo tras el evento. El evento de alguna manera debe ser etiquetados para que una estrategia de inversión puede distinguir ahora el efectivo de un estancamiento de la inversión.

Mi pregunta se reduce a la mejor manera de organizar un DataFrame con un Unicc índice para una acción individual, de modo que un algoritmo puede manejar estos eventos, además de los dividendos y divisiones, que el 'Adj Cerrar' los identificadores de columna para usted. El DataFrame devuelto por pandas le da la espalda en forma de columnas ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']. Lo que sería necesario añadir a esta estructura de datos para habilitar backtesting que incluye retirado de la lista de empresas de diversos tipos?

5voto

Nobby Puntos 101

El problema que usted describe no es trivial. Principalmente porque una vez que se han resuelto para todos los casos conocidos que alguien va a encontrar una manera de hacer algo diferente y el desorden de tu sistema.

Aquí están algunos de los enfoques que he visto algo utilizado con éxito. No voy a reclamar que le dará una cobertura completa de cada caso, pero se le puede dar algunas ideas para empezar.

La primera sugerencia es no usar el símbolo de la acción como la IDENTIFICACIÓN principal de una empresa. Usted quiere tener su propio formulario de datos de IDENTIFICACIÓN para cada empresa que lidiar con. Esto podría estar vinculado con un sistema de traducción de y a partir de su IDENTIFICACIÓN y posible símbolos. Este sistema tendrá que ser conscientes de la simbología utilizada por diferentes fuentes de datos y el símbolo de los cambios a lo largo del tiempo.

Esto se refiere a la suposición falsa de que un símbolo de la acción nunca cambia y es consistente entre las fuentes de datos. Esto le da un mejor control sobre el ticker de cambios, los cambios en hojas de color rosa y muchas otras situaciones. Es muy fácil confundir un símbolo de cambio para una empresa obtener retirado de la lista si no hacen un seguimiento de la empresa por separado del símbolo.

Mi siguiente sugerencia es siempre mantener un conjunto de datos en BRUTO para trabajar. Este sería el precio real como aparece en ese momento en el tiempo. Ajustados conjuntos de datos pueden ser un gran trabajo, pero es muy fácil pasar por alto lo que los eventos que realmente significa cuando usted tiene pre-horneados en los datos. Como un ejemplo rápido, un sistema de comercio que funciona en acciones con dividendos no se preocupan por el dividendo como un factor en el comercio, pero el dividendo evento puede tener un significativo impacto de impuestos dependiendo del momento de la salida. Es difícil en pre-ajustados conjuntos de datos para detectar las situaciones.

La siguiente parte es contar con un sistema de almacenamiento y recuperación de eventos en su sistema de análisis. La forma en que mi grupo se acercó a esta era tener un conjunto de datos de las acciones de la compañía ligada a la IDENTIFICACIÓN de la compañía y la fecha-hora del evento. Esto podría incluir información descriptiva sobre el evento, sino también de un adjunto de acción.

Fueron las acciones simplificada descripción programática de lo que pasó con el stock en ese momento en el tiempo. La acción contenían las instrucciones que el programa podría utilizar para modificar el actual holdings. Esto podría incluir los desembolsos de efectivo, divisiones, símbolo de los cambios, etc... de Cada instrucción le dijo al programa qué hacer en esa situación específica.

Como una respuesta específica a su exclusión de la lista de la pregunta, tendríamos una acción que específicamente señala la exclusión de la lista y tenemos nuestro sistema de análisis de tomar medidas sobre el comercio sobre la base de esa situación. Estos deben ser separadas de otras situaciones similares, tales como el comercio sostiene que puede o no conducir a bajas.

El sistema tendría una consulta para ver los datos de un rango de fecha y compararlo con acciones durante ese tiempo y ajustar todo lo basa en la necesidad específica. Esta sería entonces la salida del análisis del conjunto de datos y las anotaciones sobre los eventos necesarios para el análisis.

Edit - me estoy dando detalles para ayudar con la siguiente pregunta.

Aquí es un ejemplo simplificado de la estructura de datos utilizada;


Las empresas están en una tabla y se denota por un ID específico. Cada empresa tiene una relación de uno a varios a StockSeries(Cada uno con un IDENTIFICADOR único). También hay una tabla de utilidad que traduce los datos de origen de los símbolos a un determinado StockSeries basado en el momento en que se hace referencia. Esto puede ser usado de forma bidireccional para las búsquedas.

Cada StockSeries tiene un sistema de datos de series de tiempo vinculados a ella. (tenga en cuenta que Nosotros no usamos una base de datos para esto, pero eso es irrelevante.)

Cada Empresa tiene una relación de uno a varios con una tabla de Eventos que tiene Descriptivo, Cualitativo, y de eventos básicos específicos de información Cuantitativa acerca de eventos corporativos. Esto nos permite agrupar y categorizar los eventos, pero no es usado específicamente para actuar sobre los datos.

Cada evento tiene una relación de uno a varios con una tabla de Acciones. Cada Acción es una programáticas específicas de acción a tomar en cualquier comercio de existencias para un determinado StockSeries.

Ejemplo; Acción {DateTime: XXXXX, SeriesID:12345, Acción: SplitShares, Valor: .5} Acción {DateTime: XXXXX, SeriesID:12345, Acción: DisburseCash, Valor .25}

La forma en que se configura esto significa que usted necesita prestar atención a lo que la serie se aplica la acción, pero también nos permite ver lo que está pasando en el nivel de empresa.


Honestamente, esta es una enorme simplificación. Como construir un sistema como este se encuentra el caso tras caso de que no encaja o requiere algún manejo especial.

He descrito todo en términos de estructura de base de datos debido a que su pregunta parecía a inferir que es la forma en que estás pensando, pero mucho de esto se hizo sin una base de datos oficial. Usted debe encontrar el sistema de gestión de datos que funciona mejor para usted.

Si usted tiene preguntas específicas puedo compartir lo que he hecho en el pasado. Estoy seguro de que otros tendrán buenas sugerencias también.

0voto

dan Puntos 216

Respuesta corta: no necesitas Nada para ser añadido. Al menos en mi opinión.

Si usted tiene un stock seleccionado por cualquiera que sea la regla y la empresa es adquirida o se ha fusionado, uno podría argumentar, que el caso de inversión (fundamentales o normas técnicas) no está en su lugar y usted no desea mantener el sucesor de stock, pero en lugar de vender la antigua. El precio estándar del patrón para estos casos tendría este aspecto:

Airgas acquired by Air Liquide

Airgas fue adquirida por Air Liquide. La transacción se completó en la noche del 23 de Mayo de este año (ver http://investor.shareholder.com/arg/releases.cfm). Pero el impacto económico real de esto ha sucedido ya en noviembre del año pasado cuando el acuerdo entre las dos compañías se anunció.

Si uno había cambiado esto en algún tipo de estrategia cuantitativa, generalmente se podría comprobar si hay una posibilidad de un contador de la oferta y si no o poco probable, puede vender el stock muy pronto después. Porque, como se puede ver claramente en el gráfico, el precio no mucho más.

Para backtesting sólo a los efectos, de la manera más fácil sería vender cada una de las acciones que no tiene más historia del precio (por ejemplo, para Airgas a finales de abril). Más sofisticado sería comprobar diaria/semanal de cada una de las acciones en su cartera para un cambio abrupto de un ultra bajo un régimen de volatilidad (por ejemplo, a través del histórico de la volatilidad diaria y tamaño de la barra) y vender cada una de las acciones inmediatamente si este ultra-baja volatilidad de los criterios se ha cumplido, porque indica con una probabilidad muy alta de una adquisición/fusión/etc.

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