2 votos

Cómo descargar de manera eficiente intradía de datos con Bloomberg de la API?

Estoy descargando intradía de la barra de datos utilizando Bloomberg API y C#.

He adaptado el oficial Bloomberg c# "IntradayBarExample" para satisfacer mis necesidades.

Sin embargo, las descargas son muy lentas, he encontrado este post recomendando utilizar un dedicado EventQueue en lugar de llamar a NextEvent() en Session objeto. Pero la mejora no es muy perceptible.

Como ilustración, se puede descargar la 5Min Bar – Mejor Evento de la Oferta de los últimos 100 días para AAL UW Equidad de comilla, se necesita mucho tiempo para obtener al final no tanto de datos (< 1Mo).

Tuvo que enfrentar el mismo problema ?

0voto

Nick Klauer Puntos 2837

Como sugiere assylias he modificado el código para ejecutar las peticiones de varios subprocesos. En caso de que necesite hacerlo, estas son algunas de las valiosas informaciones :

1 - Crear un hilo de seguridad procedimiento para solicitar y asignar diferentes requestID a sus peticiones. Pasar estos argumentos a processResponseEvent a través de la eventloop función. Esto le permitirá hacer una verificación sobre el mensaje que recibe, mediante el uso de una simple condición:

            if (msg.CorrelationID != requestID)
            {
                System.Console.WriteLine("WRONG ID ");
                return;
            }

2 - Hacer su solicitud en paralelo, lo que significa que se adjunta la mencionada solicitud en un bucle, tales como :

     WaitHandle[] waitHandles = new WaitHandle[numOfThreads];
        for (int i = 0; i < numOfThreads; i++)
        {
            var j = i;
            var handle = new EventWaitHandle(false, EventResetMode.ManualReset);
            var thread = new Thread(() =>
            {
                 /// CALL HERE YOU REQUEST PROCEDURE FROM STEP 1

                handle.Set();
            });
            waitHandles[j] = handle;
            thread.Start();
        }
        foreach (var ee in waitHandles)
            ee.WaitOne();

Al final no va a aumentar el tiempo de espera para cada solicitud pero ya que están realizando un grupo de ellos juntos que aún vamos a ahorrar un MONTÓN de tiempo.

Ps: se puede usar la variable i (de for (int i = 0; i < numOfThreads; i++)) como requestID.

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