Saltar al contenido

Descargas automatizadas de históricos de cotizaciones


Recommended Posts

publicado

Bueanas tardes. El otro día vi un woutube https://www.youtube.com/watch?v=qLieIhUFMAk  donde esplicaban como descargar el histórico de unas cotizaciones. Funciona muy bien pero lo que quiero ahora es generar una macro que barra una tabla de valores y decargar sus históricos.

La solucion que propone para pocos valores es editar la consulta y cambiar el tiker anterior "BTCUSDT" por el nuevo, pero creo que eso no se puede hacer automaticamente. Si se pudiera hacer sería un forma perfecta pues es mucha mnás rápida y solo requiere el cambio de unas pocas letras.
La otra solución sería relanzar la macro para cada uno de los valores. generando para cada valor el nobre, la fórmula y varios puntos en los que aparece el valor..
Me surgen dudas antes de ponerme a ello.
1.- Funcionará cambiando eos valores, fórmuals....  con otros en los que el valor "BCTUSDT" se cambie por el nuevo?
2.- El nombre no es gran problema pero la fórmula está plagada de """" ¿Habría alguna forma de generar la fórmula de una forme más facil?
3.- en la líne "With ActiveSheet.... entiendo que "Location" también se podría generar xon una variable
4.- ¿Que hacer con .CommandText= Array(.... en la que también aparece el valor
5.- por último en la 5ª líne por el final aparece denuevo el valor

Gracias de antemano

Adjunto el macro generado en el que entre la línea 3 y 11 se encuentra el nobre y la formula

Sub Macro7()
' Macro7 Macro
    ActiveWorkbook.Queries.Add Name:= _
        "klines?symbol=BTCUSDT&interval=5m&limit=1000&startTime=1609459200000&endTime=164" _
        , Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Origen = Json.Document(Web.Contents(""https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=5m&limit=1000&startTime=1609459200000&endTime=1644969600000""))," & Chr(13) & "" & Chr(10) & "    #""Convertida en tabla"" = Table.FromList(Origen, Splitter.SplitByNothing(), null, null, ExtraValues.Error)," & Chr(13) & "" & Chr(10) & "    #""Valores extraídos"" = Table.TransformColumns(#""Convertida en tabla"", {" & _
        """Column1"", each Text.Combine(List.Transform(_, Text.From), "";""), type text})," & Chr(13) & "" & Chr(10) & "    #""Valor reemplazado"" = Table.ReplaceValue(#""Valores extraídos"",""."","","",Replacer.ReplaceText,{""Column1""})," & Chr(13) & "" & Chr(10) & "    #""Dividir columna por delimitador"" = Table.SplitColumn(#""Valor reemplazado"", ""Column1"", Splitter.SplitTextByDelimiter("";"", QuoteStyle.Csv), {""Column1.1" & _
        """, ""Column1.2"", ""Column1.3"", ""Column1.4"", ""Column1.5"", ""Column1.6"", ""Column1.7"", ""Column1.8"", ""Column1.9"", ""Column1.10"", ""Column1.11"", ""Column1.12""})," & Chr(13) & "" & Chr(10) & "    #""Tipo cambiado"" = Table.TransformColumnTypes(#""Dividir columna por delimitador"",{{""Column1.1"", Int64.Type}, {""Column1.2"", type number}, {""Column1.3"", type number}, {""Column1.4""" & _
        ", type number}, {""Column1.5"", type number}, {""Column1.6"", type number}, {""Column1.7"", Int64.Type}, {""Column1.8"", type number}, {""Column1.9"", Int64.Type}, {""Column1.10"", type number}, {""Column1.11"", type number}, {""Column1.12"", Int64.Type}})," & Chr(13) & "" & Chr(10) & "    #""Columnas con nombre cambiado"" = Table.RenameColumns(#""Tipo cambiado"",{{""Column1.1"", ""ts""}})," & Chr(13) & "" & Chr(10) & " " & _
        "   #""Personalizada agregada"" = Table.AddColumn(#""Columnas con nombre cambiado"", ""Fechas"", each [ts]/ 86400000+ 25569)," & Chr(13) & "" & Chr(10) & "    #""Columnas quitadas"" = Table.RemoveColumns(#""Personalizada agregada"",{""Column1.7"", ""Column1.8"", ""Column1.9"", ""Column1.10"", ""Column1.11"", ""Column1.12""})," & Chr(13) & "" & Chr(10) & "    #""Columnas reordenadas"" = Table.ReorderColumns(#""Columnas qui" & _
        "tadas"",{""Fechas"", ""ts"", ""Column1.2"", ""Column1.3"", ""Column1.4"", ""Column1.5"", ""Column1.6""})," & Chr(13) & "" & Chr(10) & "    #""Tipo cambiado1"" = Table.TransformColumnTypes(#""Columnas reordenadas"",{{""Fechas"", type datetime}})," & Chr(13) & "" & Chr(10) & "    #""Columnas quitadas1"" = Table.RemoveColumns(#""Tipo cambiado1"",{""ts""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Columnas quitadas1"""
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""klines?symbol=BTCUSDT&interval=5m&limit=1000&startTime=160945" _
        , "9200000&endTime=164"";Extended Properties="""""), Destination:=Range("$A$1" _
        )).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT * FROM [klines?symbol=BTCUSDT&interval=5m&limit=1000&startTime=1609459200000&endTime=164]" _
        )
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = _
        "klines_symbol_BTCUSDT_interval_5m_limit_1000_startTime_1609459200000_endTime_164"
        .Refresh BackgroundQuery:=False
    End With
End Sub

 

publicado

Hola,

te envío mi propuesta

Instrucciones:

Baja los 2 ficheros adjuntos y ponlos juntos en la misma carpeta

Abre el excel y cambia las casillas amarillas según convega

Pulsa el botón "Bajar datos".

Saludos

 

image.thumb.png.17d51ec1b92e1a017d82f3b58383f9a2.png

Cripto.xlsm qry.txt

publicado

Antes de nada gracias por tu rçapida respiesta.

Como me indicas he puesto los dos ficheros en un mismo directorio y me da un "error definido porla aplicacion o el objeto" en la última línea: wbq.Refresh..

Gracias de antemano

publicado

Hola,

para acotar el problema necesito que compruebes lo siguente:

1. Que la versión de Excel que usas es 2013 o 2016 o 2019 o 365.

2. Que tienes instalado Power Query, Add-In gratuito de Microsoft. Si es que no, bajatelo e instalalo. Power Query

3. La versión que te adjunto tiene una pequeña modificación que mostrará un mensaje en pantalla con la descripción del error en caso de haberlo. Pruebala.

4. Enviar una captura de pantalla mostrando ventanas para que yo vea lo que está pasando del Excel y del Explorardor de Archivos donde se vea la trayectoría y los archivos guardados que hay en el directorio. Te envío las mías.

Gracias

image.thumb.png.08a530683f539350e7a1a98a5fdaaa34.pngimage.thumb.png.d43495f1b76b18ff1766eb7152d66e0b.png

Cripto.xlsm qry.txt

publicado

Gracias por tu ayuda pero sigo igual-.

En relsción con tus preguntas:

1.- La versión de Office que tengo es la 365

2.- La versión de Power Query que me descargo del enlace que me mandas es para 32bits y no me deja instalarla, por lo que veo por internet solo hablan de esa versión y para Office distinta de la 365. 

3.- He probado la nueva versión que me mandas pero me da el mismo error: "Error definido porla aplicacion o el objeto

4.- Te adjunto los pantallazos que me cpides, em el de Excel no aparece ni la pantalla de la consulta ni la editable.

Gracias

 

Escritorio.jpg

Pantalla Excel.jpg

publicado

Hola,

gracias por la información.

Como tienes Excel 365 no es necesario instalar Power Query, ya te comentaba en los pasos anteriores que primero era ver si lo tenías instalado y en caso de que NO era  cuando se necesita instalar.

Yo también tengo Excel 365, lo que es buena noticia pues nos deja igualados.

Ahora comprobemos que puedes editar la query en Power Query, para ello:

Ve al menú Datos -> Consultas y conexiones, aparecerá un panel a la dereccha "Consultas y conexiones".

Después botón derecho sobre Q1 y del menú elegir la opción Editar.

Estos pasos se resumen graficamente en la siguiente captura.

image.thumb.png.6c665e8fbabd544239011ccc08a6ffcd.png

Ahora aparecerá el editor de Power Query

image.thumb.png.ebaef3bb696d7603fc20e740040856f8.png

Comprueba si te sale igual que mi pantalla, en caso de que NO, capturas la pantalla y me la envías, en caso de que SÍ, pulsa Actaulizar todo a ver que pasa

image.thumb.png.d1d8d28a79f39642a4257e0caf3b1541.png

Ya me cuentas

Saludos

publicado

·He realizado los pasos que comentas u sí me salen las páginas que incluyes, al pulsar en "Actualizar Todo"  aparecen unos puntos en la línea superior a "Table:.RemoveCplum......." como si se estuviera actualizando pero aparece lo mismo.

He cambiado el valor a descargar para ver si lo actualiza pero permanece igual.

 

  • 4 weeks later...
publicado

Fran2021: Muchas gracias por tu ayuda.

He estado unas semanas fuera y por eso no he seguido requiriendo tu ayuda.

Si  no quieres seguir, no puedes  o por cualquier otra causa, lo entiendo  y gracias por todo, pero si puedes y quieres, por favor podrías seguir con este tema, creo que pudiera ser interesante para muchos otros adaptándolo a otras circunstancias y páginas de donde descargar información-

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
    • Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.