Неделя 6.Мартингалы

Author

Carlos Buitrago

NoteГлавная идея

Мартингал — математическая модель справедливой игры: зная всю доступную информацию к моменту \(s\), мы не можем предсказать систематическую прибыль или убыток к моменту \(t>s\).

1 Определение мартингала

Пусть \(X=(X_t)_{t\in T}\) — процесс, согласованный с \(\mathbb F=(\mathcal F_t)_{t\in T}\), причём \(\mathbb E|X_t|<\infty\) для каждого \(t\).

  • Мартингал: \(\mathbb E(X_t\mid\mathcal F_s)=X_s\) при \(s\le t\).
  • Субмартингал: \(\mathbb E(X_t\mid\mathcal F_s)\ge X_s\).
  • Супермартингал: \(\mathbb E(X_t\mid\mathcal F_s)\le X_s\).

Для дискретного времени достаточно проверить одношаговое условие \[\mathbb E(X_{n+1}\mid\mathcal F_n)=X_n,\] а затем применить свойство башни.

Следствие: для мартингала \(\mathbb EX_t=\mathbb EX_0\); для субмартингала среднее не убывает, для супермартингала не возрастает.

Show Python code
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
rng = np.random.default_rng(2026)
plt.rcParams.update({'figure.figsize': (9, 5), 'axes.grid': True, 'grid.alpha': 0.25})
print('NumPy / Matplotlib / SciPy готовы')
NumPy / Matplotlib / SciPy готовы

1.1 2.1. Критерий для процессов с независимыми приращениями

Лемма (из конспекта). Если \(X\) имеет независимые приращения и \(\mathbb E|X_t|<\infty\), то относительно естественной фильтрации \[X\text{ — мартингал}\quad\Longleftrightarrow\quad\mathbb EX_t=\mathrm{const}.\]

Доказательство. При \(s<t\) приращение \(X_t-X_s\) независимо от \(\mathcal F_s^X\), поэтому \[\mathbb E(X_t\mid\mathcal F_s^X)=X_s+\mathbb E(X_t-X_s).\] Правая часть равна \(X_s\) тогда и только тогда, когда \(\mathbb EX_t=\mathbb EX_s\). \(\square\)

WarningВажное уточнение

Независимость приращений принципиальна: вообще говоря, равенство \(\mathbb EX_t=\mathrm{const}\) не обеспечивает мартингальность.

1.2 2.2. Примеры

  1. Винеровский процесс \(W_t\): \(\mathbb E(W_t\mid\mathcal F_s^W)=W_s\).
  2. Случайное блуждание: \(S_n=\sum_{k=1}^n\xi_k\) с независимыми интегрируемыми \(\xi_k\) — мартингал тогда и только тогда, когда \(\mathbb E\xi_k=0\) для каждого \(k\).
  3. Пуассоновский процесс: \(N_t\) интенсивности \(\lambda\) — субмартингал; \(N_t-\lambda t\) — мартингал.
  4. Произведение: \(P_n=\prod_{k=1}^n\xi_k\), где независимые \(\xi_k\ge0\) и \(\mathbb E\xi_k=1\), — мартингал (если начальное произведение равно \(1\)).
  5. Мартингал Леви: \(X_t=\mathbb E(\xi\mid\mathcal F_t)\) для \(\xi\in L^1\) — мартингал по свойству башни.

\[W_t,\qquad W_t^2-t,\qquad \exp\!\left(\theta W_t-\frac{\theta^2t}{2}\right)\] — мартингалы относительно естественной фильтрации винеровского процесса. Для второго используйте \(W_t=W_s+(W_t-W_s)\), для третьего — моментопорождающую функцию нормального распределения.

1.3 Эксперимент 1. Справедливая игра, дрейф и пуассоновская компенсация

