Python/Binance - Как рассчитать начальную временную метку для загрузки последних 280 км / мин истории?

Сегодня вечером начните получать исторические данные, бинанс 1–15 км.

Я знаю, как загружать клайны, но я хочу получить последние 280 клайн («1 м» минут) до этого момента.

я использую

      import binance.client as bCl
from binance.client import Client
from binance.exceptions import BinanceAPIException, BinanceOrderException

RSI_PERIOD = 14
bin_client = bCl.Client(API_KEY, API_SECRET)

def getKLinesAndStats(_binance_client, _trade_symbol, _klines_period, _klines_number_of_periodes):

    _trade_symbol = _trade_symbol.upper()
    _status = _binance_client.get_account_status()        # check server
    if _status['msg'] == 'Normal':
        _timeStampServer = _binance_client.get_server_time()['serverTime'] / 1000
        print(_timeStampServer)

        # get the first trade action timestamp 
        _first_timestamp = round(_binance_client._get_earliest_valid_timestamp(_trade_symbol, _klines_period) / 1000)

        if _klines_number_of_periodes == -1:             # get them all
            _start_download_timestamp = _first_timestamp
        elif _klines_number_of_periodes == 0:             # just return empty
            return None
        elif _klines_number_of_periodes > 0:             # calc the timestamp delta
            if _klines_period == '1m':
                _seconds = 60
                                            
            elif klines_period == '3m':
                _seconds = 180
            else:
                pass
        else:
            pass           

        # timestamp difference from now to the past to get the requested amount of klines
        timestampDeltaFromNow = _klines_number_of_periodes * _seconds
        print(timestampDeltaFromNow)
        _start_download_timestamp = round(_timeStampServer - timestampDeltaFromNow)
        print(_start_download_timestamp) # the start timestamp
        # in this case 16800 seconds before the server timestamp

        if _first_timestamp > _start_download_timestamp:
            _start_download_timestamp = _first_timestamp

        klines = bin_client.get_historical_klines(_trade_symbol, _klines_period, str(_start_download_timestamp), limit=1000)
    else:
        return None   

    return klines

 klines_number_of_periodes = RSI_PERIOD * 20  # number of last RSI calculation from now
 print(klines_number_of_periodes)
 bars = getKLinesAndStats(bin_client, 'ADAEUR', '1m', klines_number_of_periodes)

Итак, я вычисляю количество свечей, которое мне нужно, с RSI_PERIOD (14), умноженным на 20, и это должно быть 280. В функции я использую это число для вычисления необходимой временной метки; каждую минуту происходит закрытие свечи; Я должен вычислить секунды метки времени, и это станет 280 x 60 = 16800 секунд. Я вычитаю это из текущего времени сервера и отправляю результат с запросом.

Но почему Binance вернул мне только 161 свечу? Я ожидал 280. Ошибка кода или ошибка мышления?

Любые идеи? 280 был просто пробным номером, а не полезным номером.

Отредактируйте, сделайте его работоспособным.

Я не могу показать здесь 161 линию клина, это слишком много. Расчет там.

Первая строка отметки времени 000 = 1617652920 = Пн 05 апр 2021 20:02:00

Строка последней отметки времени 159 = 1617662460 = Пн 05 апреля 2021 22:41:00 = 9540 секунд, так куда делись 16800-9540?

Кстати, я получаю разные результаты, но всего около 160 строк.

Новый пробег дает мне

280 1617663966 16800 1617647166 между отметками времени 16800 секунд / 60 секунд должно быть 280 свечей.

Я получаю 160 строк назад, строка 000 timestamp = 1617654420000 = Mon Apr 05 2021 20:27:00 GMT + 0000 строка 159 timestamp = 1617663960000 = Mon Apr 05 2021 23:06:00 GMT + 0000 Снова 9540 (159 минут / свечи) вместо 16800 секунд.

Я замечаю разницу во времени примерно с 9600 секунд (1 минута), и это разница во времени с сервером binance и моим местоположением. Но я не использую здесь вычисление времени, просто время сервера и вычисляю это время.

0 ответов

Другие вопросы по тегам