123ru.net
Все новости
Ноябрь
2024
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

Разобраться со скриптом на питоне

0
Написан скрипт на python для парсинга данных с биржи OKX за последние 5 лет, всё реализовано согласно документации отсюда: https://www.okx.com/docs-v5/en/#order-book-trading...


Но при работе он отдаёт No data returned, No data available.


Код скрипта:


import requests
import pandas as pd
from datetime import datetime, timedelta
import time

# Function to fetch historical data from OKX API
def fetch_candlesticks(inst_id, bar='1D', start_time=None, end_time=None, limit=100):
url = f"https://www.okx.com/api/v5/market/history-candles"
params = {
'instId': inst_id,
'bar': bar,
'limit': limit,
}
if start_time:
params['after'] = start_time # Параметр для получения данных после этой временной метки
if end_time:
params['before'] = end_time # Параметр для получения данных до этой временной метки

print(f"Requesting data for {inst_id} | Bar: {bar} | After: {start_time} | Before: {end_time}")
response = requests.get(url, params=params)
# Check for rate limit errors (Too many requests)
if response.status_code == 429:
print("Rate limit exceeded. Waiting for 2 seconds before retrying...")
time.sleep(2) # Wait before retrying
return fetch_candlesticks(inst_id, bar, start_time, end_time, limit)

if response.status_code == 200:
data = response.json().get("data", [])
print(f"Received {len(data)} rows of data.")
return data
else:
print(f"Error fetching data for {inst_id} with timeframe {bar}: {response.status_code}")
return []

# Function to get all historical data for a specific timeframe and period
def fetch_full_history(inst_id, bar='1D', years=5):
end_time = int(datetime.now().timestamp() * 1000) # Текущий момент в миллисекундах
start_time = int((datetime.now() - timedelta(days=years * 365)).timestamp() * 1000) # 5 лет назад

all_data = []
while end_time > start_time:
data = fetch_candlesticks(inst_id, bar=bar, end_time=end_time)
if not data:
print(f"No data returned for {inst_id}. Stopping further requests.")
break
all_data.extend(data)
end_time = int(data[-1][0]) # Обновление end_time до временной метки последней свечи
print(f"Updated end_time to {end_time} (millis). Continuing to fetch earlier data.")

return all_data

# Function to save data to Excel
def save_to_excel(inst_id, data_dict, file_name='candlesticks_data.xlsx'):
with pd.ExcelWriter(file_name) as writer:
for timeframe, data in data_dict.items():
if not data:
print(f"No data available for {inst_id} with timeframe {timeframe}. Skipping.")
continue # Этот continue должен быть на том же уровне отступа

# Debug: Print the first row to check structure
print(f"Sample data for {inst_id} [{timeframe}]: {data[0]}")

# Fix for 9 columns: drop duplicate Quote Volume
columns = ['Timestamp', 'Open', 'High', 'Low', 'Close', 'Volume', 'Quote Volume', 'Ignored', 'Number of Trades']
try:
df = pd.DataFrame(data, columns=columns)
# Drop the 'Ignored' column
df.drop(columns=['Ignored'], inplace=True)
except Exception as e:
print(f"Error creating DataFrame for {inst_id} [{timeframe}]: {e}")
continue # Этот continue должен быть на том же уровне отступа

# Convert Timestamp to human-readable format
if 'Timestamp' in df.columns:
df['Timestamp'] = pd.to_numeric(df['Timestamp']) # Преобразование в число
df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='ms')
df['Date'] = df['Timestamp'].dt.date
df['Time'] = df['Timestamp'].dt.strftime('%H:%M:%S')
df = df[['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Quote Volume', 'Number of Trades']]

# Save data to the respective sheet
try:
df.to_excel(writer, sheet_name=f'{timeframe}', index=False)
except Exception as e:
print(f"Error writing to Excel for {inst_id} [{timeframe}]: {e}")
continue # Этот continue также должен быть на том же уровне отступа
print(f"Data saved to {file_name}")

# List of trading pairs (instrument IDs) with pairs that include USDT
inst_ids = [
'BTC-USDT', 'ETH-USDT', 'SOL-USDT', 'TON-USDT', 'XRP-USDT', # Use USDT pairs
'1INCH-USDT', 'ADA-USDT', 'ATOM-USDT', 'DOT-USDT', 'EGLD-USDT', # Update to available USDT pairs
'NEAR-USDT', 'TRX-USDT', 'ISP-USDT', 'KSM-USDT', 'ALGO-USDT'
]

# List of timeframes (5m, 15m, 1H, 1D)
timeframes = ['5m', '15m', '1H', '1D'] # Таймфреймы, которые вы указали

# Fetch data and save to Excel for each trading pair
for inst_id in inst_ids:
data_dict = {}
for timeframe in timeframes:
print(f"Fetching data for {inst_id} with timeframe {timeframe}...")
data = fetch_full_history(inst_id, bar=timeframe, years=5)
if data: # Проверяем, что данные не пустые
data_dict[timeframe] = data

if not data_dict:
print(f"No data available for {inst_id}. Skipping.")
continue # Этот continue должен быть на том же уровне отступа

file_name = f"{inst_id}_candlesticks.xlsx"
save_to_excel(inst_id, data_dict, file_name=file_name)





Загрузка...


Губернаторы России
Москва

Сергей Собянин: Рублево-Архангельская линия метро создаст новые маршруты


Спорт в России и мире
Москва

В Москве судья отчитала перекрестившегося перед боем мальчика


Загрузка...

Все новости спорта сегодня


Новости тенниса
WTA

Зарина Дияс узнала хорошую новость от WTA


Загрузка...


123ru.net – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.


Загрузка...

Загрузка...

Экология в России и мире
Москва

Взятки и вырубка леса: за что осудили экс-главу департамента Минобороны Куракина





Путин в России и мире
Москва

Рябков: слова Путина стали сигналом Западу, что РФ готова к ответу на вызовы


Лукашенко в Беларуси и мире



123ru.netмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

123ru.net — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.





Зеленский в Украине и мире
Киев

Режиму Зеленского вынесен окончательный приговор: В Киеве признали правду о возвращении людей на освобожденные Россией территории


Навальный в России и мире


Здоровье в России и мире


Частные объявления в Вашем городе, в Вашем регионе и в России






Загрузка...

Загрузка...



Марина Кравец

«Марина Кравец ко мне подкатывает». Артём Калайджян сделает неожиданное признание в шоу «Лига городов» на ТНТ



Москва

В Дмитрове готовят будущих профессионалов в области транспортной безопасности

Друзья 123ru.net


Информационные партнёры 123ru.net



Спонсоры 123ru.net