diff --git a/Include/MyIncludes/MathStatistics_Calculator.mqh b/Include/MyIncludes/MathStatistics_Calculator.mqh new file mode 100644 index 0000000..2574961 --- /dev/null +++ b/Include/MyIncludes/MathStatistics_Calculator.mqh @@ -0,0 +1,91 @@ +//+------------------------------------------------------------------+ +//| MathStatistics_Calculator.mqh | +//| Engine for Financial Statistics (Beta, Alpha, Correlation). | +//| Copyright 2026, xxxxxxxx | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2026, xxxxxxxx" + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +class CMathStatisticsCalculator + { +public: + CMathStatisticsCalculator() {}; + ~CMathStatisticsCalculator() {}; + + //--- Calculate Beta (Sensitivity to Benchmark) + // Beta = Covariance(Asset, Bench) / Variance(Bench) + double CalculateBeta(const double &asset_returns[], const double &bench_returns[]) + { + int n = MathMin(ArraySize(asset_returns), ArraySize(bench_returns)); + if(n < 2) + return 0.0; // Need at least 2 points + + double mean_asset = Mean(asset_returns, n); + double mean_bench = Mean(bench_returns, n); + + double cov = Covariance(asset_returns, mean_asset, bench_returns, mean_bench, n); + double var = Variance(bench_returns, mean_bench, n); + + if(var == 0.0) + return 0.0; + return cov / var; + } + + //--- Calculate Alpha (Excess Return) + // Alpha = AssetReturn - (Beta * BenchReturn) + // Usually calculated over a period based on cumulative return or average return + // Here we calculate Period Alpha (Total Return logic) + double CalculateAlpha(double asset_total_return, double bench_total_return, double beta) + { + return asset_total_return - (beta * bench_total_return); + } + + //--- Helpers + double Mean(const double &arr[], int n) + { + double sum = 0; + for(int i=0; i