How We Built an Automated Crypto Trading System

May 23, 20255 min
#automation#crypto#trading#setup

Yes, we automated our crypto trading.
No, it didn’t cost a fortune.
Yes, you can definitely do it too.


HOW IT STARTED

We’re traders first, developers second — which is probably why this worked.

The goal was simple:
Automate signals and live trading without:

  • Paying $500/month for overhyped SaaS tools
  • Hosting some fragile janky bot on our local machine
  • Burning profit on infrastructure instead of, you know, trading

So we did what we always do:
Researched the hell out of it.


STEP 1: LANGUAGE OF CHOICE? PYTHON.

Why Python?

  • Stable
  • Easy to read
  • Massive community
  • Prebuilt libraries for trading, indicators, stats, logging, APIs, and even sleep()

We didn’t need machine learning hype.
We needed logic, reliability, and fast prototyping. Python nailed all of it.


STEP 2: FIRST AUTOMATION RUN — GITHUB ACTIONS

Our first version lived on GitHub Actions.
Link for the curious: github.com/features/actions

Why GitHub Actions?

  • Free
  • Easy to use
  • No server setup
  • Triggered automatically on Git commits
  • Surprisingly robust for sending signals via webhook/Telegram/email

To use it:

  1. Push your trading script to a GitHub repo
  2. Create a .github/workflows/main.yml file
  3. Configure it to run your Python script
  4. Enable Actions in the repo settings
  5. Done. It runs on commit or cron schedule

It’s still great for automated signals.


BUT THEN CAME BINANCE...

We like Binance. No deep reason.
Just muscle memory from years of staring at charts we shouldn’t have.

But Binance’s API introduced a small problem:
IP whitelisting.

And GitHub Actions doesn’t give you a static IP.
Worse, Binance started geoblocking GitHub’s server regions.

So trades were rejected before they even left the cloud.

Cool cool cool.


STEP 3: ENTER RAILWAY.APP

We tried a dozen platforms. Then we found Railway.

Why it worked:

  • Static IPs
  • Generous free tier
  • Stupidly simple GitHub integration
  • Easy deploy → connect GitHub → done
  • Just works

Railway let us deploy live trading logic in a few clicks.
No custom CI. No containers. No Kubernetes. No swearing.

Well, minimal swearing.


STEP 4: DEALING WITH BINANCE IP LOCKS

Static IP solved most issues — but not all.

Binance sometimes rejects trades if the IP hasn’t been whitelisted manually.
So we built a failsafe:

  • When a trade is rejected due to IP restriction
  • Our system detects it, times out for 5 minutes
  • Sends us a Telegram message with the blocked IP
  • We whitelist the IP via Binance app in 10 seconds
  • Trading resumes

Crisis averted.
No missed trades.
No debugging during dinner.


TL;DR — HERE’S WHAT WE USE

| Part | Tool / Platform | |-------------------|----------------------------------------------------------| | Language | Python | | Signal Automation | GitHub Actions | | Live Trading | Railway.app | | Exchange | Binance Futures | | IP Alerts | Telegram Bot + Timeout Triggers | | Cost | Low enough we don’t think about it |


WANT TO DO THE SAME?

You don’t need a dev team.
You don’t need 20 Docker containers.
You just need:

  • A Python script
  • A GitHub account
  • Some free time
  • This post

If you already have your own strategy? Automate it.
If you don’t? Well, we’ve got signals that run on this exact system — and print.


This setup runs our signals.
This setup runs our trades.
And yes, you can steal it. Just don't forget to whitelist the IP.

Read something you liked? Then maybe stop lurking and subscribe for signals.