Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 41

Как адаптировать код под работу с api другой биржи?

02.05.2023, 14:08. Показов 1554. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Может кто-нибудь помочь с адаптацией кода под работу с api другой биржи? Скрипт запрашивает данные для различных криптовалют на заданном таймфрейме за определенный период времени (данные по ценам открытия/закрытия, максимальным и минимальным значениям внутри каждой свечи за указанный период). Код обрабатывает данные с биржи Binance, мне необходимо, чтобы он работал с данными одной из этих бирж: Kucoin, Okx. Для программистов это наверное задача на 5 минут, но я встал в тупик из-за этого.
Собственно вот исходный код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import pandas as pd
import numpy as np
 
pip install binance-futures-connector
 
from binance.um_futures import UMFutures
import time
 
api_key = ''
secret = ''
client = UMFutures(key = api_key, secret = secret)
 
def klines4h(symbol):
  try:
    df = pd.DataFrame(client.klines(symbol, '4h', limit = 180))
  except BinanceAPIException as e:
    print(e)
    sleep(60)
    df = pd.DataFrame(client.klines(symbol, '4h', limit = 180))
  df = df.iloc[:,:6]
  df.columns = ['Time', 'Open', 'High', 'Low', 'Close', 'Volume']
  df = df.set_index('Time')
  df.index = pd.to_datetime(df.index, unit = 'ms')
  df.drop(columns = ['Open', 'High', 'Low', 'Volume'], axis = 1, inplace=True)
  df = df.astype(float)
  return df
 
def klines1h(symbol):
  try:
    df = pd.DataFrame(client.klines(symbol, '1h', limit = 720)) # получение данных о часовых свечах за период в месяц (720 часовых свечей)
  except BinanceAPIException as e:
    print(e)
    sleep(60)
    df = pd.DataFrame(client.klines(symbol, '1h', limit = 720))
  df = df.iloc[:,:6]
  df.columns = ['Time', 'Open', 'High', 'Low', 'Close', 'Volume']
  df = df.set_index('Time')
  df.index = pd.to_datetime(df.index, unit = 'ms')
  df.drop(columns = ['Open', 'High', 'Low', 'Volume'], axis = 1, inplace=True)
  df = df.astype(float)
  return df
 
from statsmodels.tsa.stattools import adfuller
base = ['BTCUSDT', 'ETHUSDT', 'BCHUSDT', 'XRPUSDT', 'EOSUSDT', 'LTCUSDT', 'TRXUSDT', 'ETCUSDT', 'LINKUSDT', 'XLMUSDT', 'ADAUSDT', 'XMRUSDT', 'DASHUSDT', 'ZECUSDT', 'XTZUSDT', 
        'BNBUSDT', 'ATOMUSDT', 'ONTUSDT', 'IOTAUSDT', 'BATUSDT', 'VETUSDT', 'NEOUSDT', 'QTUMUSDT', 'IOSTUSDT', 'THETAUSDT', 'ALGOUSDT', 'ZILUSDT', 'KNCUSDT', 'ZRXUSDT', 
        'COMPUSDT', 'OMGUSDT', 'DOGEUSDT', 'SXPUSDT', 'KAVAUSDT', 'BANDUSDT', 'RLCUSDT', 'WAVESUSDT', 'MKRUSDT', 'SNXUSDT', 'DOTUSDT', 'DEFIUSDT', 'YFIUSDT', 'BALUSDT', 
        'CRVUSDT', 'TRBUSDT', 'RUNEUSDT', 'SUSHIUSDT', 'SRMUSDT', 'EGLDUSDT', 'SOLUSDT', 'ICXUSDT', 'STORJUSDT', 'BLZUSDT', 'UNIUSDT', 'AVAXUSDT', 'FTMUSDT', 'HNTUSDT',
        'ENJUSDT', 'FLMUSDT', 'TOMOUSDT', 'RENUSDT', 'KSMUSDT', 'NEARUSDT', 'AAVEUSDT', 'FILUSDT', 'RSRUSDT', 'LRCUSDT', 'MATICUSDT', 'OCEANUSDT', 'CVCUSDT', 'BELUSDT',
        'CTKUSDT', 'AXSUSDT', 'ALPHAUSDT', 'ZENUSDT', 'SKLUSDT', 'GRTUSDT', '1INCHUSDT', 'CHZUSDT', 'SANDUSDT', 'ANKRUSDT', 'LITUSDT', 'UNFIUSDT', 'REEFUSDT', 'RVNUSDT',
        'SFPUSDT', 'XEMUSDT', 'COTIUSDT', 'CHRUSDT', 'MANAUSDT', 'ALICEUSDT', 'HBARUSDT', 'ONEUSDT', 'LINAUSDT', 'STMXUSDT', 'DENTUSDT', 'CELRUSDT', 'HOTUSDT', 'MTLUSDT',
        'OGNUSDT', 'NKNUSDT', 'DGBUSDT', 'BAKEUSDT', 'GTCUSDT', 'IOTXUSDT', 'AUDIOUSDT', 'RAYUSDT', 'C98USDT', 'MASKUSDT', 'ATAUSDT', 'DYDXUSDT', 'GALAUSDT', 'CELOUSDT',
        'ARUSDT', 'KLAYUSDT', 'ARPAUSDT', 'CTSIUSDT', 'LPTUSDT', 'ENSUSDT', 'PEOPLEUSDT', 'ANTUSDT', 'ROSEUSDT', 'DUSKUSDT', 'FLOWUSDT', 'IMXUSDT', 'API3USDT', 'GMTUSDT',
        'APEUSDT', 'BNXUSDT', 'WOOUSDT', 'FTTUSDT', 'JASMYUSDT', 'DARUSDT', 'GALUSDT']