Show Python code
n_paths, n_steps = 500, 160
steps = rng.choice([-1, 1], size=(n_paths, n_steps))
S = np.column_stack([np.zeros(n_paths), steps.cumsum(axis=1)])
drift_steps = rng.choice([-1, 1], size=(n_paths, n_steps), p=[0.42, 0.58])
D = np.column_stack([np.zeros(n_paths), drift_steps.cumsum(axis=1)])
t = np.arange(n_steps + 1)
fig, axes = plt.subplots(1, 2, figsize=(13, 4.6))
for ax, paths, title in [(axes[0], S, 'Симметричное блуждание'), (axes[1], D, 'Блуждание с положительным дрейфом')]:
    ax.plot(t, paths[:12].T, alpha=.32, lw=.9)
    ax.plot(t, paths.mean(axis=0), color='black', lw=2.7, label='Среднее по траекториям')
    ax.set(xlabel='Шаг n', ylabel='$X_n$', title=title)
    ax.legend()
plt.tight_layout(); plt.show()

Show Python code
import numpy as np
import matplotlib.pyplot as plt

# Random number generator
rng = np.random.default_rng(42)

# Parameters
lam = 3.0
T = 5.0
m = 400
n_sim = 1000

dt = T / m
t = np.linspace(0, T, m + 1)

# Simulate Poisson process
increments = rng.poisson(
    lam * dt,
    size=(n_sim, m)
)

N = np.column_stack([
    np.zeros(n_sim),
    increments.cumsum(axis=1)
])

# Compensated Poisson process
M = N - lam * t

# Plot
fig, ax = plt.subplots(figsize=(9, 4.5))

# Sample trajectories
ax.plot(
    t,
    M[:15].T,
    linewidth=0.9,
    alpha=0.35
)

# Empirical mean
ax.plot(
    t,
    M.mean(axis=0),
    color='black',
    linewidth=2.4,
    label='Эмпирическое среднее'
)

# Theoretical expectation
ax.axhline(
    0,
    linestyle='--',
    color='gray',
    label=r'Теория: $\mathbb{E}[M_t]=0$'
)

ax.set(
    title=r'Компенсированный пуассоновский процесс $N_t-\lambda t$',
    xlabel='Время $t$',
    ylabel=r'$M_t=N_t-\lambda t$'
)

ax.grid(alpha=0.3)
ax.legend()

plt.tight_layout()
plt.show()

2 3. Выпуклые функции и субмартингалы

Утверждение (из конспекта). Если \(X\) — мартингал и \(h:\mathbb R\to\mathbb R\) выпукла, причём \(h(X_t)\) интегрируема, то \(h(X_t)\) — субмартингал.

Доказательство (условное неравенство Йенсена): \[\mathbb E[h(X_t)\mid\mathcal F_s]\ge h(\mathbb E[X_t\mid\mathcal F_s])=h(X_s).\qquad\square\]

Примеры (при соответствующей интегрируемости): \(|X_t|\), \(X_t^2\), \(e^{\theta X_t}\).

Дополнение. Если \(X\) — субмартингал, а \(h\) выпукла и неубывает, то \(h(X)\) — субмартингал (при интегрируемости). Для произвольной выпуклой \(h\) без монотонности это неверно.

Show Python code
import numpy as np
import matplotlib.pyplot as plt

# Random number generator
rng = np.random.default_rng(42)

# Parameters
n_paths = 8000
n_steps = 160

# Simulate a symmetric Gaussian random walk
increments = rng.normal(
    loc=0,
    scale=1,
    size=(n_paths, n_steps)
)

W = np.column_stack([
    np.zeros(n_paths),
    increments.cumsum(axis=1)
])

t = np.arange(n_steps + 1)

# Empirical expectations
mean_W = np.mean(W, axis=0)
mean_abs_W = np.mean(np.abs(W), axis=0)
mean_W2 = np.mean(W**2, axis=0)

# Theoretical expectations
theory_mean = np.zeros_like(t)
theory_abs = np.sqrt(2 * t / np.pi)
theory_W2 = t

# Visualization
fig, ax = plt.subplots(figsize=(10, 6))

ax.plot(
    t,
    mean_W,
    linewidth=2,
    label=r'$\mathbb{E}[S_n]$ (эмпирическое)'
)

ax.plot(
    t,
    mean_abs_W,
    linewidth=2,
    label=r'$\mathbb{E}[|S_n|]$ (эмпирическое)'
)

ax.plot(
    t,
    mean_W2,
    linewidth=2,
    label=r'$\mathbb{E}[S_n^2]$ (эмпирическое)'
)

