diff options
| -rw-r--r-- | sql/serenitasdb.sql | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/sql/serenitasdb.sql b/sql/serenitasdb.sql index 810d9a4d..925e47c7 100644 --- a/sql/serenitasdb.sql +++ b/sql/serenitasdb.sql @@ -904,6 +904,34 @@ CREATE TABLE swaption_ref_quotes( CREATE INDEX ON swaption_ref_quotes (quotedate, index, series);
ALTER TABLE swaption_ref_quotes ADD UNIQUE(quotedate, index, series, expiry);
+CREATE TYPE swaption_quote AS (
+ strike float,
+ pay_bid float,
+ pay_offer float,
+ delta_pay float,
+ rec_bid float,
+ rec_offer float,
+ delta_rec float);
+
+CREATE OR REPLACE FUNCTION get_latest_swaption_quotes(
+ pg_index index_type,
+ pg_series integer,
+ pg_expiry date,
+ pg_date date,
+ pg_dealer text)
+ RETURNS SETOF swaption_quote AS $$
+ DECLARE refid int;
+ BEGIN
+
+ EXECUTE 'SELECT ref_id from swaption_ref_quotes WHERE quotedate::date=$1
+ and quote_source=$2 AND index=$3 AND series=$4 and expiry=$5
+ ORDER BY quotedate LIMIT 1' INTO refid
+ USING pg_date, pg_dealer, pg_index, pg_series, pg_expiry;
+ RETURN QUERY SELECT strike, pay_bid, pay_offer, delta_pay, rec_bid, rec_offer, delta_rec
+ FROM swaption_quotes WHERE ref_id=refid;
+END;
+$$ language plpgsql;
+
CREATE TABLE swaption_calib(
quote_id integer PRIMARY KEY REFERENCES swaption_quotes ON DELETE CASCADE,
vol_payer float,
|
