artificial-intelligence simulation finance stocks

artificial intelligence - Fuente de datos históricos de stock



artificial-intelligence simulation (18)

Estoy tratando de hacer un simulador del mercado de valores (tal vez eventualmente me convierta en una IA predictiva), pero tengo problemas para encontrar datos para usar. Estoy buscando una fuente (con suerte gratuita) de datos históricos del mercado de valores.

Idealmente, sería un conjunto de datos muy detallados (intervalo de segundo o minuto) con el precio y el volumen de cada símbolo en NASDAQ y NYSE (y quizás otros si me aventuro). ¿Alguien sabe de una fuente para tal información?

Encontré esta pregunta que indica que Yahoo ofrece datos históricos en formato CSV, pero no he podido averiguar cómo obtenerlos en un examen superficial del sitio vinculado.

Tampoco me gusta la idea de descargar los datos poco a poco en archivos CSV ... Imagino que Yahoo se molestaría y me apagaría después de las primeras miles de solicitudes.

También descubrí otra pregunta que me hizo pensar que ganaría el premio gordo, pero desafortunadamente el sitio de OpenTick parece haber cerrado sus puertas ... demasiado mal, ya que creo que eran exactamente lo que quería.

También podría usar datos que abren / cierran el precio y el volumen de cada símbolo todos los días, pero preferiría todos los datos si puedo obtenerlos. ¿Cualquier otra sugerencia?



Déjame agregar una fuente que acabo de descubrir, encontrada here .

Cuenta con una gran cantidad de datos históricos en formato csv y fue recopilada por Andy Pavlo, quien, según su página de inicio, es un "Profesor Asistente en el Departamento de Ciencias de la Computación en la Universidad Carnegie Mellon".


Desafortunadamente, los datos de ticker históricos que son gratuitos son difíciles de conseguir. Ahora que Opentick está muerto, no conozco a ningún otro proveedor.

En una vida anterior trabajé para un hedgefund que tenía un sistema de comercio automatizado, y usamos datos históricos con profusión.

Utilizamos TickData para nuestra fuente. Sus precios eran razonables, y los datos tenían sub segunda resolución.



Hemos comprado 12 años de datos intradía de Kibot.com y estamos bastante satisfechos con la calidad.

En cuanto a los requisitos de almacenamiento: 12 años de datos de 1 minuto para todas las acciones de EE. UU. (Más de 8000 símbolos) es de aproximadamente 100 GB.

Con los datos de tic-en-tic, la situación es un poco diferente. Si registra solo el tiempo y las ventas, serían aproximadamente 30 GB de datos por mes para todas las acciones de EE. UU. Si desea almacenar los cambios de oferta / demanda junto con las transacciones, puede esperar aproximadamente 150 GB por mes.

Espero que esto ayude. Por favor, avíseme si hay algo más con lo que pueda ayudarlo.



Me gustaría rastrear finance.google.com (para las citas) - o finance.yahoo.com.

Ambos devolverán páginas html para la mayoría de los intercambios en todo el mundo, incluido el histórico. Entonces, solo es cuestión de analizar el HTML para extraer lo que necesita.

He hecho esto en el pasado, con gran éxito. Alternativamente, si no le importa usar Perl, hay varios módulos en CPAN que han hecho este trabajo por usted, es decir, extrayendo citas de Google / Yahoo.

Para más información, consulte el historial de citas.



