#!/usr/bin/env python3 """ Bybit Scalping Bot - FastAPI Control Interface This bot now uses FastAPI for remote control instead of direct command line operation. Use the API endpoints to start/stop trading sessions for individual pairs. API Endpoints: - GET /status - Get bot status - POST /start/{symbol} - Start trading for a symbol (18h default) - POST /stop/{symbol} - Stop trading for a symbol - GET /sessions - Get all trading sessions - GET /report/{session_id} - Get session report - POST /emergency_stop - Emergency stop all trading Examples: - Start BTC trading: POST /start/BTCUSDT - Stop ETH trading: POST /stop/ETHUSDT - Check status: GET /status """ import sys import subprocess import os def show_usage(): print(""" ๐Ÿš€ Bybit Scalping Bot - FastAPI Control Interface โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• ๐Ÿ“ก API SERVER CONTROL: โ€ข Start API Server: python api_server.py โ€ข Server runs on: http://localhost:8000 ๐Ÿ”— API ENDPOINTS: GET /status Returns current bot status and active sessions POST /start/{symbol}?duration_hours=18 Start trading session for specific symbol Examples: โ€ข POST /start/BTCUSDT โ€ข POST /start/ETHUSDT?duration_hours=24 POST /stop/{symbol} Stop trading session for specific symbol Example: POST /stop/BTCUSDT GET /sessions Get all trading sessions (active and completed) GET /report/{session_id} Get detailed report for a completed session POST /emergency_stop Emergency stop all trading sessions ๐Ÿงช TESTING & BACKTESTING: python main.py backtest Run backtesting for all configured pairs python test_api_raw.py Test API connectivity ๐Ÿ“Š CONFIGURED PAIRS: โ€ข BTCUSDT โ€ข ETHUSDT โ€ข SOLUSDT โš™๏ธ TRADING PARAMETERS: โ€ข Leverage: 20x โ€ข Take Profit: 2.5% โ€ข Stop Loss: 1% โ€ข Risk per Trade: 2% โ€ข Strategy: EMA 9/21 + RSI 14 + Volume + Orderbook ๐Ÿ“ฑ TELEGRAM ALERTS: Configure in .env file for trade notifications โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• """) def run_backtest(): """Run backtesting mode""" from backtester.engine import BacktestingEngine from services.logger import log import yaml log("๐Ÿ”ฌ Starting backtesting mode") settings = yaml.safe_load(open("config/settings.yaml")) pairs = yaml.safe_load(open("config/pairs.yaml"))["pairs"] backtester = BacktestingEngine() results = {} for symbol in pairs: log(f"๐Ÿ“Š Backtesting {symbol}...") result = backtester.run_backtest(symbol) results[symbol] = result if 'error' not in result: log(f"โœ… {symbol}: {result['total_trades']} trades, PnL: ${result['total_pnl']:.2f}, Win Rate: {result['win_rate']:.1%}") else: log(f"โŒ {symbol}: {result['error']}") backtester.save_results() log("\n" + "="*50) log("BACKTESTING REPORT") log("="*50) for symbol in pairs: if symbol in results and 'error' not in results[symbol]: report = backtester.generate_report(symbol) print(report) def start_api_server(): """Start the FastAPI server""" print("๐Ÿš€ Starting FastAPI server...") print("๐Ÿ“ก Server will be available at: http://localhost:8000") print("๐Ÿ“– API documentation at: http://localhost:8000/docs") print() try: subprocess.run([sys.executable, "api_server.py"]) except KeyboardInterrupt: print("\n๐Ÿ‘‹ API server stopped") if __name__ == "__main__": if len(sys.argv) > 1: if sys.argv[1] == "backtest": run_backtest() elif sys.argv[1] == "api": start_api_server() elif sys.argv[1] == "help" or sys.argv[1] == "-h": show_usage() else: print(f"โŒ Unknown command: {sys.argv[1]}") print("Use 'python main.py help' for available commands") else: show_usage()