Python для алготрейдинга - страница 24

 

Как рассчитать волатильность инвестиционного портфеля акций с помощью Python, NumPy и Pandas


Как рассчитать волатильность инвестиционного портфеля акций с помощью Python, NumPy и Pandas

В этом видео ведущий демонстрирует, как рассчитать волатильность инвестиционного портфеля с помощью Python, и включает математические уравнения, лежащие в основе этого. Основное внимание уделяется портфелю из двух ценных бумаг, так как он легко рассчитывается на портативном калькуляторе. Однако докладчик упоминает, что для портфелей с более чем тремя ценными бумагами для расчета волатильности используется матричное умножение. Докладчик использует библиотеку NumPy и другие вспомогательные библиотеки для выполнения вычислений.

Видео начинается с настройки среды Python и импорта необходимых модулей. Затем докладчик определяет переменные, которые будут использоваться на протяжении всего процесса.

Чтобы получить данные для портфеля в режиме реального времени, докладчик упоминает использование API и специально демонстрирует использование исторических данных на конец дня. Они объясняют, что для доступа к данным требуется ключ API, и предоставляют инструкции о том, как зарегистрироваться и получить ключ. Начальная дата для данных установлена около года назад. Ведущий настраивает портфель, присваивает равные веса каждой ценной бумаге и создает пустой список для хранения загруженных данных.

Используя цикл for, ведущий вызывает API для каждого символа в портфолио и извлекает данные. Они демонстрируют, как построить вызов API, получив URL-адрес конечной точки с веб-сайта поставщика данных и внеся необходимые изменения. Данные извлекаются в виде строки JSON, которая преобразуется в кадр данных pandas для дальнейшей обработки. Цены закрытия извлекаются из DataFrame и добавляются в список данных.

После завершения цикла for докладчик преобразует список данных в DataFrame, транспонирует его, переименовывает столбцы с именами символов и изменяет индекс на даты. Затем они отображают результирующий DataFrame, содержащий цены закрытия для каждой ценной бумаги.

Чтобы рассчитать волатильность, ведущий объясняет, что необходимо рассчитать мгновенную норму доходности. Они создают новый DataFrame, используя функцию логарифмирования NumPy по ценам закрытия, а затем вычисляют разницу между последовательными значениями. Результирующий DataFrame представляет мгновенные нормы прибыли для каждой ценной бумаги. Ведущий удаляет первую строку DataFrame для обработки любых значений NaN и демонстрирует расчет дисперсии для каждой ценной бумаги.

Для расчета волатильности каждой ценной бумаги ведущий использует квадратный корень из дисперсии. Они отображают результирующую волатильность в процентах.

Что касается волатильности портфеля, докладчик объясняет, что ее можно рассчитать как средневзвешенное значение волатильности каждой ценной бумаги. Поскольку ценные бумаги в этом примере имеют одинаковый вес, представителю требуется только среднее значение волатильности. Они форматируют его в процентах.

Затем докладчик вводит понятие ковариационной матрицы и демонстрирует, как ее вычислить с помощью возвращаемого DataFrame. Они приспосабливают ежедневную ковариацию к годовой ковариации и отображают результирующую матрицу ковариации.

Наконец, ведущий вычисляет волатильность портфеля, используя матричное умножение. Они умножают веса на ковариационную матрицу и извлекают квадратный корень из результата. Волатильность портфеля отображается в процентах, представляющих собой стандартное отклонение.

В заключение в видео представлена пошаговая демонстрация того, как рассчитать волатильность портфеля с помощью Python. Докладчик объясняет необходимые расчеты, знакомит с соответствующими библиотеками, такими как NumPy, и подчеркивает преимущества диверсификации в снижении волатильности портфеля.

How to Calculate Stock Investment Portfolio Volatility with Python, NumPy & Pandas
How to Calculate Stock Investment Portfolio Volatility with Python, NumPy & Pandas
  • 2021.08.18
  • www.youtube.com
#python #numpy #pandaslearn how to use Python and NumPy to calculate investment portfolio volatilityhttps://alphabench.com/data/python-portfolio-volatil...
 

Начало работы со Steamlit для Python — создайте работающее веб-приложение за считанные минуты



Начало работы со Steamlit для Python — создайте работающее веб-приложение за считанные минуты