ax.plot(
    t,
    theory_abs,
    '--',
    linewidth=2,
    label=r'Теория: $\mathbb{E}[|S_n|]=\sqrt{2n/\pi}$'
)

ax.plot(
    t,
    theory_W2,
    '--',
    color='black',
    linewidth=2,
    label=r'Теория: $\mathbb{E}[S_n^2]=n$'
)

ax.axhline(
    0,
    linestyle=':',
    color='gray',
    label=r'Теория: $\mathbb{E}[S_n]=0$'
)

ax.set(
    title='Выпуклые преобразования мартингала',
    xlabel='Время $n$',
    ylabel='Математическое ожидание'
)

ax.grid(alpha=0.3)
ax.legend(fontsize=10)

plt.tight_layout()
plt.show()

3 4. Разложение Дуба (дискретное время)

Процесс \(A_n\) называется предсказуемым, если \(A_n\) измерим относительно \(\mathcal F_{n-1}\) при \(n\ge1\).

Теорема (из конспекта). Для любого интегрируемого адаптированного процесса \(X_n\), \(n\ge0\), существует единственное представление \[\boxed{X_n=M_n+A_n,\qquad A_0=0,}\] где \(M\) — мартингал, а \(A\) — предсказуемый процесс.

Формулы: \[\boxed{A_n=\sum_{k=1}^n\mathbb E[X_k-X_{k-1}\mid\mathcal F_{k-1}],\qquad M_n=X_n-A_n.}\]

Доказательство единственности. Если \(X_n=M_n+A_n\), то \[\mathbb E(X_n\mid\mathcal F_{n-1})=M_{n-1}+A_n=X_{n-1}-A_{n-1}+A_n.\] Следовательно, \(A_n-A_{n-1}=\mathbb E(\Delta X_n\mid\mathcal F_{n-1})\); при \(A_0=0\) это однозначно определяет \(A\), а значит, и \(M\).

Доказательство существования. Зададим \(A\) приведённой формулой и положим \(M=X-A\). Тогда \[\mathbb E(M_n\mid\mathcal F_{n-1})=\mathbb E(X_n\mid\mathcal F_{n-1})-A_n=X_{n-1}-A_{n-1}=M_{n-1}.\quad\square\]

Следствие: \(X\) — субмартингал тогда и только тогда, когда его предсказуемая часть \(A_n\) не убывает почти наверное.

3.1 4.1. Дополнение: пример с зависящим от прошлого дрейфом

Пусть \(\xi_n\) — независимые стандартные нормальные величины, \(X_0=0\) и \[X_n=X_{n-1}+0.08\tanh(X_{n-1})+\xi_n.\] Тогда \[A_n=\sum_{k=1}^n0.08\tanh(X_{k-1}),\qquad M_n=\sum_{k=1}^n\xi_k.\]

Таким образом, \(A\) собирает предсказуемую часть приращений, а \(M\) — непредсказуемый шум.

Show Python code
n = 240
noise = rng.normal(size=n)
X = np.zeros(n+1); A = np.zeros(n+1); M = np.zeros(n+1)
for k in range(1,n+1):
    drift = 0.08*np.tanh(X[k-1])
    A[k] = A[k-1]+drift
    M[k] = M[k-1]+noise[k-1]
    X[k] = X[k-1]+drift+noise[k-1]
assert np.allclose(X, A+M)
fig, ax = plt.subplots()
ax.plot(X,label='$X_n$'); ax.plot(A,label='$A_n$ — предсказуемая часть')
ax.plot(M,label='$M_n$ — мартингальная часть')
ax.set(title='Разложение Дуба: $X=M+A$',xlabel='n');ax.legend();plt.show()

4 5. Марковские моменты и остановленные процессы

Случайное время \(\tau\in\{0,1,\dots\}\cup\{\infty\}\) — марковский момент (stopping time), если \(\{\tau\le n\}\in\mathcal F_n\) для всех \(n\). В данном конспекте моментом остановки дополнительно называют конечный почти наверное марковский момент.

Остановленный процесс: \(X_n^\tau=X_{n\wedge\tau}\).

