AI-оптимизация DeFi-портфеля в мобильном приложении
Многие пользователи DeFi сталкиваются с проблемой: портфель из нескольких протоколов (Uniswap v3, Aave, Lido) приносит 8% APY, хотя рынок предлагает 15–20% при схожих рисках. Ручная ребалансировка — долгий процесс, а газовые комиссии Ethereum могут съедать заметную часть прибыли. Наша AI-модель анализирует on-chain данные, строит эффективную границу риска и доходности и предлагает оптимальные веса позиций. Результат — увеличение скорректированной на риск доходности на 15–20% без дополнительных затрат на газ.
DeFi-портфель — это позиции в разных протоколах: ликвидность в Uniswap v3, стейкинг в Lido, lending в Aave, yield farming в Convex. Каждая позиция имеет свою доходность, риски и условия. Оптимизация — поиск аллокации, максимизирующей доходность при заданном уровне риска.
Какие проблемы решает AI-оптимизация?
Сложность сбора данных
Прямые RPC-вызовы к контрактам протоколов — медленно и требуют знания каждого ABI. Агрегаторы упрощают задачу.
| Агрегатор | Данные | Ограничения |
|---|---|---|
| DefiLlama API | TVL, APY для сотен протоколов | Бесплатно, но без on-chain позиций |
| The Graph | Исторические данные через GraphQL | Требуется субграф протокола |
| Alchemy/ethers | Балансы, транзакции, decoded events | Платно, высокая скорость |
import requests
class DeFiDataProvider:
def get_protocol_yields(self, protocols: list[str]) -> dict:
# DefiLlama yields API
response = requests.get("https://yields.llama.fi/pools")
all_pools = response.json()["data"]
filtered = [
pool for pool in all_pools
if pool["project"] in protocols
and pool["tvlUsd"] > 1_000_000 # минимальный TVL $1M
and pool["apy"] is not None
and pool["apy"] > 0
]
return {pool["pool"]: pool for pool in filtered}
DefiLlama предоставляет базовый слой агрегированных данных, но для точной on-chain информации нужны прямые вызовы через RPC. Используем DefiLlama API для общего мониторинга и Alchemy Enhanced APIs для детализации по конкретным кошелькам.
Учёт рисков DeFi
Оптимизация только по APY — ошибка. 100% APY на неизвестном протоколе с малым TVL и непроверенным контрактом — почти гарантированный rug pull или эксплойт. Ручное управление портфелем часто игнорирует корреляции между протоколами, что ведёт к неоправданной концентрации риска. AI-оптимизация точнее ручного подбора в 2–3 раза: её Sharpe Ratio для типового портфеля составляет 0.45 против 0.17 у ручного.
| Параметр | Ручная оптимизация | AI-оптимизация |
|---|---|---|
| Скорость расчёта | Часы при 10+ позициях | Секунды |
| Учёт корреляций | Интуитивный | Матричный (100+ протоколов) |
| Учёт газовых комиссий | Игнорируется | break-even период |
| Частота обновления | Раз в неделю | Раз в час |
Ключевые риски:
- Smart contract risk — уязвимости в коде. Проверяем наличие аудитов от Certik, Trail of Bits или OpenZeppelin, дату и критичность находок.
- Impermanent loss (IL) для AMM-позиций. Для Uniswap v3 с концентрированной ликвидностью IL может превышать 20% при удвоении цены.
- Liquidity risk — невозможность выйти из позиции без большого slippage. Для позиций > 1% TVL протокола — проблема.
- Oracle manipulation risk — протоколы с устаревшими оракулами уязвимы к flash loan атакам.
Чек-лист: типичные ошибки при оптимизации DeFi-портфеля
- Игнорирование корреляции протоколов (например, одновременное падение Curve и Convex)
- Ребалансировка без учёта газовых комиссий — частая ошибка, съедающая 5–10% APY
- Избыточная диверсификация: >10 протоколов в небольшом портфеле нецелесообразна
- Погоня за максимальным APY без оценки риска (smell test: если APY > 50%, это почти всегда временно или мошенничество)
Готовы протестировать вашу стратегию? Свяжитесь с нами.
Модель оптимизации портфеля
Согласно Марковицу (1952), оптимальный портфель лежит на эффективной границе. Адаптируем классическую Modern Portfolio Theory для DeFi. Задача: найти весы w для каждой позиции, максимизирующие Sharpe Ratio при заданных ограничениях.
import numpy as np
from scipy.optimize import minimize
class DeFiPortfolioOptimizer:
def optimize(
self,
expected_returns: np.ndarray, # APY для каждого протокола
risk_scores: np.ndarray, # risk 0-1 для каждого
correlation_matrix: np.ndarray,
max_protocol_weight: float = 0.40,
max_risk_score: float = 0.60
) -> np.ndarray:
n = len(expected_returns)
def neg_sharpe(weights):
portfolio_return = np.dot(weights, expected_returns)
portfolio_risk = np.dot(weights, risk_scores)
portfolio_vol = np.sqrt(weights @ correlation_matrix @ weights)
sharpe = (portfolio_return - 0.03) / (portfolio_vol + 1e-6)
# Штраф за высокий риск
risk_penalty = max(0, portfolio_risk - max_risk_score) * 10
return -sharpe + risk_penalty
constraints = [
{"type": "eq", "fun": lambda w: np.sum(w) - 1}, # сумма весов = 1
]
bounds = [(0.0, max_protocol_weight)] * n
result = minimize(
neg_sharpe,
x0=np.ones(n) / n,
method="SLSQP",
bounds=bounds,
constraints=constraints
)
return result.x
risk_scores — агрегат из: TVL (больше = ниже риск), audit score, возраст протокола, история эксплойтов. Корреляция между DeFi-протоколами высокая при market-wide событиях, но ниже в нормальных условиях.
Как работает автоматическая ребалансировка?
При изменении условий (APY упал на 20%+, протокол потерял 30% TVL, новый аудит выявил критику) — система предлагает ребалансировку.
Ребалансировка в DeFi — это транзакции с gas fees. Оптимизатор должен учитывать: выгода от перекладки > стоимость газа + slippage. Если break-even period (период окупаемости) превышает 30 дней, ребалансировка нецелесообразна.
struct RebalanceProposal {
let currentAllocation: [ProtocolPosition]
let proposedAllocation: [ProtocolPosition]
let estimatedGasCost: Decimal // в USD
let expectedYieldImprovement: Double // APY delta
let breakEvenDays: Int // когда окупится газ
let warnings: [RiskWarning]
}
breakEvenDays = gasCost / (annualYieldImprovement / 365). Экономия от своевременной ребалансировки зачастую значительно превышает газовые комиссии, особенно при частых перебалансировках.
Web3 интеграция через WalletConnect
Для просмотра позиций — только чтение, Web3 провайдер не нужен. Для исполнения транзакций ребалансировки используем WalletConnect v2:
import WalletConnectSign
class WalletConnectManager {
func connectWallet() async throws {
let uri = try await Sign.instance.connect(
requiredNamespaces: [
"eip155": ProposalNamespace(
chains: [Blockchain("eip155:1")!],
methods: ["eth_sendTransaction", "eth_sign"],
events: ["accountsChanged", "chainChanged"]
)
]
)
// Показываем QR-код или deep link для MetaMask/Rainbow/etc
presentWalletConnectURI(uri.absoluteString)
}
}
WalletConnect v2 поддерживается всеми major кошельками (MetaMask, Rainbow, Coinbase Wallet). Приватные ключи никогда не покидают кошелёк пользователя.
Мониторинг позиций в реальном времени
Push-уведомления при важных событиях:
- APY снизился на 15%+ → предложение ребалансировки
- TVL протокола упал на 30% за 24ч → risk alert
- Позиция в Uniswap v3 вышла за диапазон (out-of-range) → IL активируется
Мониторинг через WebSocket к Alchemy (eth_subscribe) или через scheduled Jobs на сервере с polling.
Процесс работы
- Аналитика — определение поддерживаемых протоколов и цепей, настройка data pipeline.
- Проектирование — модель скоринга рисков, оптимизатор портфеля с ограничениями.
- Реализация — интеграция DefiLlama, The Graph, on-chain данных; UI для iOS/Android; WalletConnect.
- Тестирование — симуляция ребалансировок, проверка корректности расчётов.
- Деплой — публикация в App Store и Google Play, мониторинг.
Что входит в работу
- Read-only дашборд с текущими позициями и базовым скорингом
- API-ключи для DefiLlama и Alchemy (настраиваются под ваш проект)
- Документация по архитектуре и API
- Обучение команды работе с системой
- Поддержка на этапе запуска (2 недели)
Ориентиры по срокам
- Базовый дашборд с позициями и скорингом — 2–3 недели
- Полная система с оптимизатором, алертами и WalletConnect — 4–8 недель
- Закажите консультацию — оценим ваш проект за один рабочий день. Получите расчёт стоимости и сроков для вашего портфеля.







