Rust金融投资库investments的使用,高效管理投资组合与资产分析的Rust插件库

Rust金融投资库investments的使用,高效管理投资组合与资产分析的Rust插件库

Investments是一个帮助管理投资的Rust库,主要功能包括:

Test status

主要功能

  • 分析:通过将投资组合表现与银行美元和卢布存款表现进行比较,计算现金投资的平均回报率。在计算投资组合表现时考虑税收、佣金、股息、税收减免和可选通胀
  • 回测:根据配置的基准对投资组合进行回测
  • 投资组合再平衡:指导提交哪些订单以使投资组合与资产配置保持一致
  • 股票卖出模拟:计算收入、利润、税收和考虑税收后的实际利润百分比
  • 自动生成税务报表:读取经纪商报表并修改*.dcX文件(俄罗斯税务程序Декларация创建),添加有关股票销售收入、已付股息和闲置现金利息的所有必需信息
  • 银行存款控制:在一个地方查看所有已开户的银行存款,并获取即将到期存款的通知
  • 指标:以Prometheus格式导出分析结果

安装

cargo install investments

或作为库添加到项目中:

investments = "7.9.1"

配置

创建~/.investments/config.yaml配置文件。需要获取FCS API和Finnhub的API令牌。

使用示例

性能分析

investments analyse

investments analyse

回测

investments backtest

investments backtest

投资组合再平衡

investments rebalance

investments rebalance

卖出模拟

investments simulate-sell

investments simulate-sell

存款管理

investments deposits

完整示例代码

use investments::portfolio::Portfolio;
use investments::analysis::Analyzer;
use investments::brokers::BrokerStatement;
use investments::types::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 加载配置文件
    let config = investments::config::load()?;
    
    // 解析经纪商报表
    let statements = BrokerStatement::parse("path/to/statement.csv")?;
    
    // 创建投资组合
    let mut portfolio = Portfolio::new();
    
    // 处理所有报表
    for statement in statements {
        portfolio.process_statement(&statement)?;
    }
    
    // 分析投资组合
    let analyzer = Analyzer::new(&config);
    let result = analyzer.analyze(&portfolio)?;
    
    // 打印分析结果
    println!("{:#?}", result);
    
    Ok(())
}

不支持的功能

目前不支持债券、保证金交易、期货和期权。

免责声明

该工具主要为个人使用开发,计算结果仅供参考,请务必自行验证结果准确性。


1 回复

Rust金融投资库investments的使用指南

介绍

investments是一个用于金融投资组合管理和资产分析的Rust库,它提供了高效的工具来处理投资数据、计算关键指标和执行投资组合分析。这个库特别适合需要高性能金融计算的Rust开发者,可以用于构建投资分析工具、自动化交易系统或金融研究平台。

主要功能

  • 投资组合构建与管理
  • 资产回报率计算
  • 风险指标分析(波动率、VaR等)
  • 投资组合优化
  • 资产相关性分析
  • 绩效评估指标计算

安装

在Cargo.toml中添加依赖:

[dependencies]
investments = "0.3.0"  # 请检查最新版本号

基本使用方法

1. 创建投资组合

use investments::portfolio::{Portfolio, Asset};

fn main() {
    // 创建资产
    let asset1 = Asset::new("AAPL", 100.0, 150.0); // 名称, 持有数量, 当前价格
    let asset2 = Asset::new("MSFT", 50.0, 200.0);
    
    // 创建投资组合
    let mut portfolio = Portfolio::new("My Portfolio");
    portfolio.add_asset(asset1);
    portfolio.add_asset(asset2);
    
    println!("Portfolio value: ${:.2}", portfolio.value());
}

2. 计算回报率

use investments::returns::{daily_returns, annualized_return};

fn main() {
    // 假设这是某资产连续5天的价格
    let prices = vec![100.0, 102.0, 101.5, 103.2, 105.0];
    
    // 计算每日回报率
    let returns = daily_returns(&prices);
    println!("Daily returns: {:?}", returns);
    
    // 计算年化回报率
    let ann_return = annualized_return(&returns, 252); // 252个交易日
    println!("Annualized return: {:.2}%", ann_return * 100.0);
}

3. 风险分析

use investments::risk::{volatility, value_at_risk};

fn main() {
    let returns = vec![0.01, -0.02, 0.015, -0.01, 0.02, -0.005];
    
    // 计算波动率(标准差)
    let vol = volatility(&returns);
    println!("Volatility: {:.4}", vol);
    
    // 计算95% VaR
    let var = value_at_risk(&returns, 0.95);
    println!("95% VaR: {:.2%}", var);
}

4. 投资组合优化

