基于将强 (Qiang Qiang),股票投资三部曲 (2021)
《股票投资三部曲》为在中国A股市场运作的个人投资者呈现了一个统一的方法论。作者将强 (Qiang Qiang) 综合了西方投资理论——来自格雷厄姆、巴菲特和费雪的价值投资原则,以及技术分析传统——与应对中国股票市场结构性现实所需的实际调整。
三部曲组织为三个相互依存的部分:
第一部分:基本面分析——买什么:识别具有持久竞争优势、强健财务状况
和合理估值的高质量公司。
第二部分:技术分析——何时买:使用价格、成交量和趋势工具来把握买入时机
并避免接飞刀。
第三部分:投资组合管理——如何买(和如何卖):构建多元化投资组合,
确定仓位规模,管理风险,并通过
市场周期保持纪律。
核心论点是,单独的基本面分析或单独的技术分析都不足以应对中国A股市场。基本面回答什么应该拥有;技术面回答何时行动;投资组合管理回答多少和多久。所有三条腿都必须存在才能获得一致的长期回报。
中国A股市场在几个结构性方面与发达西方市场不同,这些差异直接影响投资方法论:
这些结构性差异意味着纯巴菲特式的"买入并永远持有"方法或纯西方技术交易系统在针对A股现实校准的方法论上都会表现不佳。三部曲提供了这种校准。
作者反复强调,最危险的投资者是只懂一种工具的人。纯基本面投资者会买入一只越来越便宜的便宜股票。纯技术分析师会在有财务欺诈的公司上买入图表突破。
解决方案是顺序过滤器:
步骤1:基本面筛选 → 创建可投资公司的"股票池"
步骤2:技术时机 → 识别池中哪些股票有有利的入场设置
步骤3:投资组合规则 → 确定仓位规模、入场执行和持续管理
基本面是必要条件;技术面是充分条件;投资组合管理是生存条件。
基本面分析的基础是阅读和解释三个核心财务报表的能力。作者为非会计专业投资者提供了一个提取可操作信息的实用框架。
利润表揭示公司是否盈利增长。关键检查项目:
| 项目 | 观察什么 | 红旗 |
|---|---|---|
| 营收 | 同比持续增长 > 15% | 营收下降但利润上升(削减成本,不是增长) |
| 毛利率 | 3年以上稳定或扩大 | 下降的利润率表示定价权侵蚀 |
| 营业利润 | 比营收增长更快(经营杠杆) | 营业利润和净利润之间差距大(一次性项目) |
| 净利润 | 成长股同比 > 20% | 波动、不可预测的收益 |
| 非经常性损益 | 相对于总利润较小 | 非经常性损益 > 净利润的30% |
作者强调检查扣非净利润(扣除非经常性损益的净利润),而不是名义净利润。许多A股公司通过一次性资产出售、政府补贴或投资收益来膨胀收益,这些掩盖了疲弱的核心运营。
资产负债表揭示财务健康状况和资本结构:
现金流量表是最难操纵的,因此最可靠:
财务报告的"黄金组合":
营收增长 > 15% 同比持续
净利润率 > 行业中位数,稳定或改善
经营活动现金流 > 净利润(现金转换率 > 1.0)
自由现金流 > 0 持续
负债权益比 < 60%(非金融)
ROE > 15% 持续
ROE是作者框架中最重要的单一指标。它衡量管理层将股东权益转化为利润的效率。
ROE = 净利润率 × 资产周转率 × 财务杠杆
= (净利润/营收) × (营收/总资产) × (总资产/净资产)
作者警告不要投资ROE因单一年高杠杆或资产处置而飙升的公司。来自经常性运营的可持续ROE是目标。
营收增长是基础引擎。营收增长加速的公司(例如15% → 20% → 28%)处于增长周期早期至中期,并获得溢价估值。营收增长减速(例如30% → 22% → 14%)通常先于股价下跌,即使绝对增长仍为正。
多年来利润率稳定性揭示定价权。结合营收增长的利润率扩大是最强信号。尽管营收增长但利润率收缩表示商品化或投入成本上升侵蚀竞争优势。
自由现金流是业务质量的最终测试。一家报告高收益但多年自由现金流为负的公司要么本质上是资本密集型的(如果资本支出产生未来回报则是可接受的),要么是低质量收益(不可接受的)。作者建议在5年窗口内计算累计自由现金流,并将其与累计净利润进行比较。比率低于0.6值得怀疑。
作者将波特行业生命周期适应于A股背景:
用中国市场细微差别应用五力:
作者将晨星的护城河框架适应于中国股票:
| 护城河类型 | 描述 | A股示例 |
|---|---|---|
| 品牌(品牌) | 消费者愿意支付溢价 | 贵州茅台、海天味业 |
| 成本优势(成本优势) | 结构性的成本领先地位 | 恒力石化、大型化工生产商 |
| 网络效应(网络效应) | 每个额外用户增加价值 | 腾讯通过微信生态系统 |
| 转换成本(转换成本) | 客户转换成本高 | 用友企业软件、金融数据终端 |
| 有效规模(有效规模) | 利基市场的自然垄断 | 区域港口运营商、收费公路特许权 |
最强的投资结合两种或多种护城河来源。单护城河公司(尤其是仅成本优势)比多护城河公司更容易受到颠覆。
评估A股公司管理层需要关注:
作者针对A股的首选移动平均线系统:
短期:MA10、MA20——捕捉近期趋势方向
中期:MA50、MA60——定义中期趋势
长期:MA120、MA250——定义主要趋势(半年线、年线)
多头排列:MA10 > MA20 > MA50 > MA120 > MA250,全部向上倾斜。这是应该发起新多头仓位的唯一配置。
空头排列:反之亦然。不要新建买入。现有仓位应减少或消除。
MA250(年线)在A股市场具有特殊的文化意义。许多中国散户投资者将其视为牛市/熊市的分界线。因为如此多的参与者关注它,它成为自我实现的支撑/阻力位——作者鼓励利用而不是忽视这种反射效应。
A股背景中的关键支撑/阻力位:
成交量分析在A股中尤为重要,因为其散户主导的市场结构。散户投资者往往创造出比机构主导市场更易读的成交量特征。
关键量价关系:
价格上涨 + 成交量上涨 = 健康上涨,可能延续 (量价齐升)
价格上涨 + 成交量下跌 = 背离,上涨减弱 (量价背离)
价格下跌 + 成交量上涨 = 投降或派发 (放量下跌)
价格下跌 + 成交量下跌 = 有序回调,潜在支撑 (缩量回调)
关键位成交量:
地量见地价:持续下跌后极度低成交量通常标志底部。作者寻找成交量 < 60日平均成交量30%作为潜在的衰竭信号。这必须与其他指标结合——低成交量本身必要但不足。
作者首选的入场时机方法结合多个技术元素:
1. 主要趋势必须看涨(MA排列,周线图上升趋势)
2. 股票正在回调至定义支撑区(MA20/MA60、趋势线或平台支撑)
3. 回调期间成交量收缩(缩量回调)
4. 在支撑位出现看涨反转蜡烛(锤子、吞没、启明星)
5. 在反转蜡烛或下一个交易日成交量扩大
这种"上升趋势中的回调"是最高概率的入场形态。它结合了趋势跟踪(在主要趋势方向买入)和均值回归(在临时回调时入场)——捕获两种方法的优点。
顺序整合过程:
基本面过滤器 → 创建30-50只质量股票的"白名单"
↓
技术扫描 → 识别哪些白名单股票有活跃入场设置(通常3-8只)
↓
入场执行 → 以适当规模在1-3个最佳设置上建立仓位
基本面分析变化缓慢——公司质量通常在季度和年份上演变。技术面分析每天都在变化。通过维护预筛选的基本面白名单并每天扫描技术设置,投资者避免两个常见陷阱:
完整股票选择过程综合了第一和第二部分:
阶段1:基本面筛选(季度)
过滤器1:ROE连续至少3年 > 15%
过滤器2:营收增长 > 10% 同比
过滤器3:扣非净利润增长 > 15% 同比
过滤器4:经营活动现金流/净利润 > 0.8(3年平均)
过滤器5:负债权益比 < 60%(非金融公司)
过滤器6:可识别的竞争护城河(定性评估)
过滤器7:合理估值(市盈率 < 行业中位数×1.5,或PEG < 1.5)
此筛选通常从A股市场约5000只上市股票中产生30-80家公司。
阶段2:技术时机(每日/每周)
过滤器8: 股价在MA120和MA250上方
过滤器9: 移动平均线处于多头排列或正在过渡到多头排列
过滤器10: 股票正在回调至支撑位(MA20/MA60、平台支撑或趋势线)
过滤器11: 回调期间成交量收缩
过滤器12: 出现看涨反转信号(蜡烛形态、成交量扩大)
这将范围缩小到在任何给定时间通常3-8个可操作候选。
阶段3:最终选择
从剩余候选中,优先考虑:
作者倡导结构性仓位确定框架:
总投资组合: 可投资资本的100%
单只股票最大: 成本基础的20%
初始仓位规模: 投资组合的5-10%
加仓仓位规模: 每次加仓5%,仅在价格确认(走势对你有利)时
最大持仓数: 8-12只股票
最小持仓数: 5只股票(低于5,集中风险过大)
现金储备: 在不确定市场中保持10-20%现金
仓位确定也根据风险调整:
仓位规模 = (每笔交易的组合风险)/(入场价格 - 止损价格)
= (投资组合的1-2%)/(距止损的百分比距离)
对于止损在入场价下方8%的股票:
仓位规模 = 2% / 8% = 25%最大
但由于单仓位上限为20%,实际配置为20%。这确保没有单一亏损可以超过投资组合的2%。
作者建议沿三个维度进行多元化:
避免A股常见错误,即"多元化"到同一行业或主题的20+只股票——那是伪装成多元化的集中。
清晰、可执行的买入规则:
规则B1:只买入同时通过基本面筛选和技术时机过滤器的股票。
规则B2:以5-10%的初始仓位入场。不要立即"全押"。
规则B3:在识别入场价格的3%以内放置买入订单。不要追涨。
规则B4:如果股票跳空 > 计划入场价格5%以上,跳过它。等待回调。
规则B5:每周最多发起1-2个新仓位。避免买入狂潮行为。
规则B6:不要在交易前30分钟买入(开盘波动是噪音)。
规则B7:宁可在上漲日的回调日(上涨趋势中的红色蜡烛/下跌日)买入,
而不是追涨上涨日。
加仓规则(加仓规则):
规则BA1:只向盈利仓位加仓。绝对不要向亏损仓位向下摊平。
规则BA2:第一次加仓:在股票在入场价上方上涨5-10%并保持在突破位
上方至少3个交易日后。
规则BA3:第二次加仓:在股票在更高价格建立新支撑位后。
规则BA4:每次加仓应等于或小于前一次(正金字塔)。
规则BA5:任何单一股票的总仓位不得超过投资组合的20%。
卖出规则分为进攻性(获利)和防御性(止损)类别:
进攻性卖出规则(止盈):
规则S1:当股票从入场价上涨30%时,卖出1/3仓位。
规则S2:当股票在持续上涨后跌破MA20时,再卖出1/3。
规则S3:当股票在成交量放大时跌破MA60时,卖出最后1/3。
规则S4:如果股票实现100%+收益,使用周线图上的MA50跟踪止损。
规则S5:如果市盈率超过该股票5年历史市盈率区间的90百分位,卖出。
防御性卖出规则(止损):
规则D1:硬止损在入场价下方8%。无例外。
规则D2:如果股票在入场后20个交易日内未能上涨,重新评估。如果
30天内没有进展,卖出以重新部署资本(时间止损)。
规则D3:在任何财务欺诈或会计违规证据出现时立即卖出。
规则D4:如果季度报告显示基本面恶化(ROE < 10%、经营现金流为负、
营收下降),卖出。
规则D5:如果股票跌破MA250并连续3天收于其下方,卖出。
每周审查检查清单:
季度审查检查清单:
年度审查检查清单:
T+1规则意味着今天购买的股票必须等到下一个交易日才能卖出。含义:
每日涨跌停限制创造了独特的动态:
理解散户行为创造优势:
中国股市深受政府政策影响:
作者识别了典型A股牛市行业轮动序列:
第一阶段:金融和房地产(政策底 → 市场底部,流动性驱动)
第二阶段:基础设施和材料(刺激流向固定资产投资)
第三阶段:科技和成长(风险偏好扩大,估值倍数扩大)
第四阶段:消费和医疗保健(晚期防御性轮动)
第五阶段:小盘股投机(最后冲刺阶段,市场顶部临近)
理解当前市场在这个轮动周期中的位置有助于行业配置和风险管理。第五阶段是开始减少整体股票敞口的信号。
三部曲的综合入场规则:
入场规则1(基本面门槛):
股票必须出现在基本面白名单上(通过所有7个基本面过滤器)。
无例外。不要买入"图表看起来不错"但未经审查的股票。
入场规则2(趋势门槛):
股票的MA120必须向上倾斜。股价必须在MA120上方。
如果股票在MA120下方,它不在主要上升趋势中——不要买。
入场规则3(回调门槛):
股票必须正在回调至定义支撑位:MA20、MA60、上升趋势线
或盘整平台底部。不要在之前没有至少3周盘整期的情况下
买入突破至新高的股票。
入场规则4(成交量门槛):
回调期间的成交量必须低于20日平均成交量。高成交量回调
表示派发,而不是健康回撤。
入场规则5(反转信号门槛):
必须在支撑位出现看涨蜡烛形态或成交量扩大日(>20日
平均水平的1.5倍)。这确认买家正在介入。
入场规则6(市场环境门槛):
更广泛的市场指数(上证综指或沪深300)不应处于确认的
下降趋势中。如果指数在其MA120下方且MA120正在下降,
将仓位规模减少50%或完全观望。
入场规则7(执行):
在计划入场价格的3%以内入场。入场后立即设置止损。
在交易日志中记录入场理由、价格、止损位和目标。
综合退出框架:
止损规则1(硬止损):
最大亏损为入场价的8%。自动触发——无需分析、无需希望、
不用向下摊平。选择8%是因为它在允许正常A股波动的同时限制损害
(高于美国市场波动)。
止损规则2(移动平均线止损):
如果股票在成交量上升的情况下连续3天收于MA60下方,无论
百分比亏损或收益如何,退出全部仓位。
止损规则3(时间止损):
如果股票在入场后30个交易日内未能上涨至少5%,卖出仓位。
死钱有机会成本。
止损规则4(基本面止损):
如果季度结果显示以下情况,立即退出:
- 营收同比下降
- 净利润同比下降 > 20%
- 经营活动现金流转为负
- 主要管理层变动或会计重述
获利规则1(分批退出):
三等分卖出:第一批在+30%,第二批在MA20跌破,
最后一批在MA60跌破。这在锁定早期部分利润的同时
捕获大部分走势。
获利规则2(跟踪止损):
对于收益 > 50%的仓位,在周线图上用MA50跟踪止损。这
允许仓位在周趋势保持完整的情况下继续运行。
获利规则3(估值退出):
如果股票的市盈率超过其5年平均市盈率的2倍,无论技术信号如何,
开始逐步退出。极端高估最终会修正。
获利规则4(狂热退出):
如果你看到股票被平时不讨论股票的主流社交媒体推荐,
至少卖出一半。普遍热情是可靠的顶部指标。
风险规则1:单只仓位 < 成本的20%。
风险规则2:单只行业 < 投资组合的30%。
风险规则3:最大投资组合回撤容忍度 = 15%。如果投资组合从峰值
回撤15%,将所有仓位减少至50%并重新评估。
风险规则4:任何时候最大总风险敞口 = 投资组合的6%。
(如果每笔交易风险2%,在开始新入场时同时持有不超过
3个满仓。)
风险规则5:在正常市场中始终保持10-20%现金储备。在晚期周期
或不确定环境中增至30-50%。
风险规则6:除非投资组合已证明持续盈利至少2年,否则不要使用
保证金/杠杆。
风险规则7:避免任何单一政策风险主题的集中敞口。
作者警告A股股票比美国股票相关性更高,特别是在市场抛售期间。在广泛市场下跌中,几乎所有股票都会下跌,无论个人基本面如何。这使得市场广度评估(入场规则6)必不可少——当市场转向时,跨行业多元化提供的保护不如在相关性较低的市场。主要防御是现金头寸和减少敞口。
不可预见的事件——监管冲击、地缘政治危机、流行病——无法预测,但可以通过准备生存:
每笔交易都必须记录:
日期: [入场日期]
股票: [代码和名称]
入场价格: [价格]
仓位规模: [占投资组合%]
止损: [价格和距入场%]
目标: [价格和距入场%]
基本面论点: [1-2句话]
技术设置: [形态/信号描述]
入场质量: [事后评级A/B/C]
退出日期: [平仓日期]
退出价格: [价格]
盈亏: [%和绝对值]
教训: [学到了什么]
纪律规则1:遵循系统。如果规则说卖出,就卖出。如果规则说等待,
就等待。推翻系统需要在前写下理由,
而不是事后再合理化。
纪律规则2:每天检查价格不超过3次。持续看价格会导致情绪决策。
纪律规则3:永远不要根据朋友、社交媒体或聊天群的提示行动。每个
潜在投资都必须经过完整的基线和和技术筛选过程。
纪律规则4:在亏损交易后,至少等待2个交易日再进入新仓位。
这个冷却期防止报复性交易。
纪律规则5:连续3次亏损后,将仓位规模减少50%,直到盈利交易
恢复信心并确认系统正在工作。
纪律规则6:每周审查交易日志。识别模式错误(例如,持续入场太早、
持有输家太久)并创建具体的纠正规则。
纪律规则7:不要在社交媒体或论坛上讨论个股选择。对仓位的公开承诺
会产生心理锚定,使系统在信号退出时更难卖出。
纪律规则8:每季度至少休息整整一周。持续参与导致过度交易。
| 错误 | 发生原因 | 纠正 |
|---|---|---|
| 仅基于低市盈率买入 | 股票便宜有原因——收益可能见顶 | 将市盈率与增长轨迹结合;要求ROE > 15% |
| 忽视现金流 | 报告收益可以被操纵;现金流不能 | 始终验证经营CF > 净利润 |
| 落入"故事股" | 没有收益的兴奋叙事 | 要求至少2年已证实的盈利能力 |
| 追逐热门行业 | 在行业已经上涨50%+后FOMO | 只进入仍处于轮动第1-2阶段的行业 |
| 盲目信任管理层 | 初始研究后的确认偏差 | 每季度用财务数据验证声明 |
| 错误 | 发生原因 | 纠正 |
|---|---|---|
| 没有成交量的买入突破 | 想"尽早捕捉走势" | 要求突破日成交量 > 平均水平的1.5倍 |
| 忽视更广泛市场 | 孤立关注个股 | 始终检查市场环境门槛(入场规则6) |
| 改变时间框架以适应叙事 | 日线图说卖出;切换到周线图以证明持有 | 选择一个主要时间框架并坚持 |
| 用指标过度复杂化 | 同时添加MACD、RSI、KDJ、布林线产生冲突信号 | 将价格、成交量和移动平均线作为核心;其他都是次要的 |
| 逆势交易 | 试图在下降趋势中抄底 | 只买处于第2阶段上升趋势、在MA120上方的股票 |
| 错误 | 发生原因 | 纠正 |
|---|---|---|
| 过度集中 | 信念偏差——"我知道这一个会成功" | 严格执行每仓位20%上限,无例外 |
| 过度多元化 | 害怕错过多个机会 | 最多12个持仓;质量重于数量 |
| 无止损 | 情感依恋;"它会回来的" | 入场时预设止损;将8%作为硬规则 |
| 向下摊平 | 试图降低成本基础 | 只向赢家加仓;永远不向输家 |
| 报复性交易 | 对亏损的情绪反应 | 每次亏损后2天冷却期 |
阶段1:基本面发现(季度筛选)
公司:XYZ食品 (xyz食品),一家领先调味品制造商
ROE:22%、24%、25%(过去3年)——通过(> 15%)
营收增长:18%、22%、25%——通过(加速,> 10%)
净利润增长:20%、28%、32%——通过(> 15%,扣非)
经营现金流/净利润:1.1、1.2、1.05——通过(> 0.8)
负债权益比:35%——通过(< 60%)
护城河:品牌 + 分销网络(双护城河)——通过
估值:市盈率28,PEG 0.9(增长率32%)——通过(PEG < 1.5)
结果:加入基本面白名单。
阶段2:技术时机(每日监控)
第1-4周:股票处于上升趋势但最近突破阻力。还没有回调。等待。
第5-6周:股票从52.8回调至47.5(下跌10%)。回调期间成交量
收缩至20日平均水平的60%。MA60在46.0且上升。观察中。
第7周:股票触及47.0(接近MA60在46.5)。第3天出现锤子蜡烛。
锤子成交量为平均水平的0.8倍——仍低于平均水平。差不多了。
第7天第4天:股票在锤子高点48.2上方开盘。到中午成交量扩大至
平均水平的1.6倍。所有入场门槛都满足。
入场:在48.5买入。初始仓位 = 投资组合的10%。
止损:44.6(入场价下方8%)。
目标1:63.0(入场价上方30%)。
阶段3:仓位管理
第8-10周:股票上涨至52.0。现在比入场价高7.2%。在突破位
上方持有5天。加仓:第二批5%在52.0。平均成本现在49.7。
将止损提高至48.0(第一批盈亏平衡)。
第11-16周:股票在51-54之间盘整4周。成交量保持平均水平。持有。
第17-20周:股票突破盘整至58,然后62。成交量扩大。持有。
第21周:股票达到63.0——第一个目标。以63.0卖出1/3仓位。
在第一批锁定+30%利润。将剩余部分的止损跟踪至MA20
(现在在58)。
第22-28周:股票继续至71.5。MA20攀升至66。
第29周:股票反转,在下跌日成交量扩大至平均水平的2倍,
以64.5收于MA20下方。以64.5卖出第二批1/3。
第30-35周:股票在62-66附近企稳。MA60攀升至60。
第36周:股票在成交量放大时跌破MA60在60,收于58.5。
以58.5卖出最后1/3。
阶段4:交易后审查
入场:48.5(10%)+ 52.0(5%)= 平均成本49.7
卖出:63.0、64.5、58.5
加权盈亏:+31.4%(所有批次混合)
持仓时间:36周(9个月)
评级:A——遵循系统。在确认时回调入场。按规则分批退出。
没有让反转抹去所有收益。
教训:MA20卖出信号对第二批时机把握得很好。最后一批
也可以在MA20时更早卖出,但规则要求对最后一批
使用MA60。可接受——系统坚持比优化更重要。
def fundamental_screen(stock_universe):
"""
每季度运行。返回通过所有基本面过滤器的股票列表。
"""
white_list = []
for stock in stock_universe:
financials = get_financials(stock, years=5)
# 过滤器1:ROE一致性
roe_3yr = financials.roe[-3:]
if not all(r > 0.15 for r in roe_3yr):
continue
# 过滤器2:营收增长
rev_growth = financials.revenue_growth_yoy[-1]
if rev_growth < 0.10:
continue
# 过滤器3:净利润增长(扣非)
np_growth = financials.deducted_np_growth_yoy[-1]
if np_growth < 0.15:
continue
# 过滤器4:现金流质量
cf_ratio_avg = mean(financials.operating_cf / financials.net_profit, last=3)
if cf_ratio_avg < 0.8:
continue
# 过滤器5:杠杆检查
if not financials.is_financial_sector:
if financials.debt_to_equity[-1] > 0.60:
continue
# 过滤器6:护城河(定性——需要分析师输入或评分模型)
moat_score = evaluate_moat(stock)
if moat_score < 2: # 最低5个标准中2个
continue
# 过滤器7:估值
pe_ttm = stock.pe_ttm
industry_pe = get_industry_median_pe(stock.sector)
peg = pe_ttm / max(np_growth * 100, 1)
if pe_ttm > industry_pe * 1.5 and peg > 1.5:
continue
white_list.append(stock)
return white_list
def scan_for_entries(white_list):
"""
每日收盘后运行。返回有活跃入场设置的股票。
"""
entry_candidates = []
for stock in white_list:
price = stock.close
ma20 = stock.moving_average(20)
ma60 = stock.moving_average(60)
ma120 = stock.moving_average(120)
ma250 = stock.moving_average(250)
vol_20d_avg = stock.average_volume(20)
# 门槛1:主要趋势
if not (ma120.is_rising() and price > ma120.value):
continue
# 门槛2:回调至支撑
near_ma20 = abs(price - ma20.value) / ma20.value < 0.03
near_ma60 = abs(price - ma60.value) / ma60.value < 0.03
near_platform = stock.near_platform_support(threshold=0.03)
if not (near_ma20 or near_ma60 or near_platform):
continue
# 门槛3:回调期间成交量收缩
recent_vol = stock.average_volume(5)
if recent_vol > vol_20d_avg:
continue # 回调期间成交量应该低于平均水平
# 门槛4:反转信号
has_reversal = (
stock.is_hammer_candle(lookback=3) or
stock.is_engulfing_candle(lookback=2) or
stock.is_morning_star(lookback=3) or
stock.today_volume > vol_20d_avg * 1.5 # 成交量扩大
)
if not has_reversal:
continue
# 门槛5:市场环境
market_index = get_csi300()
if market_index.close < market_index.moving_average(120).value:
# 熊市——标记但不自动取消资格
stock.market_flag = "CAUTION"
entry_candidates.append(stock)
return sorted(entry_candidates, key=lambda s: s.composite_score(), reverse=True)
def manage_portfolio(portfolio, entry_candidates, market_data):
"""
每日运行。管理现有仓位并发起新仓位。
"""
# 步骤1:检查现有仓位的止损
for position in portfolio.positions:
stock = market_data.get(position.symbol)
# 硬止损
if stock.close <= position.stop_loss:
portfolio.sell(position, reason="硬止损触发")
continue
# MA60止损(连续3天收于其下方)
if stock.consecutive_closes_below(stock.ma60, days=3):
portfolio.sell(position, reason="MA60跌破")
continue
# 时间止损
if position.days_held > 30 and position.pnl_pct < 0.05:
portfolio.sell(position, reason="时间止损——进展不足")
continue
# 获利:+30%时卖出第一批1/3
if position.pnl_pct >= 0.30 and not position.first_target_hit:
portfolio.sell_partial(position, fraction=1/3, reason="第一批目标+30%")
position.first_target_hit = True
position.stop_loss = position.entry_price # 将止损提高至盈亏平衡
# 获利:MA20跌破后(在持续上涨后)
if position.pnl_pct >= 0.20 and stock.close < stock.ma20:
if not position.second_target_hit and position.first_target_hit:
portfolio.sell_partial(position, fraction=1/2, reason="MA20跌破")
position.second_target_hit = True
# 向赢家加仓
if (position.pnl_pct >= 0.05 and
position.days_since_last_add > 15 and
position.total_weight < 0.20 and
stock.close > stock.ma20):
add_size = min(0.05, 0.20 - position.total_weight)
portfolio.add_to_position(position, size=add_size)
# 步骤2:发起新仓位
available_capital = portfolio.cash_pct
open_slots = 12 - len(portfolio.positions)
new_entries_this_week = portfolio.new_entries_count(days=5)
if available_capital > 0.10 and open_slots > 0 and new_entries_this_week < 2:
for candidate in entry_candidates[:2]: # 每周最多2个新入场
if candidate.symbol in portfolio.held_symbols:
continue
stop_distance = 0.08 # 8%止损
risk_per_trade = 0.02 # 2%投资组合风险
position_size = min(risk_per_trade / stop_distance, 0.10) # 初始上限10%
if candidate.market_flag == "CAUTION":
position_size *= 0.50 # 在疲弱市场中减少规模
portfolio.buy(
symbol=candidate.symbol,
size=position_size,
stop_loss=candidate.close * (1 - stop_distance),
reason=f"入场:{candidate.setup_description}"
)
"基本面告诉你买什么。技术面告诉你何时买。投资组合管理告诉你是否有足够的生存能力从正确中获益。" -- 三部曲的核心论点
"在A股市场,最大的敌人不是做市商或机构——是你自己无法卖出亏损仓位的能力。" -- 关于止损的重要性
"ROE是区分伟大公司和普通公司的唯一数字。一家持续十多年保持20%+ ROE的公司几乎肯定在做一些其竞争对手无法轻易复制的事情。" -- 关于ROE的首要性
"一只通过每项基本面测试但处于下降趋势的股票,是一只将测试你耐心、然后测试你信念、然后测试你资本的股票。" -- 关于技术时机的必要性
"业余选手向输家加仓因为他想证明自己是对的。专业选手向赢家加仓因为他想赚钱。" -- 关于向下摊平与正金字塔
"多元化不是拥有20只股票。多元化是拥有8只不会因同一原因同时下跌的股票。" -- 关于有意义的多元化
"每日涨跌停既是祝福也是诅咒:它减缓了恐慌,但也困住了 unprepared。仓位确定是唯一真正的保护。" -- 关于A股涨跌停和仓位管理
"当人民日报说市场健康时,卖出。当你的出租车司机说股票完了时,买入。" -- 关于中国的逆向情绪指标
"市场不奖励智力。它奖励纪律。完美遵循普通系统的投资者将击败在适合他时才遵循辉煌系统的天才。" -- 关于纪律首要性重于智力
"自由现金流是财务报表的测谎仪。收益可以被制造;现金不能。" -- 关于现金流作为终极质量指标
"你拥有的每只股票都应该是你今天愿意以今天的价格购买的股票。如果不是,你是因为希望而不是因为信念而持有。" -- 关于诚实的投资组合评估
"A股市场中三个最致命的词是:'这次不同了。'周期总会回归。唯一的问题是当它回归时,你是否还有剩余资本。" -- 关于市场周期和资本保全