打新策略分析师——覆盖打新日历、申购策略、上市表现分析、限售期管理。适用:追求打新收益的投资者。
行业痛点 / 行业痛点
痛点 / 痛点
影响 / 影响
解决方案 / 本Skill解决方案
信息分散 / 打新信息分散在多个平台
一站式打新日历+信息聚合
策略模糊 / 盲目申购,收益率低
量化打分模型+最优策略
破发风险 / 注册制下破发率上升
估值分析+风险评估
资金效率低 / 资金分配不合理
最优资金分配算法
规则复杂 / 科创板/创业板规则差异大
分板块规则解析
触发关键词 / 触发关键词
English Triggers:IPO investment, new listing, IPO subscription, China A-share IPO, listing performance, IPO calendar, IPO subscription strategy, hot IPO
中文触发词(优先):打新 / IPO打新 / 新股申购 / 打新日历 / 打新策略 / 新股上市 / 破发风险 / 打新收益 / 科创板打新 / 创业板打新 / 北交所打新 / 主板打新 / 新股询价 / 网上申购 / 网下申购 / 中签率 / 打新资金冻结 / 限售期 / 战略投资者 / 绿鞋机制
核心能力 / 核心能力
class IPOAnalyzer:"""打新分析引擎"""
def analyze_ipo(self, ipo_info:dict) -> dict:"""分析单个IPO
Args:ipo_info:IPO信息字典"""
# 估值分析
valuation_score = self._calculate_valuation_score(ipo_info)
# 行业分析
sector_score = self._calculate_sector_score(ipo_info)
# 基本面分析
fundamentals_score = self._calculate_fundamentals_score(ipo_info)
# 市场情绪
market_sentiment = self._get_market_sentiment()
# 综合评分
total_score = (valuation_score
0.35 + sector_score 0.25 + fundamentals_score
0.25 + market_sentiment 0.15)
# 建议
if total_score >= 75:
recommendation = "强烈推荐申购"
elif total_score >= 60:
recommendation = "建议申购"
elif total_score >= 45:
recommendation = "谨慎申购"
else:
recommendation = "建议放弃"
return {
"score":round(total_score, 1),
"recommendation":recommendation,
"breakdown":{
"估值评分":valuation_score,
"行业评分":sector_score,
"基本面评分":fundamentals_score,
"市场情绪":market_sentiment
},
"risk_factors":self._identify_risk_factors(ipo_info),
"expected_return":self._estimate_return(ipo_info)
}
def _calculate_valuation_score(self, ipo:dict) -> float:"""估值评分"""
pe = ipo.get("issue_pe", 0)
industry_pe = ipo.get("industry_avg_pe", 30)
# PE低于行业 → 高分
if pe == 0:
return 70
# 未盈利公司
ratio = pe / industry_pe
if ratio < 0.7:
return 90
# 显著低估
elif ratio < 0.9:
return 75
# 相对低估
elif ratio < 1.1:
return 60
# 合理
elif ratio < 1.5:
return 40
# 相对高估
else:
return 20
# 显著高估
def _calculate_sector_score(self, ipo:dict) -> float:"""行业评分"""
hot_sectors = {
"AI/人工智能":90,
"半导体/芯片":85,
"新能源汽车":80,
"创新药":75,
"云计算":80,
"军工":70,
"消费":60,
"房地产":30,
"金融":50
}
sector = ipo.get("sector", "")
return hot_sectors.get(sector, 50)
def _estimate_return(self, ipo:dict) -> dict:"""估算收益"""
issue_price = ipo.get("issue_price", 0)
listing_expectation = ipo.get("listing_expectation", 0)
if not issue_price:
return {"error": "数据不足"}
first_day_return = (listing_expectation - issue_price) / issue_price
100
return {
"issue_price":issue_price,
"listing_expectation":listing_expectation,
"expected_first_day_return":round(first_day_return, 1),
"expected_profit_per_lot":round((listing_expectation - issue_price) ipo.get("lot_size", 500), 2)
}
class IPOCapitalAllocator:"""打新资金分配器"""
def optimize_allocation(self, ipos:list, available_capital:float) -> dict:"""最优资金分配"""
sorted_ipos = sorted(ipos, key=lambda x:x.get("score", 50), reverse=True)
allocations = []
remaining_capital = available_capital
for ipo in sorted_ipos:
if remaining_capital <= 0:
break
if ipo.get("score", 50) >= 70:
allocation = min(remaining_capital
0.4, ipo.get("max_subscription", float('inf')))
elif ipo.get("score", 50) >= 55:
allocation = min(remaining_capital 0.25, ipo.get("max_subscription", float('inf')))
else:
allocation = min(remaining_capital * 0.1, ipo.get("max_subscription", float('inf')))
allocatio