Корреляция Пирсона
Корреляция Пирсона является статистическим методом, позволяющим оценить степень линейной связи между двумя количественными переменными. В контексте финансового анализа, этот метод широко используется для изучения взаимосвязей между различными активами, например, акциями или валютными парами.
Описание метода
Коэффициент корреляции Пирсона принимает значения от -1 до 1, где:
- 1 означает полную положительную корреляцию,
- 0 указывает на отсутствие линейной связи,
- -1 обозначает полную отрицательную корреляцию.
Значение коэффициента показывает, насколько тесно две переменные связаны линейной зависимостью.
Практическое применение
- Портфельное управление: Оценка корреляций между активами помогает в построении диверсифицированных портфелей для снижения риска.
- Стратегии хеджирования: Выявление активов с высокой отрицательной корреляцией может быть использовано для разработки стратегий хеджирования.
- Анализ рыночных тенденций: Изучение корреляций между разными рынками и инструментами дает представление о глобальных экономических взаимосвязях.
Вычисление корреляции Пирсона
Для расчёта коэффициента корреляции Пирсона используется следующая формула:
[ r = \frac{n(\sum xy) - (\sum x)(\sum y)}{\sqrt{[n\sum x^2 - (\sum x)^2][n\sum y^2 - (\sum y)^2]}} ]
где:
- (n) — количество наблюдений,
- (x) и (y) — значения переменных,
- (\sum) — символ суммирования.
Реализация в скрипте
Скрипт для расчёта корреляции Пирсона должен включать следующие шаги:
- Сбор данных: Загрузка временных рядов для двух анализируемых переменных.
- Предварительная обработка: Выравнивание временных рядов по датам и удаление пропусков.
- Расчёт: Применение формулы корреляции Пирсона к обработанным данным.
- Анализ результатов: Интерпретация полученного коэффициента корреляции для принятия решений.
Расчёт корреляции Пирсона предоставляет важную информацию для анализа рынка и оптимизации инвестиционных стратегий, позволяя оценить степень взаимного влияния финансовых активов.
Код скрипта
namespace StockSharp.Algo.Analytics
{
using MathNet.Numerics.Statistics;
/// <summary>
/// The analytic script, calculating Pearson correlation by specified securities.
/// </summary>
public class PearsonCorrelationScript : IAnalyticsScript
{
Task IAnalyticsScript.Run(ILogReceiver logs, IAnalyticsPanel panel, SecurityId[] securities, DateTime from, DateTime to, IStorageRegistry storage, IMarketDataDrive drive, StorageFormats format, TimeSpan timeFrame, CancellationToken cancellationToken)
{
if (securities.Length == 0)
{
logs.AddWarningLog("No instruments.");
return Task.CompletedTask;
}
var closes = new List<double[]>();
foreach (var security in securities)
{
// stop calculation if user cancel script execution
if (cancellationToken.IsCancellationRequested)
break;
// get candle storage
var candleStorage = storage.GetTimeFrameCandleMessageStorage(security, timeFrame, drive, format);
// get closing prices
var prices = candleStorage.Load(from, to).Select(c => (double)c.ClosePrice).ToArray();
if (prices.Length == 0)
{
logs.AddWarningLog("No data for {0}", security);
return Task.CompletedTask;
}
closes.Add(prices);
}
// all array must be same length, so truncate longer
var min = closes.Select(arr => arr.Length).Min();
for (var i = 0; i < closes.Count; i++)
{
var arr = closes[i];
if (arr.Length > min)
closes[i] = arr.Take(min).ToArray();
}
// calculating correlation
var matrix = Correlation.PearsonMatrix(closes);
// displaing result into heatmap
var ids = securities.Select(s => s.ToStringId());
panel.DrawHeatmap(ids, ids, matrix.ToArray());
return Task.CompletedTask;
}
}
}