res = []
for i in base:
  for j in base[base.index(i)+1:]:
    spreadcheck = adfuller((klines4h(i)['Close']/klines4h(j)['Close']).dropna(), autolag='AIC')
    if spreadcheck[1] < 0.001:
      res.append([i, j, spreadcheck[0], spreadcheck[1]])
 
def PValue(inputList):
        return inputList[3]
res = sorted(res, key=PValue)
 
ans = []
for i in res:
  if adfuller((klines1h(i[0])['Close']/klines1h(i[1])['Close']), autolag='AIC')[1] < 0.001:
    ans.append(i)
ans
Я попробовал переписать код под api Kucoin:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import pandas as pd
import numpy as np
 
pip install kucoin-futures-python # вместо binance подключаю библиотеку kucoin
 
from kucoin_futures.client import Market
import time
 
api_key = ''
secret = ''
api_passphrase = ''
client = Market(url='https://api-futures.kucoin.com') # насколько я понял из документации к api Kucoin, market data-у биржа дает и без api ключей, но я конечно пробовал и с введенными ключами
 
def klines4h(symbol):
  try:
    df = pd.DataFrame(client.get_kline_data(symbol, '4h',1680307200, 1682899199)) # в исходном коде использована функция klines(), в api kucoin такой функции нет, я заменил ее на аналог для api Kucoin, но видимо я что-то делаю не так
  except KucoinAPIException as e:
    print(e)
    sleep(60)
    df = pd.DataFrame(client.get_kline_data(symbol, '4h',1680307200, 1682899199))
  df = df.iloc[:,:6]
  df.columns = ['Time', 'Open', 'High', 'Low', 'Close', 'Volume']
  df = df.set_index('Time')
  df.index = pd.to_datetime(df.index, unit = 'ms')
  df.drop(columns = ['Open', 'High', 'Low', 'Volume'], axis = 1, inplace=True)
  df = df.astype(float)
  return df
 
def klines1h(symbol):
  try:
    df = pd.DataFrame(client.get_kline_data(symbol, '1h',1680307200, 1682899199)) # в этой функции в отличии от ее аналога для api binance, нельзя задать напрямую количество запрашиваемых свечей для анализа, нужно задавать интервал времени в формате unix
  except KucoinAPIException as e:
    print(e)
    sleep(60)
    df = pd.DataFrame(client.get_kline_data(symbol, '1h',1680307200, 1682899199))
  df = df.iloc[:,:6]
  df.columns = ['Time', 'Open', 'High', 'Low', 'Close', 'Volume']
  df = df.set_index('Time')
  df.index = pd.to_datetime(df.index, unit = 'ms')
  df.drop(columns = ['Open', 'High', 'Low', 'Volume'], axis = 1, inplace=True)
  df = df.astype(float)
  return df
 
from statsmodels.tsa.stattools import adfuller
base = ['BTCUSDT', 'ETHUSDT', 'BCHUSDT', 'XRPUSDT', 'EOSUSDT', 'LTCUSDT', 'TRXUSDT', 'ETCUSDT', 'LINKUSDT', 'XLMUSDT', 'ADAUSDT', 'XMRUSDT']
res = []
for i in base:
  for j in base[base.index(i)+1:]:
    spreadcheck = adfuller((klines4h(i)['Close']/klines4h(j)['Close']).dropna(), autolag='AIC')
    if spreadcheck[1] < 0.001:
      res.append([i, j, spreadcheck[0], spreadcheck[1]])
 
