Portfolio case study · AI product

ZeusTrading

An autonomous Bitcoin trading robot for Indonesian rupiah (BTC/IDR), designed so that a person who is not a trader can trust it, supervise it from a phone, and stop it in one tap. The strategy is deliberately plain. The product is the safety, the explanations and the operations around it.

My roleFounder who leads product and design: the rules, the tests and the operations.
StatusRunning 24/7. Small, capped real-money allocation with a hard loss limit. A simulated twin runs alongside.
Built withPython (standard library only), Cloudflare Workers + Durable Objects, WebAuthn passkeys, Steam Deck home server
DateOctober 2026

Internal tool, not for sale. ZeusTrading trades only the founder's own account. It is not offered as a product, signal or fund-management service, and nothing here is an invitation to invest.
Alat internal, tidak dijual. ZeusTrading hanya memperdagangkan akun pribadi pendiri. Bukan produk, jasa sinyal, atau jasa pengelolaan dana, dan halaman ini bukan ajakan berinvestasi.

Snapshot

+357% vs +140%
Backtest return of the rule vs buying and holding from the first day the rule could act, ~5.2 years, all trading costs and tax included*
−36% vs −74%
Worst peak-to-trough fall of the rule vs buy-and-hold. Protecting capital is the stated goal
93 variants
From 29 open-source strategies tested. None beat the rule in every period, so the rule stayed
13 trades
Completed trades plus the current open position: 5 of 13 profitable, average win +51%, average loss −6.7%, ~76 days held, ~52% of time invested, costs about 5% of profit

Past results are not a guarantee of future results. Backtest figures use 0.2% exchange fee per side, 0.05% slippage per side and 0.21% sales tax.

* Buy-and-hold from the very first data day (before the rule could act) would be +80%; we show the stricter comparison.

1 · Problem and goal

Automated crypto trading usually fails for human reasons: too much risk, overfitted strategies, no one watching, and reports only the builder can read. I wanted the opposite. The owner (me) is not a trader, will not stare at charts, and must still be able to answer three questions at any time: is it running, is my money safe, and can I stop it?

Honest framing. The strategy is a simple, classic trend-following rule chosen for robustness, not novelty. What I am showing is product judgement: scoping, safety design, operations, and research discipline for an AI-assisted system that touches real money.

2 · Product decisions

Twelve decisions shaped the product. Each one answers a specific way the system could hurt the owner or mislead them.

01

Plain-language reports

Daily and weekly reports read like a note from a colleague. Jargon such as moving averages, long, flat and drawdown is banned from owner-facing text, and this is written into the rules every change must follow.

02

Owner-only passkey login

The dashboard accepts only the owner's device passkey (WebAuthn). There are no passwords. It adds a one-time recovery code, a lockout after repeated failures, and an alert on every new login.

03

One-tap emergency STOP

The owner can only reduce risk from the phone. STOP halts the robot; resuming requires physical access to the server. If the cloud layer dies, the robot keeps its own loss limit.

04

Staged loss alerts

Escalating push alerts when the real-money value falls 10%, 15% and 20%, before a hard stop ends trading at the loss limit. Also alerts for held trades, stale data, a silent robot and real-vs-simulation mismatch.

05

Pre-trade sanity checks

Before any real order: daily data must be fresh, the live price must be near the last close, and the exchange balance must cover the robot's own ledger. A failed check means no trade and a retry next hour. Orders are never auto-repeated, so a double buy cannot happen.

06

Real-vs-simulation parity

A simulated twin takes the same decisions on practice money. If the real robot ever decides differently from the simulation, the owner is alerted. The twin is the system's conscience.

07

Primary / standby baton

A home server is primary and a cloud server is standby. Only the holder of a single "baton" may trade; the standby takes over only after the primary has been silent for three hours. If the baton service is unreachable, nobody trades: better a day late than running twice.

08

Off-site record backup

After each daily decision the baton holder uploads the robot's ledger and journal off-site. A server taking over restores them first. If the records lag the real balance, the real-money robot holds back and warns.

09

Monthly PDF with tax

On the 1st of each month the owner receives a PDF: real and simulated profit or loss, every trade, the 0.21% tax per sale, and the audit result. Built with a small PDF writer that needs no third-party library.

10

Quarterly rule review

Every quarter the current rule is re-tested against its five nearest neighbours, with full costs, over all data, each half, and the last 12 months. The review only advises. Nothing changes automatically.

11

AI analyst, audited

An AI analyst writes market context and risk warnings but never decides or trades, because language models can be confidently wrong with numbers. Thirty days later its warnings are graded against what the price actually did, versus the chance baseline.

12

Capital changes need Face ID

Adding or removing capital from the dashboard needs a fresh passkey confirmation, not just an open session. Requests have per-request limits, a unique id so none is applied twice, and are refused while the robot is stopped.

Least privilege everywhere. The exchange key can view and trade but has no withdrawal permission. The robot trades only from its own ledger and sells only what it bought. Real-money execution sits behind three separate locks, with dry-run as the default.