Para datos libres de sesgo de supervivencia, la única fuente confiable que he encontrado es QuantQuote ( http://quantquote.com )

Los datos vienen en minutos, segundos o resolución de tic, enlace a sus datos de stock históricos .

Hubo una sugerencia para kibot arriba. Haría una búsqueda rápida en Google antes de comprarles, encontrará muchas publicaciones como esta con advertencias sobre problemas de calidad de datos de kibot. También es revelador que su supuesta supervivencia, libre de sesgo, sp500 solo tiene 570 símbolos durante 14 años. Eso es prácticamente imposible, sp500 cambia por 1-2 símbolos por mes ...


Puedes usar yahoo para obtener datos diarios (un conjunto de datos mucho más manejable) pero tienes que estructurar las URL. Vea este enlace . No estás haciendo muchas peticiones pequeñas, estás haciendo menos peticiones grandes. Mucho software libre usa esto para que no te cierren.

EDITAR: This tipo lo hace, quizás puedas echar un vistazo a las llamadas que hace su software.


Sé que quería "gratis", pero consideraría seriamente obtener los datos de csidata.com por aproximadamente $ 300 / año, si fuera usted.

Es lo que yahoo usa para suministrar sus datos.

Viene con una API decente, y los datos son (por lo que puedo decir) muy limpios.

Obtiene 10 años de historia cuando se suscribe, y luego se actualiza cada noche.

También se ocupan de todo tipo de cosas desagradables como divisiones y dividendos para usted. Si aún no ha descubierto la alegría de la limpieza de datos, no se dará cuenta de cuánto necesita esto, hasta que la primera vez que su ATS (Sistema de comercio automatizado) piense que algunas acciones son realmente económicas, solo porque se dividió 2 : 1 y no te diste cuenta.


Un antiguo proyecto mío iba a utilizar datos descargables de EODData .


Un conjunto de datos de cada símbolo en NASDAQ y NYSE en un segundo o intervalo de minutos será masivo .

Digamos que hay un total de 4000 compañías listadas en ambos intercambios (esto es probablemente muy bajo ya que hay más de 3200 compañías listadas en el NASDAQ). Para datos en un segundo intervalo, asumiendo que hay 6.5 horas de negociación en un día, eso le daría 23400 puntos de datos por día por compañía, o aproximadamente 93,600,000 puntos de datos en total para ese día. Suponiendo 200 días de negociación en un año, eso es aproximadamente 18,720,000,000 puntos de datos por solo un año.

Tal vez quieres comenzar con un conjunto más pequeño primero?


Yahoo es la opción más sencilla para obtener datos preliminares gratis. El enlace descrito en la respuesta de eckesicle podría usarse fácilmente en un código de Python, pero primero necesita todos los tickers. Usaría el NYSE para este ejemplo, pero esto también puede usarse para diferentes intercambios.

Utilicé esta página wiki para descargar todos los tickers de la compañía con el siguiente script (no soy un Pythonist con mucho talento, lo siento si este código no es muy eficiente):

import string import urllib2 from bs4 import BeautifulSoup global f def download_page(url): aurl = urllib2.urlopen(url) soup = BeautifulSoup(aurl.read()) print url for row in soup(''table'')[1](''tr''): tds = row(''td'') if (len(tds) > 0): f.write(tds[1].string + ''/n'') f = open(''stock_names.txt'', ''w'') url_part1 = ''http://en.wikipedia.org/wiki/Companies_listed_on_the_New_York_Stock_Exchange_'' url = url_part1 + ''(0-9)'' download_page(url) for letter in string.uppercase[:26]: url_part2 = letter url = url_part1 + ''('' + letter + '')'' download_page(url) f.close()

Para descargar cada ticker utilicé otro script bastante similar:

import string import urllib2 from bs4 import BeautifulSoup global f url_part1 = ''http://ichart.finance.yahoo.com/table.csv?s='' url_part2 = ''&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv'' print "Starting" f = open(''stock_names.txt'', ''r'') file_content = f.readlines() count = 1; print "About %d tickers will be downloaded" % len(file_content) for ticker in file_content: ticker = ticker.strip() url = url_part1 + ticker + url_part2 try: # This will cause exception on a 404 response = urllib2.urlopen(url) print "Downloading ticker %s (%d out of %d)" % (ticker, count, len(file_content)) count = count + 1 history_file = open(''C://Users//Nitay//Desktop//Historical Data//' + ticker + ''.csv'', ''w'') history_file.write(response.read()) history_file.close() except Exception, e: pass f.close()

Tenga en cuenta que el principal inconveniente de este método es que hay diferentes datos disponibles para diferentes compañías: las compañías que no tienen datos existentes en las fechas solicitadas (recientemente enumeradas) obtendrán una página 404.

También tenga en cuenta que este método solo es bueno para datos preliminares: si realmente desea probar su algoritmo, debe pagar un poco y utilizar un proveedor de datos confiable como CSIData u otros.


Yo uso el eodData.com. Su precio bastante decente. Por 30 dólares al mes, obtiene 30 días de barras de 1,5 y 60 minutos para todos los intercambios de EE. UU. Y 1 año de datos EOD para la mayoría de los demás.


Permítame agregar mis 2 ¢, mi trabajo es obtener datos buenos y limpios para un fondo de cobertura, he visto muchos feeds de datos y proveedores de datos históricos. Esto es principalmente sobre los datos de valores de Estados Unidos.

Para empezar, si tiene algo de dinero, no se moleste en descargar datos de Yahoo, obtenga los datos del final del día directamente de los datos de CSI , aquí es donde Yahoo obtiene sus datos de EOD y AFAIK. Tienen una API donde puede extraer los datos a cualquier formato que desee. Creo que la suscripción anual para datos es de unos $ 100 dólares.

El principal problema con la descarga de datos de un servicio gratuito es que solo obtiene acciones que aún existen, esto se denomina Sesgo de supervivencia y le puede dar resultados incorrectos si observa muchas acciones, porque solo incluirá las que lo hicieron así. lejos y no los que fueron dados de baja.

Para jugar con algunos datos intradía que buscaría en IQFeed , proporcionan varias API para extraer datos históricos, aunque son principalmente un equipo para las transmisiones en tiempo real. Pero aquí hay bastantes opciones, algunos corredores incluso proporcionan descargas de datos históricos a través de sus API, así que simplemente elige tu veneno.

PERO, por lo general, todos estos datos no están muy limpios, una vez que vuelva a comenzar la prueba, verá que faltan algunas existencias o que aparecen como dos símbolos diferentes, o que las divisiones de acciones no se contabilizan correctamente, etc. los datos de dividendos también son necesarios y, por lo tanto, comienza a correr en círculos, parcheando los datos de 100 fuentes de datos diferentes, etc. Entonces, comenzar con una alimentación de datos de "descuento" servirá, pero tan pronto como ejecute pruebas retrospectivas más exhaustivas, podría tener problemas dependiendo de lo que haga. Si solo observa, digamos, las acciones de S&P 500, esto no será un problema, y ​​una alimentación intradía "barata" funcionará.

Lo que no encontrarás es información intradía gratuita. Me refiero a que podría encontrar algunos ejemplos, estoy seguro de que hay alrededor de 5 años de datos de ticks de MSFT flotando alrededor, pero eso no lo llevará muy lejos.

Entonces, si necesita las cosas reales (libro de órdenes de nivel II, todos los ticks como han ocurrido en todos los intercambios) una opción "asequible", sin embargo, excelente es Nanex . De hecho, te enviarán un disco con terabytes de datos. Si recuerdo bien, es alrededor de $ 3k-4K por año de datos. Pero confía en mí, una vez que entiendas lo difícil que es obtener buenos datos intradía, no pensarás que esto es mucho dinero en absoluto.

No es para desalentarlo, pero obtener buenos datos es difícil, tan difícil de hecho que muchos fondos de cobertura y bancos gastan cientos de miles de dólares al mes para obtener datos en los que pueden confiar. De nuevo, puedes comenzar en algún lugar y luego ir desde allí, pero es bueno verlo un poco en contexto.

Editar: La respuesta anterior es de mi propia experiencia. Este QuantQuote de Caltech sobre las fuentes de datos disponibles proporcionará más información y, en especial, recomienda QuantQuote .


ESTA RESPUESTA NO ES EXACTA MÁS YA QUE LA ALIMENTACIÓN DE YAHOO HA CUMPLIDO PARA EXISTENT

¡Usando el enfoque CSV de Yahoo anterior también puedes obtener datos históricos! Puedes aplicar ingeniería inversa en el siguiente ejemplo:

http://ichart.finance.yahoo.com/table.csv?s=YHOO&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv

Esencialmente:

sn = TICKER a = fromMonth-1 b = fromDay (two digits) c = fromYear d = toMonth-1 e = toDay (two digits) f = toYear g = d for day, m for month, y for yearly

La lista completa de parámetros:

a Ask a2 Average Daily Volume a5 Ask Size b Bid b2 Ask (Real-time) b3 Bid (Real-time) b4 Book Value b6 Bid Size c Change & Percent Change c1 Change c3 Commission c6 Change (Real-time) c8 After Hours Change (Real-time) d Dividend/Share d1 Last Trade Date d2 Trade Date e Earnings/Share e1 Error Indication (returned for symbol changed / invalid) e7 EPS Estimate Current Year e8 EPS Estimate Next Year e9 EPS Estimate Next Quarter f6 Float Shares g Day''s Low h Day''s High j 52-week Low k 52-week High g1 Holdings Gain Percent g3 Annualized Gain g4 Holdings Gain g5 Holdings Gain Percent (Real-time) g6 Holdings Gain (Real-time) i More Info i5 Order Book (Real-time) j1 Market Capitalization j3 Market Cap (Real-time) j4 EBITDA j5 Change From 52-week Low j6 Percent Change From 52-week Low k1 Last Trade (Real-time) With Time k2 Change Percent (Real-time) k3 Last Trade Size k4 Change From 52-week High k5 Percent Change From 52-week High l Last Trade (With Time) l1 Last Trade (Price Only) l2 High Limit l3 Low Limit m Day''s Range m2 Day''s Range (Real-time) m3 50-day Moving Average m4 200-day Moving Average m5 Change From 200-day Moving Average m6 Percent Change From 200-day Moving Average m7 Change From 50-day Moving Average m8 Percent Change From 50-day Moving Average n Name n4 Notes o Open p Previous Close p1 Price Paid p2 Change in Percent p5 Price/Sales p6 Price/Book q Ex-Dividend Date r P/E Ratio r1 Dividend Pay Date r2 P/E Ratio (Real-time) r5 PEG Ratio r6 Price/EPS Estimate Current Year r7 Price/EPS Estimate Next Year s Symbol s1 Shares Owned s7 Short Ratio t1 Last Trade Time t6 Trade Links t7 Ticker Trend t8 1 yr Target Price v Volume v1 Holdings Value v7 Holdings Value (Real-time) w 52-week Range w1 Day''s Value Change w4 Day''s Value Change (Real-time) x Stock Exchange y Dividend Yield


Introducción:
Desde yahoo puede obtener precios históricos de EOD (final del día) o precios en tiempo real. Los precios de EOD son increíblemente fáciles de descargar. Vea mi blog para obtener explicaciones sobre cómo obtener los datos y para ejemplos de código C #.

Estoy en el proceso de escribir un "motor" de alimentación de datos en tiempo real que descarga y almacena los precios en tiempo real en una base de datos. Inicialmente, el motor podrá descargar los precios históricos de Yahoo y Interactive Brokers y podrá almacenar los datos en una base de datos de su elección: MS SQL, MySQL, SQLite, etc. Es de código abierto, pero publicaré más información en mi blog cuando me acerque a publicarlo (en un par de días).

Otra opción es eclipse trader ... le permite registrar los datos históricos con granularidad de tan solo 1 minuto y almacena los precios localmente en un archivo de texto. Básicamente, descarga los datos en tiempo real de Yahoo con un retraso de 15 minutos. Como quería una solución más robusta y estoy trabajando en un gran proyecto escolar para el que necesitamos datos, decidí escribir mi propio motor de alimentación de datos (que mencioné anteriormente).

Código de muestra:
Aquí hay un ejemplo de código C # que muestra cómo descargar datos en tiempo real:

public void Start() { string url = "http://finance.yahoo.com/d/quotes.csv?s=MSFT+GOOG&f=snl1d1t1ohgdr"; //Get page showing the table with the chosen indices HttpWebRequest request = null; IDatabase database = DatabaseFactory.CreateDatabase( DatabaseFactory.DatabaseType.SQLite); //csv content try { while (true) { using (Stream file = File.Create("quotes.csv")) { request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url)); request.Timeout = 30000; using (var response = (HttpWebResponse)request.GetResponse()) using (Stream input = response.GetResponseStream()) { CopyStream(input, file); } } Console.WriteLine("------------------------------------------------"); database.InsertData(Directory.GetCurrentDirectory() + "/quotes.csv"); File.Delete("quotes.csv"); Thread.Sleep(10000); // 10 seconds } } catch (Exception exc) { Console.WriteLine(exc.ToString()); Console.ReadKey(); } }

Base de datos:
En el lado de la base de datos, uso una conexión OleDb al archivo CSV para completar un DataSet y luego actualizo mi base de datos real a través del DataSet , básicamente hace posible que todas las columnas del archivo CSV devuelto por Yahoo directamente a su base de datos (Si su base de datos no admite inserciones por lotes de datos CSV, como SQLite). De lo contrario, insertar los datos es de una sola línea ... simplemente inserte por lotes el CSV en su base de datos.

Puede leer más sobre el formato de la url aquí: http://www.gummy-stuff.org/Yahoo-data.htm