miércoles, 22 de enero de 2014

Aprovechando Series de Datos extraidas desde Bloomberg con una Macro


El objetivo de este artículo es acomodar datos extraídos desde Bloomberg de una forma más cómoda para ser trabajados, para ello se ocupara la herramienta de Excel, Macros. En este caso obtendremos la serie de precios de todas las acciones de nuestra bolsa de valores IPSA, para todos los días de transacción durante el año 2013. Entre los usos de esta forma de disponer de los datos nos permitirá trabajarlos de una manera mas cómoda y usar aplicaciones de Excel, como formulas, tablas dinámicas, matriciales,regresión lineal, etc.


Para eso quisiera hacer una breve explicación sobre este proceso, cualquier duda, dejare un apunte adjunto que permite al lector conocer las distintas formas y usos de la aplicación de Bloomberg en Excel, que permite de una manera muy cómoda, extracción de datos del mercado financiero como de la economía global.

Como punto de partida, para usar Bloomberg, hay que tener instalado el software en nuestro Excel (Para esto hay que desembolsar un costo monetario). Posteriormente, en la barra superior, aparece una pestaña de “Bloomberg”, luego, para descargar datos, es necesario hacer click en el botón “Real-Time / Historical”, donde se distinguirán entre descargar datos individualizados o series históricas.  

Para el ejemplo, descargaremos la serie histórica de las 40 acciones pertenecientes a nuestra bolsa de valores, el IPSA. Para ello, debemos ingresar en el cuadro que seleccionamos anteriormente, los 40 tickers que corresponden a estas acciones, antes de realizar este procedimiento recomiendo dejar seleccionada la celda "A1" pues así funcionara bien la Macro que utilizaremos posteriormente.
Uno de los principales problemas que enfrentaremos al exportar una base de datos de bloomberg es que si no copiamos y pegamos como valores los datos extraídos, al llevar la base de datos a otro computador estos aparecerán como error, pues si no tenemos instalada la aplicación de Bloomberg, Excel por sí solo no reconocerá la formula inserta en las celdas. Aquí partiremos con la primera macro para evitar este engorroso procedimiento.

Sub CopiarPegar()
' Macro1 Macro
    Cells.Select
    Selection.Copy
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub


 Ahora teniendo ya nuestras celdas como valores, y no como fórmula BDP, tenemos que dejar los datos de una forma mas cómoda para ser trabado, pues Bloomberg los entrega de la siguiente forma:

Nótese, que en la imagen, hay celdas donde se repite el signo “####”, esto ocurre debido a que en esta celda, está inserta la formula BDP al ocupar la herramienta anteriormente seleccionada. Por ello la importancia de usar la Macro anteriormente seleccionada. El problema, es que esta forma de entregar los datos, no es cómoda para trabajarlos, por lo tanto, se utilizara como punto de partida una macro que acomode las columnas para poder dar un mejor uso para esta información. 

Antes de eso, acomodaremos los tickers identificadores de cada serie accionaria con la siguiente macro:

Sub AcomodarTickers()
   
    Range("A1:XFC1").Select
    Selection.Cut
    Range("B1").Select
    ActiveSheet.Paste
End Sub

Luego procederemos a eliminar las columnas que nos molestan con la siguiente macro.

Sub EliminarColumnas()

    Columns("C:D").Select
    Selection.Delete Shift:=xlToLeft
    Columns("D:E").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:F").Select
    Selection.Delete Shift:=xlToLeft
    Columns("F:G").Select
    Selection.Delete Shift:=xlToLeft
    Columns("G:H").Select
    Selection.Delete Shift:=xlToLeft
    Columns("H:I").Select
    Selection.Delete Shift:=xlToLeft
    Columns("I:J").Select
    Selection.Delete Shift:=xlToLeft
    Columns("J:K").Select
    Selection.Delete Shift:=xlToLeft
    Columns("K:L").Select
    Selection.Delete Shift:=xlToLeft
    Columns("L:M").Select
    Selection.Delete Shift:=xlToLeft
    Columns("M:N").Select
    Selection.Delete Shift:=xlToLeft
    Columns("N:O").Select
    Selection.Delete Shift:=xlToLeft
    Columns("O:P").Select
    Selection.Delete Shift:=xlToLeft
    Columns("P:Q").Select
    Selection.Delete Shift:=xlToLeft
    Columns("Q:R").Select
    Selection.Delete Shift:=xlToLeft
    Columns("R:S").Select
    Selection.Delete Shift:=xlToLeft
    Columns("S:T").Select
    Selection.Delete Shift:=xlToLeft
    Columns("T:U").Select
    Selection.Delete Shift:=xlToLeft
    Columns("U:V").Select
    Selection.Delete Shift:=xlToLeft
    Columns("V:W").Select
    Selection.Delete Shift:=xlToLeft
    Columns("W:X").Select
    Selection.Delete Shift:=xlToLeft
    Columns("X:Y").Select
    Selection.Delete Shift:=xlToLeft
    Columns("Y:Z").Select
    Selection.Delete Shift:=xlToLeft
    Columns("Z:AA").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AA:AB").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AB:AC").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AC:AD").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AD:AE").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AE:AF").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AF:AG").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AG:AH").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AH:AI").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AI:AJ").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AJ:AK").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AK:AL").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AL:AM").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AM:AN").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AN:AO").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AO:AP").Select
    Selection.Delete Shift:=xlToLeft

End Sub

 Finalmente, acomodando un poco el formato del cuadro

Sub FormatoCuadro()

    Rows("2:2").Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Fecha"
    Columns("A:A").Select
    Selection.NumberFormat = "m/d/yyyy"
End Sub

El resultado esperado es el siguiente : 


Al trabajar con este tipo de datos, en general, no nos interesan datos en niveles, más bien, nos interesa el cambio porcentual con respecto al día anterior ( en el caso de series de precios de acciones), por lo tanto recurriremos al siguiente procedimiento:

Sub GenerarCuadroProcentaje()

    Cells.Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B3").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=LN(Hoja3!RC/Hoja3!R[-1]C)"
    Range("B3").Select
    Selection.Copy
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
    Rows("2:2").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Columns("A:A").Select
    Selection.NumberFormat = "dd/mm/yyyy;@"
   
   
    Range("B2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Style = "Percent"
    Selection.NumberFormat = "0.00%"


End Sub

El resultado final debería ser el siguiente:



Para no tener problemas con el trabajo de estos datos, recomiendo repetir el uso de la macro Copiar-Pegar como Valores.

Finalmente, dejare material adjunto que les permitirá un mejor entendimiento sobre como aprovechar mejor la información entregada por el software Bloomberg y también el archivo base para aplicar las Macros correspondientes.





No hay comentarios:

Publicar un comentario