---
title: "为什么做 Edgekit"
subtitle: "项目起源与数学根源"
date: last-modified
author: "Edgekit Team"
format:
html:
toc: true
toc-depth: 3
number-sections: true
code-fold: false
---
::: {.callout-note icon=false}
## 📝 摘要
本文档讲清楚 Edgekit 项目的起源:为什么交易中的"正期望"不等于"可执行",以及算术期望($A+B>2$)与几何增长判据($A^p B^{1-p}>1$)的本质区别。
:::
---
## 现实困境:执行层的混乱 {#sec-confusion}
在实际交易中,大多数失败并不是因为缺乏胜率或盈亏比,而是因为执行层面和认知层面的混乱。
### 讨论很多,执行逻辑却缺失
人们经常讨论:
- 如何提高胜率($p$)
- 如何寻找更高盈亏比($RR$)的机会
- 各种技术指标和信号
然而一旦进入执行阶段,逻辑往往支离破碎。
### 典型的认知误区
- **把仓位当成风险**:认为"下 1 手"就是风险,忽视了止损距离才决定实际亏多少钱。
- **把杠杆当成风险**:盲目追求或排斥杠杆,而不理解杠杆只是调节敞口的工具。
- **随意的风险调整**:根据最近几笔的盈亏随意放大缩小风险,陷入赌徒谬误。
- **失效后的盲目坚持**:策略已经结构性退化,仍然相信"它会回来",没有明确的停止准则。
---
## 两个被忽视的核心问题 {#sec-core-questions}
Edgekit 试图解决两个非常具体、但长期被忽视的问题。
### 问题一:如何执行 (Execution)
**已知胜率和盈亏比,这类机会应该怎么做?**
- 它值不值得做(优势是否真的为正)?
- 单笔最多该亏多少(风险比例怎么定)?
- 要不要复利,什么条件下复利?
### 问题二:何时停止 (Invalidity)
**执行过程中,怎么判断优势已经失效?**
- 眼下的亏损是正常波动,还是结构性退化?
- 什么时候应该果断停手,保住剩余资本?
---
## 数学根源 {#sec-math-source}
我们的设计起源于对一个极简游戏的思考。
### 最简单的游戏:抛硬币
想象每轮抛一枚公平的硬币(50% 概率):
- **赢**:资本乘以 $A$($A > 1$)
- **输**:资本乘以 $B$($0 < B < 1$)
这是一个纯粹的**乘法过程**。
### 第一个判断:$A + B > 2$
只看算术期望的话:
$$ \mathbb{E}[M] = 0.5A + 0.5B = \frac{A+B}{2} $$
$A+B > 2$ 时单轮期望为正。这通常是人们被游戏吸引的原因,**但这是一个危险的直觉陷阱**。
### 五五开下的生死条件:$AB > 1$
考虑两轮后(一赢一输)的资本变化因子 $A \times B$:
- $AB > 1$:两轮后资本放大。
- $AB < 1$:两轮后资本收缩。
在公平硬币下,这正是几何增长判据:每轮的长期对数增长率 $g = \tfrac{1}{2}\ln A + \tfrac{1}{2}\ln B = \tfrac{1}{2}\ln(AB)$,所以 $AB > 1$ 等价于 $g > 0$。如果 $AB < 1$,无论 $A+B$ 多大,资本长期都会被反复压缩,趋于零。
### 一般情形:几何增长判据 $g > 0$ {#sec-general-criterion}
::: {.callout-warning}
## 适用边界
$AB > 1$ **只在 $p = 0.5$ 时**等价于长期存活。真实交易的优势恰恰是 $p \neq 0.5$ 的非对称优势,必须用一般判据。
:::
长期路径中赢输并不精确交替,决定命运的是**按概率加权的几何平均**:
$$ g = p \ln A + (1-p) \ln B > 0 \quad\Longleftrightarrow\quad A^{p} \cdot B^{1-p} > 1 $$
两个反例说明 $p \neq 0.5$ 时 $AB > 1$ 既不充分也不必要:
| 场景 | $AB$ | $g$ | 长期命运 |
| :--- | :--: | :--: | :--- |
| $A=4.0,\ B=0.3,\ p=0.3$ | $1.20 > 1$ | $-0.427$ | 必然破产(每轮几何均值约 0.65) |
| $A=1.4,\ B=0.6,\ p=0.8$ | $0.84 < 1$ | $+0.167$ | 长期增长(每轮几何均值约 1.18) |
后文的凯利准则正是对 $g$ 的最大化,天然适配 $p \neq 0.5$。$AB > 1$ 保留为五五开游戏的直觉引子。
### 核心洞察
::: {.callout-important}
- **$A + B > 2$** 决定你是否会被游戏吸引(创造希望)。
- **$A^p \cdot B^{1-p} > 1$** 决定你能否留在游戏里(决定命运)。$AB > 1$ 是它在 $p = 0.5$ 时的特例。
:::
### 可视化演示
先看五五开的三种情形:
```{python}
#| label: fig-coin-flip
#| fig-cap: "抛硬币游戏的资本路径模拟"
#| warning: false
import numpy as np
import matplotlib.pyplot as plt
# 设置绘图风格(含中文字体回退链:macOS / Linux CI / 缺省)
plt.style.use('ggplot')
plt.rcParams['font.sans-serif'] = [
'PingFang SC', 'Hiragino Sans GB', 'Arial Unicode MS',
'Noto Sans CJK SC', 'WenQuanYi Zen Hei', 'DejaVu Sans'
]
plt.rcParams['axes.unicode_minus'] = False
np.random.seed(42)
n_rounds = 100
n_simulations = 10
# 三种场景
scenarios = {
'AB > 1 (可持续)': {'A': 1.8, 'B': 0.6},
'AB < 1 (不可持续)': {'A': 1.5, 'B': 0.6},
'AB = 1 (临界点)': {'A': 1.67, 'B': 0.6}
}
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
for idx, (title, params) in enumerate(scenarios.items()):
A, B = params['A'], params['B']
ax = axes[idx]
for _ in range(n_simulations):
capital = [1.0]
for _ in range(n_rounds):
if np.random.random() < 0.5:
capital.append(capital[-1] * A)
else:
capital.append(capital[-1] * B)
ax.plot(capital, alpha=0.6, linewidth=1)
ax.axhline(y=1, color='black', linestyle='--', alpha=0.5)
ax.set_title(f'{title}\nAB={A*B:.2f}')
ax.set_yscale('log')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
```
再看 $p \neq 0.5$ 时 $AB$ 如何失效(@sec-general-criterion 的两个反例):
```{python}
#| label: fig-asymmetric-coin
#| fig-cap: "p ≠ 0.5 时 AB>1 不保命、AB<1 不致命:决定命运的是几何均值 A^p·B^(1-p)"
#| warning: false
np.random.seed(7)
asym_scenarios = {
'AB=1.20 > 1 仍破产': {'A': 4.0, 'B': 0.3, 'p': 0.3},
'AB=0.84 < 1 仍增长': {'A': 1.4, 'B': 0.6, 'p': 0.8},
}
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
for idx, (title, params) in enumerate(asym_scenarios.items()):
A, B, p = params['A'], params['B'], params['p']
ax = axes[idx]
for _ in range(n_simulations):
capital = [1.0]
for _ in range(200):
if np.random.random() < p:
capital.append(capital[-1] * A)
else:
capital.append(capital[-1] * B)
ax.plot(capital, alpha=0.6, linewidth=1)
geo_mean = A**p * B**(1 - p)
ax.axhline(y=1, color='black', linestyle='--', alpha=0.5)
ax.set_title(f'{title}\np={p}, 几何均值={geo_mean:.3f}')
ax.set_yscale('log')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
```
---
## 从抛硬币到交易执行 {#sec-from-math-to-trade}
把数学模型翻译成交易语言:
- $A$ 是获胜时的增长乘数,由盈亏比和风险比例决定。
- $B$ 是失败时的保留比例,即 1 − 风险比例。
- 真实交易中 $p \neq 0.5$,所以判断标准是 $g > 0$,不是 $AB > 1$。
很多交易者追求极高的盈亏比(大 $A$),却忽视了风险比例过大导致 $B$ 太小,最终 $g < 0$。
**Edgekit 的起源正是为了管理这个乘法过程:**
1. **风险定义**:把风险锁定为可控的百分比,从而控制 $B$。
2. **凯利准则 + Half-Kelly**:全凯利给出让 $g$ 最大的风险比例,我们默认只用一半。代价是损失约四分之一的增长(分数 $c$ 的凯利,增长率约为最优值的 $c(2-c)$ 倍);换来的是方差减半,以及对参数高估的容错。**半凯利不是增长最优,是稳健取舍。**
3. **x-Rebase**:在加法增长(安全)与乘法增长(效率)之间找平衡。
4. **失效监控**:在 $g$ 的结构发生退化时及时停手。
---
## 项目使命 {#sec-mission}
::: {.callout-important appearance="simple"}
> **我们不是在寻找优势(Edge)。**
>
> **我们是在严肃地对待一个已经存在的优势:**
>
> **如何理性地使用它,以及当它不再存在时,如何严格地停止。**
:::