01
Scope the population before applying thresholdsUniverse Definition
Country Filter (ISO)
Sector Exclusions
Min Market Cap
USD (mm default)
Max Market Cap
USD (mm default)
Query Mode
Sort Order
02
Filter Thresholds
| Criterion | Category | Op | Threshold | W | Alias · Expression | |
|---|---|---|---|---|---|---|
Revenue Growth 3Y CAGR Top-line compounding over a multi-year window. | Growth | % | 4 | #sales_g_3y = sales_3yr_avg_growth() | ||
EBITDA Margin (T12M) Durable operating profitability. | Profitability | % | 4 | #ebitda_m = ebitda_margin() | ||
EBITDA Margin Expansion 3Y CUSTOM Margin trajectory over three years. | Profitability | ppts | 3 | #ebitda_m_exp = ebitda_margin() - ebitda_margin(fa_period_offset=-3)Replace with your preferred 3-year EBITDA margin bridge formula. | ||
EBITDA Growth 3Y Avg Average of annual EBITDA YoY % changes (dropna) over the last three fiscal offsets. | Growth | % | 4 | #ebitda_g_3y = avg(dropna(pct_diff(ebitda(fpt='A', fpo=range(-3,0))))) | ||
FCF / EBITDA Conversion Earnings that translate into free cash flow. | Profitability | % | 5 | #fcf_conv = cf_free_cash_flow() / ebitda() | ||
Capex / Sales Screens out capital-heavy reinvestment profiles. | Capital Structure | % | 3 | #capex_sales = capital_expend() / sales_rev_turn() | ||
Net Debt / EBITDA Leverage within LBO-style boundary. | Capital Structure | x | 5 | #nd_ebitda = net_debt() / ebitda() | ||
ROIC Return on invested capital. | Profitability | % | 4 | #roic = return_on_inv_capital() | ||
ROE Public-markets capital efficiency lens. | Profitability | % | 2 | #roe = return_com_eqy() | ||
Interest Coverage EBITDA / Interest — debt capacity & resilience. | Capital Structure | x | 3 | #int_cov = ebitda_to_interest_expn() | ||
EV / EBITDA (LTM) Entry valuation ceiling. | Valuation | x | 4 | #ev_ebitda = ev_to_ebitda(fpt='LTM') | ||
EV / EBITDA vs 5Y Avg CUSTOM Trading at or below own medium-term average. | Valuation | % | 2 | #ev_vs_5y = ev_to_ebitda(fpt='LTM') / avg(ev_to_ebitda(fpt='LTM', dates=range(-5y, 0d))) - 1Replace with your own premium/discount vs 5Y LTM EV/EBITDA. | ||
P / E (T12M) Second valuation lens. | Valuation | x | 2 | #pe = pe_ratio() | ||
Free Float Avoids illiquid or tightly held names. | Liquidity | % | 2 | #float = eqy_free_float_pct() | ||
5Y Sales Growth Volatility CUSTOM Stable trajectories over noisy swings. | Growth | σ | 2 | #sales_vol = std_dev(sales_growth(dates=range(-5y, 0d)))Replace with your std-dev expression for 5Y sales growth. |
03
BQL Output
shortlist
LIVE
screen.bql 63 lines · 1544 chars
01let(
02 #mcap = cur_mkt_cap(currency='USD');
03 #sales_g_3y = sales_3yr_avg_growth();
04 #ebitda_m = ebitda_margin();
05 #ebitda_m_exp = ebitda_margin() - ebitda_margin(fa_period_offset=-3);
06 #ebitda_g_3y = avg(dropna(pct_diff(ebitda(fpt='A', fpo=range(-3,0)))));
07 #fcf_conv = cf_free_cash_flow() / ebitda();
08 #capex_sales = capital_expend() / sales_rev_turn();
09 #nd_ebitda = net_debt() / ebitda();
10 #roic = return_on_inv_capital();
11 #roe = return_com_eqy();
12 #int_cov = ebitda_to_interest_expn();
13 #ev_ebitda = ev_to_ebitda(fpt='LTM');
14 #ev_vs_5y = ev_to_ebitda(fpt='LTM') / avg(ev_to_ebitda(fpt='LTM', dates=range(-5y, 0d))) - 1;
15 #pe = pe_ratio();
16 #float = eqy_free_float_pct();
17 #sales_vol = std_dev(sales_growth(dates=range(-5y, 0d)));
18)
19get(
20 name(),
21 country_iso(),
22 gics_sector_name(),
23 #mcap,
24 #sales_g_3y,
25 #ebitda_m,
26 #ebitda_m_exp,
27 #ebitda_g_3y,
28 #fcf_conv,
29 #capex_sales,
30 #nd_ebitda,
31 #roic,
32 #roe,
33 #int_cov,
34 #ev_ebitda,
35 #ev_vs_5y,
36 #pe,
37 #float,
38 #sales_vol
39)
40for(
41 filter(
42 members('SPX Index'),
43 not(gics_sector_name() in ['Financials', 'Utilities', 'Real Estate'])
44 and #mcap >= 100000000
45 and #mcap <= 2000000000
46 and #sales_g_3y >= 7.0
47 and #ebitda_m >= 15.0
48 and #ebitda_m_exp >= 0.0
49 and #ebitda_g_3y >= 8.0
50 and #fcf_conv >= 50.0
51 and #capex_sales <= 8.0
52 and #nd_ebitda <= 2.5
53 and #roic >= 10.0
54 and #roe >= 12.0
55 and #int_cov >= 4.0
56 and #ev_ebitda <= 11.0
57 and #ev_vs_5y <= 0.0
58 and #pe <= 20.0
59 and #float >= 25.0
60 and #sales_vol <= 15.0
61 )
62)
63preferences(sortby=#ebitda_m, sortorder=desc, maxrows=25)
3 custom formulas require house definition
#ebitda_m_expEBITDA Margin Expansion 3Y#ev_vs_5yEV / EBITDA vs 5Y Avg#sales_vol5Y Sales Growth Volatility
Reference
- Syntax
- Bloomberg BQL (
let() / get() / for()) - Server ranking
preferences(sortby, sortorder, maxrows)- Market cap
- Raw USD, suffix-aware (M/B)
- Delivery
- BQuant, BQL API, or BQ<GO>