При \(n\ge1\): \[X_{n\wedge\tau}-X_{(n-1)\wedge\tau}=\mathbf1_{\{\tau\ge n\}}(X_n-X_{n-1}).\] Индикатор \(\{\tau\ge n\}\) измерим относительно \(\mathcal F_{n-1}\), поэтому условное ожидание приращения равно нулю. Это утверждение для каждого фиксированного \(n\) не означает автоматически \(\mathbb EX_\tau=\mathbb EX_0\) при неограниченном \(\tau\).

5 6. Теорема об остановке (дискретное время)

Теорема (из конспекта). Пусть \(X_n\) — интегрируемый адаптированный процесс. Тогда \(X\) является мартингалом (соответственно субмартингалом) тогда и только тогда, когда для любых ограниченных марковских моментов \(\tau\le\sigma\): \[\boxed{\mathbb EX_\tau=\mathbb EX_\sigma\quad (\text{соответственно }\le).}\]

Доказательство, направление \(\Rightarrow\). Для мартингала \[X_\sigma-X_\tau=\sum_{k=1}^{m}\mathbf1_{\{\tau<k\le\sigma\}}(X_k-X_{k-1}),\] где \(\sigma\le m\). Индикатор \(\{\tau<k\le\sigma\}\) является \(\mathcal F_{k-1}\)-измеримым. Условное ожидание каждого слагаемого равно нулю; для субмартингала — неотрицательно.

Доказательство, направление \(\Leftarrow\). Для \(A\in\mathcal F_k\), \(k<n\), положим \(\tau_A=k\) на \(A\) и \(\tau_A=n\) на \(A^c\), а \(\sigma=n\). Тогда \[\mathbb EX_{\tau_A}\le(=)\mathbb EX_n\quad\Longrightarrow\quad \mathbb E[X_k\mathbf1_A]\le(=)\mathbb E[X_n\mathbf1_A].\] Это для всех \(A\in\mathcal F_k\) эквивалентно \(X_k\le(=)\mathbb E(X_n\mid\mathcal F_k)\). \(\square\)

WarningНельзя забывать об ограниченности

Для симметричного случайного блуждания \(S_n\) моменты \(\tau_1=\inf\{n:S_n=1\}\) и \(\tau_2=\inf\{n:S_n=2\}\) конечны почти наверное, но не ограничены: \(\mathbb ES_{\tau_1}=1\) и \(\mathbb ES_{\tau_2}=2\). Нельзя применять теорему к ним без дополнительных условий.

5.1 6.1. Следствие из конспекта и полезные дополнения

Если \(\tau<\infty\) почти наверное и \(|X_{n\wedge\tau}|\le C\) для всех \(n\), то по ограниченной остановке и теореме Лебега \[\mathbb EX_\tau=\lim_{n\to\infty}\mathbb EX_{n\wedge\tau}=\mathbb EX_0.\]

Дополнение. Вместо общей ограниченности можно требовать равномерную интегрируемость семейства \(\{X_{n\wedge\tau}:n\ge0\}\). Ещё одно достаточное условие: ограниченные приращения \(|X_n-X_{n-1}|\le C\) и \(\mathbb E\tau<\infty\) (для мартингала).

Почему возникает ошибка? Почти наверное сходимость \(X_{n\wedge\tau}\to X_\tau\) сама по себе не позволяет переставить предел и математическое ожидание.

5.2 Эксперимент 2. Неограниченная остановка: где ломается интуиция

Show Python code
n_paths, horizon = 9000, 700
inc = rng.choice([-1,1], size=(n_paths,horizon))
S = np.column_stack([np.zeros(n_paths,dtype=int),inc.cumsum(axis=1)])
hit = S == 1
has_hit = hit.any(axis=1)
tau = np.where(has_hit,hit.argmax(axis=1),horizon+1)
stop = np.minimum(tau[:,None], np.arange(horizon+1)[None,:])
stopped = np.take_along_axis(S,stop,axis=1)
mean_stopped = stopped.mean(axis=0)
fig,ax=plt.subplots()
ax.plot(mean_stopped,label='Среднее $S_{n\wedge\tau_1}$')
ax.axhline(0,color='black',ls='--',label='Точно: 0 при каждом конечном n')
ax.set(title='Каждая ограниченная остановка сохраняет среднее',xlabel='n',ylabel='Эмпирическое среднее')
ax.legend();plt.show()
print('Доля траекторий, достигших +1 к горизонту:', round(has_hit.mean(),3))
print('На достигших уровень траекториях конечное значение равно 1;')
print('редкие, ещё не достигшие траектории компенсируют это отрицательными значениями.')