def PValue(inputList):
        return inputList[3]
res = sorted(res, key=PValue)
 
ans = []
for i in res:
  if adfuller((klines1h(i[0])['Close']/klines1h(i[1])['Close']), autolag='AIC')[1] < 0.001:
    ans.append(i)
ans
Запуская этот модуль:
Python
1
2
3
4
5
6
7
8
from statsmodels.tsa.stattools import adfuller
base = ['BTCUSDT', 'ETHUSDT', 'BCHUSDT', 'XRPUSDT', 'EOSUSDT', 'LTCUSDT', 'TRXUSDT', 'ETCUSDT', 'LINKUSDT', 'XLMUSDT', 'ADAUSDT', 'XMRUSDT']
res = []
for i in base:
  for j in base[base.index(i)+1:]:
    spreadcheck = adfuller((klines4h(i)['Close']/klines4h(j)['Close']).dropna(), autolag='AIC')
    if spreadcheck[1] < 0.001:
      res.append([i, j, spreadcheck[0], spreadcheck[1]])
возникают ошибки
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-20-e005de7aa0aa> in klines4h(symbol)
      2   try:
----> 3     df = pd.DataFrame(client.get_kline_data(symbol, '4h',1680307200, 1682899199))
      4   except KucoinAPIException as e:
 
4 frames
/usr/local/lib/python3.10/dist-packages/kucoin_futures/marke_data/market_data.py in get_kline_data(self, symbol, granularity, begin_t, end_t)
    527 
--> 528         return self._request('GET', '/api/v1/kline/query', auth=False, params=params)
    529 
 
/usr/local/lib/python3.10/dist-packages/kucoin_futures/base_request/base_request.py in _request(self, method, uri, timeout, auth, params)
     94                                              timeout=timeout)
---> 95         return self.check_response_data(response_data)
     96 
 
/usr/local/lib/python3.10/dist-packages/kucoin_futures/base_request/base_request.py in check_response_data(response_data)
    113         else:
--> 114             raise Exception("{}-{}".format(response_data.status_code, response_data.text))
    115 
 
Exception: 400-{"code":"500","msg":"internal error"}
 
During handling of the above exception, another exception occurred:
 
NameError                                 Traceback (most recent call last)
<ipython-input-21-767a01b8cd3b> in <cell line: 4>()
      4 for i in base:
      5   for j in base[base.index(i)+1:]:
----> 6     spreadcheck = adfuller((klines4h(i)['Close']/klines4h(j)['Close']).dropna(), autolag='AIC')
      7     if spreadcheck[1] < 0.001:
      8       res.append([i, j, spreadcheck[0], spreadcheck[1]])
 
<ipython-input-20-e005de7aa0aa> in klines4h(symbol)
      2   try:
      3     df = pd.DataFrame(client.get_kline_data(symbol, '4h',1680307200, 1682899199))
----> 4   except KucoinAPIException as e:
      5     print(e)
      6     sleep(60)
 
NameError: name 'KucoinAPIException' is not defined
Т.е. ситуация такая, что есть готовый код, но у меня не получается его подружить с api другой биржи.
Буду очень благодарен, если кто-то откликнется.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2023, 14:08
Ответы с готовыми решениями:

Как адаптировать код WMI под код Visual Studio 2010?
Доброе время суток всем. Подскажите пожалуйста для новичка, что бы можно было разобраться, как адаптировать код wmi под код visual studio...

Как адаптировать js код под php
Здравствуйте я новичок в php и у меня возник вопрос Как перенести функций из js в php У меня есть страничка с radio в которой должна...

Как адаптировать приведенный код под FASM
Будьте добры, если не затруднит помочь...или указать куда копать. Вот буквально день назад, в книге наткнулся на пример перехода в...

4
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
02.05.2023, 16:06
Цитата Сообщение от c1gnum Посмотреть сообщение
df = pd.DataFrame(client.get_kline_data(symbo l, '4h',1680307200, 1682899199))
Цитата Сообщение от c1gnum Посмотреть сообщение
Exception: 400-{"code":"500","msg":"internal error"}
Как правило, такое сообщение может значить, что Вы что-то напортачили с параметрами, конкретно в этом случае
https://docs.kucoin.com/future... f-contract
Param Type Description
symbol String [Required]Symbol
granularity int [Required]Granularity (minute)
from long [Optional]Start time (milisecond)
to long [Optional]End time (milisecond)
1) Детализация указывается в минутах, да и еще может принимать только определенные значения. то бишь никаких '4h'
The granularity (granularity parameter of K-line) represents the number of minutes, the available granularity scope is: 1,5,15,30,60,120,240,480,720,1440,10080. Requests beyond the above range will be rejected.
2) Даты передаются в милисекундах, т.е. не
1680307200, 1682899199
а
16803072000000, 16828991990000

