2026-05-29·5 min read·sota.io Team

EU MiCA CASP Market Integrity 2026: Best Execution, Order Handling, and Market Manipulation Controls for Developer Teams

Post #4 in the sota.io EU MiCA CASP Developer Compliance Series

EU MiCA CASP Market Integrity and Best Execution Requirements 2026

If you are building a crypto asset service provider (CASP) under the EU Markets in Crypto-Assets Regulation (MiCA), market integrity is not an optional feature — it is a structural engineering requirement. Two parts of MiCA work together here: the per-service operating rules in Title V (Arts.76-78, governing trading-platform operation, exchange, and order execution) and the market-abuse regime in Title VI (Arts.86-92, covering inside information, insider dealing, market manipulation, and trade surveillance). Together they define how your platform must handle orders, prevent manipulation, and demonstrate best execution. These rules apply the moment you receive your authorization from a national competent authority (NCA), currently expected from June 2025 onwards with the full transition period ending 30 December 2025 for existing providers.

This guide covers the developer-side obligations: what data you must collect, what controls your order engine must enforce, how to prove best execution, and how to detect and report market manipulation.


What the MiCA Market Integrity Framework Covers

MiCA borrowed heavily from the EU's existing financial market framework — MiFID II and MAR (Market Abuse Regulation) — and adapted it for crypto. The core developer obligations fall into five areas:

MiCA ArticleObligationDeveloper Impact
Art.76Operation of a trading platform (fair and orderly trading)Order routing architecture
Art.77Exchange services safeguardsTrade settlement integrity
Art.78Best execution policy and fair order handlingExecution quality logging, order book sequencing
Art.91Prohibition of market manipulationMonitoring and alerts
Art.92Prevention and detection of market abuse, suspicious transaction reportingSTOR (Suspicious Transaction and Order Report) pipeline; algorithmic trade surveillance

Each of these creates concrete technical work. Let us go through them one by one.


Art.76: Operation of a Trading Platform — No Dealing on Own Account Against Clients

MiCA Art.76 governs the operation of a trading platform for crypto-assets. Among its obligations, it prohibits the platform operator from dealing on own account — that is, from trading against its clients using the operator's own funds. This is the crypto equivalent of the MiFID II dealer/agency model distinction.

What it means technically:

Your exchange backend must have strict wallet and account segregation between client order flow and any CASP treasury operations. If you run a market-making desk alongside your exchange, those systems must be architecturally separate, with auditable logs showing that client order data was not accessible to your proprietary trading system before order execution.

[Client Order API] ──► [Order Engine] ──► [Matching Engine]
                                              │
[CASP Treasury] ─────────────────────────────┘
         ^
         NO DIRECT LINK — strict firewall required

Implementation checklist:

Common mistake: Running market-making bots using the same API keys as client order management. Even if the intent is liquidity provision, it creates an Art.76 risk if the bot can read pending client orders.


Art.78: Best Execution Policy

MiCA Art.78 requires CASPs that execute orders to take all sufficient steps to obtain the best possible result for clients — considering price, costs, speed, likelihood of execution and settlement, order size, and nature.

Unlike MiFID II, which applies to multiple execution venues, most crypto CASPs operate a single venue. But the obligation still applies: you must document how your execution mechanism works and be able to prove you are not systematically disadvantaging clients.

What you must build

1. Execution quality reporting

You need a pipeline that records, for every executed order:

# Execution quality record — stored per trade
execution_record = {
    "order_id": order.id,
    "client_id": order.client_id,
    "received_at_ns": time.time_ns(),
    "market_mid_at_receipt": get_mid_price(),
    "executed_price": trade.price,
    "executed_qty": trade.quantity,
    "slippage_bps": calc_slippage_bps(trade.price, get_mid_price()),
    "time_to_execute_ms": execution_latency_ms,
    "venue": "internal_ob",  # or external if routing
}

2. Best execution policy document

Your authorization application must include a written best execution policy. NCAs expect this to describe:

3. Periodic best execution review

ESMA guidance under MiFID II — which NCAs will apply by analogy to MiCA — requires CASPs to publish periodic reports on execution quality. For crypto CASPs, ESMA has indicated that annual reporting on execution quality statistics will be expected from 2026.

MetricRequired?Frequency
Average slippage by assetYesQuarterly internal
Average time-to-executionYesMonthly internal
Client complaint analysisYesAnnual report
NCA notification of material execution quality degradationYesAs events occur

Art.78: Fair Order Handling

The same Art.78 execution-of-orders regime requires that CASPs handle client orders promptly, fairly, and in a way that does not disadvantage clients in favour of the CASP. The key engineering obligation is strict order sequencing.

Time-stamp integrity

Your order book engine must sequence orders by arrival time. This sounds obvious but creates real engineering requirements:

Acceptable: UTC synchronized via PTP, documented accuracy ≤ 1ms
Problematic: NTP-only with unmonitored drift
Prohibited: Using server local time without synchronization

