The Rust library finviz-rs
is a crate for fetching financial data and stock charts from Finviz website asynchronously.
The library offers access to various types of financial data, including:
- Stock charts: retrieve visually appealing and informative stock charts.
- Stock news: access the latest news and updates related to stocks.
- Stock fundamental data: retrieve comprehensive fundamental information about stocks.
- Screener: utilize a screener tool to filter and find stocks based on specific criteria.
- Insider information: get insights into insider trading activities and transactions.
- Forex performance: access information about the performance of various forex currency pairs.
- Crypto performance: retrieve data on the performance of different cryptocurrencies.
- Group: explore data related to stock groups or sectors.
- Retrieve multiple tables: retrieve all possible combinations of enum variants by iterator
- Output to a table: easily format and display the fetched data in a table format for convenient viewing and analysis.
- Output to
csv
file orjson
format: export the data tocsv
&json
, allowing for seamless integration with other tools and workflows. - Save stock chart image: capture and save stock chart images to local file system
cargo add finviz_rs
cargo run --example tickers
// output json to table
let fundament_info = Tickers::new("AAPL").scrape().await?;
println!("{}", from_dict_to_table(&fundament_info, 4).to_table(None, None));
ββββββββββββββββββ¬βββββββββββββ¬ββββββββββββββββ¬βββββββββββββββββββββ¬ββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββββ¬βββββββββββββββ
β 52W High β -2.03% β 52W Low β 38.98% β 52W Range β 124.17 - 176.15 β ATR β 2.97 β
ββββββββββββββββββΌβββββββββββββΌββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββ€
β Avg Volume β 59.16M β Beta β 1.29 β Book/sh β 3.94 β Cash/sh β 3.53 β
ββββββββββββββββββΌβββββββββββββΌββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββ€
β Change β -0.68% β Current Ratio β 0.90 β Debt/Eq β 1.76 β Dividend β 0.96 β
ββββββββββββββββββΌβββββββββββββΌββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββ€
β Dividend % β 0.56% β EPS (ttm) β 5.89 β EPS Q/Q β 0.00% β EPS next 5Y β 8.02% β
ββββββββββββββββββΌβββββββββββββΌββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββββΌβββββββββββββββ€
... skip below rows
To save the chart of a ticker
// save a ticker's chart image to a file
let tickers = Tickers::new("AAPL");
tickers.ticker_charts(TimeFrameType::Daily, ChartType::ADVANCED, ".")?;
cargo run --example news
let r = News::default()
.scrape().await?;
println!("{}", r.news.to_table(Some(News::default_header()), Some(5)));
βββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Time β Title β Source β Link β
βββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 10:36AM β Dip Buyers Scorched by Cratering Bank Stocks Ru... β www.bloomberg.com β https://www.bloomberg.com/news/articles/2023-05... β
βββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 10:00AM β Abortion Bans Can Help Make This Cheap, Accessi... β www.wsj.com β https://www.wsj.com/articles/abortion-bans-can-... β
βββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 09:00AM β RIP, Lumber-Futures Contract That Jumped During... β www.wsj.com β https://www.wsj.com/articles/rip-lumber-futures... β
βββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 08:09AM β Credit crunch targeting manufacturing as intere... β foxbusiness.com β https://foxbusiness.com/markets/credit-crunch-t... β
βββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 08:00AM β Who Would Want to Be a C.E.O.? β www.nytimes.com β https://www.nytimes.com/2023/05/14/business/dea... β
βββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββ
cargo run --example screener
println!("--- Performance ---");
let table_str = Screener::new(ScreenerType::Performance)
.set_signal(SignalType::TopLosers)
.set_order(OrderType::EPS)
.scrape().await?
.to_table(None, Some(2));
println!("{}", table_str);
println!("--- Financial ---");
let table_str= Screener::new(ScreenerType::Financial)
.set_signal(SignalType::NewHigh)
.set_order(OrderType::MarketCap)
.scrape().await?
.to_table(None, Some(3));
println!("{}", table_str);
--- Performance ---
ββββββββββ¬ββββββββββββ¬βββββββββββββ¬βββββββββββββ¬ββββββββββββ¬ββββββββββββ¬βββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬ββββββββ¬βββββββββββββ¬βββββββββββββ¬ββββββββ¬ββββββββββ¬ββββββββββ
β Ticker β Perf Week β Perf Month β Perf Quart β Perf Half β Perf Year β Perf YTD β Volatility W β Volatility M β Recom β Avg Volume β Rel Volume β Price β Change β Volume β
ββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌβββββββββββββββΌβββββββββββββββΌββββββββΌβββββββββββββΌβββββββββββββΌββββββββΌββββββββββΌββββββββββ€
β AYTU β 20.26% β -18.58% β -42.86% β -40.61% β -80.00% β -51.32% β 16.14% β 10.41% β 2.00 β 84.14K β 1.22 β 1.84 β -13.21% β 102,664 β
ββββββββββ΄ββββββββββββ΄βββββββββββββ΄βββββββββββββ΄ββββββββββββ΄ββββββββββββ΄βββββββββββ΄βββββββββββββββ΄βββββββββββββββ΄ββββββββ΄βββββββββββββ΄βββββββββββββ΄ββββββββ΄ββββββββββ΄ββββββββββ
--- Financial ---
ββββββββββ¬βββββββββββββ¬βββββββββββ¬ββββββββββ¬ββββββββββ¬ββββββββββ¬βββββββββ¬ββββββββββ¬ββββββββββββ¬ββββββββββ¬ββββββββββ¬ββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββ¬ββββββββββ¬ββββββββββββββ
β Ticker β β Dividend β ROA β ROE β ROI β Curr R β Quick R β LTDebt/Eq β Debt/Eq β Gross M β Oper M β Profit M β Earnings β Price β Change β Volume β
β β β β β β β β β β β β β β β β β β
β β Market Cap β β β β β β β β β β β β β β β β
ββββββββββΌβββββββββββββΌβββββββββββΌββββββββββΌββββββββββΌββββββββββΌβββββββββΌββββββββββΌββββββββββββΌββββββββββΌββββββββββΌββββββββββΌβββββββββββΌβββββββββββΌββββββββΌββββββββββΌββββββββββββββ€
β LPCN β 25.21M β - β 9.80% β 10.50% β -33.30% β 20.30 β 20.30 β 0.00 β 0.00 β - β - β - β Mar 10/b β 4.31 β -11.04% β 191,855 β
ββββββββββΌβββββββββββββΌβββββββββββΌββββββββββΌββββββββββΌββββββββββΌβββββββββΌββββββββββΌββββββββββββΌββββββββββΌββββββββββΌββββββββββΌβββββββββββΌβββββββββββΌββββββββΌββββββββββΌββββββββββββββ€
β GSIT β 40.52M β - β -21.40% β -25.10% β -25.30% β 6.50 β 5.60 β 0.00 β 0.00 β 59.90% β -45.20% β -45.50% β May 16/a β 5.09 β 210.37% β 104,612,024 β
ββββββββββ΄βββββββββββββ΄βββββββββββ΄ββββββββββ΄ββββββββββ΄ββββββββββ΄βββββββββ΄ββββββββββ΄ββββββββββββ΄ββββββββββ΄ββββββββββ΄ββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββ΄ββββββββββ΄ββββββββββββββ
cargo run --example screener
let table_str = Insider::default()
.scrape().await?
.to_table(Some(Insider::default_header()), Some(3));
println!("{}", table_str);
ββββββββββ¬ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββ¬βββββββββ¬ββββββββββββββ¬ββββββββ¬ββββββββββββ¬ββββββββββββ¬ββββββββββββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Ticker β Owner β Relationship β Date β Transaction β Cost β #Shares β Value ($) β #Shares Total β SEC Form 4 β SEC Form 4 Link β
ββββββββββΌββββββββββββββββββββββββΌββββββββββββββββββββββββββΌβββββββββΌββββββββββββββΌββββββββΌββββββββββββΌββββββββββββΌββββββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SKLZ β Paradise Andrew β Chief Executive Officer β May 12 β Buy β 0.52 β 1,342,656 β 698,181 β 10,299,303 β May 15 09:35 PM β http://www.sec.gov/Archives/edgar/data/1801661/... β
ββββββββββΌββββββββββββββββββββββββΌββββββββββββββββββββββββββΌβββββββββΌββββββββββββββΌββββββββΌββββββββββββΌββββββββββββΌββββββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SKLZ β Paradise Andrew β Chief Executive Officer β May 15 β Buy β 0.55 β 157,344 β 86,539 β 10,456,647 β May 15 09:35 PM β http://www.sec.gov/Archives/edgar/data/1801661/... β
ββββββββββΌββββββββββββββββββββββββΌββββββββββββββββββββββββββΌβββββββββΌββββββββββββββΌββββββββΌββββββββββββΌββββββββββββΌββββββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β LINC β Harbour Ronald Edward β Director β May 12 β Sale β 6.50 β 9,009 β 58,558 β 44,555 β May 15 09:30 PM β http://www.sec.gov/Archives/edgar/data/1286613/... β
ββββββββββ΄ββββββββββββββββββββββββ΄ββββββββββββββββββββββββββ΄βββββββββ΄ββββββββββββββ΄ββββββββ΄ββββββββββββ΄ββββββββββββ΄ββββββββββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββ
cargo run --example forex
let table_str = Forex::default()
.scrape().await?
.to_table(Some(Forex::default_header()), Some(3));
println!("{}", table_str);
ββββββββββ¬βββββββββ¬ββββββββββββ¬ββββββββββββ¬βββββββββββ¬ββββββββββββ¬βββββββββββββ¬βββββββββββββ¬ββββββββββββ¬ββββββββββββ¬βββββββββββ
β Ticker β Price β Perf 5Min β Perf Hour β Perf Day β Perf Week β Perf Month β Perf Quart β Perf Half β Perf Year β Perf YTD β
ββββββββββΌβββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββ€
β EURGBP β 0.8704 β 0.00% β 0.00% β 0.28% β -0.09% β -1.67% β -2.16% β -0.21% β 2.78% β -1.56% β
ββββββββββΌβββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββ€
β USDJPY β 136.30 β 0.00% β -0.02% β 0.14% β 0.41% β 1.92% β 1.76% β -2.28% β 5.56% β 3.96% β
ββββββββββΌβββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββ€
β USDCHF β 0.8960 β 0.00% β 0.01% β 0.04% β -0.25% β 0.27% β -3.17% β -5.07% β -10.56% β -3.05% β
ββββββββββ΄βββββββββ΄ββββββββββββ΄ββββββββββββ΄βββββββββββ΄ββββββββββββ΄βββββββββββββ΄βββββββββββββ΄ββββββββββββ΄ββββββββββββ΄βββββββββββ
cargo run --example crypto
let table_str = Crypto::default()
.scrape().await?
.to_table(Some(Crypto::default_header()), Some(3));
println!("{}", table_str);
ββββββββββ¬ββββββββββ¬ββββββββββββ¬ββββββββββββ¬βββββββββββ¬ββββββββββββ¬βββββββββββββ¬βββββββββββββ¬ββββββββββββ¬ββββββββββββ¬βββββββββββ
β Ticker β Price β Perf 5Min β Perf Hour β Perf Day β Perf Week β Perf Month β Perf Quart β Perf Half β Perf Year β Perf YTD β
ββββββββββΌββββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββ€
β LTCEUR β 82.5000 β -0.07% β -0.36% β 2.75% β 10.92% β -5.67% β -13.32% β 43.58% β 25.63% β 27.55% β
ββββββββββΌββββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββ€
β LTCBTC β 0.0033 β 0.00% β -0.30% β 2.71% β 10.15% β 4.38% β -19.80% β -5.83% β 46.85% β -21.23% β
ββββββββββΌββββββββββΌββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββΌβββββββββββββΌββββββββββββΌββββββββββββΌβββββββββββ€
β LTCUSD β 89.6300 β 0.11% β -0.11% β 2.63% β 10.98% β -6.69% β -12.05% β 50.97% β 31.38% β 29.49% β
ββββββββββ΄ββββββββββ΄ββββββββββββ΄ββββββββββββ΄βββββββββββ΄ββββββββββββ΄βββββββββββββ΄βββββββββββββ΄ββββββββββββ΄ββββββββββββ΄βββββββββββ
cargo run --example future
let table_str = Future::default()
.scrape().await?
.to_table(Some(Future::default_header()), Some(3));
println!("{}", table_str);
ββββββββββ¬βββββββββββββββ¬ββββββββββ¬ββββββββ
β ticker β label β group β perf β
ββββββββββΌβββββββββββββββΌββββββββββΌββββββββ€
β VX β VIX β INDICES β 12.13 β
ββββββββββΌβββββββββββββββΌββββββββββΌββββββββ€
β JO β Orange Juice β SOFTS β 1.61 β
ββββββββββΌβββββββββββββββΌββββββββββΌββββββββ€
β LH β Lean Hogs β MEATS β 1.25 β
ββββββββββ΄βββββββββββββββ΄ββββββββββ΄ββββββββ
cargo run --example future
let table_str = Group::new(GroupBy::Industry, GroupType::Valuation, OrderBy::PerformanceWeek, Ordering::Ascending)
.scrape().await?
.to_table(None, Some(5));
println!("{}", table_str);
ββββββββββββββββββββββββββ¬βββββββββββββ¬ββββββββ¬ββββββββββ¬βββββββ¬βββββββ¬βββββββ¬ββββββββ¬ββββββββ¬ββββββββββββββ¬ββββββββββββββ¬ββββββββββββββββ¬βββββββββ¬βββββββββ
β Name β Market Cap β P/E β Fwd P/E β PEG β P/S β P/B β P/C β P/FCF β EPS past 5Y β EPS next 5Y β Sales past 5Y β Change β Volume β
ββββββββββββββββββββββββββΌβββββββββββββΌββββββββΌββββββββββΌβββββββΌβββββββΌβββββββΌββββββββΌββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββΌβββββββββΌβββββββββ€
β Footwear & Accessories β 218.49B β 29.00 β 23.54 β 2.93 β 2.75 β 8.79 β 15.87 β 63.31 β 21.32% β 9.89% β 7.52% β -3.85% β 24.19M β
ββββββββββββββββββββββββββΌβββββββββββββΌββββββββΌββββββββββΌβββββββΌβββββββΌβββββββΌββββββββΌββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββΌβββββββββΌβββββββββ€
β Solar β 83.25B β 28.69 β 16.35 β 1.19 β 1.89 β 2.65 β 6.27 β 88.49 β 24.73% β 24.07% β 31.63% β -1.87% β 40.45M β
ββββββββββββββββββββββββββΌβββββββββββββΌββββββββΌββββββββββΌβββββββΌβββββββΌβββββββΌββββββββΌββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββΌβββββββββΌβββββββββ€
β Coking Coal β 7.46B β 2.33 β 5.72 β 0.36 β 0.61 β 1.32 β 5.17 β 3.31 β 36.66% β 6.53% β 14.94% β -1.48% β 1.14M β
ββββββββββββββββββββββββββΌβββββββββββββΌββββββββΌββββββββββΌβββββββΌβββββββΌβββββββΌββββββββΌββββββββΌββββββββββββββΌββββββββββββββΌββββββββββββββββΌβββββββββΌβββββββββ€
β Gold β 247.00B β 30.11 β 24.68 β 5.10 β 3.75 β 1.38 β 13.56 β 91.32 β 12.76% β 5.91% β 10.42% β 0.39% β 70.35M β
ββββββββββββββββββββββββββ΄βββββββββββββ΄ββββββββ΄ββββββββββ΄βββββββ΄βββββββ΄βββββββ΄ββββββββ΄ββββββββ΄ββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββ΄βββββββββ΄βββββββββ
cargo run --example output_csv
Screener::new(ScreenerType::Performance)
.scrape().await?
.to_csv_file("output.csv")?;
cargo run --example output_json
let json_data = Forex::default()
.scrape().await?
.into_iter()
.take(2)
.collect::<TableData>()
.to_json(Some(Forex::default_header()))?;
println!("{}", serde_json::to_string_pretty(&json_data)?);
Powered by the crate strum, we're able to iterate all enum types as following example:
cargo run --example iter_all_enum_variants
use strum::IntoEnumIterator;
// fetch all types of insider trading data by iterating the enum of InsiderType
for insider_type in InsiderType::iter() {
let table_str = Insider::new(insider_type)
.scrape().await?
.to_table(Some(Insider::default_header()), Some(3));
println!("{}", table_str);
}