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 и моим местоположением. Но я не использую здесь вычисление времени, просто время сервера и вычисляю это время.