O problema da dessincronia é uma loucura.

Autora:- O quê?, Criado: 2023-03-15 10:43:20, Atualizado:

importar pandas como pd Importação de binance.client AsyncClient importar datetime, timedelta import aiohttp Importar json def utc_to_local ((utc_dt): # Convert para Beijing Time local_tz = datetime.timezone ((datetime.timedelta ((hours=8)) # Distância horária do Distrito 8 local_dt = utc_dt.replace ((tzinfo=datetime.timezone.utc).astimezone(local_tz) return local_dt

Inicialização assíncrona do cliente Binance

async def init_client ((): cliente = aguardar AsyncClient.create ((api_key=api_key, api_secret=api_secret)

return client

Obtenção de dados de linha K asíncrona

Async def get_klines ((cliente, símbolo, tempo de início, tempo de fim, intervalo): klines = espera cliente.futures_klines ((simbolo=simbolo, intervalo=intervalo, startTime=start_time.timestamp))) *1000, endTime=end_time.timestamp))) *1000) df = pd.DataFrame(linhas, colunas=[timestamp, open, high, low, close, volume, close_time, quote_asset_volume, number_of_trades, taker_buy_base_asset_volume, taker_buy_quote_asset_volume, ignore]) df[timestamp] = pd.to_datetime(df[timestamp], unidade=ms) df[close_time] = pd.to_datetime(df[close_time], unidade=ms) df.set_index ((timestamp, inplace=Verdadeiro) df.drop(colunas=[close_time, ignore], inplace=True) df = df.astype ((float) retorno df

Desligar o cliente Binance

Async def close_client ((client): Aguardar cliente.close_connection ((()

Execução assíncrona da função principal

Async def main (: client = await init_client (em inglês) # Obter todos os pares de transações de contratos USDT permanentes exchange_info = aguardar cliente.futures_exchange_info symbols = [symbol_info [symbol] for symbol_info in exchange_info [symbols] if symbol_info [contractType] == PERPETUAL and symbol_info [quoteAsset] == USDT # Criação de DataFrame Vazio df = pd.DataFrame ((columns=[Symbol array, Open array, High array, Low array, Close array, Change array, Volume array]) df.set_index ((Symbol, inplace=True)

# 将所有交易对添加到 DataFrame 中
for symbol in symbols:
    df.loc[symbol] = [None] * len(df.columns)
# 遍历所有交易对
for symbol in symbols:
    # 设置起止时间
    start_time = datetime.utcnow() - timedelta(minutes=16)#开始时间为16分钟前
    end_time = datetime.utcnow()
    try:
   # 获取M15k线
        current_klines = await get_klines(client, symbol, end_time - timedelta(minutes=15), end_time, '15m')
    except Exception as e:
        Log(f"An error occurred: {e}")
        current_klines = []
    # 将数据存入 DataFrame
   # 更新对应的行
    df.loc[symbol, 'Open'] = current_klines['open'].iloc[-1]
    df.loc[symbol, 'High'] = current_klines['high'].iloc[-1]
    df.loc[symbol, 'Low'] = current_klines['low'].iloc[-1]
    df.loc[symbol, 'Close'] = current_klines['close'].iloc[-1]
    df.loc[symbol, 'Change'] = current_change
    df.loc[symbol, 'Volume'] = current_klines['volume'].iloc[-1]

# 关闭客户端
Log(df)
await close_client(client)

Executar procedimentos assíncronos

senome == ‘principal: Importaçãoasyncio.run(principal))

O objetivo é obter dados de queda do M15 em todas as moedas contratadas.

Log ((df) falha após uma vez; ou seja, falha após uma atualização de dados como o preço de todos os símbolos: Traceback (most recent call last): File, line 1246, ininit_ctxFile , line 147, in TypeError: Object of type coroutine is not JSON serializable sys:1: RuntimeWarning: coroutine O ChatGpt também não conseguiu resolver o problema.


Mais.

Não sePode ser coletado através de vários fios, colocando cada fio de dados coletados em um objeto público; e então julgar se todos os fios terminaram.

- O quê?Afinal, o sonho é sempre uma palavra-chave ou duas sobre funções de agregação?

- O quê?Afinal, o sonho é sempre uma palavra-chave ou duas sobre funções de agregação?

Ervas daninhasNão usei a biblioteca, mas é melhor fazer o debug passo a passo. Também não é muito bom fazer centenas de transações em simultâneo diretamente. É mais fácil registrar você mesmo com uma interface de mercado agregada.

Ervas daninhas/fapi/v1/ticker/price