Инвестирование на финансовых рынках может быть как захватывающим, так и пугающим. Хотя гарантий не существует в инвестировании, наличие надежной системы управления портфелем может помочь вам быть организованным и принимать более обоснованные инвестиционные решения. В этой статье мы рассмотрим, как вы можете использовать SQL для создания системы управления портфелем, которая поможет отслеживать ваши позиции, анализировать производительность и принимать лучшие инвестиционные решения.
SQL ДЛЯ УПРАВЛЕНИЯ ПОРТФЕЛЕМ?
SQL, или Structured Query Language, является мощным инструментом для управления данными в реляционных базах данных. Используя SQL для управления данными портфеля, вы можете хранить и анализировать большие объемы данных в структурированном и эффективном формате. SQL также очень гибкий, что позволяет настраивать вашу систему управления портфелем для удовлетворения ваших специфических потребностей и требований. Независимо от того, управляете ли вы личным портфелем или крупным институциональным фондом, SQL может помочь вам быть организованным и принимать более обоснованные инвестиционные решения.
СОЗДАНИЕ ТАБЛИЦЫ ПОЗИЦИЙ ПОРТФЕЛЯ.
Первый шаг в создании системы управления портфелем с помощью SQL - создание таблицы для хранения ваших позиций портфеля. Таблица portfolio_holdings будет хранить информацию о ценных бумагах, находящихся в вашем портфеле, включая символ, дату, количество акций, стоимость покупки, рыночную стоимость, процент портфеля, сектор, страну, класс активов и примечания. Вот пример скрипта для создания таблицы portfolio_holdings:
CREATE TABLE portfolio_holdings (
id SERIAL PRIMARY KEY,
symbol VARCHAR(10) NOT NULL,
date DATE NOT NULL,
shares NUMERIC(15, 4) NOT NULL,
cost_basis NUMERIC(15, 4) NOT NULL,
market_value NUMERIC(15, 4) NOT NULL,
percentage NUMERIC(5, 2) NOT NULL,
sector VARCHAR(50),
country VARCHAR(50),
asset_class VARCHAR(50),
notes TEXT);
- символ: Символ или тикер ценной бумаги или финансового инструмента, находящегося в портфеле.
- дата: Дата, когда ценная бумага была добавлена или удалена из портфеля.
- акции: Количество акций, удерживаемых для ценной бумаги.
- базис стоимости: Базис стоимости ценной бумаги, то есть общая сумма, уплаченная за приобретение акций.
- рыночная стоимость: Текущая рыночная стоимость акций, удерживаемых в портфеле.
- процент: Процент от общей стоимости портфеля, представленный ценной бумагой.
- сектор: Сектор ценной бумаги, который можно использовать для анализа диверсификации портфеля по разным секторам.
- страна: Страна ценной бумаги, которую можно использовать для анализа экспозиции портфеля по различным географическим регионам.
- класс активов: Класс активов ценной бумаги, который можно использовать для анализа диверсификации портфеля по различным типам активов (например, акции, облигации, недвижимость).
- примечания: Любые дополнительные заметки или комментарии, относящиеся к ценной бумаге или ее производительности.
ВСТАВКА ИНФОРМАЦИИ В ПОРТФЕЛЬ.
После создания таблицы portfolio_holdings можно начать вставку ваших сделок в портфель. Вот пример оператора INSERT для добавления строки в таблицу portfolio_holdings:
INSERT INTO portfolio_holdings (symbol, date, shares, cost_basis, market_value, percentage, sector, country, asset_class, notes)
VALUES ('AAPL', '2023-02-23', 100.0, 15000.0, 17500.0, 10.0, 'Technology', 'USA', 'Equity', 'Purchased on market dip');
Этот оператор вставляет новую строку в таблицу portfolio_holdings со значениями для столбцов symbol, date, shares, cost_basis, market_value, percentage, sector, country, asset_class и notes. Вы можете изменять значения в разделе VALUES, чтобы соответствовать конкретной сделки, которое вы хотите добавить в таблицу portfolio_holdings.
РАСЧЕТ ЭФФЕКТИВНОСТИ ПОРТФЕЛЯ.
Один из ключевых преимуществ использования SQL для управления портфелем - возможность расчета показателей эффективности портфеля. Например, вы можете использовать SQL для расчета общей доходности, годовой доходности, волатильности и коэффициента Шарпа вашего портфеля.
Чтобы рассчитать коэффициент Шарпа вашего портфеля, вы можете использовать следующий SQL-запрос:
WITH daily_returns as (
SELECT date, SUM(close*shares) OVER (ORDER BY date) as portfolio_value,
SUM(close*shares) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - SUM(close*shares) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) as daily_return
FROM portfolio_holdings
JOIN stock_prices ON portfolio_holdings.symbol = stock_prices.symbol AND portfolio_holdings.date = stock_prices.date
)
SELECT AVG(daily_return)/STDDEV(daily_return) as sharpe_ratio
FROM daily_returns;
Спасибо за ваш интерес!
Репозиторий на GitHub: Перейти >>