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(())
}