Доля траекторий, достигших +1 к горизонту: 0.967
На достигших уровень траекториях конечное значение равно 1;
редкие, ещё не достигшие траектории компенсируют это отрицательными значениями.

6 7. Задача о разорении игрока

Игрок начинает с капитала \(x\), \(a<x<b\). На каждом шаге капитал увеличивается на \(1\) с вероятностью \(p\) и уменьшается на \(1\) с вероятностью \(q=1-p\); \(0<p<1\).

\[S_n=x+\sum_{k=1}^n\xi_k,\quad \mathbb P(\xi_k=1)=p,\quad \mathbb P(\xi_k=-1)=q.\]

Время завершения: \(\tau=\inf\{n\ge0:S_n\in\{a,b\}\}\). Это конечный почти наверное момент остановки. Действительно, в каждом блоке из \(b-a\) шагов вероятность монотонно дойти до границы не меньше \(p^{b-a}+q^{b-a}>0\).

6.1 7.1. Честная игра: \(p=q=1/2\)

\(S_n\) — мартингал; \(S_{n\wedge\tau}\) ограничен, поэтому \(\mathbb ES_\tau=x\). Поскольку \(S_\tau\in\{a,b\}\), \[x=a\,\mathbb P(S_\tau=a)+b\,\mathbb P(S_\tau=b).\] Отсюда \[\boxed{\mathbb P(S_\tau=a)=\frac{b-x}{b-a}.}\]

6.2 7.2. Нечестная игра: \(p\ne q\)

Введём \(r=q/p\). Процесс \(r^{S_n}\) — мартингал, поскольку \[\mathbb E(r^{\xi_k})=pr+qr^{-1}=q+p=1.\] Применив теорему об остановке к ограниченному \(r^{S_{n\wedge\tau}}\), получаем \[r^x=r^a\,\mathbb P(S_\tau=a)+r^b\,\mathbb P(S_\tau=b).\] Следовательно, \[\boxed{\mathbb P(S_\tau=a)=\frac{r^b-r^x}{r^b-r^a},\qquad r=\frac qp.}\]

\[\mathbb P(S_\tau=b)=\begin{cases}\dfrac{x-a}{b-a},&p=1/2,\\[5pt]\dfrac{r^x-r^a}{r^b-r^a},&p\ne1/2.\end{cases}\] При \(p\to1/2\) формула для несимметричного случая непрерывно переходит в симметричную (например, по правилу Лопиталя).

6.3 Эксперимент 3. Проверка формулы разорения методом Монте-Карло

Show Python code
def ruin_probability_exact(p, x, a, b):
    if np.isclose(p, .5):
        return (b-x)/(b-a)
    r=(1-p)/p
    return (r**b-r**x)/(r**b-r**a)

def simulate_ruin(p, x=5, a=0, b=12, n_sim=5000, seed=0):
    rg=np.random.default_rng(seed)
    pos=np.full(n_sim,x,dtype=int)
    active=(pos>a)&(pos<b)
    while np.any(active):
        idx=np.flatnonzero(active)
        pos[idx]+=np.where(rg.random(len(idx))<p,1,-1)
        active=(pos>a)&(pos<b)
    return np.mean(pos==a)

ps=np.linspace(.25,.75,17)
exact=np.array([ruin_probability_exact(p,5,0,12) for p in ps])
emp=np.array([simulate_ruin(p,seed=100+i) for i,p in enumerate(ps)])
fig,ax=plt.subplots()
ax.plot(ps,exact,lw=2.5,label='Точная формула')
ax.scatter(ps,emp,s=36,label='Монте-Карло')
ax.set(xlabel='Вероятность выигрыша одного шага p',ylabel='Вероятность разорения',title='Разорение игрока: теория vs симуляция')
ax.legend();plt.show()