В этом видео я покажу, как использовать Streamlit для Python для создания веб-приложения. Streamlit — это бесплатный пользовательский веб-интерфейс, который позволяет создавать и публиковать высококачественные приложения без какого-либо опыта фронтенд-разработки. Мы будем создавать простое приложение, которое позволит нам загружать данные о ценах на акции с помощью API и отображать их в виде графиков. Давайте начнем!

Во-первых, я буду использовать PyCharm в качестве своей IDE, но вы можете использовать любую IDE по вашему выбору. Если вы не знакомы с PyCharm, в описании видео я предоставил ссылку на видео «Начало работы с PyCharm». Не стесняйтесь проверить это, если вы хотите узнать больше.

Я уже создал новый проект в PyCharm под названием «Streamlit Demo» и добавил файл Python. Поскольку мы начинаем с новой виртуальной среды, нам нужно установить некоторые зависимости. Нам понадобятся Pandas, библиотека Requests и Streamlit. В зависимости от вашей конфигурации PyCharm у вас уже могут быть установлены Pandas и Requests, но вам обязательно потребуется установить Streamlit. Кроме того, мы будем использовать API «Исторические данные на конец дня» для нашего приложения, который разрешает бесплатные вызовы API с ограничением около 20 в день. Если вам нужно больше, они предлагают варианты подписки на своем веб-сайте.

После установки Streamlit давайте взглянем на их пример приложения. Я открою терминал и запущу Streamlit, вызвав Python из командной строки, а затем выполнив команду Streamlit. Их пример приложения находится в файле с именем «hello». Через несколько секунд приложение запустится, и вы увидите веб-страницу с заголовком, текстом и гиперссылками. С левой стороны есть различные демонстрации, которые вы можете исследовать. В их демонстрациях хорошо то, что они предоставляют код, используемый для генерации вывода. Например, есть демонстрация с диаграммой, а под ней вы можете увидеть код, используемый для создания этой диаграммы. Streamlit позаботится о форматировании и размещении контента на веб-странице, поэтому вам нужно сосредоточиться только на написании кода для получения желаемого результата.

Как только вы будете удовлетворены своим приложением, вы можете запросить у Streamlit разрешение на его публикацию в реальном времени. Они по-прежнему предлагают бесплатную публикацию, но вам нужно связаться с ними, чтобы настроить ее. После этого вы можете отправить свои файлы на GitHub и поделиться своим работающим приложением в течение нескольких секунд.

Теперь перейдем к созданию собственного приложения. Я продемонстрирую несколько функций Streamlit, прежде чем мы начнем писать код нашего приложения. Streamlit предоставляет различные элементы, которые вы можете использовать, такие как кнопки, средства выбора цвета, боковые панели, текстовые поля и средства выбора даты. Наиболее часто используемым элементом является функция «запись», позволяющая отображать текст на веб-странице. Вы также можете использовать синтаксис уценки в функции «запись» для форматирования текста. Кроме того, если вы хотите отобразить текст в произвольной форме, вы можете просто использовать строку документации, и Streamlit отобразит ее как уценку.

Давайте проверим некоторые из этих функций, написав простое приложение. Я определю несколько зависимостей, а затем покажу вам, как использовать элементы Streamlit. Мы начнем с функции «st» и рассмотрим ее различные возможности. Например, мы можем использовать «st.button» для отображения кнопки, «st.color_picker» для выбора цвета и «st.sidebar» для создания боковой панели. Функция «запись» также очень полезна для отображения текста, и вы можете использовать в ней синтаксис уценки. Я продемонстрирую эти общие функции, но имейте в виду, что Streamlit предлагает гораздо больше возможностей.

Чтобы запустить приложение, я остановлю текущий сервер Streamlit и снова запущу его, выполнив команду Python с именем.

Вот пример простого приложения Streamlit, которое позволяет загружать и отображать данные о ценах на акции:

import streamlit as st
import pandas as pd
import requests

# Set the title and page layout
st.title( "Stock Price Data" )
st.sidebar.header( "Settings" )

# Create input fields in the sidebar
symbol = st.sidebar.text_input( "Enter a stock symbol (e.g., AAPL)" , value= "AAPL" )
start_date = st.sidebar.text_input( "Enter the start date (YYYY-MM-DD)" , value= "2022-01-01" )
end_date = st.sidebar.text_input( "Enter the end date (YYYY-MM-DD)" , value= "2022-12-31" )