3) ну и symbol у kucoin в большинстве случаев отличается от варианта у binance.
1
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 41
02.05.2023, 17:36  [ТС]
Спасибо Вам большое, скрипт заработал! Я с программированием можно сказать что на вы, поэтому эти моменты не подметил.

Добавлено через 34 минуты
А еще не подскажете, в документации указано: "The maximum size per request is 200. If the specified start/end time and the time granularity exceeds the maximum size allowed for a single request, the system will only return 200 pieces of data for your request. If you want to get fine-grained data in a larger time range, you will need to specify the time ranges and make multiple requests for multiple times." И если для 4 часового таймфрейма это допустимо - в месяце 180 4h баров, то вот для 1h таймфрейма нужно уже получить 720 значений, т.е. нужно запрашивать данные 4 раза - с 1 по 8 число, с 8 по 16, с 16 по 24 и с 24 по 30/31 и все объединить в один список. Это можно как-то реализовать в этой функции?:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def klines1h(symbol):
  try:
    df = pd.DataFrame(client.get_kline_data(symbol, '60',1680307200000, 1682899199000))
  except KucoinAPIException as e:
    print(e)
    sleep(60)
    df = pd.DataFrame(client.get_kline_data(symbol, '60',1680307200000, 1682899199000))
  df = df.iloc[:,:6]
  df.columns = ['Time', 'Open', 'High', 'Low', 'Close', 'Volume']
  df = df.set_index('Time')
  df.index = pd.to_datetime(df.index, unit = 'ms')
  df.drop(columns = ['Open', 'High', 'Low', 'Volume'], axis = 1, inplace=True)
  df = df.astype(float)
  return df