Order queuing rules

Your matching engine must document and enforce:

Anti-pattern to avoid: Using a message queue that does not guarantee ordering under high load (e.g., some Kafka consumer configurations). Your order queue must provide strict ordering guarantees.


Art.77: Safeguards for Exchange Services

Art.77 addresses CASPs providing exchange services — exchanging crypto-assets for funds (crypto-to-fiat) or for other crypto-assets (crypto-to-crypto). The core obligation: you must implement controls to ensure that the price you quote to clients reflects real market conditions and is not manipulated by your own trading activity.

Price source integrity

# Price source integrity check
def get_validated_price(pair: str) -> Decimal:
    prices = []
    for source in PRICE_SOURCES:  # minimum 3 independent sources
        price = source.get_price(pair)
        prices.append(price)
    
    median = statistics.median(prices)
    for price in prices:
        if abs(price - median) / median > MAX_DEVIATION_PCT:
            alert_compliance(f"Price deviation detected: {pair} {price} vs median {median}")
    
    return median

NCA examiners will ask for evidence that your quoted prices are derived from validated, independent sources and that a single compromised feed cannot cause client harm.


Art.91–92: Market Manipulation Prevention

This is the highest-engineering-effort obligation in the MiCA market integrity framework. It lives in Title VI (the market-abuse regime), not in the per-service operating articles. MiCA Art.91 prohibits market manipulation, including:

MiCA Art.92 (prevention and detection of market abuse) requires CASPs to have detection systems in place, not just policies.

Detection controls your platform must implement

1. Wash trade detection

# Wash trade pattern: same entity buying and selling within short window
def detect_wash_trade(trade: Trade, lookback_seconds: int = 300) -> bool:
    recent_trades = get_trades_by_client(
        client_id=trade.client_id,
        pair=trade.pair,
        since=trade.timestamp - timedelta(seconds=lookback_seconds)
    )
    
    # Same client on both sides (possible via sub-accounts or related accounts)
    buy_qty = sum(t.qty for t in recent_trades if t.side == "buy")
    sell_qty = sum(t.qty for t in recent_trades if t.side == "sell")
    
    # Flag if net position change is <5% of gross traded value
    gross_volume = buy_qty + sell_qty
    net_position_change = abs(buy_qty - sell_qty)
    
    if gross_volume > MIN_GROSS_VOLUME and net_position_change / gross_volume < 0.05:
        return True  # High probability wash trade
    return False

2. Spoofing and layering detection

# Layering: large orders placed then cancelled before execution
def check_cancel_to_trade_ratio(client_id: str, pair: str, window_hours: int = 24) -> dict:
    events = get_order_events(client_id, pair, window_hours)
    
    placed = sum(1 for e in events if e.type == "placed")
    cancelled = sum(1 for e in events if e.type == "cancelled")
    executed = sum(1 for e in events if e.type == "executed")
    
    cancel_ratio = cancelled / placed if placed > 0 else 0
    
    return {
        "cancel_ratio": cancel_ratio,
        "alert": cancel_ratio > CANCEL_RATIO_THRESHOLD,  # e.g. 0.95
        "executed": executed,
    }

3. Cross-market manipulation

If you list multiple pairs, you must monitor for manipulation across pairs (e.g., manipulating BTC/EUR to affect BTC/USDC pricing). This requires cross-pair correlation analysis on unusual order patterns.

Alert thresholds and escalation

Your compliance system must define thresholds that trigger escalation to your compliance officer (and ultimately to the NCA). The ESMA guidelines on market abuse under MAR, which NCAs will apply to MiCA, suggest the following escalation tiers:

SeverityTriggerResponse
L1 — MonitorCancel ratio >0.85Flag for daily review
L2 — AlertCancel ratio >0.95 OR wash trade pattern detectedCompliance officer review within 2h
L3 — SuspendConfirmed manipulation patternSuspend account + prepare STOR
L4 — ReportMaterial market manipulationSTOR to NCA within 1 business day

Art.92: Suspicious Transaction and Order Reports (STORs)

Under Art.92, any person professionally arranging or executing transactions in crypto-assets must submit a Suspicious Transaction and Order Report (STOR) to their NCA whenever they have reasonable grounds to suspect a transaction may constitute market abuse.

STOR pipeline architecture

[Order Monitoring Engine]
        │
        ▼
[Alert Queue] ─► [Compliance Review Dashboard]
        │                    │
        │              [Human Decision: STOR or Not]
        │                    │
        ▼                    ▼
[Pattern Archive]    [STOR Generation]
                            │
                            ▼
                    [NCA Secure Submission Portal]
                    (each EU member state has own portal)

