Получение котировок TradingView с помощью Python: подробное руководство
Узнайте, как использовать Python для получения финансовых котировок с TradingView. Это руководство охватывает основные шаги, необходимые инструменты и практические примеры для эффективного извлечения данных.

Введение: Зачем получать котировки TradingView с помощью Python?
Сравнение методов получения данных
| Прямые запросы к TradingView (через неофициальные библиотеки) | Простота, доступ к большим объемам данных, но риск блокировки и нестабильность. |
| Использование публичных API (если доступны) | Стабильность, официальная поддержка, но возможны ограничения по объему и типу данных. |
| Парсинг веб-страницы (менее рекомендуется) | Сложность, хрупкость при изменениях сайта, но может дать доступ к данным, недоступным иначе. |
Преимущества автоматизации получения данных.
Автоматизация получения биржевых данных, таких как котировки с TradingView, открывает перед трейдерами и аналитиками широкие возможности для повышения эффективности работы и принятия более обоснованных решений. Вместо ручного сбора информации, который является трудоемким, подверженным ошибкам и не позволяет оперативно реагировать на рыночные изменения, Python позволяет создать полностью автоматизированные системы.
- Преимущества автоматизации получения данных.
- Возможности для анализа и создания торговых стратегий.
- Обзор библиотеки `tradingview-scraper` (или аналогичной).
Преимущества такой автоматизации неоспоримы: скорость получения данных в реальном времени или с минимальной задержкой, возможность обрабатывать большие объемы информации, а также интеграция с другими инструментами анализа и торговли. Это особенно важно в условиях высокой волатильности рынка, когда каждая доля секунды может иметь значение для успешной сделки.
Получая котировки программным путем, вы можете построить собственные системы мониторинга, оповещения о значимых событиях или даже автоматической торговли, которые работают круглосуточно, независимо от вашего присутствия перед экраном. Таким образом, использование Python для получения данных с TradingView – это не просто удобство, а стратегическое преимущество в современном мире финансовых рынков.
Возможности, которые открывает автоматизированный доступ к котировкам TradingView, простираются далеко за рамки простого наблюдения за ценами. На их основе можно строить и тестировать сложные торговые стратегии.
Например, вы можете автоматически анализировать исторические данные для выявления закономерностей, рассчитывать технические индикаторы (скользящие средние, RSI, MACD и др.) в больших масштабах, определять уровни поддержки и сопротивления. Python позволяет интегрировать эти расчеты с алгоритмами принятия решений: если стратегия определяет благоприятный момент для входа в позицию, система может автоматически отправить ордер на биржу.
Более того, вы можете проводить бэктестинг – проверку эффективности стратегии на исторических данных, что является критически важным этапом перед ее применением на реальном рынке. Создание кастомных индикаторов, основанных на комбинации различных параметров или внешних данных (например, новостной ленты), также становится легко реализуемым. Эти возможности позволяют перейти от интуитивной торговли к системному подходу, основанному на данных и логике, что значительно повышает шансы на стабильную прибыль.
Для реализации задачи получения котировок TradingView с помощью Python существует ряд инструментов и библиотек. Одной из наиболее удобных и часто используемых является библиотека `tradingview-scraper`.
Эта библиотека, несмотря на свое название, не является официальным API от TradingView, а представляет собой стороннее решение, которое имитирует запросы браузера к сайту, чтобы извлечь нужные данные. Она позволяет получать исторические и текущие котировки для различных финансовых инструментов (акций, валют, криптовалют и т.д.) с указанием временных интервалов и диапазонов дат.
Другие аналогичные библиотеки или подходы могут включать использование более общих библиотек для веб-скрейпинга, таких как `BeautifulSoup` или `Scrapy`, в сочетании с библиотекой `requests` для отправки HTTP-запросов. Однако `tradingview-scraper` зачастую предоставляет более простой и специализированный интерфейс для работы именно с данными TradingView, абстрагируя пользователя от сложностей парсинга HTML-страниц. Важно помнить, что использование неофициальных инструментов может сопряжено с рисками, связанными с изменениями на стороне сайта TradingView, которые могут привести к временной или полной неработоспособности библиотеки.
"Автоматизация анализа финансовых рынков с помощью Python и TradingView открывает новые горизонты для трейдеров и инвесторов."
Шаг 1: Подготовка окружения Python
Установка Python и pip.
Первым и наиболее важным шагом на пути к автоматизации получения данных является правильная настройка вашего рабочего окружения. Для начала убедитесь, что на вашем компьютере установлен Python.
- Установка Python и pip.
- Создание виртуального окружения.
- Установка необходимых библиотек (например, `requests`, `pandas`, `tradingview-scraper`).
Рекомендуется использовать последнюю стабильную версию Python 3. Скачать дистрибутив можно с официального сайта python.org.
В процессе установки обязательно отметьте галочку "Add Python to PATH" (или "Добавить Python в PATH"), чтобы команды Python и pip (менеджер пакетов Python) были доступны из любой директории командной строки. Pip – это стандартный инструмент для установки сторонних библиотек, и он обычно устанавливается вместе с Python.
Чтобы проверить, что Python и pip установлены корректно, откройте командную строку (или терминал) и введите команды `python --version` и `pip --version`. Если версии отобразятся без ошибок, значит, установка прошла успешно. После этого вы готовы к следующему этапу – созданию изолированной среды для вашего проекта.
Создание виртуального окружения – это лучшая практика при работе с Python-проектами. Виртуальное окружение позволяет изолировать зависимости одного проекта от других, предотвращая конфликты версий библиотек.
Это особенно важно, когда вы работаете над несколькими проектами одновременно или используете библиотеки, которые могут иметь несовместимые требования. Для создания виртуального окружения можно использовать встроенный модуль `venv`.
КАК ЛЮДИ ТЕРЯЮТ ДЕНЬГИ В КРИПТО
Выберите сценарий поведения рынка, чтобы увидеть ловушки, в которые попадают 95% новичков.
Откройте командную строку, перейдите в директорию, где будет находиться ваш проект, и выполните команду: `python -m venv .venv` (где `.venv` – это имя директории вашего виртуального окружения, вы можете выбрать любое другое). После создания окружения его необходимо активировать.
В Windows команда будет выглядеть так: `.venv\Scripts\activate`. В macOS и Linux: `source .venv/bin/activate`. После активации вы увидите имя вашего виртуального окружения в скобках перед путем в командной строке (например, `(.venv) C:\path o\project>`), что означает, что теперь все устанавливаемые пакеты будут помещены именно в это изолированное окружение.
После активации виртуального окружения можно приступить к установке необходимых библиотек. Для нашей задачи нам понадобятся как минимум три основных пакета: `requests` для выполнения HTTP-запросов к веб-сервисам, `pandas` для удобной работы с данными (особенно для структурирования котировок в таблицы), и, собственно, `tradingview-scraper` для получения данных с TradingView.
Установка каждой библиотеки производится с помощью pip. В активном виртуальном окружении выполните следующие команды поочередно: `pip install requests`, `pip install pandas`, `pip install tradingview-scraper`.
Если вы планируете использовать другие инструменты или библиотеки для анализа, например, `numpy` для числовых операций или `matplotlib` для визуализации, их также можно установить аналогичным образом: `pip install numpy`, `pip install matplotlib`. Важно устанавливать все библиотеки именно в активном виртуальном окружении, чтобы они были доступны только для данного проекта и не засоряли глобальное пространство Python.
"Установка необходимых библиотек (например, `requests`, `pandas`, `tradingview-scraper`)."
Шаг 2: Получение реального времени котировок: Использование `tradingview-scraper` для получения данных в реальном времени.
Ключевые идеи
Для начала работы с актуальными рыночными данными вам потребуется инструмент, который может надежно извлекать информацию из TradingView. Библиотека `tradingview-scraper` — это отличный выбор для этой задачи.
Она специально разработана для парсинга данных с платформы TradingView, что делает процесс получения котировок в реальном времени максимально простым и эффективным. Для установки библиотеки вам понадобится менеджер пакетов pip.
Просто выполните команду `pip install tradingview-scraper` в вашем терминале или командной строке. После успешной установки вы сможете импортировать необходимые функции в ваш Python-скрипт.
Эта библиотека позволяет получать данные по различным финансовым инструментам, включая акции, криптовалюты, форекс и индексы. Важно понимать, что данные в реальном времени могут иметь небольшую задержку, зависящую от настроек TradingView и вашего интернет-соединения.
Однако для большинства торговых стратегий и аналитических задач эта задержка является приемлемой. Библиотека обрабатывает сложные веб-запросы и парсит HTML-структуру страницы, извлекая нужные числовые значения, такие как текущая цена, изменение за день, объемы торгов и другие важные метки. Это избавляет вас от необходимости вручную анализировать веб-страницы или разбираться в API, которые могут быть скрыты или недоступны для прямого использования.
Получение конкретного тикера, например, BTCUSD, с помощью `tradingview-scraper` сводится к вызову соответствующей функции с указанием символа актива и биржи. Библиотека автоматически найдет нужный тикер на TradingView и вернет вам его текущие котировки.
Пример кода может выглядеть следующим образом: сначала импортируем функцию `get_realtime_quotes` из библиотеки. Затем определяем тикер, например, 'BINANCE:BTCUSD', где 'BINANCE' указывает на биржу, а 'BTCUSD' — на сам торговый инструмент.
Вызываем функцию `get_realtime_quotes`, передавая ей список тикеров. Результатом будет словарь, где ключами являются символы тикеров, а значениями — данные по каждому тикеру.
Эти данные включают текущую цену, наименьшую и наибольшую цену за день, процентное изменение цены и объем торгов. Если тикер не найден или произошла ошибка при получении данных, функция вернет пустой словарь или сообщение об ошибке.
Важно корректно обрабатывать такие случаи, чтобы ваш скрипт работал стабильно. Например, можно использовать блок `try-except` для перехвата возможных исключений, связанных с сетевыми проблемами или некорректным форматом запроса. Таким образом, вы получаете быстрый и удобный доступ к самой свежей информации о ценах на финансовые активы.
Полученные данные от `tradingview-scraper` обычно возвращаются в формате JSON, что делает их легкими для дальнейшей обработки в Python. JSON (JavaScript Object Notation) — это легковесный формат обмена данными, который легко читается как человеком, так и машиной.
После получения данных в виде строки JSON, вам нужно будет преобразовать её в Python-объект (обычно словарь или список словарей) для удобства работы. Для этого используется встроенный в Python модуль `json`.
Если `get_realtime_quotes` возвращает строку JSON, вы можете использовать `json.loads(response)` для её парсинга. Полученный Python-объект будет содержать структурированные данные, где ключи соответствуют названиям полей (например, 'price', 'high', 'low', 'change', 'volume'), а значения — соответствующие им числовые или строковые представления.
Например, вы можете получить словарь вида `{'BINANCE:BTCUSD': {'price': 70000.50, 'high': 71000.00, 'low': 69000.00, 'change': 1.5, 'volume': 15000000000}}`. Далее вы можете получить доступ к отдельным значениям, используя ключи, например `data['BINANCE:BTCUSD']['price']`. Такая структура позволяет легко интегрировать полученные котировки в ваши торговые алгоритмы, системы анализа или дашборды, обеспечивая актуальность отображаемой информации.
Шаг 3: Получение исторических данных: Как запросить исторические данные (OHLCV).
Ключевые идеи
КАЛЬКУЛЯТОР ПРИБЫЛИ
Обычный трейдер против ИИ-бота
Расчеты ведутся со строгим риск-менеджментом: 2% риска на сделку (20 USDT). Никаких казино-стратегий или ставок всем депозитом.

