#[derive(Clone, Copy, Debug)]
pub enum OptimizerMethod {
Markowitz,
MeanCVaR,
InverseVol,
RiskParity,
HRP,
BlackLitterman,
}
impl std::str::FromStr for OptimizerMethod {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s.to_lowercase().as_str() {
"cvar" | "mean-cvar" | "meancvar" => Self::MeanCVaR,
"inv-vol" | "inverse-vol" | "invvol" => Self::InverseVol,
"risk-parity" | "riskparity" => Self::RiskParity,
"hrp" => Self::HRP,
"bl" | "black-litterman" | "blacklitterman" => Self::BlackLitterman,
_ => Self::Markowitz,
})
}
}
#[derive(Clone, Debug, Default)]
pub struct PortfolioResult {
pub weights: Vec<f64>,
pub expected_return: f64,
pub volatility: f64,
pub sharpe: f64,
}
pub(crate) fn empty_result() -> PortfolioResult {
PortfolioResult::default()
}