Algorithmic Trading for Prediction Markets

Describe a strategy.
Deploy in seconds.

Meridian turns natural language into executable trading strategies on Polymarket. AI generates the code, you control the deployment.

How it works

Three steps to live trading

1

Describe

Write what you want in plain English. "Buy YES tokens when momentum exceeds 3% over 15 minutes with a trailing stop loss."

2

Review

AI generates a complete Python strategy with proper risk management. Refine it through conversation until it's exactly right.

3

Deploy

One click to go live — paper trade first, then real. Monitor P&L, positions, and orders in real time from your dashboard.

Platform

Built for serious traders

AI Strategy Generation

Claude generates production-grade Python strategies from natural language. Iterate through conversation to refine parameters, risk limits, and entry logic.

Paper & Live Trading

Test with simulated trading before committing capital. Switch to live execution with one toggle. Same code, same monitoring, real markets.

Real-Time Monitoring

Live-streaming P&L charts, position tracking, and order history. Metrics update every 10 seconds with auto-reconnecting data feeds.

Code Sandboxing

Every strategy is AST-validated before execution. No filesystem access, no network calls, no dangerous imports. Your code runs in an isolated process.

Encrypted Credentials

Exchange private keys are encrypted with AES-256-GCM at rest. Keys are decrypted only at deploy time and passed in-memory — never written to disk.

Polymarket Native

Built on the polymarket-framework with direct CLOB integration. Full order book access, position management, and Polygon L2 settlement.

Under the hood

Real Python. Full control.

Every strategy is a Python class with explicit evaluate, size, and manage methods. No black boxes.

class MomentumScalper(BaseStrategy):
    """Buy on upward momentum, exit on reversal."""

    def evaluate(self, market, book) -> Signal | None:
        mid = book.mid_price
        momentum = (mid - self.history[0]) / self.history[0]
        if momentum >= self.threshold:
            return Signal(
                signal_type=SignalType.BUY,
                token_id=book.token_id,
                confidence=min(momentum / self.threshold, 1.0)
            )

    def size(self, signal, portfolio) -> SizeResult:
        adjusted = self.base_size * Decimal(str(signal.confidence))
        return SizeResult(size=adjusted, price=signal.target_price)

    def manage(self, position, book) -> Signal | None:
        pnl = (book.mid_price - position.avg_entry_price) / position.avg_entry_price
        if pnl >= self.take_profit:
            return Signal(signal_type=SignalType.EXIT, token_id=position.token_id)

Start trading smarter

Create an account, describe your strategy, and deploy in minutes. Paper trade for free.