В дополнение к котировкам в реальном времени, часто возникает необходимость анализировать исторические данные. Это могут быть данные OHLCV (Open, High, Low, Close, Volume) за определенный период, которые необходимы для тестирования торговых стратегий, построения индикаторов или проведения технического анализа.
`tradingview-scraper` также предоставляет функционал для извлечения таких исторических данных. Запрос исторических данных обычно осуществляется с использованием специализированных функций библиотеки, которые позволяют указать не только символ актива, но и временной интервал, а также диапазон дат.
Это дает гибкость в получении данных, необходимых для вашего анализа, будь то минутные свечи за последний час или дневные свечи за последние несколько лет. Получение исторических данных — это ключевой этап для любого, кто серьезно занимается торговлей или анализом финансовых рынков, поскольку именно история помогает понять закономерности и разработать эффективные подходы к прогнозированию будущих движений цен. Важно помнить, что при работе с большими объемами исторических данных могут возникать ограничения по скорости получения данных или объему запрашиваемой информации, поэтому рекомендуется выполнять запросы поэтапно или с учетом этих ограничений.
При запросе исторических данных необходимо корректно указать параметры, определяющие, какие именно данные вы хотите получить. Основные параметры включают: `symbol` (символ актива, например, 'BINANCE:BTCUSD'), `interval` (временной интервал свечей, например, '1m' для минутной свечи, '1h' для часовой, '1D' для дневной) и `range` (диапазон дат или количество свечей).
Интервалы могут быть разнообразными: от минут до месяцев. Например, '1', '5', '15', '30' для минут, '1H', '2H', '4H' для часов, '1D', '1W', '1M' для дней, недель и месяцев соответственно.
Параметр `range` может принимать значения, указывающие количество свечей (например, '100' для получения последних 100 свечей) или конкретный период времени (например, '2023-01-01T00:00:00Z-2023-12-31T23:59:59Z' для всего 2023 года). Точный формат указания диапазона дат может зависеть от конкретной реализации библиотеки.
Правильное указание этих параметров критически важно для получения релевантных данных. Некорректно заданные интервалы или диапазоны дат могут привести к получению пустых данных или данных, которые не соответствуют вашим аналитическим потребностям. Рекомендуется ознакомиться с документацией `tradingview-scraper` для полного списка поддерживаемых интервалов и форматов диапазона дат.
Пример кода для получения исторических данных с использованием `tradingview-scanner` (предполагая, что библиотека имеет такую функцию) может выглядеть следующим образом: сначала импортируем необходимую функцию, например, `get_historical_data`. Затем определяем параметры запроса: тикер актива, интервал и диапазон.
Например, мы хотим получить дневные данные по BTCUSD с биржи Binance за последний год. Код может выглядеть так: `from tradingview_scanner import get_historical_data` `symbol = 'BINANCE:BTCUSD'` `interval = '1D'` `date_range = '1y'` (или конкретный диапазон дат).
Затем вызываем функцию: `historical_data = get_historical_data(symbol, interval, date_range)`. Результат будет представлен в виде списка словарей, где каждый словарь описывает одну свечу и содержит поля 'timestamp', 'open', 'high', 'low', 'close', 'volume'.
Например: `[{'timestamp': 1672531200, 'open': 16500.0, 'high': 17000.0, 'low': 16000.0, 'close': 16800.0, 'volume': 5000000000}, ...]`. Важно обработать возможные ошибки при получении данных, например, если тикер не существует или запрашиваемый период слишком велик.
Как и в случае с реальным временем, используйте блоки `try-except` для обеспечения устойчивости вашего скрипта. Полученные данные затем можно использовать для дальнейшего анализа, построения графиков или тестирования торговых алгоритмов.
Шаг 4: Анализ и визуализация данных: Использование `pandas` для анализа временных рядов., Простые примеры анализа (скользящие средние, изменения)., Основы визуализации с `matplotlib` или `seaborn`.
Ключевые идеи
На этом этапе мы переходим к самому сердцу работы с данными — их анализу и визуализации. Библиотека `pandas` является неоспоримым лидером в области обработки и анализа данных в Python, особенно когда речь заходит о временных рядах.
Ее структуры данных, DataFrame и Series, идеально подходят для работы с последовательностями данных, привязанными ко времени. Для анализа временных рядов `pandas` предоставляет мощный набор инструментов.
Мы можем легко выбирать данные по временным диапазонам, ресемплировать данные (изменение частоты временного ряда, например, из ежедневных данных в ежемесячные), а также выполнять различные статистические операции. Функции, такие как `.rolling()` и `.expanding()`, позволяют легко вычислять скользящие средние (moving averages) и другие скользящие статистические показатели.
Скользящее среднее сглаживает краткосрочные колебания и выявляет долгосрочные тренды, что крайне полезно для понимания общей динамики. Например, вычисление 30-дневного скользящего среднего для цены акции поможет увидеть тренд, игнорируя ежедневные шумы.
Кроме того, `pandas` позволяет легко вычислять изменения между последовательными точками данных (например, ежедневные процентные изменения цен), что дает представление о волатильности. Наконец, для наглядного представления результатов анализа мы обращаемся к библиотекам визуализации, таким как `matplotlib` и `seaborn`.
`matplotlib` — это фундаментальная библиотека, предоставляющая широкий спектр возможностей для создания статических, анимированных и интерактивных визуализаций. `seaborn`, построенная поверх `matplotlib`, предлагает более высокоуровневый интерфейс для создания привлекательных и информативных статистических графиков.
Мы можем легко строить линейные графики для отображения временных рядов, гистограммы для распределения значений, диаграммы рассеяния для выявления корреляций и многое другое. Визуализация помогает быстро оценить результаты анализа, обнаружить аномалии, подтвердить гипотезы и представить выводы в понятной форме.
Продолжая тему анализа временных рядов с помощью `pandas`, стоит уделить внимание двум ключевым операциям: вычислению скользящих средних и анализу изменений. Скользящее среднее (moving average) — это фундаментальный метод сглаживания временных рядов, который помогает выявить тренды и устранить шум.
УГАДАЙ КУДА ПОЙДЕТ ЦЕНА BTC
Сможешь ли ты предсказать движение рынка за 15 секунд без ИИ? Победителей ждет подарок!
В `pandas` это достигается с помощью метода `.rolling()`. Например, чтобы рассчитать 3-дневное скользящее среднее для ряда данных `s`, мы можем использовать `s.rolling(window=3).mean()`.
Параметр `window` определяет количество наблюдений, включаемых в каждое среднее. Этот метод чрезвычайно полезен для определения направления тренда: если скользящее среднее растет, это указывает на восходящий тренд; если падает — на нисходящий.
Важно помнить, что для первых `window-1` точек результат будет `NaN`, так как недостаточно данных для вычисления среднего. Другой важный аспект анализа — это изучение изменений между последовательными наблюдениями.
`pandas` предоставляет метод `.diff()`, который вычисляет разницу между текущим и предыдущим элементом ряда. `s.diff()` вернет ряд, где каждый элемент является разницей между текущим и предыдущим значением в исходном ряде.
Это особенно полезно для анализа финансовых данных, где ежедневные или внутридневные изменения цен являются ключевыми показателями волатильности и рыночной активности. Часто рассчитывают процентные изменения, умножая результат `.diff()` на 100 и деля на предыдущее значение, или используя метод `.pct_change()`.
Для визуализации этих результатов, `matplotlib` и `seaborn` предлагают гибкие инструменты. Мы можем построить исходный временной ряд вместе с его сглаженной версией (скользящим средним) на одном графике, чтобы наглядно продемонстрировать эффект сглаживания.
Также полезно визуализировать ряд изменений, чтобы увидеть периоды повышенной волатильности. `seaborn` упрощает создание таких графиков, например, с помощью функции `sns.lineplot()`, которая автоматически обрабатывает оси времени и может отображать доверительные интервалы, если данные позволяют. Грамотное сочетание анализа `pandas` и визуализации `matplotlib`/`seaborn` позволяет глубоко понять динамику данных.
Шаг 5: Важные соображения и лучшие практики: Лимиты запросов и ограничения API., Обработка ошибок и исключений., Этические аспекты использования данных.
Ключевые идеи
При работе с любыми внешними данными, особенно полученными через API, крайне важно учитывать технические и этические ограничения. Первое, на что следует обратить внимание, — это лимиты запросов (rate limits) и другие ограничения API.
Большинство сервисов устанавливают правила, ограничивающие количество запросов, которые вы можете сделать за определенный промежуток времени (например, 60 запросов в минуту или 1000 запросов в день). Превышение этих лимитов может привести к временной блокировке вашего доступа или даже к постоянному бану.
Поэтому в коде необходимо предусмотреть механизмы для соблюдения этих лимитов. Это может включать использование `time.sleep()` между запросами, реализацию экспоненциальной отсрочки (exponential backoff) при получении ошибок, связанных с лимитами (например, HTTP-статус 429 Too Many Requests), или агрегацию данных для уменьшения общего числа запросов.
Также API могут иметь ограничения на объем запрашиваемых данных, формат ответа или доступные конечные точки. Всегда внимательно изучайте документацию API, чтобы понимать эти ограничения.
Далее, надежная обработка ошибок и исключений является неотъемлемой частью любого производственного кода. Сетевые сбои, ошибки сервера, некорректные данные во входных параметрах, изменения в структуре API — все это может привести к неожиданным сбоям.
Используйте блоки `try...except` для перехвата потенциальных исключений (например, `requests.exceptions.RequestException`, `KeyError`, `IndexError`, `ValueError`) и реализуйте соответствующую логику: повторные попытки, логирование ошибки, возврат значения по умолчанию или корректное завершение работы программы. Грамотная обработка ошибок делает ваш код более устойчивым и предсказуемым.
Нельзя игнорировать и этические аспекты использования данных. Всегда убеждайтесь, что вы имеете право собирать и использовать запрашиваемые данные.
Соблюдайте политику конфиденциальности сервиса, которым пользуетесь, и законы о защите данных (например, GDPR). Никогда не собирайте и не храните личную информацию без явного согласия пользователя.
Если вы анализируете данные, которые могут быть чувствительными, рассмотрите возможность их анонимизации или агрегации. Ответственное отношение к данным — это не только вопрос соблюдения законов, но и залог доверия пользователей и долгосрочного успеха вашего проекта.
Продолжая обсуждение важных соображений, стоит глубже погрузиться в практические аспекты управления API-запросами и обработки ошибок. Лимиты запросов — это не просто формальность, а реальное препятствие, которое может остановить ваш сбор данных.
Например, если API позволяет 10 запросов в минуту, а вам нужно получить данные за 1000 дней, и каждый день требует одного запроса, то простой сбор займет более 100 минут (более полутора часов), если вы будете делать запросы последовательно, но при этом рискуете превысить лимит, если запросы будут выполняться слишком быстро. Стратегии, такие как паузы между запросами (`time.sleep(6)`) или использование пакетных запросов (если API их поддерживает), становятся обязательными.
Экспоненциальная отсрочка — это продвинутый метод: при получении ошибки 429, вы ждете 1 секунду, при следующей — 2, затем 4, 8 и так далее, пока запрос не будет выполнен или не будет достигнут максимальный лимит повторных попыток. Это снижает нагрузку на сервер API и увеличивает шансы на успешное выполнение задачи.
Обработка ошибок должна быть многоуровневой. Базовый уровень — перехват сетевых ошибок (`requests.exceptions.ConnectionError`, `Timeout`).
Затем — проверка HTTP-статуса ответа: 200 OK — успех; 4xx — ошибки клиента (например, 401 Unauthorized, 404 Not Found, 429 Too Many Requests); 5xx — ошибки сервера. Для ошибок 5xx имеет смысл повторить запрос через некоторое время.
Для ошибок 4xx нужно анализировать причину: возможно, требуется обновить авторизационные данные или изменить параметры запроса. При получении корректного ответа (например, JSON), необходимо предусмотреть обработку ошибок парсинга (`json.JSONDecodeError`) и ошибок доступа к данным (`KeyError`, `IndexError`), если структура ответа изменилась или ожидаемый ключ отсутствует.
Этические соображения выходят за рамки простого соблюдения законов. Это включает прозрачность: если вы собираете данные, пользователи должны знать, какие данные собираются и для каких целей.
Принцип минимальности данных означает сбор только той информации, которая действительно необходима для достижения цели. Важно также думать о потенциальном вреде: может ли раскрытие определенных данных навредить отдельным лицам или группам?
Если вы работаете с общедоступными данными, но они могут быть использованы для идентификации людей (например, в сочетании с другими источниками), это также требует осторожности. Всегда ставьте себя на место человека, чьи данные вы используете, и принимайте решения, которые вы могли бы обосновать публично.
FAQ
Читать еще

