Предисловие: Зачем делать TradFi, а не криптовалюты?
У всех, кто занимался сеточной торговлей на крипторынке, был один и тот же кошмар: только что построил сетку, а цена стремительно падает, все позиции оказываются в ловушке, нужно вносить дополнительное обеспечение или происходит принудительная ликвидация. Прелесть криптовалют в том, что у них нет ограничений на рост или падение, но это же является главным врагом сеточной стратегии — сетка изначально создана для колебаний, а трендовое движение может привести к полному проигрышу.
Существует ли класс активов, который сохраняет достаточную дневную волатильность для частого срабатывания сетки, но при этом не склонен к резким движениям на 30–50% вверх или вниз? Ответ — инструменты TradFi.
Производные инструменты TradFi (традиционные финансы), включая бессрочные контракты на S&P 500, NASDAQ, золото, нефть, валютные пары и другие традиционные активы, имеют за собой реальный фундаментальный базис. Фондовые индексы ограничены корпоративной прибылью и политикой ФРС, сырьевые товары зависят от спроса и предложения, а валютные курсы определяются относительными отношениями между двумя суверенными экономиками. Эти активы не вырастут в 5 раз за одну ночь без причины и не обвалятся на 80% из-за одного твита. У их цен есть «гравитация» — в краткосрочной перспективе возможны колебания, но в долгосрочной они возвращаются к фундаментальным значениям.
Такие характеристики практически идеально подходят для сеточной стратегии: нормальная дневная волатильность составляет 1–3%, что достаточно для частого срабатывания сетки; при экстремальных движениях сетка не будет полностью пробита, оставляя достаточный запас для стоп-лоссов и управления капиталом. Данная стратегия построена именно на этой логике — автоматическое сканирование всех инструментов TradFi, выявление наиболее волатильных на текущий момент, построение на них циклической сетки и автоматическая смена инструментов при изменении структуры волатильности.
Фон: на криптобиржах тихо появились новые инструменты
За последние два года ведущие криптобиржи, такие как OKX, Bitget, незаметно запустили большое количество бессрочных контрактов на TradFi, охватывающих фондовые индексы США (S&P 500, NASDAQ 100), отдельные акции (Apple, NVIDIA, Tesla), сырьевые товары (золото, нефть, природный газ) и валюты (евро, иена). Проще говоря, теперь вы можете торговать американскими акциями, золотом, валютой прямо на криптобирже, 7×24 часа без перерыва, с использованием кредитного плеча.
Это имеет большое значение для количественных трейдеров. С одной стороны, эти инструменты наследуют фундаментальные свойства традиционных финансовых активов — их цены не будут резко расти или падать без оснований. С другой стороны, они торгуются на криптобиржах с использованием структуры бессрочных контрактов, имеют достаточную ликвидность, прозрачные комиссии и полностью совместимы с API обычных криптовалют, что позволяет легко интегрировать их в количественные стратегии.
Другими словами, эти продукты открывают новое пространство для арбитража: используя инфраструктуру криптотрейдинга, заниматься колебательным арбитражем на традиционных финансовых активах. Данная стратегия разработана именно для этого сценария — автоматически отбирать наиболее волатильные инструменты, запускать на них сетку и зарабатывать на колебаниях.
1. Логика отбора: выбираем только самые волатильные инструменты
Успех сеточной торговли на 60% зависит от выбора инструмента. Если выбрать правильный инструмент, сетка будет срабатывать десятки раз в день, и прибыль будет накапливаться сама собой. Если выбрать неправильный — сетка будет висеть неделями без движения, а капитал будет простаивать, занимая маржу.
Критерий отбора в данной стратегии один: средняя дневная амплитуда за последние N дневных свечей.
Волатильность = Σ [ (High_i − Low_i) / Close_i × 100 ] / N
Реализация в коде проста и понятна:
python
def score_symbol(info):
bars = exchange.GetRecords(info["sym"], PERIOD_D1, KLINE_COUNT + 2)
if not bars or len(bars) < 3:
return None
bars = bars[-KLINE_COUNT:]
atr_pcts = [(b["High"] - b["Low"]) / b["Close"] * 100 for b in bars if b["Close"] > 0]
avg_atr = sum(atr_pcts) / len(atr_pcts)
# Средняя дневная амплитуда должна быть как минимум в 1,5 раза больше шага сетки, иначе исключаем
if avg_atr < GRID_RATIO * 100 * 1.5:
return None
return {"sym": info["sym"], "atr": round(avg_atr, 3), "price": bars[-1]["Close"]}
Стратегия периодически сканирует все инструменты TradFi и ранжирует их, выбирая TOP_N для удержания. Пороговое условие крайне важно: средняя дневная амплитуда должна быть как минимум в 1,5 раза больше шага сетки, иначе цена может не пересечь даже один уровень за день — такие инструменты исключаются, чтобы избежать простоя капитала на неэффективных позициях.
Идентификация инструментов также требует особой обработки. На платформе FMZ инструменты TradFi отличаются от обычных криптовалют полем instCategory:
python
def scan_tradfi():
markets = exchange.GetMarkets()
for sym, mkt in markets.items():
if not sym.endswith("USDT.swap"):
continue
info = mkt.get("Info") or {}
# instCategory != 1 означает инструмент TradFi
if int(info.get("instCategory", 1)) == 1:
continue
result.append({"sym": sym, "base": base, "cat": cat})
2. Структура сетки: покупай дёшево, продавай дорого, циклический арбитраж
На выбранном инструменте вокруг текущей цены строится сетка с фиксированным шагом, с заданным процентным диапазоном вверх и вниз. На каждом уровне ниже текущей цены размещается ордер на покупку, ожидающий снижения цены.
Основной код построения сетки:
python
def build_grid(sym, price):
low = price * (1 - LOWER_RANGE)
high = price * (1 + LOWER_RANGE)
# Равномерное деление с геометрическим шагом
grids, p = [], low
while p <= high * 1.001:
grids.append(round(p, g_states[sym]["pp"]))
p = p * (1 + GRID_RATIO)
for i in range(len(grids) - 1):
buy_p, sell_p = grids[i], grids[i + 1]
if buy_p < price:
oid = buy_open(sym, buy_p, GRID_VALUE) # Ниже текущей цены — сразу ставим ордер на покупку
g["status"] = "pending_buy" if oid else "skip"
else:
g["status"] = "above" # Выше текущей цены — пока не ставим, ждём снижения
Синхронизация сетки — основной цикл стратегии, проверяющий статус каждого ордера и реагирующий на изменения:
python
def sync(sym):
for g in grids:
if g["status"] == "pending_buy":
s, deal, avgp = check_order(g["buy_oid"])
if s == "filled":
# Ордер на покупку исполнен → сразу ставим ордер на продажу (тейк-профит)
oid = sell_close(sym, g["sp"], ct)
g["status"] = "pending_sell"
elif g["status"] == "pending_sell":
s, deal, avgp = check_order(g["sell_oid"])
if s == "filled":
# Тейк-профит исполнен → рассчитываем прибыль, снова ставим ордер на покупку, цикл продолжается
profit = g["ct"] * cv * (avgp - g["fp"])
g_total_profit += profit
oid = buy_open(sym, g["bp"], GRID_VALUE)
g["status"] = "pending_buy"
Логика работы ясна: цена пробивает уровень вниз — срабатывает покупка, цена пробивает следующий уровень вверх — срабатывает тейк-профит, после которого на том же уровне снова выставляется ордер на покупку — и так циклически. В случае отзыва ордера, ошибок с тейк-профитом и т.п. реализован автоматический контроль и повторное выставление, стратегия не прерывается из-за случайных сбоев.
3. Интеллектуальная смена инструментов: капитал всегда остаётся на самых активных инструментах
Волатильность инструментов TradFi меняется под влиянием макроэкономических событий, сезонов отчётности, изменений политики. В какой-то период наиболее активным может быть золото, затем — нефть или фьючерсы на S&P. Если зафиксироваться на одном инструменте, рано или поздно он войдёт в фазу низкой волатильности, и сетка будет стоять неделями без движения.
Данная стратегия каждые фиксированные часы (по умолчанию 48 часов) заново оценивает и ранжирует все инструменты TradFi, решая, нужно ли заменить текущие удерживаемые позиции. Чтобы избежать частой смены из-за незначительных различий, что приводит к потерям на комиссиях, введён механизм гистерезиса:
python
def needs_rebalance(new_selected):
cur_scores = {s["sym"]: s["atr"] for s in g_score_log if s["sym"] in g_active}
for s in new_selected:
if s["sym"] in g_active:
continue
weakest_atr = min(cur_scores.values())
threshold = weakest_atr * (1 + HYSTERESIS) # должна быть выше на 20%, чтобы инициировать смену позиций
if s["atr"] >= threshold:
Log(f"{s['base']} ATR={s['atr']:.2f}% > порог={threshold:.2f}%, сработала смена позиций")
else:
Log(f"{s['base']} ATR={s['atr']:.2f}% < порог={threshold:.2f}%, гистерезис сохранён")
Только если среднесуточная амплитуда нового кандидата более чем на 20% превышает амплитуду текущей самой слабой позиции, фактически происходит смена позиций. Процесс смены: сначала снимаются все заявки по старым инструментам, закрываются все позиции, затем на новых инструментах выстраивается полная сетка. Весь процесс выполняется автоматически.
IV. Описание ключевых параметров
-- TOP_N определяет количество одновременно удерживаемых инструментов, по умолчанию 3 – капитал распределяется по 3 инструментам с самой высокой волатильностью.
-- GRID_RATIO – соотношение шага сетки, по умолчанию 1.5%, обозначает уровень фиксации прибыли на каждом шаге.
-- GRID_VALUE – фиксированная сумма USDT на каждый шаг сетки, по умолчанию 50, не корректируется в зависимости от цены.
-- LOWER_RANGE определяет диапазон цен, покрываемый сеткой, по умолчанию ±10% от текущей цены.
-- REBALANCE_HOURS – период оценки для смены позиций, по умолчанию 48 часов.
-- HYSTERESIS – порог гистерезиса, по умолчанию 20%, предотвращает частую смену позиций.
-- LEVERAGE – кредитное плечо, рекомендуется не более 3x.
-- STOP_LOSS_RATIO – глобальный стоп-лосс, если убыток по счёту превышает этот процент, автоматически закрываются все позиции и работа останавливается, по умолчанию 30%.
-- KLINE_COUNT – количество дневных свечей для оценки, по умолчанию берётся 20 последних.
-- EXCLUDE_SYMBOLS – чёрный список, вносятся коды инструментов, которые стратегия не должна затрагивать, несколько разделяются запятыми.
V. Управление рисками
Глобальный стоп-лосс – последняя линия обороны стратегии. Когда убыток по счёту превышает заданный процент от начального капитала, автоматически отменяются заявки, закрываются позиции и останавливаются все дальнейшие операции:
python
def check_stop():
acc = exchange.GetAccount()
loss = (g_init_equity - acc.Equity) / g_init_equity
if loss >= STOP_LOSS_RATIO:
Log(f"Сработал стоп-лосс! Убыток={loss*100:.1f}% → закрытие всех позиций, остановка")
for sym in list(g_active):
close_all(sym)
g_state = "STOP"
На этапе отбора инструментов используется фильтр, исключающий недостаточно волатильные активы, чтобы каждый выбранный инструмент обладал достаточной внутридневной амплитудой для работы сетки. Механизм чёрного списка позволяет вручную исключать инструменты с низкой ликвидностью, аномальными спредами или нестабильным поведением. Все цены и объёмы заявок строго соответствуют требованиям точности биржи, что с самого начала исключает отказы заявок из-за несоответствия точности. Капитал распределяется равномерно между всеми инструментами, убыток по одному инструменту не нарушает общую структуру позиций.
VI. Подходящие рыночные условия и замечания
Данная стратегия показывает наилучшие результаты на рынках с боковым трендом (консолидацией). Когда целевой инструмент колеблется в диапазоне, ячейки сетки срабатывают часто, доход накапливается линейно во времени, стратегия практически не требует ручного вмешательства.
Следует учитывать: если цена устойчиво движется в одном направлении вниз и пробивает нижнюю границу сетки, все ордера на покупку окажутся в убытке, и потребуется ожидать возврата цены или срабатывания глобального стоп-лосса. У некоторых инструментов TradFi в неторговые периоды (например, во время пауз на фондовом рынке США) ликвидность значительно падает, и заявки могут долго не исполняться – это нормально. Шаг сетки GRID_RATIO следует устанавливать исходя из среднесуточной амплитуды целевого инструмента, рекомендуется в диапазоне от 1/3 до 1/2 среднесуточной амплитуды: слишком большой шаг снижает частоту срабатываний, слишком маленький – приводит к потере прибыли на комиссиях. Кредитное плечо следует держать не более 3x: чрезмерное плечо при экстремальных движениях ускоряет убытки и может привести к неуправляемой ситуации до срабатывания стоп-лосса.
Заключение
Основную логику стратегии можно сформулировать одной фразой: постоянно держать капитал на самых волатильных инструментах TradFi, позволяя сетке работать на вас со временем. Четыре модуля – отбор инструментов, построение сетки, смена позиций и управление рисками – тесно связаны и работают полностью автоматически. Фундаментальные свойства инструментов TradFi обеспечивают базовую гарантию того, что цена не уходит бесконечно далеко, а программный отбор по волатильности гарантирует, что капитал всегда размещён на наиболее эффективных инструментах. При разумной настройке параметров стратегия может приносить стабильный сеточный доход на большинстве рынков, одновременно контролируя риск снижения в приемлемых пределах за счёт стоп-лосса и гистерезиса.
Данная статья является оригинальным описанием стратегии платформы FMZ Quant и предназначена только для изучения и обмена, не является инвестиционной рекомендацией.
- 1


