Разработка системы расчета Sortino Ratio

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка системы расчета Sortino Ratio
Простой
от 1 дня до 3 дней
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    902
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1122
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    859

Разработка системы расчета Sortino Ratio

Sortino Ratio — улучшенная версия Sharpe Ratio, которая учитывает только нисходящую волатильность (downside deviation), игнорируя «риск» от положительных возвратов.

Формула: Sortino = (Rp − MAR) / DD

где MAR — минимально приемлемая доходность (Minimum Acceptable Return), DD — downside deviation.

Downside Deviation считается только по отрицательным отклонениям от MAR:

import numpy as np

def calculate_sortino_ratio(returns, mar=0.0, periods_per_year=365):
    """
    mar: Minimum Acceptable Return (в дневных единицах)
         Обычно 0 или risk_free_rate / periods_per_year
    """
    excess_returns = returns - mar
    
    # Только отрицательные отклонения
    downside_returns = excess_returns[excess_returns < 0]
    
    if len(downside_returns) == 0:
        return float('inf')  # нет убыточных периодов
    
    # Downside deviation
    downside_deviation = np.sqrt((downside_returns ** 2).mean())
    
    if downside_deviation == 0:
        return float('inf')
    
    mean_excess_return = excess_returns.mean()
    sortino = mean_excess_return / downside_deviation
    
    # Аннуализируем
    annualized_sortino = sortino * np.sqrt(periods_per_year)
    return annualized_sortino

def rolling_sortino(returns, window=90, mar=0.0, periods_per_year=365):
    results = []
    for i in range(window, len(returns) + 1):
        window_returns = returns.iloc[i-window:i]
        sortino = calculate_sortino_ratio(window_returns, mar, periods_per_year)
        results.append(sortino)
    return results

Когда Sortino лучше Sharpe: стратегии с асимметричным распределением доходности (например, опционные стратегии, стратегии с большими winners и малыми losers). Sortino не «штрафует» за высокую правостороннюю асимметрию.

Типичные значения: Sortino > 1.5 — хорошо. > 2.5 — отлично. Для крипто стратегий Sortino обычно выше Sharpe (рынок имеет положительный skew в bull периоды).

Дополнительная метрика — Omega Ratio: вероятность получить доходность выше MAR к вероятности получить ниже MAR. Не требует предположений о нормальном распределении.

def omega_ratio(returns, mar=0.0):
    above = returns[returns > mar] - mar
    below = mar - returns[returns <= mar]
    if below.sum() == 0:
        return float('inf')
    return above.sum() / below.sum()

Система включает расчёт Sortino и Omega Ratio, rolling window анализ, сравнение с Sharpe и визуализацию в торговом dashboard.