Skip to content

Commit b72e42b

Browse files
feat: add credit stress signals (#124)
1 parent 8d4c3de commit b72e42b

9 files changed

Lines changed: 741 additions & 51 deletions

File tree

dbt_project/models/semantic_layer/asset_daily_returns.sql

Lines changed: 62 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,63 @@ commodities AS (
5353
std_diff_1yr,
5454
pct_change_1yr
5555
FROM {{ ref('input_commodities_analysis_return') }}
56+
),
57+
58+
unioned_assets AS (
59+
SELECT
60+
asset_key,
61+
asset_class,
62+
asset_id,
63+
asset_name,
64+
symbol,
65+
stock_symbol,
66+
sector_etf_symbol,
67+
commodity_name,
68+
commodity_unit,
69+
exchange,
70+
trade_date,
71+
current_price,
72+
std_diff_1yr,
73+
pct_change_1yr
74+
FROM stocks
75+
76+
UNION ALL
77+
78+
SELECT
79+
asset_key,
80+
asset_class,
81+
asset_id,
82+
asset_name,
83+
symbol,
84+
stock_symbol,
85+
sector_etf_symbol,
86+
commodity_name,
87+
commodity_unit,
88+
exchange,
89+
trade_date,
90+
current_price,
91+
std_diff_1yr,
92+
pct_change_1yr
93+
FROM sector_etfs
94+
95+
UNION ALL
96+
97+
SELECT
98+
asset_key,
99+
asset_class,
100+
asset_id,
101+
asset_name,
102+
symbol,
103+
stock_symbol,
104+
sector_etf_symbol,
105+
commodity_name,
106+
commodity_unit,
107+
exchange,
108+
trade_date,
109+
current_price,
110+
std_diff_1yr,
111+
pct_change_1yr
112+
FROM commodities
56113
)
57114

58115
SELECT
@@ -70,38 +127,8 @@ SELECT
70127
current_price,
71128
std_diff_1yr,
72129
pct_change_1yr
73-
FROM stocks
74-
UNION ALL
75-
SELECT
76-
asset_key,
77-
asset_class,
78-
asset_id,
79-
asset_name,
80-
symbol,
81-
stock_symbol,
82-
sector_etf_symbol,
83-
commodity_name,
84-
commodity_unit,
85-
exchange,
86-
trade_date,
87-
current_price,
88-
std_diff_1yr,
89-
pct_change_1yr
90-
FROM sector_etfs
91-
UNION ALL
92-
SELECT
93-
asset_key,
94-
asset_class,
95-
asset_id,
96-
asset_name,
97-
symbol,
98-
stock_symbol,
99-
sector_etf_symbol,
100-
commodity_name,
101-
commodity_unit,
102-
exchange,
103-
trade_date,
104-
current_price,
105-
std_diff_1yr,
106-
pct_change_1yr
107-
FROM commodities
130+
FROM unioned_assets
131+
QUALIFY ROW_NUMBER() OVER (
132+
PARTITION BY asset_key, trade_date
133+
ORDER BY current_price DESC
134+
) = 1

dbt_project/models/semantic_layer/schema.yml

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,21 @@ models:
135135
description: Rows observed in the coverage window.
136136
- name: coverage_pct
137137
description: Ratio of observed entities to expected entities.
138+
tests:
139+
- value_in_range:
140+
arguments:
141+
min_value: 0
142+
max_value: 1
138143
- name: freshness_lag_days
139144
description: Days between current date and the source coverage date.
140145
- name: coverage_status
141146
description: >
142147
Current coverage health bucket. One of healthy, partial, lagging,
143148
coverage_gap, stale, or no_expected_entities.
149+
tests:
150+
- accepted_values:
151+
arguments:
152+
values: ['healthy', 'partial', 'lagging', 'coverage_gap', 'stale', 'no_expected_entities']
144153
- name: generated_at
145154
description: Timestamp when the coverage snapshot was generated.
146155

@@ -295,15 +304,37 @@ semantic_models:
295304
time_granularity: day
296305
- name: nfci_status
297306
type: categorical
307+
- name: stl_fsi_status
308+
type: categorical
309+
- name: kc_fsi_status
310+
type: categorical
311+
- name: nfci_subindex_status
312+
type: categorical
298313
- name: nfci_trend_status
299314
type: categorical
300315
- name: lending_status
301316
type: categorical
317+
- name: lending_size_divergence_status
318+
type: categorical
319+
- name: stress_confirmation_status
320+
type: categorical
302321
measures:
303322
- name: nfci_value_measure
304323
description: Average Chicago Fed National Financial Conditions Index value.
305324
agg: average
306325
expr: nfci_value
326+
- name: nfci_risk_measure
327+
description: Average NFCI risk sub-index value.
328+
agg: average
329+
expr: nfci_risk
330+
- name: nfci_credit_measure
331+
description: Average NFCI credit sub-index value.
332+
agg: average
333+
expr: nfci_credit
334+
- name: nfci_leverage_measure
335+
description: Average NFCI leverage sub-index value.
336+
agg: average
337+
expr: nfci_leverage
307338
- name: anfci_value_measure
308339
description: Average adjusted National Financial Conditions Index value.
309340
agg: average
@@ -312,6 +343,10 @@ semantic_models:
312343
description: Average St. Louis Fed Financial Stress Index value.
313344
agg: average
314345
expr: stl_fsi_value
346+
- name: kc_fsi_value_measure
347+
description: Average Kansas City Financial Stress Index value.
348+
agg: average
349+
expr: kc_fsi_value
315350
- name: nfci_13w_change_measure
316351
description: Average 13-week change in NFCI.
317352
agg: average
@@ -325,6 +360,60 @@ semantic_models:
325360
agg: average
326361
expr: cc_delinquency_rate
327362

363+
- name: credit_market_signals
364+
description: >
365+
Daily credit spread signal model covering HY OAS momentum, trailing
366+
percentiles, moving-average crossover, and BBB-AAA fallen-angel risk.
367+
model: ref('credit_market_signals')
368+
defaults:
369+
agg_time_dimension: date
370+
entities:
371+
- name: credit_market_observation
372+
type: primary
373+
expr: date
374+
dimensions:
375+
- name: date
376+
type: time
377+
type_params:
378+
time_granularity: day
379+
- name: hy_oas_regime
380+
type: categorical
381+
- name: hy_momentum_status
382+
type: categorical
383+
- name: bbb_aaa_spread_status
384+
type: categorical
385+
- name: hy_percentile_status
386+
type: categorical
387+
measures:
388+
- name: hy_oas_measure
389+
description: Average ICE BofA US High Yield OAS.
390+
agg: average
391+
expr: hy_oas
392+
- name: bbb_aaa_spread_measure
393+
description: Average BBB minus AAA corporate OAS spread.
394+
agg: average
395+
expr: bbb_aaa_spread
396+
- name: hy_oas_20d_change_measure
397+
description: Average 20-trading-day change in HY OAS.
398+
agg: average
399+
expr: hy_oas_20d_change
400+
- name: hy_oas_20d_change_zscore_measure
401+
description: Average z-score of 20-day HY OAS change versus trailing one year.
402+
agg: average
403+
expr: hy_oas_20d_change_zscore
404+
- name: hy_oas_percentile_5y_measure
405+
description: Average HY OAS percentile versus trailing five-year distribution.
406+
agg: average
407+
expr: hy_oas_percentile_5y
408+
- name: hy_oas_percentile_10y_measure
409+
description: Average HY OAS percentile versus trailing ten-year distribution.
410+
agg: average
411+
expr: hy_oas_percentile_10y
412+
- name: hy_oas_bearish_ma_cross_count
413+
description: Count of bearish HY OAS moving-average crossover observations.
414+
agg: sum
415+
expr: hy_oas_bearish_ma_cross_flag
416+
328417
- name: fomc_sentiment
329418
description: >
330419
FOMC hawkish/dovish sentiment scores at meeting and section/speaker grain.
@@ -713,6 +802,34 @@ metrics:
713802
type_params:
714803
measure:
715804
name: stl_fsi_value_measure
805+
- name: kc_financial_stress_index
806+
label: Kansas City Financial Stress Index
807+
description: Average Kansas City Financial Stress Index value.
808+
type: simple
809+
type_params:
810+
measure:
811+
name: kc_fsi_value_measure
812+
- name: nfci_risk_subindex
813+
label: NFCI Risk Subindex
814+
description: Average NFCI risk sub-index value.
815+
type: simple
816+
type_params:
817+
measure:
818+
name: nfci_risk_measure
819+
- name: nfci_credit_subindex
820+
label: NFCI Credit Subindex
821+
description: Average NFCI credit sub-index value.
822+
type: simple
823+
type_params:
824+
measure:
825+
name: nfci_credit_measure
826+
- name: nfci_leverage_subindex
827+
label: NFCI Leverage Subindex
828+
description: Average NFCI leverage sub-index value.
829+
type: simple
830+
type_params:
831+
measure:
832+
name: nfci_leverage_measure
716833
- name: nfci_13w_change
717834
label: NFCI 13W Change
718835
description: Average 13-week change in NFCI.
@@ -734,6 +851,55 @@ metrics:
734851
type_params:
735852
measure:
736853
name: credit_card_delinquency_rate_measure
854+
- name: high_yield_oas
855+
label: High Yield OAS
856+
description: Average ICE BofA US High Yield OAS.
857+
type: simple
858+
type_params:
859+
measure:
860+
name: hy_oas_measure
861+
- name: high_yield_oas_20d_change
862+
label: High Yield OAS 20D Change
863+
description: Average 20-trading-day change in high yield OAS.
864+
type: simple
865+
type_params:
866+
measure:
867+
name: hy_oas_20d_change_measure
868+
- name: high_yield_oas_momentum_zscore
869+
label: High Yield OAS Momentum Z-Score
870+
description: Average z-score of 20-day HY OAS change versus trailing one year.
871+
type: simple
872+
type_params:
873+
measure:
874+
name: hy_oas_20d_change_zscore_measure
875+
- name: high_yield_oas_percentile_5y
876+
label: High Yield OAS Percentile 5Y
877+
description: Average HY OAS percentile versus trailing five-year distribution.
878+
type: simple
879+
type_params:
880+
measure:
881+
name: hy_oas_percentile_5y_measure
882+
- name: high_yield_oas_percentile_10y
883+
label: High Yield OAS Percentile 10Y
884+
description: Average HY OAS percentile versus trailing ten-year distribution.
885+
type: simple
886+
type_params:
887+
measure:
888+
name: hy_oas_percentile_10y_measure
889+
- name: bbb_aaa_oas_spread
890+
label: BBB-AAA OAS Spread
891+
description: Average BBB minus AAA corporate OAS spread.
892+
type: simple
893+
type_params:
894+
measure:
895+
name: bbb_aaa_spread_measure
896+
- name: high_yield_bearish_ma_crosses
897+
label: High Yield Bearish MA Crosses
898+
description: Count of HY OAS 20-day average crossing above its 60-day average.
899+
type: simple
900+
type_params:
901+
measure:
902+
name: hy_oas_bearish_ma_cross_count
737903
- name: fomc_hawkish_score
738904
label: FOMC Hawkish Score
739905
description: Average FOMC hawkish sentiment score.

0 commit comments

Comments
 (0)