Евгений Волков
Трейдер с 2-летним стажем, основатель AI INSTARDERS Bot. Прошел путь от новичка до основателя своего проекта. Убежден, что трейдинг — это математика, а не магия. Я обучил нейросеть на своих стратегиях и много часов графиков, чтобы она спасала новичков от фатальных ошибок.
Обсуждение (8)
Спасибо за гайд! `tradingview-ta` действительно упрощает жизнь. Уже интегрировал в свой скрипт для мониторинга.
Кстати, кто-нибудь пробовал получать данные для фьючерсов на Binance? Не всегда корректно срабатывает 'exchange'.
Народ, а `tradingview-ta` только для крипты? Или можно и форекс/акции получать? В примере BTC.
Я пытаюсь получить RSI для EURUSD на H1, но выдает ошибку. Может, кто знает, в чем проблема? `exchange='FX_IDC'` указал.
Для исторических данных я использую `yfinance`, а для сводок индикаторов - `tradingview-ta`. Хорошая комбинация получается.
Отвечаю @Newbie_Dev: Убедись, что у тебя последняя версия библиотеки. Иногда бывают проблемы со старыми версиями и некоторыми парами.
По поводу фьючерсов @Python_Trader: Попробуй явно указать тикер, например `BINANCE:BTCUSDPERPETUAL` вместо просто `BTCUSD`. Может помочь.
Кто-нибудь сталкивался с лимитами запросов? TradingView может банить, если слишком часто дергать их серверы?