We often work with clients who want to replicate the success of eToro or Bitget Copy Trade but with unique features — trader verification via exchange API or a custom compensation scheme. In this article, we break down the technical aspects using a real project as an example. As Bitget Research notes, copy trading is the fastest-growing segment of crypto trading.
How Copy Trading Works
The core component is the Copy Trading Engine. It processes a master's order, checks risk limits, and places a copy for each subscriber. Position scaling is calculated as a percentage of capital: if the master allocates 10% of their portfolio, and the follower allocates 2% of their capital for copying, the trade size is proportional. Parallel processing via asyncio ensures low latency even with thousands of subscribers.
class CopyTradingEngine:
def __init__(self, order_service, follower_repo, risk_manager):
self.order_service = order_service
self.follower_repo = follower_repo
self.risk_manager = risk_manager
async def on_master_order(self, master_id: str, order: MasterOrder):
"""Called on every new master trader order"""
followers = await self.follower_repo.get_active_followers(master_id)
if not followers:
return
# Process all followers in parallel
tasks = [
self.copy_order_for_follower(follower, order)
for follower in followers
]
results = await asyncio.gather(*tasks, return_exceptions=True)
# Log results
for follower, result in zip(followers, results):
if isinstance(result, Exception):
logger.error(f"Copy failed for {follower.id}: {result}")
else:
logger.info(f"Copied order for {follower.id}: {result.id}")
async def copy_order_for_follower(
self,
follower: FollowerConfig,
master_order: MasterOrder
) -> Order:
# Calculate position size with follower settings
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, # % of follower's capital to copy
)
# Check follower's risk limits
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 for {follower.id}: {risk_check.reason}")
return None
# Place order
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', # copy as market for guaranteed execution
quantity=scaled_quantity,
copy_reference=master_order.id,
)
def scale_quantity(
self,
master_qty: Decimal,
master_portfolio: Decimal,
follower_balance: Decimal,
allocation_pct: float,
) -> Decimal:
"""Scale position relative to portfolio size"""
master_position_pct = master_qty / master_portfolio
follower_allocation = follower_balance * Decimal(str(allocation_pct / 100))
return follower_allocation * master_position_pct
In one recent project, this engine reduced order processing time from 800ms to 150ms by optimizing parallel execution and caching follower configurations, handling over 2,000 simultaneous copies without errors.
Why Trader Verification Is Critical
A social trading platform relies on trust. If traders upload P&L screenshots themselves, it invites fraud. We implement verification via read-only exchange API. The system downloads 90 days of order history and calculates objective metrics: Sharpe ratio, win rate, max drawdown, profit factor. Results are saved with a verified flag, eliminating manipulation. API-based verification is 10x more accurate than self-declaration because no manual input distorts the data.
class TradeHistoryVerifier:
async def verify_master_account(self, user_id: str, exchange_api_key: str) -> VerificationResult:
"""Verifies trading history via read-only API key"""
# Connect to exchange with user's read-only key
exchange = ExchangeClient(exchange_api_key, permissions=['READ_ONLY'])
# Fetch order history for last 90 days
orders = await exchange.get_order_history(days=90)
trades = await exchange.get_trade_history(days=90)
# Calculate verified metrics
metrics = calculate_performance_metrics(orders, trades)
# Save with 'verified' flag
await self.performance_repo.save(
user_id=user_id,
metrics=metrics,
verified=True,
verification_time=datetime.utcnow(),
)
return VerificationResult(verified=True, metrics=metrics)
| Metric | Self-Declaration | Verified (read-only API) |
|---|---|---|
| Win rate | Can be inflated | Objective, based on trades |
| Max drawdown | Often hidden | Accurate, from full history |
| Sharpe ratio | Unverifiable | Correct, uses daily returns |
| Verification time | Instant | ~5-10 seconds to load |
Comparing Approaches: White-Label vs In-House vs Our Development
Ready white-label solutions limit customization — you can't add your own compensation scheme or unique risk controls. In-house requires hiring a team of 3-5 senior developers for 6+ months, which costs more. We offer a balance: you get a product tailored to your business model in 2-4 months. With over 5 years in crypto trading and 10+ delivered projects, we know how to avoid common pitfalls.
| Criteria | White-Label | In-House | Our Development |
|---|---|---|---|
| Time to launch | 1-2 months | 6+ months | 2-4 months |
| Customization | Limited | Full | Full for your project |
| Risk management | Fixed | Individual | Individual + best practices |
| Cost | Fixed | High | Individual |
What's Included in Turnkey Development
Full deliverables list
- Architectural documentation (UML diagrams, ER database model) - Source code with comments (Solidity, Python, TypeScript) - Integration with 3-5 exchanges (Binance, Bybit, Kraken, etc.) - Smart contracts for performance fee (high-water mark) - Admin panel with copy trading and compensation monitoring - Tests (unit, integration, stress) and CI/CD - User and developer documentation - 1 month of warranty support after launchCommon Mistakes at Start
- Choosing the wrong order type — copying with limit orders may fail in high volatility; market orders guarantee execution, but slippage must be modeled.
- Ignoring high-water mark — without it, traders earn performance fees even after losses, repelling users.
- A flat limit system — a single limit for all assets doesn't work; need per-symbol, per-volatility, per-historical correlation settings.
- Many strategy copying projects forget to configure risk management for specific instruments.
Our Process
- Requirements audit — discuss functionality, target exchanges, monetization model.
- Design — develop architecture, UI prototype, smart contracts.
- Core development — Copy Trading Engine, verification, compensation system.
- Integration — connect exchange APIs, configure limits and risk management.
- Testing — unit tests, penetration tests, load testing with thousands of simultaneous copies.
- Deployment and support — launch on chosen infrastructure, hand over documentation, train your team.
Timeline and Cost
A basic MVP with copy trading, verification, and simple compensation can be launched in 2-3 months. Complex solutions with multiple exchanges, smart contracts, and advanced analytics take 4-5 months. Timelines are discussed during the audit. Development cost is calculated individually, depending on the number of API integrations and customization. We provide a detailed cost estimate before starting and fix the price in the contract. Contact us to discuss your project.
Guarantees and Support
We provide a code warranty (1 month of free bug fixes) and post-release support. You receive all source code, repository access, and documentation. We will train your team in administration so you can add new exchanges and extend functionality independently. Our projects handle up to 10,000 active subscribers without performance loss. Social trading is a fast-growing segment, and we help you claim your place.
Contact us for a project assessment — discuss tasks, tech stack, and timelines. Get a consultation today.







