1use serde::{Deserialize, Serialize};
2use crate::core::curves::CurveInput;
3use crate::core::vols::VolInput;
4
5#[derive(Clone, Debug, Deserialize, Serialize)]
6#[serde(tag = "product_type", rename_all = "snake_case")]
7pub enum ProductData {
8 Option(EquityOptionData),
9 Future(EquityFutureData),
10 Forward(EquityForwardData),
11 RainbowOption(crate::equity::rainbow::RainbowOptionData),
12}
13
14#[derive(Clone, Debug, Deserialize, Serialize)]
15pub struct EquityInstrumentBase {
16 pub symbol: String,
17 pub currency: Option<String>,
18 pub exchange: Option<String>,
19 pub name: Option<String>,
20 pub cusip: Option<String>,
21 pub isin: Option<String>,
22 pub underlying_price: f64,
23 pub long_short: Option<i32>,
24 pub risk_free_rate: Option<f64>,
25 pub borrow_cost: Option<f64>,
28 pub settlement_type: Option<String>,
29}
30
31#[derive(Clone, Debug, Deserialize, Serialize)]
33pub struct CashDividendData {
34 pub date: String,
35 pub amount: f64,
36}
37
38
39#[derive(Clone, Debug, Deserialize, Serialize)]
40pub struct EquityFutureData {
41 #[serde(flatten)]
42 pub base: EquityInstrumentBase,
43 pub current_price: Option<f64>,
44 pub multiplier:Option<f64>,
45 pub entry_price:Option<f64>,
46 pub maturity: String,
47 pub dividend: Option<f64>,
48
49}
50#[derive(Clone, Debug, Deserialize, Serialize)]
51pub struct EquityForwardData {
52 #[serde(flatten)]
53 pub base: EquityInstrumentBase,
54 pub current_price: Option<f64>,
55 pub notional: Option<f64>,
56 pub entry_price:Option<f64>,
57 pub maturity: String,
58 pub dividend: Option<f64>,
59
60}
61
62#[derive(Clone, Debug, Deserialize, Serialize)]
63pub struct EquityOptionData {
64 #[serde(flatten)]
65 pub base: EquityInstrumentBase,
66 pub put_or_call: String, pub payoff_type: String, pub binary_type: Option<String>,
70 pub cash_amount: Option<f64>,
72 pub barrier_type: Option<String>,
74 pub barrier_level: Option<f64>,
75 pub averaging_type: Option<String>,
77 pub asian_strike_type: Option<String>,
79 pub forward_start_date: Option<String>,
82 pub strike_fraction: Option<f64>,
83 pub autocall_barrier: Option<f64>,
86 pub protection_barrier: Option<f64>,
87 pub autocall_coupon: Option<f64>,
88 pub autocall_observations: Option<usize>,
89 pub notional: Option<f64>,
90 pub cash_dividends: Option<Vec<CashDividendData>>,
92 pub futures_settlement: Option<String>,
96 pub strike_price: Option<f64>,
99 pub volatility: Option<f64>,
101 pub maturity: String,
102 pub dividend: Option<f64>,
103 pub current_price: Option<f64>,
104 pub multiplier:Option<f64>,
105 pub entry_price:Option<f64>,
106 pub simulation: Option<u64>,
108 pub mc_time_steps: Option<usize>,
110 pub mc_scheme: Option<String>,
112 pub mc_sampler: Option<String>,
114 pub mc_seed: Option<u64>,
115 pub mc_model: Option<String>,
119 pub fd_spot_steps: Option<usize>,
121 pub fd_time_steps: Option<usize>,
123 pub heston: Option<crate::equity::heston::HestonParams>,
125 pub exercise_style: Option<String>, pub pricer:Option<String>,
127 pub discount_curve: Option<CurveInput>,
130 pub vol_surface: Option<VolInput>,
133}
134