Crate finalytics

Source
Expand description

§Finalytics

Welcome to finalytics, financial analytics in Rust!

finalytics is a Rust library designed for retrieving financial data and performing security analysis and portfolio optimization.

§Installation

Add the following to your Cargo.toml file:

[dependencies]
finalytics = "*"

Or run the following command:

cargo install finalytics

§Models

These are the main Interfaces for accessing the finalytics library methods

§KLINE - load historical price data from csv, json or dataframe
§Ticker - Retrieve and analyze ticker data
§Tickers - Retrieve and analyze multiple tickers
§Portfolio - Optimize a portfolio of tickers
§Screener - Screen for stocks, ETFs, indices, mutual funds, futures and cryptocurrencies

§Example

use finalytics::prelude::*;
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
        // Screen for the Top 20 Large-Cap NASDAQ Stocks
        let equity_screener = Screener::builder()
                 .quote_type(QuoteType::Equity)
                 .add_filter(ScreenerFilter::EqStr(
                     ScreenerMetric::Equity(EquityScreener::Exchange),
                     Exchange::NASDAQ.as_ref()
                 ))
                 .sort_by(
                     ScreenerMetric::Equity(EquityScreener::MarketCapIntraday),
                     true
                 )
                 .size(20)
                 .build()
                 .await?;

        equity_screener.overview().show()?;
        equity_screener.metrics().await?.show()?;

        // Instantiate a Multiple Ticker Object
        let ticker_symbols = equity_screener.symbols.iter()
            .map(|x| x.as_str()).collect::<Vec<&str>>();

        let tickers = Tickers::builder()
            .tickers(ticker_symbols.clone())
            .start_date("2023-01-01")
            .end_date("2024-12-31")
            .interval(Interval::OneDay)
            .benchmark_symbol("^GSPC")
            .confidence_level(0.95)
            .risk_free_rate(0.02)
            .build();

       // Generate a Single Ticker Report
        let symbol = ticker_symbols.first().unwrap();
        let ticker = tickers.clone().get_ticker(symbol).await?;
        ticker.report(Some(ReportType::Performance)).await?.show()?;
        ticker.report(Some(ReportType::Financials)).await?.show()?;
        ticker.report(Some(ReportType::Options)).await?.show()?;
        ticker.report(Some(ReportType::News)).await?.show()?;

        // Generate a Multiple Ticker Report
        tickers.report(Some(ReportType::Performance)).await?.show()?;

        // Perform a Portfolio Optimization
        let portfolio = tickers.optimize(Some(ObjectiveFunction::MaxSharpe), None).await?;

        // Generate a Portfolio Report
       portfolio.report(Some(ReportType::Performance)).await?.show()?;

        Ok(())
    }

Modules§

analytics
charts
data
models
prelude
reports
utils