futu_mcp/tools/reference/
option_chain.rs1use 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}