1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/*
Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
This file is part of QuantLib, a free-software/open-source library
for financial quantitative analysts and developers - http://quantlib.org/
QuantLib is free software: you can redistribute it and/or modify it
under the terms of the QuantLib license. You should have received a
copy of the license along with this program; if not, please email
<quantlib-dev@lists.sf.net>. The license is also available online at
<https://www.quantlib.org/license.shtml>.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the license for more details.
*/
#ifndef quantlib_statistics_i
#define quantlib_statistics_i
%include types.i
%include linearalgebra.i
%include vectors.i
%include stl.i
%{
using QuantLib::Statistics;
using QuantLib::IncrementalStatistics;
using QuantLib::RiskStatistics;
using QuantLib::GenericSequenceStatistics;
%}
class Statistics {
public:
Size samples() const;
Real weightSum() const;
Real mean() const;
Real variance() const;
Real standardDeviation() const;
Real errorEstimate() const;
Real skewness() const;
Real kurtosis() const;
Real min() const;
Real max() const;
// Modifiers
void reset();
void add(Real value, Real weight = 1.0);
%extend {
void add(const std::vector<Real>& values) {
self->addSequence(values.begin(), values.end());
}
void add(const std::vector<Real>& values,
const std::vector<Real>& weights) {
self->addSequence(values.begin(), values.end(), weights.begin());
}
}
};
class IncrementalStatistics {
public:
Size samples() const;
Real weightSum() const;
Real mean() const;
Real variance() const;
Real standardDeviation() const;
Real errorEstimate() const;
Real skewness() const;
Real kurtosis() const;
Real min() const;
Real max() const;
// Modifiers
void reset();
void add(Real value, Real weight = 1.0);
%extend {
void add(const std::vector<Real>& values) {
self->addSequence(values.begin(), values.end());
}
void add(const std::vector<Real>& values,
const std::vector<Real>& weights) {
self->addSequence(values.begin(), values.end(), weights.begin());
}
}
};
class RiskStatistics : public Statistics {
public:
Real semiVariance() const;
Real semiDeviation() const;
Real downsideVariance() const;
Real downsideDeviation() const;
Real regret(Real target) const;
Real potentialUpside(Real percentile) const;
Real valueAtRisk(Real percentile) const;
Real expectedShortfall(Real percentile) const;
Real shortfall(Real target) const;
Real averageShortfall(Real target) const;
};
template <class S>
class GenericSequenceStatistics {
public:
GenericSequenceStatistics(Size dimension);
Size size() const;
Size samples() const;
Real weightSum() const;
std::vector<Real> mean() const;
std::vector<Real> variance() const;
std::vector<Real> standardDeviation() const;
std::vector<Real> errorEstimate() const;
std::vector<Real> skewness() const;
std::vector<Real> kurtosis() const;
std::vector<Real> min() const;
std::vector<Real> max() const;
Matrix covariance() const;
Matrix correlation() const;
// Modifiers
void reset();
void add(const std::vector<Real>& value, Real weight = 1.0);
void add(const Array& value, Real weight = 1.0);
};
%template(MultipleStatistics) GenericSequenceStatistics<Statistics>;
%template(SequenceStatistics) GenericSequenceStatistics<RiskStatistics>;
%template(MultipleIncrementalStatistics)
GenericSequenceStatistics<IncrementalStatistics>;
#endif
|