0
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 41
04.05.2023, 00:17  [ТС]
Скрипт выполняется через раз. Он сам по себе обсчитывается долго - больше часа, и вот через рандомный промежуток времени на этапе выполения кода вылезают такие ошибки:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    702             # Make the request on the httplib connection object.
--> 703             httplib_response = self._make_request(
    704                 conn,
 
19 frames
/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    385         try:
--> 386             self._validate_conn(conn)
    387         except (SocketTimeout, BaseSSLError) as e:
 
/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py in _validate_conn(self, conn)
   1041         if not getattr(conn, "sock", None):  # AppEngine might not have  `.sock`
-> 1042             conn.connect()
   1043 
 
/usr/local/lib/python3.10/dist-packages/urllib3/connection.py in connect(self)
    418 
--> 419         self.sock = ssl_wrap_socket(
    420             sock=conn,
 
/usr/local/lib/python3.10/dist-packages/urllib3/util/ssl_.py in ssl_wrap_socket(sock, keyfile, certfile, cert_reqs, ca_certs, server_hostname, ssl_version, ciphers, ssl_context, ca_cert_dir, key_password, ca_cert_data, tls_in_tls)
    448     if send_sni:
--> 449         ssl_sock = _ssl_wrap_socket_impl(
    450             sock, context, tls_in_tls, server_hostname=server_hostname
 
/usr/local/lib/python3.10/dist-packages/urllib3/util/ssl_.py in _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname)
    492     if server_hostname:
--> 493         return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
    494     else:
 
/usr/lib/python3.10/ssl.py in wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session)
    512         # ctx._wrap_socket()
--> 513         return self.sslsocket_class._create(
    514             sock=sock,
 
/usr/lib/python3.10/ssl.py in _create(cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, context, session)
   1070                         raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets")
-> 1071                     self.do_handshake()
   1072             except (OSError, ValueError):
 
/usr/lib/python3.10/ssl.py in do_handshake(self, block)
   1341                 self.settimeout(None)
-> 1342             self._sslobj.do_handshake()
   1343         finally:
 
SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1007)
 
During handling of the above exception, another exception occurred:
 
MaxRetryError                             Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    439             if not chunked:
--> 440                 resp = conn.urlopen(
    441                     method=request.method,
 
/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    786 
--> 787             retries = retries.increment(
    788                 method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
 
/usr/local/lib/python3.10/dist-packages/urllib3/util/retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    591         if new_retry.is_exhausted():
--> 592             raise MaxRetryError(_pool, url, error or ResponseError(cause))
    593 
 
MaxRetryError: HTTPSConnectionPool(host='api-futures.kucoin.com', port=443): Max retries exceeded with url: /api/v1/kline/query?from=1680480000000&granularity=240&symbol=FTMUSDTM&to=1683072000000 (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1007)')))
 
During handling of the above exception, another exception occurred:
 
SSLError                                  Traceback (most recent call last)
<ipython-input-5-cc66f2b5e0cc> in klines4h(symbol)
      2   try:
----> 3     df = pd.DataFrame(client.get_kline_data(symbol, '240',month_ago_unix, today_unix))
      4   except KucoinAPIException as e:
 
/usr/local/lib/python3.10/dist-packages/kucoin_futures/marke_data/market_data.py in get_kline_data(self, symbol, granularity, begin_t, end_t)
    527 
--> 528         return self._request('GET', '/api/v1/kline/query', auth=False, params=params)
    529 
 
/usr/local/lib/python3.10/dist-packages/kucoin_futures/base_request/base_request.py in _request(self, method, uri, timeout, auth, params)
     90         if method in ['GET', 'DELETE']:
---> 91             response_data = requests.request(method, url, headers=headers, timeout=timeout)
     92         else:
 
/usr/local/lib/python3.10/dist-packages/requests/api.py in request(method, url, **kwargs)
     60     with sessions.Session() as session:
---> 61         return session.request(method=method, url=url, **kwargs)
     62 
 
/usr/local/lib/python3.10/dist-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    528         send_kwargs.update(settings)
--> 529         resp = self.send(prep, **send_kwargs)
    530 
 
/usr/local/lib/python3.10/dist-packages/requests/sessions.py in send(self, request, **kwargs)
    644         # Send the request
--> 645         r = adapter.send(request, **kwargs)
    646 
 
/usr/local/lib/python3.10/dist-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    516                 # This branch is for urllib3 v1.22 and later.
--> 517                 raise SSLError(e, request=request)
    518 
 
SSLError: HTTPSConnectionPool(host='api-futures.kucoin.com', port=443): Max retries exceeded with url: /api/v1/kline/query?from=1680480000000&granularity=240&symbol=FTMUSDTM&to=1683072000000 (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1007)')))
 
During handling of the above exception, another exception occurred:
 
NameError                                 Traceback (most recent call last)
<ipython-input-12-ab39e109678c> in <cell line: 32>()
     32 for i in base:
     33   for j in base[base.index(i)+1:]:
---> 34     spreadcheck = adfuller((klines4h(i)['Close']/klines4h(j)['Close']).dropna(), autolag='AIC')
     35     if spreadcheck[1] < 0.001:
     36       res.append([i, j, spreadcheck[0], spreadcheck[1]])
 
<ipython-input-5-cc66f2b5e0cc> in klines4h(symbol)
      2   try:
      3     df = pd.DataFrame(client.get_kline_data(symbol, '240',month_ago_unix, today_unix))
----> 4   except KucoinAPIException as e:
      5     print(e)
      6     sleep(60)
 
NameError: name 'KucoinAPIException' is not defined
Это проблемы со стороны биржы, она не выдает данные? Или с чем это может быть связано?
Python
1
2
3
MaxRetryError: HTTPSConnectionPool(host='api-futures.kucoin.com', port=443): Max retries exceeded with 
url:/api/v1/kline/query?from=1680480000000&granularity=240&symbol=FTMUSDTM&to=1683072000000 
(Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1007)')))
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
09.05.2023, 17:48
Цитата Сообщение от c1gnum Посмотреть сообщение
sslv3 alert handshake failure
Соединение не получается установить, какие-то сетевые проблемы, могут быть как и с той стороны, так и с вашей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.05.2023, 17:48
Помогаю со студенческими работами здесь

Адаптировать API под Win64 и Excel64
Приветствую! Данный код работает отлично на Win64 и Excel32 Код добавляет на UserForm кнопки свернуть(развернуть) окно и во весь...

Как адаптировать С код от mikroC под PIC для CVision AVR
Доброго всем времени Собственно такой детский впрос назрел. Нашел Сайтик с очень полезным и наглядным материалом, НО Код С написан...

Адаптировать код под opendialog
Здравствуйте могли бы вы помочь адаптировать код под opendialog вот сам код Var SL: TStringList; i: integer; ...

Адаптировать код под Dev C++
using System; //программа перевода градусов Фаренгейта в градусы Цельсия namespace p1 { class Program { ...

Адаптировать код под цикл while
есть прога, её нужно адаптировать под цикл while #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; void main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru