Разработка алгоритма Martingale/Anti-Martingale
Martingale и Anti-Martingale — две противоположные системы управления размером позиции на основе предыдущего результата. Martingale удваивает ставку после убытка. Anti-Martingale — после прибыли. Оба имеют математические обоснования и серьёзные практические ограничения.
Классический Martingale
Логика: после убытка удваиваем размер следующей позиции. При первом выигрыше возмещаем все предыдущие убытки плюс получаем базовую прибыль.
Сделка 1: $100 → убыток -$100
Сделка 2: $200 → убыток -$200
Сделка 3: $400 → убыток -$400
Сделка 4: $800 → прибыль +$800
Итого: -100 -200 -400 + 800 = +$100
Математическая проблема: серия убытков растёт экспоненциально. После 10 убытков подряд: $100 × 2^10 = $102,400. Это либо превышает депозит, либо достигает лимита биржи.
Реализация в крипто-торговле:
class MartingaleStrategy:
def __init__(self, base_qty, multiplier=2.0, max_orders=6):
self.base_qty = base_qty
self.multiplier = multiplier
self.max_orders = max_orders
self.current_level = 0
self.total_invested = 0
def get_next_qty(self, last_result):
if last_result == 'loss':
self.current_level = min(self.current_level + 1, self.max_orders)
else:
self.current_level = 0
return self.base_qty * (self.multiplier ** self.current_level)
def get_break_even_price(self, entries):
"""Цена безубытка для текущей накопленной позиции"""
total_value = sum(qty * price for qty, price in entries)
total_qty = sum(qty for qty, price in entries)
return total_value / total_qty if total_qty > 0 else 0
Ограниченный Martingale: максимальное количество удвоений = 4–6. После достижения лимита — фиксируем убыток и начинаем заново с базового размера. Это превращает математически опасную систему в управляемую.
Anti-Martingale (Reverse Martingale)
Логика: увеличиваем размер после прибыли, уменьшаем после убытка. Позволяет агрессивно использовать «полосы удачи» при удержании риска.
Применение в тренде: при серии прибыльных сделок в тренде — pyramid в направлении тренда. Логика turtle traders.
class AntiMartingaleStrategy:
def __init__(self, base_qty, multiplier=1.5, win_streak_limit=4):
self.base_qty = base_qty
self.multiplier = multiplier
self.win_streak = 0
self.win_streak_limit = win_streak_limit
def get_next_qty(self, last_result):
if last_result == 'win':
self.win_streak = min(self.win_streak + 1, self.win_streak_limit)
else:
self.win_streak = 0
return self.base_qty * (self.multiplier ** self.win_streak)
Profit lock: при достижении streak limit N — фиксируем прибыль и возвращаемся к базовому размеру. Не даём «отдать» накопленное.
Где применяется в крипто-торговле
DCA-Martingale боты (популярный паттерн): при падении цены увеличиваем размер следующей покупки. Цель — снизить среднюю цену входа. Практически все «3Commas DCA боты» работают на этом принципе.
Ключевые параметры DCA-Martingale бота:
- Base order size: $100
- Safety orders: 6 (максимум уровней)
- Price deviation: 2% (шаг вниз для следующей покупки)
- Safety order multiplier: 1.5× (Anti-Martingale по объёму)
- Take profit: 1.5%
Risk/Reward analysis
| Параметр | Martingale | Anti-Martingale |
|---|---|---|
| Риск при серии убытков | Экспоненциальный | Линейный |
| Максимальный убыток | Может уничтожить депозит | Ограничен base_qty × N |
| Прибыль при тренде | Низкая | Высокая |
| Подходит для | Боковой рынок | Трендовый рынок |
Железное правило Martingale: никогда без ограничения количества уровней. Неограниченный Martingale — это не стратегия, это рулетка на кредитные деньги.
Разрабатываем обе стратегии с configurable параметрами, risk limits, визуализацией позиций и P&L, backtesting модулем для оценки на исторических данных.







