Opciones de Mibian Biblioteca de precios MibianLib es una biblioteca de python de código abierto para el precio de las opciones. Puede utilizarlo para calcular el precio, la volatilidad implícita, los griegos o la paridad put / call de una opción utilizando los siguientes modelos de precios: Garman-Kohlhagen Negro-Scholes Merton MibianLib es compatible con python 2.7 y 3.x. Esta biblioteca requiere que scipy funcione correctamente. Contribute Envíe sus sugerencias, parches, etc utilizando el formulario de comentarios o por correo electrónico a yassinemaaroufimibian. net oa través de Github Noticias Nuevo en la versión 0.1.3: Compatibilidad fija con Python 3.x Descargar Instalación sh pip instalar mibian O descargar la biblioteca entonces: sh Tar - axf mibian-latest. tgz sh cd mibian-último sh python setup. py Tutorial py importación mibian py c mibian. GK (1.4565, 1.45, 1, 2, 30, volatility20) py c. callPrecio Documentación BS Black-Scholes Usado Para precios de las opciones europeas en acciones sin dividendos BS (precio subyacente, precio de la huelga, interésRate, díasToExpiración, volatilidad, callPricey, putPricez) c mibian. BS (1.4565, 1.45, 1, 30, volatilidad20) Aprenda las habilidades de Quant Si usted es un comerciante o un inversionista Y le gustaría adquirir un conjunto de habilidades de negociación cuantitativa, usted está en el lugar correcto. El curso de Trading con Python le proporcionará las mejores herramientas y prácticas para la investigación de comercio cuantitativo, incluyendo funciones y guiones escritos por expertos comerciantes cuantitativos. El curso le da el máximo impacto para su tiempo invertido y dinero. Se centra en la aplicación práctica de la programación al comercio en lugar de la informática teórica. El curso se pagará rápidamente ahorrándote tiempo en el procesamiento manual de datos. Pasará más tiempo investigando su estrategia e implementando operaciones rentables. Descripción general del curso Parte 1: Conceptos básicos Usted aprenderá por qué Python es una herramienta ideal para el comercio cuantitativo. Comenzaremos por crear un entorno de desarrollo y luego le presentaremos a las bibliotecas científicas. Parte 2: Manejo de los datos Aprenda a obtener datos de varias fuentes gratuitas como Yahoo Finance, CBOE y otros sitios. Leer y escribir múltiples formatos de datos incluyendo archivos CSV y Excel. Parte 3: Investigación de estrategias Aprenda a calcular PL y métricas de rendimiento como Sharpe y Drawdown. Construir una estrategia comercial y optimizar su rendimiento. Múltiples ejemplos de estrategias se discuten en esta parte. Parte 4: Viviendo en Vivo Esta parte está centrada en Interactive Brokers API. Usted aprenderá cómo obtener datos de stock en tiempo real y colocar pedidos en vivo. Lotes de código de ejemplo El material de curso consiste en portátiles que contienen texto junto con código interactivo como éste. Podrás aprender interactuando con el código y modificándolo a tu gusto. Será un gran punto de partida para escribir sus propias estrategias Si bien algunos temas se explican con gran detalle para ayudarle a entender los conceptos subyacentes, en la mayoría de los casos ni siquiera tendrá que escribir su propio código de bajo nivel, debido al apoyo de los existentes Bibliotecas de fuentes. TradingWithPython biblioteca combina gran parte de la funcionalidad discutida en este curso como un ready-to-use funciones y se utilizará a lo largo del curso. Pandas le proporcionará toda la potencia de carga pesada necesaria en el crujido de datos. Todo el código se proporciona bajo la licencia BSD, permitiendo su uso en aplicaciones comerciales Calificación del curso Un piloto del curso se llevó a cabo en la primavera de 2013, esto es lo que los estudiantes llegaron a decir: Matej curso bien diseñado y buen entrenador. Definitivamente vale la pena su precio y mi tiempo Lave Jev obviamente conocía sus cosas. Profundidad de cobertura era perfecta. Si Jev corre algo como esto de nuevo, Ill ser el primero en inscribirse. John Phillips Su curso realmente me hizo saltar comenzó considerando python para el análisis del sistema de acciones. Estoy interesado en hacer un análisis econométrico de los derivados financieros. El principal obstáculo que he enfrentado es que no hay buenos recursos libres (al menos que yo sepa) para los datos históricos de las opciones. Por eso quiero crear mi propia base de datos personal de precios históricos de las opciones. He roto este proyecto en tres obstáculos principales: Descubra cómo obtener datos de las opciones desde dentro de python Elija un formato de almacenamiento de datos Automatice la recopilación de datos diarios Obteniendo datos de opciones en python Durante el verano tuve un poco de tiempo libre y me uní a mi Papá para crear un modelo de inversión. Si bien es un modelo muy simple, este post trata de construir una base de datos, así que no voy a entrar en detalles aquí. Basta con decir que necesitaba encontrar una manera de obtener datos de opciones de yahoo Finanzas. Este fue un desafío único porque a diferencia de los datos de equidad o datos de otras fuentes como FRED, los datos de opciones no tienen una descarga conveniente para el botón csv en cualquier parte del sitio web. En ese momento estaba leyendo el excelente libro Python for Data Analysis de Wes McKinney y tuve una idea de cómo implementar un rastreador web básico para analizar el html en yahoo y devolver los datos en un formato amigable con python. Larga historia corta, escribí algún código para hacer eso y se abrió paso en la versión 0.9 de la biblioteca de pandas (si no está familiarizado con los pandas y trabaja con datos en python definitivamente debería comprobarlo). Ahora sólo estos pocos comandos son necesarios para obtener datos de opciones de yahoo Finanzas: Los llamados y pone objetos son pandas DataFrames que contienen la misma información que se encuentra en la página de Finanzas yahoo para Apple Inc. opciones. Elegir el formato de archivo En la selección de un formato de archivo tuve dos consideraciones principales: el tamaño del archivo y la velocidad a la que se puede escribir / leer. Para probar esto, escribí un script simple que generó una matriz de 4000 por 4000 numpy aleatoria y funciones definidas para escribir y leer esos datos en diferentes formatos de archivo. Los formatos con los que elegí trabajar fueron csv, hdf5 (.h5) y MatLab (.mat). A continuación se muestra el script que utilicé para ejecutar la prueba: Después de que tenía este código simplemente disparó iPython y ejecutó el archivo (filetest. py) y utilizó la magia timeit para ver cuánto tiempo tomó cada uno de los tres métodos para leer y escribir los datos. Los resultados de tiempo, junto con el tamaño final de los archivos se resumen en la siguiente tabla: Es fácil ver que el tipo de archivo hdf5 es el mejor para elegir para mis propósitos. Me gustaría señalar aquí que la razón por la cual el formato de archivo hdf5 es 1/2 del tamaño del archivo. mat, es porque el dtype en el archivo. h5 es un flotador de 32 bits mientras que el dtype. mat es un flotador de 64 bits. Sin embargo, para las opciones de acciones que sólo en general tienen / cuidado acerca de los datos de dos decimales por lo que la precisión de 32 bits es suficiente. Automatización de la recuperación de datos El último paso para iniciar esta base de datos fue automatizar el proceso de recuperación de datos. Para ello he utilizado la popular herramienta de programación UNIX cron. Ejecuto OSX 10.8 Mountain Lion, y por defecto en 10.8 la herramienta cron está deshabilitada. Para corregir esto, simplemente ejecuté el siguiente comando en el terminal: Este comando crea el archivo / etc / crontab (si ya no existe) y lo listo para su uso por cron. No voy a dar una explicación detallada de cómo usar cron aquí (ya que todavía soy bastante nuevo en él mismo), pero googleando para que le dará un montón de ejemplos y tutoriales. Sin embargo, voy a dar la línea en mi archivo crontab que ejecuta el script: El siguiente paso fue escribir el script que tendría la llamada cron. Esto aparece a continuación. Tengo cron ejecutar este script a una hora especificada cada día de la semana y llenar el archivo hdf5. El archivo resultante tendrá una estructura anidada como la siguiente: La notación CTICKmm-yy representa una opción de llamada (C), un ticker dado (TICK) y la expiración de la opción (mm-aa). Dentro de cada uno de los conjuntos de datos hay tres columnas: precio de ejercicio, último precio en contrato de opción y volumen en el último día de negociación. Después de ejecutar este script durante una noche, el archivo de datos hdf5 resultante era 7.648648 MB. Si permitiera que este archivo se ejecute cada día hábil durante un año, el tamaño final del archivo sería inferior a 2 GB. No está mal Si desea más información sobre cómo recojo los nombres de ticker o qué opciones de funcionalidad está en pandas 0.10 o anterior deje un comentario y haré todo lo posible para responder. Impresionante he estado deseando hacer algo como esto, ya que yo también quiero backtest algunas de mis estrategias. Probablemente debería cambiar 39 de las opciones de importación de Opciones39 a 39 de las opciones de importación pandas. io. data39, pero aparte de que su script funciona muy bien. ¿Estaría dispuesto a compartir los datos de la opción que usted ha recopilado hasta ahora podría retribuir el favor actuando como una copia de seguridad para ejecutar el script en caso de que alguna vez pierda la conectividad durante unos días. Estaba considerando probar aproximadamente con los precios generados con Black8211Scholes, pero los datos reales son obviamente mejores. Me alegro de que te guste el guión. De hecho, he dejado de ejecutar el archivo cada noche, así que no tengo demasiados datos. De lo contrario, estaría encantado de compartirlo con usted. Con respecto a los estados importados. Soy el autor de la clase de Opciones en pandas. En el momento de escribir este post de blog algunas de las funcionalidades que utilizo en el script hadn39t se han fusionado en una versión de pandas, por lo que llamé a mi versión local (en un archivo llamado opciones) en el que he basado la versión pandas FYI: There Son en realidad algunos cambios API que suceden con la clase Opciones dentro de los pandas en este momento. Si los cambios ocurren de la misma manera que uno de los otros contribuyentes ha sugerido, gran parte del código de este script puede ser obsoleto. Por lo menos todavía debe conseguir a gente comenzada Estoy en el proceso de setting-up una base de datos grande de las derivaciones. El análisis de weblinks está listo. Donde estoy un poco perdido es cómo crear la base de datos de todas las opciones individuales de tal manera que permite cálculos como SKEW, etc sin manualmente elegir las opciones individuales cada vez que hacer el cálculo. Cómo hacer referencias genéricas. Estoy un poco perdido aquí y quiere ordenar eso primero antes de seguir adelante con la creación de datos. Creo que el orden correcto en la tupla de retorno es puts, llamadas aapl. getoptionsdata (). Hey Martin, tienes razón. Cuando inicialmente agregé las opciones de recopilación de código a los pandas, tuve getoptionsdata devolver las llamadas en primer lugar. No estoy seguro de cuando / por qué alguien lo cambió. He actualizado el código en la publicación para utilizar el correcto pone, las llamadas de orden ahora. Aunque esto sería muy útil poder descargar los precios de las opciones. Para empezar, estaba usando el script que proporcionaste anteriormente (prácticamente). Tengo pandas 0.13.1, pero parece completamente roto. Los errores se producen con la siguiente línea: rawcalls option. getforwarddata (months100, callTrue, putFalse, nearFalse, abovebelow6). Desde que quiero obtener todos los datos de opción creo que tengo que utilizar el método getforwarddata. Los otros métodos parecen apoyar sólo obtener un mes en particular. El error es bastante largo, pero las últimas líneas son: Archivo quot / usr / local / lib / python2.7 / dist-packages / pandas / io / parsers. pyquot, línea 1653, en nextline raise StopIteration StopIteration ¿Alguien sabe cómo Arreglar esto También estoy ejecutando Ubuntu Linux. Creo que la versión 0.11 de Pandas estaba funcionando algo, aunque no obtendría todos los precios de las opciones. No estoy seguro de cómo usar pip para degradar en este punto, así que probablemente estoy atascado tratando de obtener la versión 0.13.1 de trabajo. Hey Anónimo (lo siento don39t saber su nombre, o si es Anónimo - que es impresionante) Lo sentimos que estas funciones aren39t funciona correctamente. Escribí este código hace un año y en el momento en que esto funcionó sin ningún problema. Pandas está bajo un gran desarrollo y parece que desde el momento en que escribí este código, el api ha pasado por algunos cambios de ruptura. Lamentablemente, no tengo tiempo ahora para pasar y cambiar el código de esta entrada para que funcione con 0,13. Puedo decir que toda la funcionalidad descrita en esta publicación todavía existe con v0.13, pero algunas de las firmas de método pueden haber cambiado. Creo que las docstrings para cada método de la clase Options deben ser lo suficientemente detalladas como para darle una buena idea acerca de lo que necesita cambiar. Usted puede encontrarlos aquí: github / pydata / pandas / blob / master / pandas / io / data. pyL545-L905 Si usted se siente para arriba para él y termina para arriba hacer los cambios necesarios, déjeme por favor saber y actualizaré el Código aquí para reflejarlos. PD Si lo intentas y estás teniendo un tiempo difícil, poste aquí de nuevo y trataré de dar alguna orientación. He estado ocupado con otro proyecto, pero básicamente he hecho un par de cambios para que las cosas funcionen. Por simplicidad acabo de realizar los cambios en el archivo data. py. Creo que los índices inmonth e inyear fueron calculados mal. También, en algunos casos el marco devuelve Ninguno. Ninguno estaba causando el choque. Si alguien tiene el tiempo que el código debe ser actualizado para sólo consultar las opciones de datos que realmente existen en el intervalo de mes de tiempo pasó pulg No estoy seguro de cómo analizar esta información del HTML. En este momento consultará a Yahoo para cada mes de datos, incluso cuando no haya opciones disponibles para ese mes / año para el método getforwarddata. Aquí está la salida de linux diff para los cambios que hice: diff pandas / io / data. py pandas.01 / io / data. py 25d24 lt DEBUG Verdadero 538,541d536 lt lt if (len (data) 0): lt return None lt 590,595c585 lt intenta: lt símbolo. símbolo auto. upper () lt excepto: lt msg quotsymbol debe ser un stringquot válido lt raise ValueError (msg) lt --- gt self. symbol symbol. upper () 860,866c850,861 lt lt (En meses): lt años (m-1) / 12 lt mon m - años12 lt inyears. append (añosCURYEAR) lt inmonthsimon --- gt inyears CURYEAR (meses 1) gt gt Averiguar cómo Muchos ítems en meses van más allá de 12 gt para cambiar 0 gt para i en rango (meses): gt si inmonthsi gt 12: gt inmonthsi - 12 gt para cambiar 1 gt gt Cambiar los elementos correspondientes en la lista de inyears. Gt para i en el rango (1, tochange 1): gt inyears-i 1 875,878c870,873 lt para i en rango (meses): lt m2 inmonthsi lt y2 inyearsi lt si DEBUG: print quotGetting s: s / squot (self. Símbolo, m2, y2) --- gt para mon en rango (meses): gt m2 inmonthsmon gt y2 inyearsmon gt 892,895d886 lt si frame es Ninguno: lt if DEBUG: print 39. no data39 lt continue lt Hola, Gracias por su buen trabajo. Parece que está actualmente roto - tal vez un cambio de esquema / esquema en yahoo (it39s que tableloc 13 en la llamada a getoptiondata ()) I39ll depurarlo cuando tengo tiempo, here39s los detalles hasta el momento: Conectado a pydev debugger (build 135.1057 ) Traceback (última llamada más reciente): Archivo quot / usr / share / pycharm / helpers / pydev / pydevd. pyquot, línea 1733, en debugger. run (setup39file39, None, None) Archivo quot / usr / share / pycharm / helpers /pydev/pydevd. pyquot, línea 1226, ejecute pydevimports. execfile (archivo, globales, locales) ejecute el script Archivo quot / home / chris / develop / src / trading / options. pyquot, línea 5, en puts, llamadas aapl. getoptionsdata (expirydate (2017, 1, 16)) Archivo quot / usr / lib / python2.7 / dist-packages / pandas / io / data. pyquot, línea 630, en getoptionsdata self. getcalldata) Archivo quot / usr / lib /python2.7/dist-packages/pandas/io/data. pyquot, línea 748, en getputdata return self. getoptiondata (mes, año, expiración, 13, 39puts39) Archivo quot / usr / lib / python2.7 / dist - IndexError: Ubicación de la tabla 13 inválido, 3 tablas encontradas en la importación de pandas. io. data Opciones desde la fecha de importación de fecha y hora aapl Opciones (por ejemplo, paquetes / pandas / io / data. pyquot, línea 673, en getoptiondata quot foundquot. format (tableloc, 39AAPL39, quotyahooquot) puts, llama aapl. getoptionsdata (expirydate (2017, 1, 16)) In3: import pandas In4: pandas. version Out4: 390.13.139 Hola, gracias por el comentario. Este código se ha roto debido a cambios en la API de Yahoo Finance. Creo que los desarrolladores de pandas tienen el código original que les di. Hola Spencer te disculpo por la pregunta anónima, pero, cuando ejecutaste este programa para cada ticker en tu lista de símbolos de NASDAQ y NYSE, ¿cuánto tiempo fue el tiempo de ejecución de una sesión entera Iteración Anónimo - no hay problema. Esta rutina tarda bastante tiempo en ejecutarse. Probablemente en el orden de 6-8 horas. Se podría acelerar un poco haciendo múltiples solicitudes a la vez utilizando los módulos de enhebrado y cola en la biblioteca estándar. Tengo un ejemplo de hacer esto con datos regulares de equidad aquí: gist. github / spencerlyon2 / 8a90d9fdffd15e3ecddb Spencer - Soy muy nuevo en python y la programación en general, pero lo encuentro poderoso y fascinante con la poca investigación / trabajo que he hecho. Hasta ahora he organizado un programa muy simple para hacer algo similar. Esto es lo que tengo hasta ahora: import datetime como dt import pandas como pd importe numpy como np de pandas. io. data import Opciones de pandas import DataFrame importación h5py como h5 num 0 newdatapd. DataFrame () while num lt tickers. size: Intenta: itickers39Symbol39num opciones Opciones (i, quotyahooquot) datos options. getoptionsdata () newdatanewdata. append (datos) except: pase imprimir num numnum1 En mi lista de ticker tengo 6280 símbolos o así, y me pareció que el getoptionsdata realiza mucho más rápido que el Método getalldata. En este momento esto se ejecuta en alrededor de 3 horas. Mi meta es cortar eso por 1 / 6th. Todavía está en las etapas básicas, pero funciona y reúne los datos para los tickers que lo contienen. Si usted tiene alguna sugerencia o sugerencia para mejorar el rendimiento de todos los oídos. Sé que una estructura de bucle no puede ser la más eficiente, pero todo para mí es prueba y error. Si esto es trivial y / o una pregunta tonta me disculpo, Nuevamente, soy nuevo y aprendo. Me imagino que el cuello de botella (parte más lenta) de este programa es recuperar los datos de la web. Usar las herramientas de cola e hilado en la biblioteca estándar como lo hice en el ejemplo con el que publiqué un enlace es probablemente la mejor manera de acelerar esta parte. Otra opción relativamente simple para hacer la recuperación de datos en paralelo es escribir una función que obtenga los datos de una lista única. A continuación, puede utilizar algo como IPython paralelo para asignar la función sobre la lista de tickers en paralelo. Un ejemplo de uso de mapas en paralelo puede encontrarse aquí: ipython. org/ipython-doc/2/parallel/paralleldemos. html Por cierto, el único bucle aquí no es ciertamente lo que toma este código mucho tiempo para ejecutarse - por lo que No te preocupes por eso. I39m lo siento, pero heven39t visitado este código en particular en más de 2 años. Pandas se mueve bastante rápido, por lo que no sorprende que el código en este post no funcione. No tengo actualmente el tiempo de depurar el guión, pero sugeriría mirar la documentación de los pandas para la opción actual de rascar características. Puede encontrarlo aquí pandas. pydata. org/pandas-docs/stable/remotedata. htmlyahoo-finance-options. Para listas de ticker. Yo estaba recibiendo de estas dos urls: No sé mucho acerca de la programación, pero tengo un montón de archivos de símbolo anual de intradata. co, pero tengo que tener por ejemplo año 2012-2017 en un mismo archivo. Porque quiero dibujarlo en mi software como un gráfico extendido ¿Es posible hacerlo con este script
No comments:
Post a Comment