Project Background

Recently worked on an overseas exchange system, with client requirements including perpetual contracts, delivery contracts, and K-line control features. Tech stack is Vue + Java, here’s a record of the development process.

Technical Solution

Frontend: Vue 3 + Vue 2 (both ends)

Backend: Java Spring Boot

Database: MySQL + Redis

Vue was chosen because of its excellent ecosystem and rich component library, making it very suitable for building complex interfaces like exchanges.

Core Features

1. Contract Trading Types

This system supports three types of contract trading:

Perpetual Contract: No expiration date, can be held indefinitely

Delivery Contract: Has an expiration date, settles upon delivery

Spot Trading: Buying and selling cryptocurrencies

“`java

// Contract Service

@Service

public class ContractService {

// Open Position

public OpenResult openPosition(OpenRequest request) {

// Check if position exceeds limit

if (checkPositionLimit(request)) {

throw new BusinessException(“Position exceeds limit”);

}

// Calculate margin

BigDecimal margin = calculateMargin(request);

// Create position record

Position position = new Position();

position.setSymbol(request.getSymbol());

position.setType(request.getType());

position.setDirection(request.getDirection());

position.setAmount(request.getAmount());

position.setLeverage(request.getLeverage());

position.setMargin(margin);

positionMapper.insert(position);

return new OpenResult(position.getId());

}

}

“`

2. K-line Control

This is a must-have feature for overseas exchanges. Sometimes manual intervention in K-line trends is needed, such as pumping or dumping the market.

Implementation approach:

Store preset K-line data in the database

API returns preset data instead of real exchange data

“`java

@Service

public class KLineService {

// Get K-line data

public List getKLines(String symbol, String interval) {

if (isControlEnabled(symbol)) {

return getPresetKLines(symbol, interval);

}

return getRealKLines(symbol, interval);

}

// Set K-line control

public void setKLineControl(String symbol, List presetData) {

redis.set(“kline:” + symbol, JSON.toJSONString(presetData));

}

}

“`

This feature should be used cautiously, mainly for market makers to maintain the market.

3. Staking Financial Products

Supports holding coins for interest, a standard feature for exchanges.

Risk Control Measures

Risk control is the top priority for exchange systems:

Position Limit: Total position per user cannot exceed a certain amount

Withdrawal Limit: Daily withdrawal frequency and amount limits

Anomaly Detection: Large frequent operations should trigger risk control

Bankruptcy Handling: Losses exceeding margin should trigger forced liquidation

Pitfalls Encountered

Precision Issues: Cryptocurrency calculations must use BigDecimal with sufficient precision

Concurrency Issues: High-frequency trading requires proper concurrency handling, can use Redis distributed locks

K-line Data Volume: K-line data is large and requires sharded storage

UI Design

Exchange UI should be professional, referring to mainstream exchanges like Binance and Huobi for layout: K-line chart on the left, trading panel in the middle, depth chart and recent trades on the right. Dark theme looks professional and is easier on the eyes.

Summary

Exchange system development challenges mainly involve:

Performance: High-frequency trading has high performance requirements

Risk Control: Must handle various edge cases properly

Fund Security: Involves real money, security cannot be emphasized enough!

Feel free to leave comments if you have questions!