About FX AutoTrader - OANDA v3 Dashboard + Strategy
Self-hosted OANDA v3 FX dashboard + strategy engine. No broker account needed.
WHAT THIS IS A self-hosted FX trading dashboard and automated trading engine written against the OANDA v3 REST API. React 19 + Vite front end, Express back end, file-based config, no database. It polls six currency pairs on a 60-second loop and places market orders when the strategy fires. Every position is sized from live account balance and current ATR, so risk per trade stays fixed. Stop-loss and take-profit are attached to each order at fill time. Concurrent positions are capped and pairs with an open position are skipped. It also backtests the same strategy over a date range and returns win rate, profit factor, max drawdown and an equity curve. Pairs: USDJPY, EURUSD, GBPJPY, EURJPY, AUDJPY, GBPUSD MEASURED, NOT ESTIMATED 4,014 source lines (.js / .jsx / .css, excluding nodemodules and build output): front end 2,396, back end 1,463, Vercel serverless function 149 39 files, 13 REST endpoints, 3 screens + 404 5 technical indicators implemented from scratch: SMA, EMA, RSI, ATR, ADX (full Wilder-smoothed ADX) 11 front-end dependencies, 3 back-end (express, cors, dotenv) No database. Strategy and risk parameters live in a JSON file, editable at runtime from the UI. VERIFIED ON 2026-11-07, NODE v22.22.2 1. node backend/verifycore.mjs -> 27 checks, 27 passed, 0 failed. No broker account needed. It feeds a seeded synthetic price series into the real strategy.js, indicators.js and backtest.js. You can run it yourself before committing to anything. It confirms the indicators return finite values in their expected ranges and pad their warm-up with null; that generateSignal() always returns BUY / SELL / WAIT with a readable reason; that it refuses to trade on insufficient data, honours the trading-hours window and that the ADX filter blocks weak trends; and that runBacktest() opens trades, exits via stop-loss, take-profit AND reverse-signal, with total P/L and the equity curve reconciling against the individual trades to within 1 unit. 2. node backend/server.js boots with no credentials into mock mode and all 13 endpoints return HTTP 200. Endpoints requiring arguments correctly return 400 with a message when they are missing. 3. The dashboard renders against mock mode: candlestick chart with short/long MA overlays (lightweight-charts), a live signal panel showing the real per-pair reasons, and balance / daily P&L / cumulative P&L / win-rate tiles. That is the screenshot on this listing - a real screen, not a mockup. PLEASE READ THIS BEFORE MAKING AN OFFER I would rather lose a sale than have you find these in diligence. 1. No order has ever been placed through this code - not live, not even on a demo account. I am based in Japan, where OANDA restricts v3 API access to higher account tiers, and I could not use OANDA's non-Japanese entities either. So lib/oanda.js is written to the published v3 specification but has never been executed against the real API. Expect to spend time on first connection. If you are outside Japan, OANDA's v3 API is generally open on a standard account - which is precisely why this is worth more to you than it was to me. 2. The Vercel deployment serves mock data only. api/[...path].js is one serverless function generating synthetic candles, positions and trades, because Vercel's Hobby plan caps a project at 12 functions. Real trading runs from backend/server.js on your own machine or VPS. 3. The previous deployments are offline - both old Vercel URLs return 404. There is no live demo. Run it locally instead; it takes about 30 seconds. 4. The project shipped with no test suite. verifycore.mjs was written for this sale. It covers the strategy, indicators and backtester. It does NOT cover the OANDA client, the Express routes, or the front end. 5. The backtest numbers produced during verification come from synthetic data. They prove the backtester works. They say nothing about profitability. 6. No edge is claimed. The strategy is a textbook moving-average crossover with an RSI bound, an ADX trend-strength filter and a trading-hours window. Clean, readable and fully parameterised - but not researched or validated alpha. 7. The user interface is in Japanese. Code, comments, variable names, API responses and the README are English; the rendered UI is not. There is no i18n layer, so translating means editing string literals across 3 pages and 3 components (2,396 lines). Signal reasons emitted by the back end are partly Japanese too. Budget for this if you intend to ship to English-speaking users. 8. There is no Vite dev proxy. npm run dev alone gives you a dashboard that cannot reach the back end, because src/config.js defaults the API base URL to window.location.origin. By design you set the back-end URL from the Settings screen. A four-line server.proxy block in vite.config.js fixes it permanently. WHERE THE VALUE IS A complete, readable OANDA v3 integration surface: account summary, open positions, trades, candles with date-range pagination for backtests, and market orders with stop-loss/take-pro...
Project details
Next step: <p>FIRST, THE OBVIOUS ONE: connect it to a real OANDA account. The client is written to the published v3 spec but has never run against the live API, so this is both the biggest unknown and the biggest immediate gain. Start on a practice account - OANDA_ENVIRONMENT=practice is the shipped default.</p><p><br></p><p>TRANSLATE THE UI. It is entirely in Japanese with no i18n layer. Three pages and three components, 2,396 lines. That alone makes it sellable or usable in English-speaking markets.</p><p><br></p><p>SWAP OR ADD BROKERS. server.js already mounts live or mock routes purely on whether credentials exist, so another broker means rewriting lib/oanda.js and nothing else. Interactive Brokers, Alpaca or a crypto venue would all drop into the same shape.</p><p><br></p><p>PUT A REAL STRATEGY IN IT. The engine, indicators and backtester are verified working; the strategy itself is a textbook MA cross with RSI and ADX filters. The valuable part is the harness around it - generateSignal() is one function to replace.</p><p><br></p><p>EXTEND THE BACKTESTER. It already reconciles P/L, win rate, profit factor, max drawdown and an equity curve. Walk-forward testing, parameter sweeps and a Sharpe figure are natural next steps on top of what is there.</p><p><br></p><p>ADD PERSISTENCE. There is no database - config is a JSON file and trade history comes from the broker. A small store would unlock performance history, alerting and multi-account support.</p><p><br></p><p>SHIP IT AS A PRODUCT. Mock mode means anyone can try the whole dashboard with no broker account, which is a rare onboarding advantage for a trading tool.</p>
For sale
Asking price: $600 USD
What's included
Source code
INCLUDED: the full private GitHub repository - front end, back end, Vercel config, backend/verifycore.mjs (the 27-check verification script), .env.example, config.example.json, and a README that repeats every disclosure from this listing. Full transfer of rights to the code. ALSO INCLUDED, free: written answers to any question about the codebase for 14 days after transfer. I will walk through any file, explain any decision, or run an additional check you specify against the code before you commit to buying. NOT INCLUDED: no OANDA account, API token or account ID. No broker relationship. No trading capital. No historical market data. No domain and no live deployment (the old Vercel URLs are dead). No profitable parameter set - the shipped defaults are textbook values, not researched ones. No nodemodules or build output; install from the manifests. TERMS: text only, all diligence by written message - I do not take voice or video calls. No earn-out and no revenue share; one-time transfer paid in full at handover. No maintenance retainer beyond the 14 days above.
Reason for selling
I built this to trade my own account, then found I could not get OANDA v3 API access from Japan on a standard account - OANDA restricts it to higher account tiers here, and I could not use their non-Japanese entities either. So the code is finished and verified as far as it can be without a broker connection, and it is doing nothing sitting on my disk. Someone outside Japan, where the v3 API is generally open on a standard account, can connect it and actually use it.