6.4 7.3. Дополнение: средняя длительность игры при \(p=1/2\)

Процесс \(S_n^2-n\) — мартингал. При ограниченном капитале до остановки и конечном \(\mathbb E\tau\) применяем остановку и предельный переход: \[\mathbb E\tau=\mathbb E(S_\tau^2)-x^2.\] Подставляя вероятности достижения границ, \[\boxed{\mathbb E\tau=(x-a)(b-x).}\]

Почему \(\mathbb E\tau<\infty\)? Вероятность не закончить игру за каждый блок из \(b-a\) шагов ограничена сверху числом \(1-p^{b-a}-q^{b-a}<1\); значит, хвост \(\tau\) убывает геометрически по блокам.

Show Python code
def simulate_ruin_duration(p, x=5, a=0, b=12, n_sim=7000, seed=5):
    rg=np.random.default_rng(seed)
    pos=np.full(n_sim,x,dtype=int)
    duration=np.zeros(n_sim,dtype=int)
    active=(pos>a)&(pos<b)
    while np.any(active):
        ids=np.flatnonzero(active)
        pos[ids]+=np.where(rg.random(len(ids))<p,1,-1)
        duration[ids]+=1
        active=(pos>a)&(pos<b)
    return duration

a,b=0,12
xs=np.arange(1,b)
emp=np.array([simulate_ruin_duration(.5,x,a,b,seed=20+x).mean() for x in xs])
theory=(xs-a)*(b-xs)
fig,ax=plt.subplots()
ax.plot(xs,theory,lw=2.5,label='Точно: $(x-a)(b-x)$')
ax.scatter(xs,emp,s=40,label='Симуляция')
ax.set(xlabel='Начальный капитал x',ylabel='Среднее число ходов',title='Ожидаемая длительность честной игры')
ax.legend();plt.show()

7 8. Непрерывное время: опциональные моменты

Определение (из конспекта). Случайное время \(\tau:\Omega\to[0,\infty]\) называется опциональным моментом, если \[\{\tau<t\}\in\mathcal F_t\quad\text{для всех }t\ge0.\]

Пример из конспекта: для процесса \(X\) с непрерывными справа траекториями и открытого \(G\subseteq\mathbb R\) время \(\tau=\inf\{t:X_t\in G\}\) является опциональным моментом относительно естественной фильтрации.

Теорема (из конспекта, без доказательства). Если \(X\) — мартингал с непрерывными справа траекториями, а \(\tau\le\sigma\) — ограниченные опциональные моменты, то \[\mathbb EX_\tau=\mathbb EX_\sigma.\]

WarningТерминологическое уточнение

В литературе чаще используют условие \(\{\tau\le t\}\in\mathcal F_t\) для stopping time. В конспекте условие с \(<\) называется «опциональным моментом». При правой непрерывности фильтрации эти условия эквивалентны; без дополнительных условий различие важно.

7.1 8.1. Дополнение: мартингалы непрерывного времени

Для броуновского движения \(W_t\): \[\mathbb E(W_t\mid\mathcal F_s)=W_s,\] \[\mathbb E(W_t^2-t\mid\mathcal F_s)=W_s^2-s,\] \[\mathbb E\!\left[e^{\theta W_t-\theta^2t/2}\mid\mathcal F_s\right]=e^{\theta W_s-\theta^2s/2}.\]

Интерпретация: \(W_t^2\) растёт в среднем со скоростью \(1\), и вычитание \(t\) компенсирует этот предсказуемый рост.

Show Python code
import numpy as np
import matplotlib.pyplot as plt

# Random number generator
rng = np.random.default_rng(42)

# Parameters
T = 3.0
n_steps = 500
n_paths = 5000

dt = T / n_steps
t = np.linspace(0, T, n_steps + 1)

# Simulate Brownian motion
increments = rng.normal(
    loc=0,
    scale=np.sqrt(dt),
    size=(n_paths, n_steps)
)

W = np.column_stack([
    np.zeros(n_paths),
    increments.cumsum(axis=1)
])

# Three martingales
M1 = W
M2 = W**2 - t

theta = 0.7
M3 = np.exp(theta * W - 0.5 * theta**2 * t)