# Create a button to trigger the data retrieval
if st.sidebar.button( "Get Data" ):
     # Make an API request to retrieve the stock price data
    url = f " https://api.example.com/stock/ {symbol}/history?start_date={start_date}&end_date={end_date}"
    response = requests.get(url)
    
     # Check if the API request was successful
     if response.status_code == 200 :
        data = response.json()
        df = pd.DataFrame(data)
        
         # Display the downloaded data
        st.write(df)
        
         # Create a line chart of the stock prices
        st.line_chart(df[ "close" ])
     else :
        st.write( "Error retrieving data from the API" )

# Add some additional information to the sidebar
st.sidebar.info( "This is a simple app to download and graph stock price data." )
st.sidebar.info( "Enter the stock symbol and date range, then click 'Get Data' to retrieve the data." )

В этом примере мы сначала импортируем необходимые библиотеки: Streamlit, Pandas и Requests. Затем мы устанавливаем заголовок и макет страницы с помощью функций st.title() и st.sidebar.header().

Затем мы создаем поля ввода на боковой панели с помощью функции st.sidebar.text_input(). В этих полях пользователи могут ввести символ акции, дату начала и дату окончания.

Затем мы создаем кнопку с помощью функции st.sidebar.button(). При нажатии кнопки запускается процесс извлечения данных. Мы создаем URL-адрес запроса API, используя введенный символ, дату начала и дату окончания. Мы делаем GET-запрос к API с помощью функции request.get().

Если запрос API выполнен успешно (код состояния 200), мы извлекаем данные из ответа и создаем Pandas DataFrame. Мы отображаем загруженные данные с помощью функции st.write(), а затем создаем линейный график цен акций с помощью функции st.line_chart().

Если запрос API завершается неудачно, мы отображаем сообщение об ошибке с помощью функции st.write().

Наконец, мы добавляем дополнительную информацию на боковую панель с помощью функции st.sidebar.info().

Чтобы запустить это приложение, вы можете сохранить его в файле Python (например, stock_app.py) и запустить с помощью команды streamlit run stock_app.py в своем терминале.

