candlestick/
candlestick.rs

1use plotlars::{Axis, CandlestickPlot, Direction, Plot, Rgb};
2use polars::prelude::*;
3
4fn main() {
5    // Create sample candlestick data
6    let dates = vec![
7        "2024-01-01",
8        "2024-01-02",
9        "2024-01-03",
10        "2024-01-04",
11        "2024-01-05",
12        "2024-01-08",
13        "2024-01-09",
14        "2024-01-10",
15        "2024-01-11",
16        "2024-01-12",
17        "2024-01-15",
18        "2024-01-16",
19        "2024-01-17",
20        "2024-01-18",
21        "2024-01-19",
22        "2024-01-22",
23        "2024-01-23",
24        "2024-01-24",
25        "2024-01-25",
26        "2024-01-26",
27    ];
28
29    let open_prices = vec![
30        100.0, 102.5, 101.0, 103.5, 105.0, 104.5, 106.0, 105.5, 107.0, 108.5, 108.0, 110.0, 109.5,
31        111.0, 112.5, 112.0, 113.5, 113.0, 114.5, 115.0,
32    ];
33
34    let high_prices = vec![
35        103.0, 104.0, 103.5, 106.0, 107.5, 107.0, 108.5, 108.0, 109.5, 111.0, 110.5, 112.5, 112.0,
36        113.5, 115.0, 114.5, 116.0, 115.5, 117.0, 117.5,
37    ];
38
39    let low_prices = vec![
40        99.0, 101.5, 100.0, 102.5, 104.0, 103.5, 105.0, 104.5, 106.0, 107.5, 107.0, 109.0, 108.5,
41        110.0, 111.5, 111.0, 112.5, 112.0, 113.5, 114.0,
42    ];
43
44    let close_prices = vec![
45        102.5, 101.0, 103.5, 105.0, 104.5, 106.0, 105.5, 107.0, 108.5, 108.0, 110.0, 109.5, 111.0,
46        112.5, 112.0, 113.5, 113.0, 114.5, 115.0, 116.5,
47    ];
48
49    let stock_data = df! {
50        "date" => dates,
51        "open" => open_prices,
52        "high" => high_prices,
53        "low" => low_prices,
54        "close" => close_prices,
55    }
56    .unwrap();
57
58    // Candlestick chart with whisker width customization
59    let increasing = Direction::new()
60        .line_color(Rgb(0, 200, 100)) // Green
61        .line_width(0.5);
62
63    let decreasing = Direction::new()
64        .line_color(Rgb(200, 50, 50)) // Red
65        .line_width(0.5);
66
67    CandlestickPlot::builder()
68        .data(&stock_data)
69        .dates("date")
70        .open("open")
71        .high("high")
72        .low("low")
73        .close("close")
74        .increasing(&increasing)
75        .decreasing(&decreasing)
76        .whisker_width(0.1) // Thin whiskers
77        .plot_title("Stock Price - Thin Whiskers")
78        .y_title("Price ($)")
79        .y_axis(&Axis::new().show_axis(true).show_grid(true))
80        .build()
81        .plot();
82}