Я пытаюсь получить и сохранить все исторические 1-минутные данные свечей из обмена Bitfinex.При попытке добавить новые кадры данных к существующему, я получаю эту ошибку «ValueError: Если вы используете все скалярные значения, вы должны передать индекс», несмотря на передачу индекса в конструкторе.
Попробовал решение здесь - передать индекс в конструкторе DataFrame: Создание pandas DataFrame из значений в переменных дает «ValueError: Если используются все скалярные значения, вы должны передать индекс» ,Возможно, это что-то очень простое, но не повезло.
# Example: https://api-pub.bitfinex.com/v2/candles/trade:1m:tBTCUSD/hist?limit=100&start=1549086300000&end=1549174500000
# Params: timeframe, ticker, number of candles, MS start, MS end
# Note: parameter "end" seems to be unnecessary.
# JSON: [[MTS, OPEN, CLOSE, HIGH, LOW, VOLUME],]
import json
import time
import datetime
import requests
import pandas as pd
url = 'https://api-pub.bitfinex.com/v2/'
# Return dataframe of all historical 1m candles
def get_candles_all(symbol):
symbol = symbol
limit = 5000
tf = '1m'
targettime = (time.time() - 120) * 1000
start = get_genesis_timestamp(symbol)
df = get_candles_period('1m', symbol, limit, start)
while df.index[-1] <= targettime:
start = df.index[-1] # reset start to last timestamp
newdata = pd.DataFrame(get_candles_period('1m', symbol, limit, start), index=[0])
result = df.append(newdata)
df = result
return df
# Return timestamp-indexed dataframe of requested timeframe candles
def get_candles_period(tf, symbol, limit, start):
symbol = symbol
response = requests.get(url +"candles/trade:" + tf + ':t' + symbol + '/hist?limit=' + str(limit) + '&start=' + str(start) + '&sort=1').json()
df = pd.DataFrame(response)
df.columns = ["MS", "Open", "High", "Low", "Close", "Vol"]
df.set_index("MS", inplace=True)
return df
# Return timestamp of first available 1 min candle of given asset
def get_genesis_timestamp(symbol):
symbol = symbol
response = requests.get(url + "candles/trade:1m:t" + symbol + '/hist?limit=1&sort=1').json()
df = pd.DataFrame(response)
df.columns = ["MS", "Open", "High", "Low", "Close", "Vol"]
df.set_index("MS", inplace=True)
timestamp = df.index[0]
return timestamp
symbol = "ETHUSD"
get_candles_all(symbol)
Я ожидаю, что метод get_candles_all () добавит «newdata» к «df» итеративно, пока окончательный индекс (отметка времени) df не окажется в пределах 2мин. targettime.
Продолжение «ValueError: При использовании всех скалярных значений необходимо передать ошибку индекса», несмотря на различные попытки либо использовать не скалярные значения, либо передать индекс.