# Empirical expectations
mean_M1 = M1.mean(axis=0)
mean_M2 = M2.mean(axis=0)
mean_M3 = M3.mean(axis=0)

# Visualization
fig, ax = plt.subplots(figsize=(10, 6))

ax.plot(
    t,
    mean_M1,
    linewidth=2,
    label=r'$\mathbb{E}[W_t] \approx 0$'
)

ax.plot(
    t,
    mean_M2,
    linewidth=2,
    label=r'$\mathbb{E}[W_t^2-t] \approx 0$'
)

ax.plot(
    t,
    mean_M3,
    linewidth=2,
    label=r'$\mathbb{E}[\exp(0.7W_t-0.245t)] \approx 1$'
)

# Theoretical expectations
ax.axhline(
    0,
    color='gray',
    linestyle='--',
    alpha=0.7,
    label='Теоретическое среднее: 0'
)

ax.axhline(
    1,
    color='black',
    linestyle=':',
    alpha=0.7,
    label='Теоретическое среднее: 1'
)

ax.set(
    xlabel='Время $t$',
    ylabel='Математическое ожидание',
    title='Три мартингала, построенные из броуновского движения'
)

ax.grid(alpha=0.3)
ax.legend(fontsize=10)

plt.tight_layout()
plt.show()

8 9. Дополнение: почему «удвоение ставки» не опровергает теорему

Представим честные независимые броски монеты: проиграв, игрок удваивает ставку, пока не выиграет. Формально выигрыш \(+1\) достигается почти наверное, но для применения теоремы об остановке к неограниченному времени нужны дополнительные условия. Ставки и потенциальные потери неограниченны; равномерная интегрируемость отсутствует.

Вывод: «мартингал» не означает «невозможно выиграть почти наверное», а означает отсутствие положительного условного ожидаемого приращения при фиксированном времени. Условия остановки нельзя опускать.

9 10. Практические применения (дополнения)

В идеализированных моделях без арбитража дисконтированная цена актива является мартингалом при риск-нейтральной мере, а не обязательно при реальной вероятностной мере. В биномиальной модели это позволяет оценивать производные инструменты обратной индукцией условных ожиданий.

Разность между наблюдением и его условным прогнозом \(D_n=Y_n-\mathbb E(Y_n\mid\mathcal F_{n-1})\) образует последовательность мартингальных разностей: \(\mathbb E(D_n\mid\mathcal F_{n-1})=0\). Это полезно в онлайн-обучении и анализе адаптивно собранных данных.

Неотрицательные тестовые мартингалы и супер-мартингалы позволяют контролировать вероятность ложной тревоги при многократном просмотре данных. Например, неравенство Вилля: если \(M_0=1\) и \(M_n\ge0\) — супермартингал, то \(\mathbb P(\sup_n M_n\ge1/\alpha)\le\alpha\).

Симметричное случайное блуждание — простая модель диффузии, а компенсированный пуассоновский процесс отделяет случайные флуктуации от средней интенсивности событий (например, импульсов детектора).

10 12. Сводка ключевых формул

Объект Формула
Мартингал \(\mathbb E(X_t\mid\mathcal F_s)=X_s\)
Субмартингал \(\mathbb E(X_t\mid\mathcal F_s)\ge X_s\)
Разложение Дуба \(X_n=M_n+A_n\)
Предсказуемая часть \(A_n=\sum_{k=1}^n\mathbb E(\Delta X_k\mid\mathcal F_{k-1})\)
Ограниченная остановка \(\mathbb EX_\tau=\mathbb EX_\sigma\) при \(\tau\le\sigma\)
Разорение, \(p=1/2\) \(\mathbb P(S_\tau=a)=(b-x)/(b-a)\)
Разорение, \(p\ne1/2\) \(\mathbb P(S_\tau=a)=(r^b-r^x)/(r^b-r^a)\), \(r=q/p\)
Средняя длительность, \(p=1/2\) \(\mathbb E\tau=(x-a)(b-x)\)

Что нужно уметь: проверять условное ожидание, распознавать предсказуемую компенсацию, выбирать подходящий мартингал и проверять условия теоремы об остановке.