3 · Architecture

Two machines can run the robot, but a single lease held in the cloud decides which one may act. The cloud layer also hosts the owner dashboard, authentication, the STOP and capital queues, alerting, and the off-site backup.

ZeusTrading architecture A Steam Deck primary server and a VPS standby both talk to a Cloudflare Worker with Durable Objects that holds the baton lease, backup, authentication and control queues. The primary sends orders to the Indodax API. The Worker sends alerts to ntfy and email. The owner's phone sends STOP and capital requests to the Worker. PRIMARYSteam Deck daily decision, journal,simulated twin, PDF STANDBYVPS takes over after 3hof primary silence CLOUD LAYERCloudflare Worker + Durable Objects · baton lease (one trader) · off-site record backup · passkey auth + dashboard · STOP + capital queues · staged alert rules EXCHANGEIndodax API prices + ordersno withdrawal rights ALERTSntfy + email push alerts, daily andmonthly reports OWNERPhone dashboard passkey, STOP,Face ID for capital orders (dry-run by default) lease, snapshot,backup (15 min) lease poll, restoreon takeover relay alerts STOP,capital ZeusTrading architecture (stacked) EXCHANGEIndodax API no withdrawal rights PRIMARYSteam Deckdecides daily STANDBYVPSafter 3h silence CLOUD LAYERCloudflare Worker + Durable Objects · baton lease (one trader)· off-site backup · passkey auth · STOP + capital queues· staged alert rules OWNERPhoneSTOP, Face ID ALERTSntfy + emailpush + reports orders lease, backuppoll, restore STOP, capitalalerts
Fail-closed design: if the cloud layer is unreachable, no machine holds the baton and no decision is taken. The robot's own loss limit still applies if only the dashboard fails.

Daily flow

Check STOP flag → confirm baton → fetch data → decide once after the morning cut-off → sanity checks → trade or hold → write plain-language journal line → email report → push snapshot → back up records off-site. A failed data fetch leaves no "done" marker, so the job retries the next hour.

Separation of powers

Code changes cannot enable real money, add leverage, short, or raise trading frequency without written owner approval. Every strategy change must pass the automated tests and a full-cost backtest.

4 · Research process

I treated the strategy as a hypothesis to be falsified. The aim was to find the simplest rule that survives scrutiny, and to resist every tweak that merely looked better on past data.

Second asset, same discipline. Applied to Ethereum, the rule beat buy-and-hold (+123% vs +6%) but with a deeper worst fall (−57%) and strong sensitivity to its settings. A 50/50 Bitcoin and Ethereum mix was weaker than Bitcoin alone because the two move together. Ethereum therefore runs on practice money only; real money requires at least six months of simulation, a hard cap, and my written approval.

5 · Results

Total return, full costs

Rule +357% Buy & hold +140% ~5.2 years, BTC/IDR

Worst fall from a peak

Rule −36% Buy & hold −74% shorter bar is better

Tuning ideas, unseen months

Current rule +193% Staged buy +174% Re-picked avg +146% 3-avg blend +141% walk-forward test periods only

Source: internal research notes of 19 October 2026. Buy-and-hold is measured from the first day the rule could act; from the very first data day it would be +80%. Charts are drawn from the stated figures; bar lengths are proportional within each chart. The walk-forward figure (+193%) is an upper bound, not a promise: the setting was chosen with knowledge of all data, so it is slightly flattering.

What the results do and do not say. Thirteen completed trades in about 5.2 years is a small sample. The market is one asset on one exchange. There is no stop-loss, so a sharp crash exits at a much lower price, and a fall of this kind could stay below the old peak for years. Past results are not a guarantee. The real evidence is forward: the live record, reviewed every quarter, on a deliberately small and capped allocation. This is a product case study, not financial advice.

6 · What I learned: product principles

A

The product is the safety envelope

The signal is a commodity. Trust comes from what happens when data is stale, a server dies, or a number looks wrong.

B

Give the owner asymmetric powers

Stopping is one tap; adding risk needs Face ID and limits. Make the safe action easy and the risky one deliberate.

C

Fail closed, fail loudly

When unsure, do nothing and say so. A day late is acceptable; running twice is not.

D

Distrust your best number

I report the flattering figure as an upper bound and make every change survive unseen data. Most "improvements" were noise.

E

Audit the AI like a colleague

The AI analyst informs but never decides, and is graded against outcomes. Usefulness is measured, not assumed.

F

Decide the rules before the emotions

A pre-commitment document lists what may and may not justify changing the strategy, written when nothing is at stake.

G

Plain language is a spec

If the owner cannot read the report, the system is not done. It is a requirement, tested like any other.

H

Directing the build is a product job

My leverage is precise constraints, acceptance tests, written approval gates and review of evidence.

Next: keep the twelve-month forward test running, review the rule each quarter, and consider Ethereum with real money only after six months of simulation and written approval, at a small cap.