m. MuskatGroupRU ↗

MuskatGroup / Products

Ethereum: a live monitor for two trading strategies

A .NET trading robot rebuilt in Rust: live ETH/USDT data, mean deviation, SMA 3/8 and a virtual trade journal.

ReactTypeScriptViteRustAxumSQLite
Ethereum monitor with deviation bands

The task

Turn the original trading robot into a clear demonstration of live Ethereum prices, decision rules and individual virtual buys and sells. Visitors need no account, exchange credentials or trading controls.

Two strategies

The primary strategy uses the last 20 closed minute prices. It buys below μ − 2σ and sells when the price returns to μ. Population standard deviation uses division by N.

The additional strategy preserves the original algorithm: simple moving averages of 3 and 8. An upward crossover opens a position; a downward crossover closes it. Equal lines are not a crossover. Each strategy keeps an independent position and cannot buy again before selling.

Live data and transparent execution

Every ten seconds the Rust service requests ETH/USDT Spot minute candles from Bybit’s public API. Signals use closed candles only. Virtual fills use the following candle’s opening price and a fixed size of 1 ETH. Fees and slippage are not modeled. No real exchange orders are submitted.

Historical candles warm up indicators at startup; they never become fabricated past trades. Restarts and data gaps do not backfill missed trades. The interface identifies stale quotes and displays the latest source update.

The interface

An interactive chart brings together price, indicators and trade markers. The journal explains each decision, and selecting a row highlights that event on the chart. Three viewing ranges, Russian and English, light and dark themes, a mobile layout and keyboard controls support exploration.

These screenshots show the running demo with actual market quotes. An empty strategy journal means there have been no new signals since startup.

Architecture and modernization

The original .NET/Redis application is replaced with Rust, Axum, Tokio and SQLx. Domain mathematics is separated from HTTP, the market adapter and persistence. SQLite transactionally stores positions, the journal and the processed-candle checkpoint. OpenAPI generates TypeScript types for the new React/Vite interface.

The public service is read-only. Its independent Compose project keeps SQLite on a persistent volume. The API reaches its quote provider through a separate outbound network and exposes no host ports. Releases support database backups and coordinated image/database rollback.

A public demo link will be enabled after deployment to its own subdomain.

Product interface

Open demo ↗