#portfolio #allocation #resources #distribution #quant

bin+lib cutup

A flexible and efficient allocation library for Rust, capable of distributing assets, resources, and other divisible entities

2 releases

0.1.1 Feb 9, 2025
0.1.0 Feb 9, 2025

#352 in Math

Download history 185/week @ 2025-02-04 34/week @ 2025-02-11

219 downloads per month

MIT license

14KB
222 lines

Cutup: A Rust Portfolio Allocation Library

Cutup is a Rust library for portfolio allocation strategies, providing implementations for:

  • Mean-Variance Optimization (MVO)
  • Equal Weight Allocation (EW)
  • Hierarchical Risk Parity (HRP)

This library leverages nalgebra for efficient matrix operations and is designed for performance and extensibility.

Features

  • MVO Allocation: Computes portfolio weights using mean-variance optimization with covariance matrix regularization.
  • EW Allocation: Assigns equal weights to all assets.
  • HRP Allocation: Uses hierarchical clustering and recursive bisection for risk-based allocation.
  • Fully Unit-Tested: Includes test cases for correctness verification.

Installation

Add cutup to your Cargo.toml:

[dependencies]
cutup = "0.1.0"

Usage

use nalgebra::DMatrix;
use cutup::PortfolioAllocator;

fn main() {
    let prices = DMatrix::from_row_slice(
        4,
        4,
        &[
            125.0, 1500.0, 210.0, 600.0,
            123.0, 1520.0, 215.0, 620.0,
            130.0, 1510.0, 220.0, 610.0,
            128.0, 1530.0, 225.0, 630.0,
        ],
    );

    let allocator = PortfolioAllocator::new(prices);

    let mvo_weights = allocator.mvo_allocation();
    let ew_weights = allocator.ew_allocation();
    let hrp_weights = allocator.hrp_allocation();

    println!("MVO Weights: {:?}", mvo_weights);
    println!("EW Weights: {:?}", ew_weights);
    println!("HRP Weights: {:?}", hrp_weights);

    // or do it all in one go

    let weights = run_portfolio_allocation(prices);
    println!("Portfolio Weights: {:?}", weights);
}

License

This project is licensed under the MIT License.

Dependencies

~3MB
~64K SLoC