915dabaaa1
Request: - Analyze the current HK IPO batch from break probability, capital efficiency, and risk/reward. - Test whether names such as 01688 deserve a higher defensive ranking than their heat score implies. Changes: - Added rules/ipo_break_risk_reward_v0.yaml as an experimental defensive overlay. - Split the new framework into break protection, capital efficiency, and upside optionality. - Added historical break-rate calibration anchors from analysis_model_v0_dataset.csv. - Updated the 2026-06-22 IPO report with a defensive risk/reward ranking and dual execution guidance. - Logged the rule change and its caveats. Verification: - Ran git diff --check and git diff --cached --check. - Parsed the new YAML file with PyYAML. - Recomputed key historical break-rate anchors from the current model dataset.
192 lines
6.9 KiB
YAML
192 lines
6.9 KiB
YAML
version: ipo_break_risk_reward_v0
|
|
effective_date: 2026-06-22
|
|
status: experimental_overlay
|
|
owner_skill: analyst
|
|
base_models:
|
|
- ipo_score_v0
|
|
- ipo_score_v0_95_final_heat_trial
|
|
|
|
purpose: >
|
|
Add a defensive risk/reward overlay for Hong Kong IPO subscription decisions.
|
|
This overlay is designed for investors who care about D1 break avoidance,
|
|
cash-lockup efficiency, and expected allocation efficiency, not only headline
|
|
first-day upside. It does not replace the heat-adjusted subscription score.
|
|
|
|
targets:
|
|
primary: D1 non-break probability, defined as D1 sell return versus IPO offer price > 0
|
|
secondary:
|
|
- cash-lockup and expected allocation efficiency
|
|
- D1 upside optionality
|
|
- trade-off between defensive quality and pop-seeking heat
|
|
|
|
data_policy:
|
|
allowed_live_inputs:
|
|
- T0 prospectus structure score
|
|
- archived T0.95 market-heat multiple observed before the executable order cutoff
|
|
- offer size
|
|
- minimum subscription amount
|
|
- subscription deadline and expected allotment date
|
|
- prospectus-stage fundamentals
|
|
calibration_inputs:
|
|
- archived historical D1 return labels
|
|
- final public oversubscription buckets
|
|
- historical offer size and minimum subscription buckets
|
|
forbidden_live_inputs:
|
|
- official allotment results released after the user's order cutoff
|
|
- grey-market return
|
|
- D1 price performance
|
|
caveat: >
|
|
Current T0.95 market heat has no completed D1 labels in the archive yet.
|
|
Historical final public oversubscription can guide bucket design but must
|
|
not be treated as an input that was visible before a live order.
|
|
|
|
empirical_calibration_snapshot:
|
|
dataset: data/snapshots/analysis_model_v0_dataset.csv
|
|
analysis_as_of: 2026-06-22T08:55:00Z
|
|
labeled_d1_rows: 274
|
|
all_sample_break_rate: 29.9%
|
|
reference_break_rates:
|
|
T0_score_gte_8: 23.3%
|
|
T0_score_5_to_7: 26.7%
|
|
T0_score_lte_4: 38.5%
|
|
offer_size_gte_5000m_hkd: 23.1%
|
|
offer_size_1000m_to_5000m_hkd: 28.0%
|
|
offer_size_lt_1000m_hkd: 31.9%
|
|
final_public_oversubscription_gte_1000x: 9.0%
|
|
final_public_oversubscription_100x_to_1000x: 35.7%
|
|
final_public_oversubscription_10x_to_100x: 46.0%
|
|
final_public_oversubscription_lt_10x: 35.8%
|
|
|
|
score_components:
|
|
break_protection_score:
|
|
range: 0_to_10
|
|
interpretation: Higher score means lower estimated break risk.
|
|
components:
|
|
T0_structure_support:
|
|
range: 0_to_2
|
|
points:
|
|
T0_score_gte_8: 2.0
|
|
T0_score_5_to_7: 1.2
|
|
T0_score_1_to_4: 0.5
|
|
T0_score_lt_1: 0.0
|
|
T0_95_demand_support:
|
|
range: 0_to_3
|
|
points:
|
|
margin_heat_lt_1x: 0.0
|
|
margin_heat_1x_to_3x: 0.5
|
|
margin_heat_3x_to_10x: 1.0
|
|
margin_heat_10x_to_100x: 1.5
|
|
margin_heat_100x_to_1000x: 2.5
|
|
margin_heat_gte_1000x: 3.0
|
|
fundamental_support:
|
|
range: 0_to_3
|
|
points:
|
|
mature_profitable_cash_generative: 3.0
|
|
profitable_quality_growth: 2.5
|
|
stable_profitable_low_growth: 2.0
|
|
high_growth_lossmaking: 1.0
|
|
early_stage_or_project_asset: 0.0_to_0.5
|
|
note: >
|
|
This remains analyst-scored until issuer fundamentals are structured
|
|
in the dataset. Use prospectus-stage facts only.
|
|
supply_absorption_support:
|
|
range: 0_to_2
|
|
points:
|
|
offer_size_gte_5000m_hkd: 2.0
|
|
offer_size_2000m_to_5000m_hkd: 1.6
|
|
offer_size_800m_to_2000m_hkd: 1.2
|
|
offer_size_300m_to_800m_hkd: 0.8
|
|
offer_size_lt_300m_hkd: 0.5
|
|
note: >
|
|
Larger deals can cap upside, but the current archive shows lower
|
|
break rates for larger offer-size buckets.
|
|
|
|
capital_efficiency_score:
|
|
range: 0_to_5
|
|
interpretation: >
|
|
Higher score means a better chance of getting useful allocation with less
|
|
cash locked, lower one-lot cost, or shorter lockup.
|
|
components:
|
|
minimum_subscription_amount:
|
|
range: 0_to_2
|
|
points:
|
|
lt_3000_hkd: 2.0
|
|
gte_3000_lt_7000_hkd: 1.5
|
|
gte_7000_lt_10000_hkd: 1.0
|
|
gte_10000_hkd: 0.5
|
|
allocation_efficiency_from_heat:
|
|
range: 0_to_2
|
|
points:
|
|
margin_heat_lt_1x: 2.0
|
|
margin_heat_1x_to_3x: 1.8
|
|
margin_heat_3x_to_10x: 1.5
|
|
margin_heat_10x_to_100x: 1.0
|
|
margin_heat_100x_to_1000x: 0.5
|
|
margin_heat_gte_1000x: 0.2
|
|
note: >
|
|
Low heat is positive for allocation efficiency but not for demand
|
|
support. Do not confuse easier allocation with lower break risk.
|
|
lockup_timing:
|
|
range: 0_to_1
|
|
points:
|
|
standard_two_day_cash_lock: 1.0
|
|
longer_weekend_or_holiday_lock: 0.8
|
|
unusually_long_or_unclear_lock: 0.5
|
|
|
|
upside_optionality_score:
|
|
range: 0_to_5
|
|
interpretation: Higher score means better D1 pop potential, not lower risk.
|
|
components:
|
|
demand_momentum:
|
|
range: 0_to_2.5
|
|
points:
|
|
margin_heat_lt_1x: 0.0
|
|
margin_heat_1x_to_3x: 0.3
|
|
margin_heat_3x_to_10x: 0.6
|
|
margin_heat_10x_to_100x: 1.2
|
|
margin_heat_100x_to_1000x: 2.0
|
|
margin_heat_gte_1000x: 2.5
|
|
scarcity_from_offer_size:
|
|
range: 0_to_1
|
|
points:
|
|
offer_size_lt_800m_hkd: 1.0
|
|
offer_size_800m_to_2000m_hkd: 0.8
|
|
offer_size_2000m_to_5000m_hkd: 0.5
|
|
offer_size_gte_5000m_hkd: 0.2
|
|
theme_and_sponsor_optionality:
|
|
range: 0_to_1.5
|
|
note: >
|
|
Analyst-scored from prospectus-stage sector narrative, sponsor
|
|
quality, and current market appetite. Use this as an option value,
|
|
not a substitute for demand support.
|
|
|
|
combined_score:
|
|
defensive_risk_reward_score:
|
|
range: 0_to_100
|
|
formula: >
|
|
5 * break_protection_score
|
|
+ 6 * capital_efficiency_score
|
|
+ 4 * upside_optionality_score
|
|
weights:
|
|
break_protection: 50%
|
|
capital_efficiency: 30%
|
|
upside_optionality: 20%
|
|
bands:
|
|
gte_65: defensive_priority_candidate
|
|
gte_60_lt_65: balanced_candidate
|
|
gte_55_lt_60: watch_only_or_small
|
|
lt_55: avoid_unless_new_evidence
|
|
|
|
usage:
|
|
- Use alongside the heat-adjusted IPO score, not instead of it.
|
|
- A low subscription multiple improves allocation efficiency but weakens demand support.
|
|
- A mature profitable issuer can have low break risk but low D1 upside.
|
|
- A high-heat thematic issuer can have high D1 upside but poor cash efficiency and weaker fundamental downside support.
|
|
- Re-score after T1 allotment results; official public oversubscription should replace T0.95 heat once it becomes stage-safe.
|
|
|
|
known_limitations:
|
|
- Fundamentals are still analyst-scored rather than extracted into structured factors.
|
|
- T0.95 market-heat snapshots do not yet have completed D1 labels in the archive.
|
|
- The score is ordinal and comparative within a batch; it is not a standalone probability forecast.
|
|
- Historical bucket rates are not yet industry-neutral or market-regime-neutral.
|