Skip to main content

futu_mcp/tools/reference/
option_chain.rs

1use crate::tool_args::OptionChainReq;
2
3pub(super) fn option_chain_data_filter(
4    req: &OptionChainReq,
5) -> Option<futu_proto::qot_get_option_chain::DataFilter> {
6    let any_filter = req.delta_min.is_some()
7        || req.delta_max.is_some()
8        || req.iv_min.is_some()
9        || req.iv_max.is_some()
10        || req.oi_min.is_some()
11        || req.oi_max.is_some()
12        || req.gamma_min.is_some()
13        || req.gamma_max.is_some()
14        || req.vega_min.is_some()
15        || req.vega_max.is_some()
16        || req.theta_min.is_some()
17        || req.theta_max.is_some();
18    any_filter.then_some(futu_proto::qot_get_option_chain::DataFilter {
19        implied_volatility_min: req.iv_min,
20        implied_volatility_max: req.iv_max,
21        delta_min: req.delta_min,
22        delta_max: req.delta_max,
23        gamma_min: req.gamma_min,
24        gamma_max: req.gamma_max,
25        vega_min: req.vega_min,
26        vega_max: req.vega_max,
27        theta_min: req.theta_min,
28        theta_max: req.theta_max,
29        rho_min: None,
30        rho_max: None,
31        net_open_interest_min: None,
32        net_open_interest_max: None,
33        open_interest_min: req.oi_min,
34        open_interest_max: req.oi_max,
35        vol_min: None,
36        vol_max: None,
37    })
38}