{}

ArbBot .NET

DRY-RUN

C# port of cross-exchange arbitrage. .NET 8 Worker service, TAKER_TAKER inventory-neutral strategy across Bybit + Binance. Parity benchmarked against Python baseline.

Key Numbers

At a Glance

.NET 8

Runtime

Benchmarked

Parity

Bybit + Binance

Exchanges

systemd

Deployment

Overview

About This Project

A ground-up C# port of the cross-exchange arbitrage system, built on .NET 8 as a Worker service. The project demonstrates cross-language system translation -- taking a battle-tested Node.js production bot and reimplementing it in a strongly-typed, high-performance runtime while maintaining exact behavioral parity.

The system implements a TAKER_TAKER strategy across Bybit and Binance, with full WebSocket feed handling, order lifecycle management, and state persistence. Every component was parity-benchmarked against the Python/Node.js baseline to ensure identical behavior under the same market conditions.

Deployment uses systemd for process management with YAML-driven configuration, JSONL structured logging, and an observability layer that enables detailed post-trade analysis and debugging.

Features

What It Does

Cross-Language System Port

Complete reimplementation from Node.js/Python to C# .NET 8, preserving exact behavioral parity while leveraging strong typing and .NET's performance characteristics.

Observability Layer

Structured logging, metrics emission, and trace correlation enable detailed post-trade analysis and debugging across the full order lifecycle.

YAML Configuration

Declarative configuration for exchange credentials, strategy parameters, risk limits, and deployment settings with environment-specific overrides.

Parity Reporting

Automated comparison framework validates that the .NET implementation produces identical decisions to the baseline system under recorded market scenarios.

Architecture

How It Works

$

Challenges

What Made This Hard

Achieving exact behavioral parity across two fundamentally different language runtimes required meticulous attention to floating-point arithmetic, async timing behavior, and WebSocket reconnection semantics. The .NET ecosystem's different approach to async/await compared to Node.js event loops meant rethinking concurrency patterns while preserving the same logical execution order.

Stack

Tech Stack

C#.NET 8YAMLsystemd