Add IPO break risk reward overlay
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.
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
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.
|
||||
@@ -1,5 +1,28 @@
|
||||
# Rule Change Log
|
||||
|
||||
## 2026-06-22 - Add defensive IPO break-risk/reward overlay
|
||||
|
||||
Request:
|
||||
|
||||
- Evaluate the current IPO batch from break probability, cash efficiency, and risk/reward rather than only heat-adjusted upside.
|
||||
|
||||
Change:
|
||||
|
||||
- Added `rules/ipo_break_risk_reward_v0.yaml` as an experimental overlay.
|
||||
- Split the new lens into break protection, capital efficiency, and upside optionality.
|
||||
- Added empirical calibration anchors from `analysis_model_v0_dataset.csv`, including historical D1 break rates by T0 score, offer-size bucket, and final public oversubscription bucket.
|
||||
- Updated the 2026-06-22 latest IPO report with a defensive risk/reward ranking for the 13 current candidates.
|
||||
|
||||
Rationale:
|
||||
|
||||
- A low subscription multiple can improve allocation and cash-lockup efficiency, but it does not automatically reduce break risk.
|
||||
- Mature profitable issuers such as `01688` may have better defensive risk/reward than their heat score implies, while high-heat names such as `01956` remain more pop-driven.
|
||||
|
||||
Verification:
|
||||
|
||||
- Recomputed the calibration anchors from the current model dataset.
|
||||
- Checked that the overlay is documented as ordinal and comparative, not as a standalone probability forecast.
|
||||
|
||||
## 2026-06-15 - Add T0.95 late-order heat stage
|
||||
|
||||
Request:
|
||||
|
||||
Reference in New Issue
Block a user