Signature | Description | Parameters |
---|---|---|
#include <DataFrame/DataFrameFinancialVisitors.h> template<typename T, typename I = unsigned long> struct SharpeRatioVisitor; // ------------------------------------- template<typename T, typename I = unsigned long> using sharper_v = SharpeRatioVisitor<T, I>; |
This is a “single action visitor”, meaning it is passed the whole data vector in one call and you must use the single_act_visit() interface. This functor class calculates Sharpe ratio given two columns representing asset returns and benchmark returns (or risk-free rate). Note that Sharpe ratio makes sense only if asset returns are normally distributed. explicit SharpeRatioVisitor(bool biased = false); |
T: Column data type. I: Index type. |
#include <DataFrame/DataFrameFinancialVisitors.h> template<typename T, typename I = unsigned long> struct TreynorRatioVisitor; // ------------------------------------- template<typename T, typename I = unsigned long> using treynorr_v = TreynorRatioVisitor<T, I>; |
This is a “single action visitor”, meaning it is passed the whole data vector in one call and you must use the single_act_visit() interface. This functor class calculates Treynor ratio given two columns representing asset returns and benchmark returns The Treynor Ratio measures a portfolio’s excess return per unit of systematic risk, i.e. the market volatility of the portfolio. Often referred to as the “reward-to-volatility ratio”, the Treynor ratio attempts to gauge the risk attributable to a portfolio (and the expected returns) in the context of the total non-diversifiable risk inherent to the market. explicit TreynorRatioVisitor(bool biased = false); |
T: Column data type. I: Index type. |
static void test_SharpeRatioVisitor() { std::cout << "\nTesting SharpeRatioVisitor{ } ..." << std::endl; std::vector<unsigned long> idx = { 123450, 123451, 123452, 123453, 123454, 123455, 123456, 123457, 123458, 123459, 123460, 123461, 123462, 123466, 123467, 123468, 123469, 123470, 123471, 123472, 123473 }; std::vector<double> d1 = { 2.5, 2.45, -0.65, -0.1, -1.1, 1.87, 0.98, 0.34, 1.56, -0.34, 2.3, -0.34, -1.9, 0.387, 0.123, 1.06, -0.65, 2.03, 0.4, -1.0, 0.59 }; std::vector<double> d2 = { 0.2, 0.58, -0.60, -0.08, 0.05, 0.87, 0.2, 0.4, 0.5, 0.06, 0.3, -0.34, -0.9, 0.8, -0.4, 0.86, 0.01, 1.02, -0.02, -1.5, 0.2 }; std::vector<int> i1 = { 22, 23, 24, 25, 99 }; MyDataFrame df; df.load_data(std::move(idx), std::make_pair("asset", d1), std::make_pair("benchmark", d2), std::make_pair("col_3", i1)); SharpeRatioVisitor<double> sh_ratio; const auto result = df.single_act_visit<double, double>("asset", "benchmark", sh_ratio).get_result(); assert(fabs(result - 0.425631) < 0.00001); } // ----------------------------------------------------------------------------- static void test_TreynorRatioVisitor() { std::cout << "\nTesting TreynorRatioVisitor{ } ..." << std::endl; std::vector<unsigned long> idx = { 123450, 123451, 123452, 123453, 123454, 123455, 123456, 123457, 123458, 123459, 123460, 123461, 123462, 123466, 123467, 123468, 123469, 123470, 123471, 123472, 123473 }; std::vector<double> d1 = { 2.5, 2.45, -0.65, -0.1, -1.1, 1.87, 0.98, 0.34, 1.56, -0.34, 2.3, -0.34, -1.9, 0.387, 0.123, 1.06, -0.65, 2.03, 0.4, -1.0, 0.59 }; std::vector<double> d2 = { 0.2, 0.58, -0.60, -0.08, 0.05, 0.87, 0.2, 0.4, 0.5, 0.06, 0.3, -0.34, -0.9, 0.8, -0.4, 0.86, 0.01, 1.02, -0.02, -1.5, 0.2 }; std::vector<int> i1 = { 22, 23, 24, 25, 99 }; MyDataFrame df; df.load_data(std::move(idx), std::make_pair("asset", d1), std::make_pair("benchmark", d2), std::make_pair("col_3", i1)); treynorr_v<double> ty_ratio; const auto result = df.single_act_visit<double, double>("asset", "benchmark", ty_ratio, true).get_result(); assert(fabs(result - 0.26761) < 0.00001); }