胜率盈亏比计算器(决策数学)
这个技能做什么、不做什么
- 做:把「成功率多少、成了赚几份、败了亏一份」这类重复决策,算成几个硬数字——
期望值、盈亏平衡点、连错的概率、每次该冒多大风险的理论上限、按止损算出的数量、资金曲线的分布。 - 不做:不联网、不取任何价格或行情、不评价任何品种或项目、不预测、不给买卖或下注建议。
胜率和盈亏比由用户自己给;用户问「胜率该填多少」「哪个能做」,回答不在范围内,
改问「你过去的记录里,成功了几次、一共几次?」 - 不做杠杆、爆仓、强平这类计算。
名词(全部按「份」来算,和钱无关)
| 名词 | 意思 |
|---|---|
| 胜率 p | 成功次数 ÷ 总次数。45、45%、0.45 都行 |
| 1R | 失败一次亏掉的那一份(风险单位) |
| 盈亏比 rr | 成功一次赚几份 R。赚 2 份、亏 1 份就是 2 |
| 期望值 | 平均每做一次赚几份 R:p × rr − (1−p) − 成本 |
| 单次风险 | 每次失败亏掉本金的百分之几(--risk 1 = 1%) |
命令
{baseDir} 是本技能目录。所有子命令前都可以加 --json 拿结构化结果(要写在子命令前面)。
# 1. 期望值 + 盈亏平衡点(--cost 每次额外成本,按 R 计;--unit 每份 R 是多少钱)
python {baseDir}/scripts/calc.py ev --win 45 --rr 2 [--cost 0.05] [--unit 500]
# 2. 连错概率:接下来 N 次全错 / M 次里至少一段 N 连错 / 最长连错分布;--risk 给了就算连错后的回撤
python {baseDir}/scripts/calc.py streak --win 45 --n 5 --trades 100 [--risk 1]
# 3. 凯利比例(理论上限 + 保守提醒,提醒不可删)
python {baseDir}/scripts/calc.py kelly --win 55 --rr 1.5
# 4. 止损仓位:本金 × 单笔风险% ÷ 每单位止损距离,按最小单位向下取整
python {baseDir}/scripts/calc.py size --capital 100000 --risk-pct 1 --entry 50 --stop 47 \
[--step 100] [--fee-per-unit 0.05] [--max-capital-pct 100] [--target 56]
# 5. 资金曲线蒙特卡洛(固定比例风险,种子固定可复现)
python {baseDir}/scripts/calc.py mc --win 45 --rr 2 --risk 1 --trades 100 --paths 2000 [--seed 42]
# 6. 速查表(Markdown)
python {baseDir}/scripts/calc.py table
# 7. 自测:36 项,公式对照手算值、穷举值与退化情形
python {baseDir}/scripts/calc.py selftest
口径
- 期望值
E = p·rr − (1−p) − cost(单位 R)。盈亏平衡胜率(1+cost)/(1+rr);盈亏平衡盈亏比((1−p)+cost)/p。 - 连错:
- 接下来 N 次全错 =
(1−p)^N。这只看紧接着的 N 次。 - M 次里至少出现一段 ≥N 连错:按「当前连错长度」做精确动态规划(自测里用 2^8 条序列穷举核对过)。
这一行才回答「这事迟早会不会碰上」——胜率 45%、做 100 次,出现 5 连错的概率是 92.0%。 - 最长连错:期望值 = Σ P(最长 ≥ n);「95% 把握不超过 k」= 最小的 k 使 P(最长 ≥ k+1) ≤ 5%。
- 连错后的回撤:按当前资金固定比例
1 − (1−r)^N;按初始本金固定金额N × r。 - 凯利比例
f* = p − (1−p)/rr(二元结果:赢 rr 份 / 输 1 份),自测里用对数增长率的数值最大点核对过。
输出必须带四条保守提醒:它是上限不是建议值;胜率估高会让它高估很多(同时给出胜率低 5 个百分点时的值);
全凯利回撤极大(理论上跌到一半的概率约 50%);它指的是「这一次最多亏掉的资金比例」,不应超过用户自己的单次风险上限。
≤0 时直接说「没有正期望,比例为 0」。 - 止损仓位:
数量 = 本金 × 单笔风险% ÷ (|入场价 − 止损价| + 每单位费用),按--step向下取整;
若占用资金超过本金(或--max-capital-pct),按资金上限压数量并注明「实际风险低于额度」。
止损在入场价上方也能算(方向自动识别)。取整后为 0 时明确提示。 - 蒙特卡洛:每次冒当前资金的 r,赢
×(1 + r·rr − r·cost),输×(1 − r − r·cost);
报最终资金 10/50/90 分位、低于起点的比例、最大回撤中位数与 90 分位、回撤 ≥20%/30%/50% 的比例。
固定种子可复现;p=1 或 p=0 时结果与解析值完全一致(自测覆盖)。
报告怎么说话
- 第一句给结论数字:「期望 +0.35R/次,胜率比盈亏平衡线高 11.67 个百分点」。
- 再给表;表里的数都来自脚本输出,不心算改写。
- 不用「稳赚」「必胜」「值得做」这类词;不说「该用多少比例」,凯利只报上限并带提醒。
- 用户给的胜率样本很少(例如只有十几次)时,提醒一句:样本少,估出来的胜率本身误差很大。
- 结尾保留脚本自带的免责句,不删。
文件
| 路径 | 说明 |
|---|---|
scripts/calc.py |
全部计算与自测(纯标准库) |
references/quick-tables.md |
速查表:期望值矩阵、盈亏平衡胜率、连错概率(50/100 次)、凯利上限、连错回撤 |
边界
- 只用 Python 3 标准库,零第三方依赖,不发起任何网络请求。
- 所有输入都来自用户;胜率、盈亏比的真假本技能无从核对。
- 模型假设每次结果相互独立、胜率不变;真实世界里这两条常常不成立,结论只是参考上限。
- 不构成任何投资、投注或经营建议。