DBA Data[Home] [Help]

PACKAGE: APPS.QRM_FX_FORMULAS

Source


1 PACKAGE QRM_FX_FORMULAS AUTHID CURRENT_USER AS
2 /* $Header: qrmfxfls.pls 115.15 2003/11/22 00:36:21 prafiuly ship $ */
3 
4 --bug 3236479
5 g_debug_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6 g_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
7 
8 -- added fhu 3/36/02
9 TYPE GK_OPTION_SENS_IN_REC_TYPE IS RECORD (
10 			p_SPOT_DATE date,
11 			p_MATURITY_DATE date,
12 			p_CCY_FOR VARCHAR2(15),
13 			p_CCY_DOM VARCHAR2(15),
14 			p_RATE_DOM NUMBER,
15 			p_RATE_TYPE_DOM varchar2(1) DEFAULT 'S',
16 			p_COMPOUND_FREQ_DOM NUMBER,
17 			p_DAY_COUNT_BASIS_DOM varchar2(15),
18 			p_RATE_FOR NUMBER,
19 			p_RATE_TYPE_FOR varchar2(1) DEFAULT 'S',
20 			p_COMPOUND_FREQ_FOR NUMBER,
21 			p_DAY_COUNT_BASIS_FOR varchar2(15),
22 			p_SPOT_RATE NUMBER,
23 			p_STRIKE_RATE NUMBER,
24 			p_VOLATILITY NUMBER);
25 
26 TYPE GK_OPTION_SENS_OUT_REC_TYPE IS RECORD (
27 			p_DELTA_CALL	NUMBER,
28 			p_DELTA_PUT	NUMBER,
29 			p_THETA_CALL	NUMBER,
30 			p_THETA_PUT	NUMBER,
31 			p_RHO_CALL	NUMBER,
32 			p_RHO_PUT	NUMBER,
33 			p_RHO_F_CALL	NUMBER,
34 			p_RHO_F_PUT	NUMBER,
35 			p_GAMMA		NUMBER,
36 			p_VEGA		NUMBER);
37 
38 
39 /*-------------------------------------------------------------
40 FX_GK_OPTION_SENS_CV
41 Cover procedure to calculate the sensitivity of a currency option
42 using Garman-Kohlhagen formula, which is the extension of
43 Black-Scholes formula.
44 
45 IMPORTANT: it is better to supply a Simple 30/360 (from GET_MD_FROM_SET)
46 interest rates for this procedure in order to avoid redundant conversions.
47 
48 IMPORTANT: this procedure is only accurate up to six decimal places due
49 to CUMULATIVE_NORM_DISTRIBUTION procedure it calls.
50 
51 GK_OPTION_SENS_IN_REC_TYPE:
52 			p_SPOT_DATE
53 			p_MATURITY_DATE
54 			p_CCY_FOR
55 			p_CCY_DOM
56 			p_RATE_DOM
57 			p_RATE_TYPE_DOM
58 			p_COMPOUND_FREQ_DOM
59 			p_DAY_COUNT_BASIS_DOM
60 			p_RATE_FOR
61 			p_RATE_TYPE_FOR
62 			p_COMPOUND_FREQ
63 			p_DAY_COUNT_BASIS_FOR
64 			p_SPOT_RATE
65 			p_STRIKE_RATE
66 			p_VOLATILITY
67 
68 GK_OPTION_SENS_OUT_REC_TYPE:
69 			p_DELTA_CALL
70 			p_DELTA_PUT
71 			p_THETA_CALL
72 			p_THETA_PUT
73 			p_RHO_CALL
74 			p_RHO_PUT
75 			p_RHO_F_CALL
76 			p_RHO_F_PUT
77 			p_GAMMA
78 			p_VEGA
79 
80 
81 Formula:
82 Calls FX_GK_OPTION_SENS
83 
84 p_SPOT_DATE = the spot date where the option value is evaluated
85 p_MATURITY_DATE = the maturity date where the option expires
86 p_CCY_DOM = domestic currency
87 p_CCY_FOR = foreign currency
88 p_RATE_DOM = domestic risk free interest rate.
89 p_RATE_TYPE_DOM/FOR = the p_RF_RATE_DOM/FOR rate's type. 'S' for Simple
90  Rate. 'C' for Continuous Rate, and 'P' for Compounding Rate.
91 Default value = 'S' (Simple IR)
92 p_DAY_COUNT_BASIS_DOM/FOR = day count basis for p_RF_RATE_DOM/FOR.
93 p_RATE_FOR = foreign risk free interest rate.
94 p_SPOT_RATE = the current market exchange rate = the value of one unit
95 of the foreign currency measured in the domestic currency.
96 p_STRIKE_RATE = the strike price agreed in the option.
97 p_VOLATILITY = volatility
98 p_COMPOUND_FREQ_DOM/FOR = frequencies of discretely compounded input/output
99 rate. This is only necessary if p_RATE_TYPE_DOM/FOR is 'P'.
100 ---------------------------------------------------------------*/
101 
102 
103 PROCEDURE FX_GK_OPTION_SENS_CV(p_rec_in	IN 	GK_OPTION_SENS_IN_REC_TYPE,
104 			       p_rec_out OUT NOCOPY	GK_OPTION_SENS_OUT_REC_TYPE);
105 
106 
107 -- added fhu 6/19/01
108 PROCEDURE FX_GK_OPTION_SENS(
109                              l_days         IN NUMBER,
110                              l_for_int_rate IN NUMBER,
111                              l_dom_int_rate IN NUMBER,
112                              l_spot_rate     IN NUMBER,
113                              l_strike_rate   IN NUMBER,
114                              vol IN NUMBER,
115                              l_delta_call IN OUT NOCOPY NUMBER,
116                              l_delta_put IN OUT NOCOPY NUMBER,
117                              l_theta_call IN OUT NOCOPY NUMBER,
118                              l_theta_put IN OUT NOCOPY NUMBER,
119                              l_rho_call IN OUT NOCOPY NUMBER,
120                              l_rho_put IN OUT NOCOPY NUMBER,
121 			     l_rho_f_call IN OUT NOCOPY NUMBER,
122 			     l_rho_f_put IN OUT NOCOPY NUMBER,
123                              l_gamma IN OUT NOCOPY NUMBER,
124                              l_vega IN OUT NOCOPY NUMBER);
125 
126 
127 --###############################################################
128 --#							      #
129 --#			Functions			      #
130 --#							      #
131 --###############################################################
132 
133 
134 
135 -- mofified by  sankim 9/14/01
136 /*
137 Calculates the DELTA SPOT of a FX forward.  The Delta spot measures the
138 rate of change of the FX Forward Rate with respect to the Spot Rate.
139 See Deal Calculations HLD.
140 
141 The arguments are defined as follows:
142 * p_CONTRA/BASE_CUR = Contra/Bid currency
143 * p_DF_CONTRA_BID/ASK = discount factor for the contra currency(Bid and Ask
144 side)
145 * p_DF_BASE_BID/ASK = discount factor for the base currency(Bid and Ask side)
146 * p_DF_USD_BID/ASK = discount factor for the USD(Bid and Ask side) required
147 only if USD is not Base or Contra
148 Returned:
149 * p_DELTA = delta spot(bid and ask returned as xtr_md_num_table[2]
150          (BID side = xtr_md_num_table[1],ASK side = xtr_md_num_table[2]))
151 All of USD discount factor parameters defaults to null because they are not
152 required if Base or Contra currency is USD. They are required if USD is not
153 Base or Contra However, if insufficient input is provided, error will be
154 raised. Because of the optional parameters, to use this function, the caller
155 can just pass in 6 parameters instead of 8, not passing in the last two USD
156 discount factors if they are not necessary.If it makes it easier, feel free to
157 pass values to all six discount factor parameters.  This procedure will only
158 use the relevant parameters and ignore the rest.
159  */
160 FUNCTION FX_FORWARD_DELTA_SPOT(p_contra_cur IN VARCHAR2,
161                                p_base_cur IN VARCHAR2,
162                                p_df_contra_bid IN NUMBER,
163                                p_df_contra_ask IN NUMBER,
164 			       p_df_base_bid IN NUMBER,
165  			       p_df_base_ask IN NUMBER,
166                                p_df_usd_bid IN NUMBER DEFAULT NULL,
167 			       p_df_usd_ask IN NUMBER DEFAULT NULL)
168 	RETURN XTR_MD_NUM_TABLE;
169 
170 
171 --modified sankim 9/18/01
172 /*
173 Calculates the RHO, DELTA CONTRA/BASE INTEREST RATE of a FX forward.
174 See Deal Calculations HLD.
175 Example for FX: CHFGBP -> CHF = Base Currency
176                GBP = Contra Currency
177 parameters
178 * p_OUT = 'C' if want p_RHO to be rho contra, 'B' if want p_RHO to be rho base,
179           or 'D' if want both
180 * p_SPOT_RATE_BASE_BID/ASK = fair exchange rate of between the base currency
181 against USD. If the base currency is USD, then the default value of 1 should be
182  used.
183 * p_SPOT_RATE_CONTRA_BID/ASK = fair exchange rate of between the contra
184 currency against USD. If the contra currency is USD, then the default value of
185 1 should be used.
186 * p_BASE_CURR_INT_RATE_BID/ASK = bid/ask risk free interest rate for the base
187 currency.  This parameter should be null if the base currency is USD.
188 * p_CONTRA_CURR_INT_RATE_BID/ASK = bid/ask risk free interest rate for the
189 contra currency.  This parameter should be null if the contra currency is USD.
190 * p_USD _CURR_INT_RATE = risk free interest rate for the USD.
191 * p_DAY_COUNT_BASE/CONTRA = number of days between the spot date and the
192 forward date. If the contra currency is USD, then p_DAY_COUNT_CONTRA should be
193 null, and vice versa in the case of base is USD.
194 * p_ANNUAL_BASIS_BASE/CONTRA = number of days in a year of which the
195 p_DAY_COUNT_BASE/CONTRA and the p_BASE/CONTRA_CURR_INT_RATE are based on. If
196 the contra currency is USD, then p_ANNUAL_BASIS_CONTRA should be null, and vice
197  versa in the case of base is USD.
198 * p_DAY_COUNT_USD = number of days between the spot date and the forward date.
199 = number of days in a year of which the p_DAY_COUNT_USD and the
200 p_USD _CURR_INT_RATE are based on.
201 * p_ANNUAL_BASIS_USD = number of days in a year of which the p_DAY_COUNT_USD
202 and the p_USD _CURR_INT_RATE are based on.
203 * p_CURRENCY_CONTRA/BASE = the currency for contra/base.
204 * p_QUOTATION_BASIS_CONTRA/BASE indicates the quotation basis against USD for
205 the CONTRA /BASE side, 'C' for Commodity Unit Quote (=USDGBP) and 'B' for Base
206 Unit Quote (= GBPUSD) (Definitions are in FX Calculator HLD). This parameter is
207  required if base/contra is non-USD accordingly.
208 Returned:
209 * p_RHO (BID/ASK) indicates the bid/ask side of rho(bid and ask returned as
210 xtr_md_num_table[2](BID side = xtr_md_num_table[1],
211                     ASK side = xtr_md_num_table[2]))
212  if p_OUT ='D' then the returned value is as following:
213 p_RHO  xtr_md_num_table[4](Base BID side =  xtr_md_num_table[1],
214                            Base ASK side =  xtr_md_num_table[2],
215                            Contra BID side =  xtr_md_num_table[3],
216                            Contra ASK side =  xtr_md_num_table[4])
217 
218 Calls XTR_FX_FORMULAS.FX_FORWARD_RATE_CV  (see def of fx_forward_rate above)
219 */
220 
221 
222 FUNCTION FX_FORWARD_RHO(p_out IN VARCHAR2,
223                         p_spot_rate_base_bid IN NUMBER DEFAULT 1,
224 			p_spot_rate_base_ask IN NUMBER DEFAULT 1,
225 			p_spot_rate_contra_bid IN NUMBER DEFAULT 1,
226 			p_spot_rate_contra_ask IN NUMBER DEFAULT 1,
227       			p_base_curr_int_rate_bid IN NUMBER,
228 			p_base_curr_int_rate_ask IN NUMBER,
229 			p_contra_curr_int_rate_bid IN NUMBER,
230 			p_contra_curr_int_rate_ask IN NUMBER,
231  			p_usd_curr_int_rate_bid IN NUMBER,
232 			p_usd_curr_int_rate_ask IN NUMBER,
233  			p_day_count_base IN NUMBER,
234 			p_day_count_contra IN NUMBER,
235 			p_day_count_usd IN NUMBER,
236 			p_annual_basis_base IN NUMBER,
237 			p_annual_basis_contra IN NUMBER,
238 			p_annual_basis_usd IN NUMBER,
239 			p_currency_base IN VARCHAR2,
240 			p_currency_contra IN VARCHAR2,
241 			p_quotation_basis_base IN VARCHAR2 DEFAULT 'C',
242 			p_quotation_basis_contra IN VARCHAR2 DEFAULT 'C')
243 	RETURN XTR_MD_NUM_TABLE;
244 
245 
246 
247 /*  SENSITIVITIES of FX OPTION -- See FX_GK_OPTION_PRICE procedure */
248 
249 /*************** Fair Value Calculations *******/
250 
251 
252 PROCEDURE get_base_contra(
253           p_base  IN OUT NOCOPY VARCHAR2,
254           p_contra  IN OUT NOCOPY VARCHAR2,
255           p_reverse  OUT NOCOPY BOOLEAN);
256 
257 
258 PROCEDURE fv_fxo(p_price_model 		IN 	VARCHAR2,
259 		p_deal_subtype 		IN 	VARCHAR2,
260 		p_option_type 		IN 	VARCHAR2,
261 		p_set_code   		IN 	VARCHAR2,
262 		p_for_ccy		IN	VARCHAR2,
263 		p_premium_ccy		IN	VARCHAR2,
264 		p_buy_ccy    		IN 	VARCHAR2,
265 		p_sell_ccy   		IN 	VARCHAR2,
266 		p_interpolation_method 	IN	VARCHAR2,
267 		p_spot_date		IN	DATE,
268 		p_future_date		IN	DATE,
269 		p_strike_price		IN	NUMBER,
270 		p_for_amount		IN	NUMBER,
271 		p_side			IN	OUT NOCOPY 	VARCHAR2,
272 		p_forward_rate		IN	OUT NOCOPY 	NUMBER,
273 		p_fair_value		IN	OUT NOCOPY	NUMBER);
274 
275 
276 PROCEDURE fv_fx (p_price_model		IN	VARCHAR2,
277 		p_set_code		IN	VARCHAR2,
278 		p_buy_ccy		IN	VARCHAR2,
279 		p_sell_ccy		IN	VARCHAR2,
280 		p_sob_ccy		IN	VARCHAR2,
281 		p_interpolation_method	IN	VARCHAR2,
282 		p_spot_date		IN	DATE,
283 		p_future_date		IN	DATE,
287 		p_forward_rate		IN	OUT NOCOPY	NUMBER,
284 		p_buy_amount		IN	NUMBER,
285 		p_sell_amount		IN	NUMBER,
286 		p_side			IN	OUT NOCOPY	VARCHAR2,
288 		p_fair_value		IN	OUT NOCOPY	NUMBER);
289 
290 
291 
292 END QRM_FX_FORMULAS;