Skip to content
/ cutup Public

A Rust library for portfolio allocation strategies, providing implementations for a variety of algorithms.

License

Notifications You must be signed in to change notification settings

thinkjrs/cutup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cutup: A Rust Portfolio Allocation Library

Crates.io Build Status codecov Docs.rs License

Cutup is a Rust library for portfolio allocation strategies, providing implementations for various allocation methods.

It's designed to be efficient and easy to use.

Here are some of the allocation methods included in this library:

  • 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.4"

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.

About

A Rust library for portfolio allocation strategies, providing implementations for a variety of algorithms.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages