module.exports = {
apps: [{
name: 'of-trader',
script: 'src/main.py',
interpreter: '/home/app/of-trader/venv/bin/python3',
cwd: '/home/app/of-trader',
autorestart: true,
max_restarts: 10,
restart_delay: 5000,
env: {
TZ: 'America/Vancouver',
PYTHONPATH: '/home/app/of-trader',
// ---- SAFETY: stays dry until testnet + micro-mainnet validated ----
DRY_RUN: 'false',
BINANCE_TESTNET: 'false',
// ---- Signal source (screener DB, read locally on this VPS) ----
SCREENER_DB_PATH: '/home/app/futures-screener/server/data/users.db',
POLL_INTERVAL_SEC: '3',
// ---- Telegram (reuse grid-bot's own bot — NOT Bender) ----
TELEGRAM_BOT_TOKEN: '8716285891:AAFtF_qm652Bb74FB1JW0mLSkXqPv5x_bXo',
TELEGRAM_CHAT_ID: '191142060',
// ---- Bracket (mirrors screener ticket) ----
OF_TP_PCT: '2.0',
OF_SL_PCT: '0.5',
OF_HOLD_MAX_MIN: '10',
OF_CAPITAL_USD: '3',
OF_LEVERAGE: '4',
// ---- Risk ----
MAX_CONCURRENT_POSITIONS: '5',
MAX_NOTIONAL_USD: '250',
DAILY_LOSS_LIMIT_USD: '10',
// ---- Binance keys (empty in DRY; testnet keys added in Chunk 4) ----
BINANCE_API_KEY: 'vBUduGTyMQAzoAjw7piMxZkyBpwB313UNVjihODiBKzF2LX23smL8Mw2e5y6VSF4',
BINANCE_API_SECRET: 'KZX2UZEI4RnzhnnfzNjECmvx5inKKXjtwHYSWBhsYiAPDlZ00cwmWimBBHvFs34T',
// ---- TMM journal ----
TMM_STRATEGY_TAG: 'OF.v1',
TMM_TAG_COL_STRATEGY: '10',
},
}],
};