Это всего лишь базовый пример, и вы можете настроить его в соответствии со своими потребностями. Streamlit предоставляет гораздо больше возможностей для создания интерактивных веб-приложений, включая раскрывающиеся списки, флажки, ползунки и многое другое. Вы можете изучить документацию Streamlit ( https://docs.streamlit.io/ ) для получения дополнительной информации и примеров.

Getting Started with Steamlit for Python - Build a Functioning Web App in Minutes
Getting Started with Steamlit for Python - Build a Functioning Web App in Minutes
  • 2021.10.18
  • www.youtube.com
#python #streamlitHow to use streamlit - full-featured GUI for Pythonhttps://alphabench.com/data/python-streamlit-app.html*Please SUBSCRIBE:https://www.yo...
 

Используйте API исторических данных на конец дня (EOD) для определения времени дневного максимума/минимума



Используйте API исторических данных на конец дня (EOD) для определения времени дневного максимума/минимума

В этом видео мы собираемся изучить API исторических данных на конец дня, который позволяет нам извлекать дневные максимумы и минимумы торговых цен акций. Этот API является частью модели freemium для финансовых данных, предлагая 20 бесплатных вызовов API в день. Преимущество этого API в том, что он предоставляет доступ к данным более чем 70 мировых бирж. Вы можете найти ссылку на их веб-сайт и специальные цены в описании видео.

Для начала нам нужно настроить нашу среду. Мы будем использовать модуль datetime для управления датами, вспомогательную библиотеку для доступа к историческим данным, pandas для обработки и фильтрации данных, а также запросы для вызовов API. Далее нам нужно получить наш ключ API, который можно хранить в файле или прямо в блокноте для простоты.

Мы также определим дату начала для наших данных, обычно возвращаясь примерно на 10 дней назад. API имеет различные ограничения в зависимости от типа данных: поминутные данные ограничены 120 днями, а данные с пятиминутным интервалом ограничены 600 днями. API индексирует данные, используя метку времени Unix, которая представляет собой количество секунд, прошедших с 1 января 1970 года. Мы преобразуем желаемую дату начала в метку времени Unix для запроса API.

После завершения необходимой настройки мы можем создать экземпляр объекта «Исторические данные на конец дня», используя наш ключ API. Этот объект позволяет нам получить данные, которые нам нужны. Вспомогательная библиотека предоставляет различные конечные точки, которые можно исследовать для различных типов данных. В этом примере мы сосредоточимся на получении внутридневных цен на Tesla с интервалом в одну минуту, начиная с указанной даты начала.

Чтобы визуализировать данные, мы можем обернуть вызов API в конструктор для Pandas DataFrame. Это упрощает работу с данными и их визуализацию. Мы отображаем первые несколько строк DataFrame для проверки извлеченных данных, включая временную метку Unix, дату и время.

Если вы предпочитаете не использовать вспомогательную библиотеку, в видео представлен альтернативный подход с использованием библиотеки запросов для прямого доступа к конечной точке API и извлечения данных JSON.

Затем мы выполняем некоторую очистку данных. Мы заменяем целочисленный индекс датой и временем из данных. Мы добавляем отдельные столбцы для времени и даты и удаляем ненужные столбцы, такие как смещение по Гринвичу и исходное время даты. Полученный DataFrame показывает измененную структуру с добавленными столбцами.

Чтобы сосредоточиться на обычных торговых часах, мы создаем копию исходных данных. Поскольку индекс представляет собой объект datetime, мы можем использовать метод between_time для фильтрации нужного времени. Как упоминается в видео, часовой пояс для этих данных — GMT-5, поэтому мы соответствующим образом корректируем время. Мы также переводим время на восточное время (ET) для облегчения интерпретации.

Чтобы отфильтровать только время из столбца datetime, мы выполняем некоторые дополнительные шаги. Поскольку мы уже выполнили расчет, нам нужно снова отформатировать данные, прежде чем применять метод datetime для извлечения времени. Полученный DataFrame отображает скорректированное время в Нью-Йорке.

Наконец, мы обращаемся к первоначальному вопросу о том, когда в течение торгового дня возникают максимумы и минимумы. Сначала мы получаем общий максимум и минимум за каждый день, используя функцию groupby и методы min и max. Чтобы определить конкретное время этих максимумов и минимумов, мы находим индекс минимального и максимального значений в DataFrame соответственно. Это дает представление о времени этих ценовых точек, позволяя нам наблюдать за любыми закономерностями или тенденциями.

В целом, это видео представляет собой пошаговое руководство по использованию API исторических данных на конец дня, получению данных о ценах на акции и анализу времени высоких и низких цен торговли.

Use End of Day (EOD) Historical Data API to Find Time of Daily High/Low
Use End of Day (EOD) Historical Data API to Find Time of Daily High/Low
  • 2021.11.22
  • www.youtube.com
@MattMacarty #python #pandas #EODHistoricalDataUse a financial services API to find the time a stock trades at it lowest or highest each dayUse a financi...
 

Как протестировать торговые алгоритмы и показатели портфеля с помощью Python и QuantStats



Как протестировать торговые алгоритмы и показатели портфеля с помощью Python и QuantStats

Сегодня я собираюсь провести вас через всесторонний обзор Quant stats, обширной библиотеки финансовых метрик, созданной как инструмент профилирования портфеля. С Quant stats вы можете легко создавать подробные отчеты, используя всего одну строку. Этот инструмент позволяет эффективно измерять производительность портфеля и тестировать торговые алгоритмы.

Quant stats опирается на известные библиотеки обработки данных, с которыми вы, возможно, уже знакомы и используете. Для этой демонстрации я работаю в PyCharm и начал новый проект. Если вы следуете инструкциям, убедитесь, что у вас установлены необходимые зависимости. Я использую немного более старую версию Pandas, потому что статистика Quant не обновлялась около шести месяцев, и могут быть некоторые проблемы совместимости с последними версиями Pandas.

Чтобы убедиться, что у вас есть необходимые зависимости, вы можете добавить их в файл requirements.txt и установить их с помощью Pip. Кроме того, статистика Quant состоит из трех модулей: статистика, графики и отчеты. Из-за обширного функционала я не смогу осветить все в одном видео. Тем не менее, я предоставлю вам обзор и расскажу, как начать работу. Затем вы можете продолжить изучение в зависимости от ваших конкретных потребностей и интересов.

Прежде чем мы углубимся в детали, давайте выслушаем нашего спонсора. Если вы хотите узнать, как создавать торговые алгоритмы с помощью Python, позвольте Looming Wealth помочь вам с их курсом алгоритмической торговли. В этом курсе вы научитесь создавать ботов, которые автоматически торгуют от вашего имени, внедрять и использовать технические и финансовые показатели, а также использовать машинное обучение для разработки уникальных торговых алгоритмов. Вы можете учиться в своем собственном темпе или присоединиться к живым занятиям для совместного обучения. Перейдите по ссылке ниже, чтобы узнать больше о Looming Wealth и получить скидку 15% на любой из их торговых курсов.

Теперь вернемся к статистике Quant. В новом пустом файле начните с импорта библиотеки статистики Quant. Затем установите биржевой символ для анализа. В этом примере я буду использовать S&P 500 ETF (SPY). Мы будем использовать статистику Quant, чтобы изучить его производительность за последние три года.

Чтобы загрузить данные о возврате, мы будем использовать утилиты Quant stats, которые опираются на данные Yahoo Finance. Вы можете использовать любой источник данных, который вы предпочитаете; здесь нет никакой магии. Давайте распечатаем результаты, чтобы посмотреть, что мы получим. Результатом будет серия Pandas с ежедневными доходами, охватывающими указанный период времени.

Получив данные о возврате, мы можем рассчитать различные статистические данные, используя Quant stats. Существует множество доступных функций, гораздо больше, чем мы можем рассказать в этом видео. Вы можете получить список доступных статистических данных, распечатав атрибут available_stats. Давайте отобразим список доступных статистических данных, исключая частные функции.

Я закомментирую часть понимания списка, чтобы сделать его кратким. Мы продолжим печатать пару общих статистических данных для S&P 500 за последние три года. Давайте рассчитаем коэффициент Шарпа, используя qs.stats.sharpe_ratio(). Кроме того, мы найдем лучший день и месяц, вызвав qs.stats.best_day() и qs.stats.best_month() соответственно. При необходимости вы можете изменить эти вызовы для агрегирования данных по-другому.

В качестве альтернативы Quant stats предоставляет оболочку для Pandas, позволяющую выполнять вызовы методов непосредственно для объекта портфеля. Расширяя Pandas, вы можете использовать однострочники для доступа к различной статистике. Например, вы можете вызвать Quant stats.extend_pandas(), а затем использовать объект портфеля для получения таких статистических данных, как совокупный годовой валовой доход и максимальная просадка.

В дополнение к статистике, Quant stats также предлагает возможность создания портфелей.

Далее я собираюсь рассчитать сигналы на основе стратегии пересечения скользящих средних. Если быстрая скользящая средняя выше медленной скользящей средней, это сигнал на покупку. В противном случае это сигнал к продаже. Я добавлю эти сигналы во фрейм данных.

После этого я собираюсь рассчитать позиции на основе сигналов. Если это сигнал на покупку, я устанавливаю позицию на 1 (указывающую на длинную позицию), а если это сигнал на продажу, я устанавливаю позицию на -1 (указывающую на короткую позицию). Во всех остальных случаях будет установлено значение 0 (указывающее отсутствие позиции).

Теперь, когда у нас есть позиции, я собираюсь рассчитать доходность стратегии. Для этого я умножу позиции на дневную доходность актива. Это даст нам доходность ежедневной стратегии.

Далее я рассчитаю совокупную доходность стратегии, взяв совокупный продукт ежедневной доходности. Это даст нам рост стратегии с течением времени.

Наконец, я собираюсь создать отчет с помощью функции quantstats.reports.html. Эта функция принимает совокупные данные о возврате и создает отчет в формате HTML с различными показателями производительности и визуализациями. Я сохраню отчет в виде HTML-файла.

Чтобы просмотреть отчет автоматически, я открою файл в веб-браузере. И это все для кода.

Теперь, когда вы запустите этот код с выбранными вами параметрами, он сгенерирует стратегию пересечения скользящих средних, рассчитает показатели производительности и создаст HTML-отчет с результатами. Вы можете настроить параметры стратегии, такие как периоды скользящей средней или временное окно, в соответствии с вашими потребностями.

How to Backtest Trading Algorithms and Portfolio Metrics with Python and QuantStats
How to Backtest Trading Algorithms and Portfolio Metrics with Python and QuantStats
  • 2022.12.07
  • www.youtube.com
​@MattMacarty #python #trading #algotrading How to Backtest Trading Strategies and Algorithms, Generate Portfolio Metrics✅ Please SUBSCRIBE:https://w...
Причина обращения: