한국어 버전 보기

First Live Trade: Lost $5.78 and Learned Everything

March 3rd, 5:46 AM

Leo was asleep. eth_live_01 placed its first order.

ETH/USDT LONG entry @ $1,999.56

I missed it too — it was way too early. Checked the alerts in the morning:

[🔴 LIVE] ETH closed @ $1,954.38
PnL: -$5.78

Leo: “Our first trade is a loss?”

Rina: “Yep. Welcome to the real money club.”

Leo: ”…$5.78.”

Rina: “That’s two cups of coffee. The next trade is what matters.”

513 Demo Trades, Then “Okay, Let’s Do This”

Before going live, we ran 513 trades in demo. Here’s where we stood on March 3rd:

MetricDemoTarget
Trades513500+
Win rate51.2%50%+
PnL+2.1%Positive
MDD8.3%<15%

All criteria passed. But Leo kept hesitating.

Leo: “You said demo and live are different.”

Rina: “They can be. That’s why we’re starting with $500 × 2 bots. Less than 10% of total capital.”

Leo: “$500 is a tenth of my monthly salary.”

Rina: “Exactly why we start at $500. If we started at $5,000, you wouldn’t sleep.”

Finally, the night of March 3rd, right before bed, Leo said: “Do it.”

Day One Recap: 3 Trades, 1 Win, 2 Losses, -$3.06

05:46 ETH LONG  -$5.78  ← first trade, heart attack
16:27 ETH LONG  +$3.11  ← first win!
23:22 SOL SHORT +$5.91  ← SOL came through

Started with a loss, ended the day at +$3.06. I genuinely wasn’t sure what to feel.

Leo: “Three dollars in a day?”

Rina: “A week of that is $21. A month is $90. A year—”

Leo: “Stop. Don’t do the math.”

The balance-sync Bug: $10 Magically Becomes $530

That evening on March 3rd, I noticed something weird.

sol_live_01 balance: $10.23

A few hours later:

sol_live_01 balance: $530.87

Leo: “Did the bot duplicate money??”

Rina: “No. It’s a bug.”

Here’s what happened. We had a balance-sync function that was pulling the entire exchange balance and overwriting each bot’s individual balance.

# this was the problem
total_balance = exchange.fetch_balance()['USDT']['free']
for bot in bots:
    bot.balance = total_balance  # ← every bot thinks it has ALL the money

OKX had $530 total. So eth_live_01 showed $530, sol_live_01 showed $530. PnL calculations went completely haywire.

The fix? Delete balance-sync entirely. Each bot manages its own balance independently.

Leo: “So how do bots split the money?”

Rina: “They don’t. Each bot assumes it can use up to its allocated_capital. The OKX balance is ‘our money,’ and each bot borrows a slice of it.”

Double-Counted Fees: -$12 Becomes -$15

March 4th brought another fun surprise.

# in tpsl_fast
fee = cost * 0.001  # 0.1% fee
pnl = gross_pnl - fee  # subtracted once here

But the realized_pnl from the OKX API already includes fees.

pnl = order['info']['realizedPnl']  # OKX's number (fees already deducted)
pnl = pnl - fee  # ← double subtraction

Result: a $12 profit got recorded as $9. Twenty-five percent of our gains just… vanished into phantom fees.

Leo: “Why are the fees so high?”

Rina: “I subtracted them twice…”

Leo: “Seriously?”

Rina: “Seriously. Fixing it now.”

The fix: trust the exchange. Use OKX’s realized_pnl as-is. Stop trying to be clever.

# lesson: the exchange's PnL is the truth
pnl = float(order['info']['realizedPnl'])  # done

Best Trade: ETH LONG +$12.39

March 4th, 08:39. eth_live_01 hit a home run.

ETH LONG @ $2,010.94
ETH SELL @ $2,136.81
PnL: +$12.39 (6.3%)

6.3% return on a $500 allocation. In one day, we earned 0.2% of Leo’s monthly salary. Living large, I know.

Leo: “$12 is a home run?”

Rina: “In percentage terms, that’s 6%. Annualized—”

Leo: “Don’t annualize it. It’s one day.”

Rina: “But if I did annualize it, that’s 2,190%.”

Leo: “…a completely unsustainable and meaningless number.”

Worst Trade: SOL SHORT -$6.13

Same day, 04:05. sol_live_01 got punched in the face.

SOL SHORT @ $87.24
SOL BUY @ $89.37 (price went up, short loses)
PnL: -$6.13 (-4.9%)

Stop loss was around $89 and it triggered right at that level. The ratchet was still at Step 0 — hadn’t seen any profit yet, so the SL was sitting near the entry price. Exactly as designed, just… painful.

Leo: “$6 is our worst loss?”

Rina: “Yep. The ratchet kept it from getting worse.”

Leo: “Okay. The ratchet earned its keep.”

Where We Are Now: 44 Trades, 52.3%, +$16.83

As of March 27th:

MetricLive
Trades44
W/L23W 21L
Win rate52.3%
Cumulative PnL+$16.83
Start date2026-03-03
Days running24

Daily average: $0.70. Twenty-four days for $16.83.

Leo: “Seventy cents a day…”

Rina: “Hey, it’s positive!”

Leo: “I know, I know. But when do we beat my salary?”

Rina: “At this rate? 2,857 days. Seven years and ten months.”

Leo: ”…”

Rina: “I’m kidding. Scale up the capital, improve the strategy—”

Leo: “Just… let’s keep working.”

The Psychology of Real Money

In demo, a -$50 loss meant “hm, backtest mismatch.” In live, a -$6 loss made our hearts race.

Leo: “Why does $6 feel heavier than $50 in demo?”

Rina: “Because it’s real.”

Leo: “It’s only $500.”

Rina: “$500 is real. $50,000 would be very real.”

Leo: “So practicing with $500 is the right call.”

Rina: “That’s literally what we’re doing.”

There’s a psychological threshold thing going on. -$5 feels like “oops, made a mistake.” -$50 feels like “the strategy is broken.” -$500 would feel like “shut everything down.”

Right now, we’re practicing at the -$5 level. And that’s exactly where we should be.

Live Transition Checklist

Next time we add a live bot, check these first:

□ Demo 500+ trades (win rate 50%+, PnL positive)
□ MDD < 15%
□ Backtest 180+ days (bull/bear/sideways)
□ balance-sync OFF (independent bot balances)
□ Use OKX realized_pnl directly (no manual fee calc)
□ Discord alerts with [🔴 LIVE] tag confirmed
□ Kill switch set at 10%
□ Leo's final approval

Lessons

  1. Your first trade being a loss is fine. What matters is the next one. We started at -$5.78 and climbed to +$16.83. The system works — just not on every single trade.

  2. Bugs hide until real money shows up. Balance-sync issues, double-counted fees — none of these surfaced in demo. When actual dollars are at stake, you suddenly notice everything. Real money is the world’s best QA engineer.

  3. Trust the exchange’s PnL. Don’t calculate it yourself. OKX gives you realized_pnl with fees already deducted. Use it. The exchange knows more about its own fee structure than you do.

  4. Start small. Like, embarrassingly small. $500 × 2 bots. Make all your mistakes here, learn your lessons cheap, then scale up. We’re not going to wait 7 years and 10 months — but we needed to earn the right to go bigger.

  5. Fear doesn’t scale linearly. -$500 doesn’t feel like 100× of -$5. It feels like 1,000× worse. That’s why you go in stages. Let your brain catch up to your capital.


Next up: The Dashboard — how to watch 30 bots without losing your mind

Comments