Розробка системи соціального трейдингу
Соціальний трейдинг дозволяє менш досвідченим користувачам копіювати угоди успішних трейдерів, а професіоналам монетизувати свої стратегії через підписників. eToro популяризував цей формат в традиційних фінансах; у крипто це реалізовано в Bitget Copy Trade, Bybit Copy Trading та незалежних платформах.
Ключові компоненти
Leader Board — рейтинг трейдерів з верифікованими результатами: P&L, Sharpe ratio, max drawdown, win rate, кількість підписників. Дані повинні бути верифіковані.
Copy Trading Engine — при отримуванні сигналу від master-трейдера система автоматично повторює ордер для кожного follower з масштабуванням за розміром.
Управління ризиком для followers — follower встановлює ліміти: максимальний розмір позиції, максимальна просадка для auto-stop.
Система компенсації — розрахунок вознаграження для master-трейдерів: фіксований збір за підписку або performance fee.
Copy Trading Engine
class CopyTradingEngine:
async def on_master_order(self, master_id: str, order: MasterOrder):
"""Викликається коли master-трейдер розміщує ордер"""
followers = await self.follower_repo.get_active_followers(master_id)
if not followers:
return
# Обробляємо усіх followers паралельно
tasks = [
self.copy_order_for_follower(follower, order)
for follower in followers
]
results = await asyncio.gather(*tasks, return_exceptions=True)
# Логуємо результати
for follower, result in zip(followers, results):
if isinstance(result, Exception):
logger.error(f"Copy failed for {follower.id}: {result}")
async def copy_order_for_follower(self, follower: FollowerConfig, master_order: MasterOrder):
# Розрахуємо розмір позиції з налаштуванням follower
follower_balance = await self.get_usdt_balance(follower.user_id)
scaled_quantity = self.scale_quantity(
master_order.quantity,
master_order.master_portfolio_value,
follower_balance,
follower.allocation_pct,
)
# Перевіряємо ліміти ризику follower
risk_check = await self.risk_manager.check(
follower_id=follower.user_id,
symbol=master_order.symbol,
quantity=scaled_quantity,
side=master_order.side,
)
if not risk_check.approved:
logger.warning(f"Risk check failed: {risk_check.reason}")
return None
# Розміщуємо ордер
return await self.order_service.place_order(
user_id=follower.user_id,
exchange=follower.exchange,
symbol=master_order.symbol,
side=master_order.side,
order_type='MARKET',
quantity=scaled_quantity,
copy_reference=master_order.id,
)
Верифікація торгової історії
Критично: результати master-трейдерів повинні бути верифіковані через реальні дані біржі, не самодекларовані.
class TradeHistoryVerifier:
async def verify_master_account(self, user_id: str, exchange_api_key: str):
"""Верифікуємо торгову історію через read-only API ключ"""
exchange = ExchangeClient(exchange_api_key, permissions=['READ_ONLY'])
orders = await exchange.get_order_history(days=90)
trades = await exchange.get_trade_history(days=90)
metrics = calculate_performance_metrics(orders, trades)
await self.performance_repo.save(
user_id=user_id,
metrics=metrics,
verified=True,
verification_time=datetime.utcnow(),
)
return VerificationResult(verified=True, metrics=metrics)
Метрики продуктивності
def calculate_performance_metrics(orders: list, trades: list):
daily_returns = compute_daily_returns(trades)
return PerformanceMetrics(
total_pnl=sum(t.pnl for t in trades),
win_rate=len([t for t in trades if t.pnl > 0]) / len(trades),
sharpe_ratio=sharpe(daily_returns),
sortino_ratio=sortino(daily_returns),
max_drawdown=max_drawdown(daily_returns),
profit_factor=sum(t.pnl for t in trades if t.pnl > 0) / abs(sum(t.pnl for t in trades if t.pnl < 0)),
total_trades=len(trades),
)
Структура збору
Компенсація для master-трейдерів — ключовий елемент економіки платформи:
Performance Fee (20%) — master отримує 20% від прибутку follower. Розраховується через high-water mark: збір тільки на нові прибутки, які перевищують попередній максимум.
Management Fee — фіксований щомісячний збір від follower (наприклад, $10-50/місяць).
Комісія платформи — платформа утримує 30-40% від збору master.
Контролі ризику для Followers
Обов'язкові захисні механізми:
- Max drawdown stop — auto-stop копіювання при просадці > N%
- Max position size — не більше X% капіталу в одній позиції
- Whitelist символів — копіювати тільки певні активи
- Pause/Resume — ручне управління без розв'язування
- Emergency close — закрити всі відкриті позиції одночасно
Користувачі завжди мають мати контроль — це не опція, а вимога серйозної платформи.







