- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Text;
- namespace StatisticMath
- {
- /// <summary>
- /// Вспомогательный класс Statistic для Модели Блэка - Шоулза
- /// Автор Есаков Денис denis[:собачко:]yesakov.com
- /// http://www.yesakov.com/BlackScholes/
- /// </summary>
- public class Statistic
- {
- static Statistic()
- {
- }
- /// <summary>
- /// Вычисление математического ожидания (среднее значение числового ряда)
- /// </summary>
- /// <param name="dataRow">Числовая последовательность</param>
- /// <returns>Математическое ожмдание</returns>
- public static double Mean(ArrayList dataRow)
- {
- double sum = 0;
- for (int i = 0; i < dataRow.Count; i++)
- sum += (double)dataRow[i];
- return sum / dataRow.Count;
- }
- /// <summary>
- /// Вычисление дисперсии (отклонение от среднего значения числового ряда)(Deviation)
- /// </summary>
- /// <param name="dataRow">Числовая последовательность</param>
- /// <returns>Корень из дисперсии</returns>
- public static double Dev(ArrayList dataRow)
- {
- double meanDataRow = 0;
- double sum = 0;
- meanDataRow = Mean(dataRow);
- for (int i = 0; i < dataRow.Count; i++)
- sum += ((double)dataRow[i] - meanDataRow) * ((double)dataRow[i] - meanDataRow);
- return Math.Sqrt(sum / dataRow.Count);
- }
- /// <summary>
- /// Вычисление коварияцию между числовыми рядами (Covariance)
- /// </summary>
- /// <param name="dataRowX">Первая числовая последовательность</param>
- /// <param name="dataRowY">Вторая числовая последовательность</param>
- /// <returns>Ковариацию между рядами</returns>
- public static double Cov(ArrayList dataRowX, ArrayList dataRowY)
- {
- double meanDataRowX = 0;
- double meanDataRowY = 0;
- double sum = 0;
- meanDataRowX = Mean(dataRowX);
- meanDataRowY = Mean(dataRowY);
- //Если разной длины, то посчитаем наименьшой длины, но не совсем корректно
- for (int i = 0; i < ((dataRowX.Count - dataRowY.Count <= 0) ? dataRowX.Count : dataRowY.Count); i++)
- sum += ((double)dataRowX[i] - meanDataRowX) * ((double)dataRowY[i] - meanDataRowY);
- return sum / ((dataRowX.Count - dataRowY.Count <= 0) ? dataRowX.Count : dataRowY.Count);
- }
- /// <summary>
- /// Вычисление корреляцию между числовыми рядами (Correlation)
- /// </summary>
- /// <param name="dataRowX">Первая числовая последовательность</param>
- /// <param name="dataRowY">Вторая числовая последовательность</param>
- /// <returns>Корреляцию между рядами. Число из диапазона [-1;1]</returns>
- public static double Corr(ArrayList dataRowX, ArrayList dataRowY)
- {
- return Cov(dataRowX, dataRowY) / Math.Sqrt(Dev(dataRowX) * Dev(dataRowY));
- }
- /// <summary>
- /// Автокорреляция(Autocorrelation)
- /// </summary>
- /// <param name="dataRowX"></param>
- /// <param name="lag">Отставание или задержка с которой осуществляем поиск корреляции по числовому ряду</param>
- /// <returns></returns>
- public static double ACorr(ArrayList dataRowX, int lag)
- {
- double sumUp = 0;//Сумма числителя
- double sumDown = 0;//Сумма знаменателя
- double meanX = Mean(dataRowX);//Математическое ожидание ряда
- for (int i = lag; i < dataRowX.Count; i++)
- sumUp += ((double)dataRowX[i] - meanX) * ((double)dataRowX[i - lag] - meanX);
- for (int i = 0; i < dataRowX.Count; i++)
- sumDown += ((double)dataRowX[i] - meanX) * ((double)dataRowX[i] - meanX);
- return (sumUp/sumDown);
- }
- /// <summary>
- /// Нормальное распределение или распределение Гаусса
- /// </summary>
- /// <param name="x">непрерывная случайная величина</param>
- /// <param name="mean">Математическое ожидание</param>
- /// <param name="deviation">среднеквадратичное отклонение</param>
- /// <returns></returns>
- public static double NormalDistribution(double x, double mean, double deviation)
- {
- return Math.Exp(-(Math.Pow((x - mean) / deviation, 2) / 2)) / (deviation * Math.Sqrt(2 * Math.PI));
- }
- /// <summary>
- /// Функция нормального распределения
- /// </summary>
- /// <param name="X">величина от которой расчитывают распределение (d1 и d2)</param>
- /// <returns>вероятность того, что будет выигрых или будет исполнен</returns>
- public static double N(double X)
- {
- double L = 0;
- double K = 0;
- double W = 0;
- const double a1 = 0.31938153;
- const double a2 = -0.356563782;
- const double a3 = 1.781477937;
- const double a4 = -1.821255978;
- const double a5 = 1.330274429;
- L = Math.Abs(X);
- K = 1.0 / (1.0 + 0.2316419 * L);
- W = 1.0 - 1.0 / Math.Sqrt(2 * Math.PI) *
- Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K * K + a3 * Math.Pow(K, 3.0) + a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0));
- if (X < 0) W = 1.0 - W;
- return W;
- }
- }
- }
* This source code was highlighted with Source Code Highlighter.
Найти
Страницы
-
Свежачок
Тэги
Adsense asp.net Begun Black–Scholes Option Pricing Model C# charity Check Google PageRank dic.academic.ru donate faad lame mp3 обработка optionline.ru PageRank php qizmusicripper SQL Есаков Денис Скачать mp3 Скачать mp3 без регистрации Скачать mp3 бесплатно Скачать mp3 с moskva.fm Скачать с moskva.fm Словарь Яндекс Тиц Яндекс Тиц определение автор вакансии глоссарий греки интернет-магазин контекстная реклама модель Блэка-Шоулза мысли обращение к читателю опцион пожертвование проверка Google PageRank торговля на бирже торговый робот ценообразование опционаАрхивы
Интересные ссылки


