В количественном трейдинге стандартные функции потерь, такие как MSELoss или CrossEntropyLoss, часто не учитывают специфику финансовых временных рядов. Прямая оптимизация коэффициента Шарпа позволяет модели фокусироваться на максимизации доходности при минимизации волатильности.
Перед тем как переходить к обучению, рекомендую ознакомиться с тем, как подготавливать данные, например, через Интеграция ArcticDB для хранения tick data в pandas, а также изучить Моделирование рыночных режимов с помощью марковских цепей на Python для фильтрации сигналов.
Исходный код
Ниже представлена реализация функции потерь, которая вычисляет отрицательный коэффициент Шарпа (так как PyTorch выполняет минимизацию).
import torch
def sharpe_loss(returns, risk_free_rate=0.0):
# Вычисляем избыточную доходность
excess_returns = returns - risk_free_rate
# Среднее и стандартное отклонение
mean_return = torch.mean(excess_returns)
std_return = torch.std(excess_returns, unbiased=False) + 1e-9
# Отрицательный Sharpe Ratio для минимизации
return -(mean_return / std_return) Разбор параметров
returns: Тензор доходностей стратегии, предсказанный нейронной сетью.risk_free_rate: Безрисковая ставка, обычно принимается за 0 для дневных данных.1e-9: Эпсилон-добавка для обеспечения численной стабильности и предотвращения деления на ноль.
Как запустить
Для интеграции в цикл обучения используйте sharpe_loss вместо стандартных функций. Помните, что для корректной оценки стратегии после обучения стоит использовать Бэктестинг Mean Reversion стратегий на Python с VectorBT. При обучении убедитесь, что ваш тензор returns сохраняет вычислительный граф, иначе градиенты не будут переданы обратно в веса модели.