use investments::optimization::{mean_variance_optimization};
use investments::statistics::expected_returns;

fn main() {
    // 假设有3种资产的历史回报数据
    let asset_returns = vec![
        vec![0.01, 0.02, -0.01, 0.015], // 资产1
        vec![0.005, 0.01, 0.008, 0.012], // 资产2
        vec![-0.01, 0.03, 0.02, -0.005], // 资产3
    ];
    
    // 计算预期回报
    let exp_returns = expected_returns(&asset_returns);
    
    // 均值-方差优化
    let result = mean_variance_optimization(
        &asset_returns, 
        &exp_returns, 
        0.02, // 目标回报率
        None  // 无权重约束
    );
    
    println!("Optimal weights: {:?}", result.weights);
    println!("Portfolio volatility: {:.4}", result.volatility);
}

高级功能

资产相关性分析

use investments::statistics::correlation_matrix;

fn main() {
    let asset_returns = vec![
        vec![0.01, 0.02, -0.01, 0.015],
        vec![0.005, 0.01, 0.008, 0.012],
        vec![-0.01, 0.03, 0.02, -0.005],
    ];
    
    let corr_matrix = correlation_matrix(&asset_returns);
    println!("Correlation matrix:\n{:?}", corr_matrix);
}

绩效评估指标

use investments::performance::{sharpe_ratio, sortino_ratio};

fn main() {
    let portfolio_returns = vec![0.01, -0.02, 0.015, -0.01, 0.02];
    let risk_free_rate = 0.005;
    
    let sharpe = sharpe_ratio(&portfolio_returns, risk_free_rate);
    let sortino = sortino_ratio(&portfolio_returns, risk_free_rate);
    
    println!("Sharpe ratio: {:.2}", sharpe);
    println!("Sortino ratio: {:.2}", sortino);
}

完整示例Demo

下面是一个综合使用investments库的完整示例:

use investments::{
    portfolio::{Portfolio, Asset},
    returns::{daily_returns, annualized_return},
    risk::{volatility, value_at_risk},
    statistics::{correlation_matrix, expected_returns},
    performance::{sharpe_ratio, sortino_ratio},
    optimization::mean_variance_optimization
};

fn main() {
    // 1. 创建投资组合
    let mut portfolio = Portfolio::new("My Investment Portfolio");
    portfolio.add_asset(Asset::new("AAPL", 100.0, 150.0));
    portfolio.add_asset(Asset::new("GOOGL", 30.0, 2500.0));
    portfolio.add_asset(Asset::new("TSLA", 50.0, 700.0));
    
    println!("Portfolio value: ${:.2}", portfolio.value());
    
    // 2. 计算回报率
    let aapl_prices = vec![145.0, 146.2, 148.5, 147.8, 150.2, 152.5];
    let returns = daily_returns(&aapl_prices);
    let ann_return = annualized_return(&returns, 252);
    println!("AAPL annualized return: {:.2}%", ann_return * 100.0);
    
    // 3. 风险分析
    let portfolio_returns = vec![0.02, -0.01, 0.015, -0.005, 0.03, -0.02];
    println!("Portfolio volatility: {:.4}", volatility(&portfolio_returns));
    println!("95% VaR: {:.2}%", value_at_risk(&portfolio_returns, 0.95) * 100.0);
    
    // 4. 资产相关性分析
    let asset_returns = vec![
        vec![0.01, 0.02, -0.01, 0.015],  // AAPL
        vec![0.005, 0.01, 0.008, 0.012], // GOOGL
        vec![-0.01, 0.03, 0.02, -0.005]  // TSLA
    ];
    println!("Correlation matrix:\n{:?}", correlation_matrix(&asset_returns));
    
    // 5. 投资组合优化
    let exp_returns = expected_returns(&asset_returns);
    let result = mean_variance_optimization(
        &asset_returns,
        &exp_returns,
        0.015, // 目标回报率1.5%
        None
    );
    println!("Optimized weights: {:?}", result.weights);
    
    // 6. 绩效评估
    let risk_free = 0.003;
    println!("Sharpe ratio: {:.2}", sharpe_ratio(&portfolio_returns, risk_free));
    println!("Sortino ratio: {:.2}", sortino_ratio(&portfolio_returns, risk_free));
}

注意事项

  1. 金融计算通常需要高精度,确保使用适当的数据类型
  2. 实际应用中应考虑数据的完整性和质量
  3. 投资决策不应仅基于这些计算结果,需综合考虑多方面因素
  4. 对于大型数据集,考虑使用并行计算提高性能

这个库提供了构建金融分析工具的基础组件,你可以根据需要扩展功能或将其集成到更大的系统中。

回到顶部