Modern mode
CryptoSpike
Home | <- Back to Portfolio

Crypto Trading Automation & Analytics Platform
Tech stack: Html, Css, Golang, N8N
Live site
Ringkasan Project
Aplikasi ini adalah platform real-time untuk monitoring sinyal trading crypto, analisis teknikal, backtesting strategi, dan eksekusi otomatis ke exchange. Sistem membaca data market dari Binance, mendeteksi pergerakan harga signifikan, mengirim trigger ke workflow n8n untuk analisis sinyal, menyimpan hasil sinyal ke PostgreSQL, lalu menampilkan sinyal tersebut di dashboard publik dan admin.
Selain monitoring, aplikasi juga memiliki fitur auto-execution ke Binance dan Bitunix dengan konfigurasi live/testnet, risk management, stop loss, take profit, trailing stop, dan proteksi agar posisi tidak terbuka dobel.
Tech Stack
- Backend: Go
- Frontend: HTML, CSS, Vanilla JavaScript
- Database: PostgreSQL
- Database Driver: pgx / pgxpool
- Real-time Communication: WebSocket
- Exchange Integration: Binance API, Binance Futures API, Bitunix Futures API
- Workflow Automation: n8n
- AI Insight: Groq API
- Notification: Telegram Bot API, in-app toast notification
- Authentication: Session token + role-based access
- Deployment: Docker
- Testing / Research Tools: Go tests, scratch scripts, historical kline cache
Arsitektur Singkat
Aplikasi dibagi menjadi beberapa bagian utama:
-
Go HTTP server
- Menyediakan REST API untuk auth, signal, stats, trading config, execution, backtest, donation, dan dashboard.
- Menyediakan WebSocket endpoint untuk harga dan event refresh.
-
Market scanner engine
- Membaca harga real-time dan candle historis dari Binance.
- Mendeteksi 1H candle breakout/breakdown.
- Mendeteksi 15M pre-pump dan pre-dump berdasarkan volume spike, range konsolidasi, taker buy ratio, dan prior trend.
-
n8n workflow
- Menerima trigger dari backend.
- Menjalankan logic analisis sinyal.
- Menyimpan sinyal ke PostgreSQL.
- Mengirim notifikasi jika sinyal valid.
-
PostgreSQL
- Menyimpan user, session, trading config, signal history, notifications, donations, dan position locks.
-
Public dashboard
- Menampilkan sinyal trading, current price, TP/SL, status, PnL, filter, pagination, stats, notifications, dan online presence.
-
Admin dashboard
- Mengatur konfigurasi trading live/testnet.
- Mengatur Binance dan Bitunix credential.
- Melihat wallet balance, unrealized PnL, open positions, pending orders, dan risk summary.
- Mengelola user dan profile.
-
Trade executor
- Mengeksekusi sinyal ke Binance atau Bitunix.
- Memasang market entry, stop loss, take profit, trailing stop, dan staged TP.
- Melakukan validasi risk sebelum order dikirim.
Workflow Aplikasi
1. Startup Server
Saat aplikasi dijalankan, server melakukan beberapa proses awal:
- Membaca konfigurasi dari environment variable.
- Menghubungkan aplikasi ke PostgreSQL.
- Membuat tabel yang diperlukan jika belum ada, seperti
users, user_sessions, user_trading_configs, donations, dan user_position_locks.
- Memuat konfigurasi trading default milik admin.
- Menjalankan HTTP server.
- Menjalankan background service:
- Binance WebSocket connector
- 1H candle detector
- 15M pre-pump scanner
- signal lifecycle monitor
2. Market Data & Signal Detection
Sistem memiliki beberapa sumber deteksi sinyal:
- WebSocket Binance untuk mendapatkan harga terbaru.
- Candle 1H dari Binance Futures untuk mendeteksi candle close yang bergerak signifikan.
- Candle 15M untuk mendeteksi fase pre-pump atau pre-dump.
Pada candle scanner 1H, sistem memeriksa setiap pair secara batch agar tidak terkena rate limit. Jika candle terakhir yang sudah close memiliki perubahan harga melebihi threshold, backend akan mengirim payload ke n8n.
Pada pre-pump scanner 15M, sistem mencari kondisi seperti:
- Volume candle meningkat signifikan dibanding rata-rata candle sebelumnya.
- Harga masih berada dalam range konsolidasi.
- Ada validasi prior trend.
- Ada validasi taker buy/taker sell ratio.
- Ada cooldown agar signal duplicate tidak terlalu sering muncul.
3. Trigger ke n8n
Jika scanner menemukan kondisi valid, backend mengirim payload ke webhook n8n. Payload biasanya berisi:
- Symbol
- Price change percentage
- Last price
- High price
- Low price
- Volume
- Quote volume
- Direction
- Threshold
- Trigger source
- Timestamp
n8n kemudian menjalankan logic analisis lebih lanjut, seperti filtering, scoring, dan pembuatan signal final.
4. Penyimpanan Signal
Signal valid disimpan ke PostgreSQL dengan data seperti:
- Symbol
- Side / signal direction
- Entry price
- Stop loss
- TP1, TP2, TP3
- Score
- Confidence
- Strategy
- Reasons
- Status
- Sent time
- Current price
- Profit percentage
Setelah signal tersimpan, backend menerima event refresh dan mengirim update ke frontend melalui WebSocket.
5. Public Dashboard
Public dashboard membaca data dari API publik:
/api/public/signals
/api/public/stats
/api/public/notifications
/api/public/donations
/api/public/user_presence
/api/prices
Dashboard menampilkan signal card berisi entry, score, side, status, current price, PnL from entry, SL, TP1, TP2, dan TP3. User juga bisa melakukan filter berdasarkan status, side, sort, dan search symbol.
Dashboard juga menampilkan notification panel dan toast untuk event seperti signal baru, TP hit, SL hit, atau trailing stop hit.
6. Signal Lifecycle Monitor
Lifecycle monitor berjalan setiap beberapa detik untuk mengecek posisi sinyal aktif.
Sistem mengambil mark price terbaru dari Binance Futures, lalu membandingkannya dengan entry, TP, dan SL. Status signal akan berubah otomatis:
ACTIVE jika belum menyentuh target.
TP1_HIT jika harga menyentuh TP1.
TP2_HIT jika harga menyentuh TP2.
TP3_HIT jika harga menyentuh TP3.
TSL_HIT jika setelah TP tercapai harga kembali ke area trailing stop.
SL_HIT jika harga menyentuh stop loss.
Setiap perubahan status akan:
- Update database.
- Menghitung profit percentage.
- Menyimpan duration.
- Menambahkan notification.
- Broadcast refresh ke frontend.
- Mengirim Telegram alert jika token tersedia.
7. Authentication & Admin
Aplikasi memiliki login berbasis username dan password. Setelah login berhasil, server membuat session token yang digunakan pada request berikutnya.
Role yang didukung:
Admin dapat:
- Membuat user baru.
- Mengakses admin dashboard.
- Mengatur trading configuration.
- Melihat account stats.
- Mengatur live/testnet execution.
8. Trading Configuration
Setiap user memiliki konfigurasi trading sendiri. Konfigurasi disimpan dalam PostgreSQL sebagai JSON.
Konfigurasi mencakup:
- Live environment
- Testnet environment
- Binance config
- Bitunix config
- Market type: Spot atau Futures
- Margin mode: Isolated atau Cross
- Position size
- Leverage
- TP method
- Max open positions
- Minimum score
- Market scope: BTC, altcoin, atau both
- Signal direction: long, short, atau both
Sistem juga memiliki konfigurasi khusus BTC, seperti:
- One position only
- BTC leverage
- BTC margin mode
- Account risk cap percentage
- Initial entry percentage
- Average entry percentage
- Plan TTL
- Heatmap / max pain toggle
9. Auto Execution Workflow
Auto execution berjalan saat backend menerima payload signal dari endpoint execution.
Flow umumnya:
- Backend menerima signal payload.
- Backend memvalidasi symbol, entry, SL, TP1, TP2, TP3, dan direction.
- Backend menentukan target user berdasarkan session, user_id, atau username.
- Backend memuat trading config user.
- Backend mengecek apakah live/testnet aktif.
- Backend mengecek filter:
- Market scope
- Signal direction
- Minimum score
- Max open positions
- Existing position pada symbol yang sama
- Backend menghitung quantity berdasarkan position size dan leverage.
- Backend menyesuaikan tick size, step size, min quantity, dan min notional dari exchange.
- Backend mengirim order ke exchange.
- Backend memasang stop loss dan take profit.
Untuk Binance Futures, sistem mendukung:
- Market entry
- Leverage setup
- Margin mode setup
- Open order cleanup
- Stop loss market
- TP1 only
- Staged take profit
- Smart step-trailing
- Emergency close jika SL/TP gagal dipasang
Untuk Binance Spot, sistem mendukung:
- Market buy
- OCO order untuk TP dan SL
Untuk Bitunix Futures, sistem mendukung:
- Signed API request
- Leverage setup
- Margin mode setup
- Position mode setup
- Market entry
- Position TP/SL
- Reduce-only take profit
- Staged take profit
10. Risk Management
Risk management menjadi bagian penting dari aplikasi ini.
Beberapa validasi yang diterapkan:
- Signal harus memiliki entry, SL, dan TP yang valid.
- Long signal harus memiliki SL di bawah entry dan TP di atas entry.
- Short signal harus memiliki SL di atas entry dan TP di bawah entry.
- Jumlah posisi aktif tidak boleh melebihi konfigurasi max open positions.
- Symbol yang sudah memiliki posisi aktif tidak akan dieksekusi lagi.
- Signal bisa difilter berdasarkan minimum score.
- Signal bisa difilter hanya long, hanya short, atau keduanya.
- Signal bisa difilter hanya BTC, hanya altcoin, atau keduanya.
- BTC memiliki position lock agar tidak ada dua posisi BTC aktif untuk user yang sama.
- Jika pemasangan stop loss gagal, sistem melakukan emergency close untuk mengurangi risiko posisi tanpa proteksi.
11. Backtesting Workflow
Backtesting digunakan untuk menguji strategi sebelum digunakan pada live trading.
Flow backtest:
- User mengirim symbol dan limit candle.
- Backend mengambil historical klines dari Binance Futures.
- Backend mengambil data BTC sebagai market bias.
- Engine melakukan simulasi candle-by-candle.
- Strategi mengevaluasi kondisi teknikal seperti:
- EMA
- RSI
- MACD
- ATR
- Support dan resistance
- Trend 1H, 4H, dan daily
- BTC trend dan BTC volatility
- Volume ratio
- Candle body dan wick
- Jika kondisi valid, engine membuat signal simulasi.
- Engine mensimulasikan entry pada candle berikutnya.
- Engine menghitung outcome: TP hit, SL hit, atau open trade.
- Backend mengembalikan statistik seperti win rate, net return, profit factor, avg return, avg bars held, dan detail trade.
12. AI Insight
Fitur AI insight menggunakan Groq API untuk membantu menganalisis performa signal.
AI diminta untuk membuat analisis seperti:
- Golden setup
- Score dan strategy dengan win rate terbaik
- Red flags
- Signal filtering recommendation
- Active exposure analysis
- Checklist entry
Output AI dikembalikan ke frontend dalam format Markdown agar mudah dibaca.
13. Notification System
Sistem notifikasi terdiri dari:
- Database notifications
- Public notification API
- Frontend polling
- WebSocket refresh
- Toast notification
- Notification badge
- Mark as read
- Sound toggle
- Telegram alert
Notifikasi muncul untuk event penting seperti signal baru, target profit tercapai, stop loss terkena, dan trailing stop aktif.
14. Donation Integration
Aplikasi memiliki integrasi Saweria webhook.
Flow:
- Saweria mengirim webhook ke backend.
- Backend memvalidasi payload.
- Jika secret tersedia, backend memvalidasi HMAC-SHA256 signature.
- Data donasi disimpan ke PostgreSQL.
- Public dashboard dapat menampilkan daftar donasi.
Database Utama
Beberapa tabel penting:
users: menyimpan user dan role.
user_sessions: menyimpan session token hash dan expiry.
user_trading_configs: menyimpan konfigurasi trading per user.
signals: menyimpan sinyal trading.
notifications: menyimpan event notifikasi.
donations: menyimpan data donasi Saweria.
user_position_locks: menyimpan lock posisi, terutama untuk BTC one-position-only.
Mengapa menggunakan Go?
Go dipilih karena cocok untuk aplikasi real-time dan background worker. Aplikasi ini menjalankan beberapa goroutine sekaligus, seperti WebSocket listener, candle scanner, pre-pump scanner, lifecycle monitor, dan HTTP server. Go juga ringan untuk deployment dan memiliki performa baik untuk service yang terus berjalan.
Bagaimana mencegah duplicate trade?
Sistem melakukan beberapa lapis proteksi:
- Mengecek open position pada exchange.
- Mengecek max open positions.
- Mengecek symbol yang sama agar tidak dibuka dua kali.
- Menggunakan
user_position_locks untuk BTC agar satu user hanya punya satu posisi BTC aktif.
- Menggunakan reservation token saat proses eksekusi untuk mencegah race condition.
Bagaimana stop loss dipastikan aman?
Setelah market entry berhasil, sistem langsung memasang stop loss. Jika pemasangan stop loss gagal, sistem akan mencoba cleanup/retry. Jika tetap gagal, sistem melakukan emergency close agar posisi tidak dibiarkan terbuka tanpa proteksi.
Bagaimana real-time update bekerja?
Harga terbaru disimpan di memory dari Binance WebSocket dan mark price API. Untuk event seperti sinyal baru atau status TP/SL berubah, backend broadcast refresh melalui WebSocket /ws/events. Frontend kemudian reload data terbaru dari API.
Bagaimana credential exchange diamankan?
Secret key disimpan di database tetapi tidak pernah dikirim mentah ke browser. Saat frontend mengambil konfigurasi, secret key dimasking. Saat form disimpan dan secret masih berupa placeholder, backend mempertahankan secret lama agar tidak tertimpa.
Apa tantangan terbesar project ini?
Tantangan terbesar adalah menggabungkan real-time market monitoring, signal lifecycle, risk management, dan auto execution. Setiap trade harus divalidasi dengan ketat karena error kecil bisa membuka posisi yang salah atau posisi tanpa stop loss.
Apa improvement berikutnya?
Beberapa pengembangan berikutnya:
- Menambah audit trail yang lebih lengkap untuk semua perubahan config dan execution.
- Menambah dashboard equity curve dan drawdown.
- Menambah paper trading internal.
- Menambah queue system untuk execution agar lebih terkontrol.
- Menambah integration test untuk executor.
- Menambah observability seperti metrics dan tracing.