Technical requirements for STORs:

  1. Tamper-evident audit trail: Your order and transaction records must be stored in a way that makes post-hoc modification detectable. Use hash chaining or a write-once storage system.
  2. Data completeness: STORs require order timestamps, client IDs, asset IDs, quantities, prices, execution status, and the basis for suspicion.
  3. NCA portal integration: Each member state has its own STOR submission mechanism. The ESMA STOR platform is coordinated but national portals vary. Your compliance team needs registered accounts pre-authorization.

Algorithmic Trading Controls

Unlike MiFID II, MiCA has no standalone algorithmic-trading article. Instead, the controls below flow from two sources: the operation-of-a-trading-platform obligations in Art.76 (resilient systems, orderly trading, and the ability to halt trading) and the prevention-and-detection-of-market-abuse duty in Art.92 (which expressly covers orders, cancellations, and submissions, including those generated by automated systems). In practice, NCAs expect a CASP whose clients use algorithmic trading bots to ensure that:

  1. Bots are registered with the CASP before they can operate
  2. The CASP maintains a kill-switch capable of disabling any bot within seconds
  3. Bot parameters are documented (maximum order rate, maximum position size, permitted strategies)
  4. Stress testing of algorithmic trading systems is conducted annually

Kill-switch implementation

class AlgoTradingController:
    def register_bot(self, client_id: str, bot_config: BotConfig) -> str:
        bot_id = generate_bot_id()
        self.bots[bot_id] = {
            "client_id": client_id,
            "config": bot_config,
            "status": "active",
            "registered_at": datetime.utcnow(),
            "kill_switch": False,
        }
        # Log to compliance audit trail
        self.audit_log.record(f"BOT_REGISTERED: {bot_id} for {client_id}")
        return bot_id
    
    def kill_bot(self, bot_id: str, reason: str) -> None:
        """Hard kill — cancel all open orders and block new orders."""
        bot = self.bots[bot_id]
        bot["kill_switch"] = True
        bot["killed_at"] = datetime.utcnow()
        bot["kill_reason"] = reason
        
        # Cancel all open orders
        open_orders = self.order_book.get_open_orders(bot_id=bot_id)
        for order in open_orders:
            self.order_book.cancel(order.id, reason=f"KILL_SWITCH: {reason}")
        
        # Block new order submissions
        self.block_client_orders(bot["client_id"], bot_id=bot_id)
        
        # Alert compliance
        self.compliance_alert(f"BOT_KILLED: {bot_id} — {reason}")

The kill-switch must be operable by compliance staff without developer intervention — a dedicated compliance console with bot management capability is standard practice.


Pre-Authorization Technical Readiness Checklist

Before submitting your MiCA CASP authorization application, verify:

Order integrity:

Best execution:

Market manipulation prevention:

STOR pipeline:

Algorithmic trading:


ESMA Technical Standards Timeline for CASPs

ESMA is still developing binding Technical Standards under MiCA. The following areas are expected to have delegated regulation by Q4 2025 / Q1 2026:

Technical StandardExpectedImpact
RTS on best execution reporting formatQ4 2025Execution quality report schema
ITS on STOR submission formatQ4 2025STOR pipeline data model
RTS on market manipulation thresholdsQ1 2026Alert threshold calibration
Guidelines on algorithmic trading stress-testingQ2 2026Annual stress-test methodology

Action: Subscribe to ESMA's MiCA consultation page to receive notifications when these are finalised. Your detection thresholds will likely need adjustment once binding RTS are published.


What Comes Next in This Series

This is Post 4 of 5 in our MiCA CASP Developer Series:

  1. ✅ EU MiCA CASP SaaS Compliance Guide 2026 — Overview for developers
  2. ✅ EU MiCA CASP IT Systems, Cybersecurity, and AML/KYC Requirements
  3. ✅ EU MiCA CASP Client Asset Safeguarding — Art.70 Segregation
  4. EU MiCA CASP Market Integrity — Best Execution, Order Handling, Market Manipulation (this post)
  5. 🔜 EU MiCA CASP Compliance Finale — Complete Developer Toolkit and Authorization Checklist

The finale will consolidate all five posts into a single master checklist, covering authorization documentation, ongoing obligations, NCA reporting timelines, and the technical audit evidence that examiners expect to find.


How sota.io Fits into Your MiCA CASP Stack

Building a MiCA-compliant CASP requires EU-resident infrastructure — your order book, client data, and compliance logs must be stored in the EU. The CLOUD Act exposure of US-hosted platforms creates regulatory risk under MiCA's Art.70 (asset segregation) and the data retention requirements under Art.92 (STOR and market-abuse detection audit trails).

sota.io deploys on Hetzner Germany, with no US parent company and no CLOUD Act exposure. Your compliance logs stay under EU jurisdiction — as MiCA requires.

EU-Native Hosting

Ready to move to EU-sovereign infrastructure?

sota.io is a German-hosted PaaS — no CLOUD Act exposure, no US jurisdiction, full GDPR compliance by design. Deploy your first app in minutes.