Jump to content

Descargas automatizadas de históricos de cotizaciones


Recommended Posts

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

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

·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.

 

Link to comment
Share on other sites

  • 4 weeks later...

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-

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Crear macros Excel

  • Posts

    • Hola colegas, buenas tardes reiteradas. Vuelvo por acá, ahora para que me brinden ayuda con una alerta. Me explico: Este es el proyecto del que les comenté que mi Jefe me pidió hacer. En el FrmCombustible debo crear dos (2) alertas, UNA - Que un (1) mes antes de vencerse las tarjetas me envíe un MsgBox : "La Tarjeta " &      " se vence en un mes"                 El Listado de tarjetas está en la Hoja5 (Auxiliares). Se debe tener en cuenta que puede estar en blanco o vacío (Empty) este campo. Yo comencé a trabajarlo, pero me "perdí", porque creo se debe generar un ciclo que recorra las tarjetas y las fechas de vencimientos y las compare con la fecha actual. (Modulo4 ) DOS - En este mismo Formulario (FrmCombustible), necesito me envíe una alerta cuando una tarjeta X tenga un consumo de 350, porque el valor máximo a tener es de 400. (Columna "Consumo") Esto puede ser al abrir el archivo o al cargar el formulario. De estos "AVISOS" tengo  que hacer algunos más, pero con la ayuda de ustedes con estos dos puedo hacer los que me falten. Mil gracias de antemano. Espero puedan comprenderme. Un abrazo a todos. Pino Sistema de Matto Autos.xlsm
    • Gracias profesor Antoni, perfecto. Muy agradecido por su oportuna, pronta y eficaz respuesta. En estos días voy a tener que acudir a ustedes en varias ocasiones, porque el Proyecto que mi Jefe me pidió que hiciera es más de lo que mis conocimientos "almacena", pero son retos que me gustan porque aprendo de ellos. Saludos a Usted, AValencia, Haplox y JSD, que por cierto hace días no lo "veo" por el Foro, pero espero que se encuentre bien de salud, y a todo el resto del tremendo equipo de AyudaExcel. Mis respetos. Pino  
    • Hola Lo que necesito es que cuando se posicione en la celda activa, que tiene que ser la G8 y ésta esté vacía, muestre el formulario UserForm1 Lo que yo tengo hasta ahora es esto, que me enseña el formulario cuando la celda activa es la G8,   If ActiveCell.Address ="$G$8" then UserForm1.Show Else UserForm1.Hide  
    • He hecho un pequeño retoque en los procedimientos de modificar, insertar y doble_click en la lista. Probado., Ordenes v1.0.0 (1).xlsm
    • Muchas gracias Antoni por la respuesta y su tiempo. intente con lo que recomienda y me da este error "[microsoft][ODBC SQL Server Driver][SQL Server]Column name or nomber of suplied values does not matsch table definitions" Todo el codigo que estoy utilizando es el siguiente: Private Sub InsertarFila() Sql = "INSERT INTO Proceso_Sucesorios VALUES(" Sql = Sql & "'" & ActiveCell.Offset(0, 26) & "'," Sql = Sql & "'" & ActiveCell.Offset(0, 0) & "'," Sql = Sql & ActiveCell.Offset(0, 8) & "," Sql = Sql & ActiveCell.Offset(0, 9) & "," Sql = Sql & "'" & ActiveSheet.Range("H3").Value & "'," Sql = Sql & "'" & Format(ActiveSheet.Range("J3").Value, "YYYY-MM-DD") & "'," Sql = Sql & "'" & ActiveSheet.Range("M1").Value & "'," Sql = Sql & "'" & Format(ActiveSheet.Range("N1").Value, "YYYY-MM-DD hh:mm:ss") & "')" Cnn.Execute Sql, , adCmdText Exit Sub El error anterior no esta ahora es un error que al parecer sin firentes la columnas por esto adjunto una imagen de la estructura de la table a la cual estoy enviando la información:      De verdad valoro mucho la ayuda.
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy