пятница, 10 октября 2025 г.

25.10.11, DeepSeek, Volatility, Metrcics,

25.10.11, DeepSeek,  Volatility, Metrcics,

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

Отличный вопрос! Давайте разберем математические основания для использования логарифмических доходностей.

1. Математические определения

Простые доходности (Simple Returns):

csharp
double simpleReturn = (price_t - price_{t-1}) / price_{t-1};

Логарифмические доходности (Log Returns):

csharp
double logReturn = Math.Log(price_t / price_{t-1});

2. Математические преимущества логарифмических доходностей

✅ Аддитивность во времени

csharp
// Логарифмические - аддитивны
double logReturn_weekly = logReturn_day1 + logReturn_day2 + logReturn_day3;

// Простые - НЕ аддитивны
double simpleReturn_weekly ≠ simpleReturn_day1 + simpleReturn_day2 + simpleReturn_day3;

Пример:

  • День 1: +10%, День 2: -10%

  • Простые: (1.10 × 0.90) - 1 = -1% (не 0%!)

  • Логарифмические: ln(1.10) + ln(0.90) ≈ 0.0953 - 0.1054 = -0.0101 ≈ -1%

✅ Симметричность распределения

csharp
// Логарифмические доходности примерно нормально распределены
// Простые доходности имеют асимметричное распределение

Математически:

  • Логдоходность: ln(P_t/P_{t-1}) ∈ (-∞, +∞)

  • Простая доходность: (P_t - P_{t-1})/P_{t-1} ∈ [-1, +∞)

✅ Мультипликативность становится аддитивностью

csharp
// Цена: P_t = P_0 × (1+r1) × (1+r2) × ... × (1+rn)
// Логарифмируем: ln(P_t) = ln(P_0) + ln(1+r1) + ln(1+r2) + ... + ln(1+rn)

3. Сравнение на практике

csharp
public class ReturnsComparison
{
    public static void CompareReturns(double[] prices)
    {
        var simpleReturns = new List<double>();
        var logReturns = new List<double>();
        
        for (int i = 1; i < prices.Length; i++)
        {
            double simple = (prices[i] - prices[i-1]) / prices[i-1];
            double logRet = Math.Log(prices[i] / prices[i-1]);
            
            simpleReturns.Add(simple);
            logReturns.Add(logRet);
        }
        
        Console.WriteLine("Сравнение доходностей (%):");
        Console.WriteLine($"Простые: среднее = {simpleReturns.Average()*100:F4}%, stdev = {CalculateStdDev(simpleReturns)*100:F4}%");
        Console.WriteLine($"Логарифмические: среднее = {logReturns.Average()*100:F4}%, stdev = {CalculateStdDev(logReturns)*100:F4}%");
    }
}

4. Когда разница значительна?

csharp
public static void DemonstrateDifference()
{
    // Маленькие изменения - разница незначительна
    double smallPriceChange = 100 * 1.01; // +1%
    double simpleSmall = (101 - 100) / 100;        // 0.01
    double logSmall = Math.Log(101 / 100);         // 0.00995 ≈ 0.01
    
    // Большие изменения - разница заметна
    double bigPriceChange = 100 * 2.00; // +100%
    double simpleBig = (200 - 100) / 100;          // 1.00
    double logBig = Math.Log(200 / 100);           // 0.6931 ≠ 1.00!
    
    Console.WriteLine($"Маленькое изменение: простые = {simpleSmall:F4}, логарифмические = {logSmall:F4}");
    Console.WriteLine($"Большое изменение: простые = {simpleBig:F4}, логарифмические = {logBig:F4}");
}

5. Теоретическое обоснование

Броуновское движение (геометрическое):

text
dS/S = μdt + σdW

Решение:

text
S_t = S_0 × exp((μ - σ²/2)t + σW_t)

Логарифмируем:

text
ln(S_t) = ln(S_0) + (μ - σ²/2)t + σW_t

Волатильность как параметр модели:

csharp
// В модели Блэка-Шоулза волатильность определяется через логдоходности
double volatility = Math.Sqrt(varianceOfLogReturns);

6. Эмпирическая проверка

csharp
public class EmpiricalProof
{
    public static void TestNormality(double[] prices)
    {
        var simpleReturns = CalculateSimpleReturns(prices);
        var logReturns = CalculateLogReturns(prices);
        
        // Тест на нормальность
        double simpleSkewness = CalculateSkewness(simpleReturns);
        double logSkewness = CalculateSkewness(logReturns);
        
        double simpleKurtosis = CalculateKurtosis(simpleReturns);
        double logKurtosis = CalculateKurtosis(logReturns);
        
        Console.WriteLine("Асимметрия (Skewness):");
        Console.WriteLine($"  Простые: {simpleSkewness:F4} (должно быть 0)");
        Console.WriteLine($"  Логарифмические: {logSkewness:F4} (ближе к 0)");
        
        Console.WriteLine("Эксцесс (Kurtosis):");
        Console.WriteLine($"  Простые: {simpleKurtosis:F4}");
        Console.WriteLine($"  Логарифмические: {logKurtosis:F4} (ближе к 3)");
    }
    
    private static double CalculateSkewness(double[] values)
    {
        double mean = values.Average();
        double stdDev = Math.Sqrt(values.Average(v => Math.Pow(v - mean, 2)));
        return values.Average(v => Math.Pow((v - mean) / stdDev, 3));
    }
}

7. Практические последствия для волатильности

csharp
public class VolatilityComparison
{
    public static (double simpleVol, double logVol) CalculateBothVolatilities(double[] prices)
    {
        // Волатильность из простых доходностей
        var simpleReturns = new List<double>();
        for (int i = 1; i < prices.Length; i++)
        {
            simpleReturns.Add((prices[i] - prices[i-1]) / prices[i-1]);
        }
        double simpleVol = Math.Sqrt(simpleReturns.Variance()) * Math.Sqrt(252);
        
        // Волатильность из логарифмических доходностей  
        var logReturns = new List<double>();
        for (int i = 1; i < prices.Length; i++)
        {
            logReturns.Add(Math.Log(prices[i] / prices[i-1]));
        }
        double logVol = Math.Sqrt(logReturns.Variance()) * Math.Sqrt(252);
        
        return (simpleVol, logVol);
    }
}

📊 Результаты для разных сценариев:

СценарийПростые доходностиЛогарифмические доходности
Малые изменения (<5%)≈ Логарифмическим≈ Простым
Большие изменения (>20%)Завышают волатильностьБолее точны
Отрицательные ценыПроблемы с расчетомНевозможны (логарифм)
Статистические свойстваАсимметричныБолее нормальны
Агрегация во времениСложнаяПростая (суммирование)

🎯 Вывод:

Логарифмические доходности используют потому что:

  1. ✅ Математически корректны для моделей типа геометрического броуновского движения

  2. ✅ Статистически предпочтительны - ближе к нормальному распределению

  3. ✅ Временная согласованность - легко агрегировать за разные периоды

  4. ✅ Теоретическое обоснование - основа современных финансовых моделей

Для маленьких изменений (1-2%) разница действительно незначительна, но для больших движений или статистического анализа логарифмические доходности принципиально важны! 📈

Комментариев нет:

Отправить комментарий