def live( request_json: LiveRequestJson, authorization: Optional[str] = Header(None) ) -> JSONResponse: if not authenticator.is_valid_token(authorization): return authenticator.unauthorized_response() from jesse import validate_cwd # dev_mode is used only by developers so it doesn't have to be a supported parameter dev_mode: bool = False validate_cwd() # execute live session from jesse_live import live_mode from jesse.services.multiprocessing import process_manager trading_mode = 'livetrade' if request_json.paper_mode is False else 'papertrade' process_manager.add_task( live_mode.run, f'{trading_mode}-' + str(request_json.id), request_json.debug_mode, dev_mode, request_json.config, request_json.routes, request_json.extra_routes, trading_mode, ) mode = 'live' if request_json.paper_mode is False else 'paper' return JSONResponse({'message': f"Started {mode} trading..."}, status_code=202)
def run() -> None: validate_cwd() # run all the db migrations from jesse.services.migrator import run as run_migrations import peewee try: run_migrations() except peewee.OperationalError: sleep_seconds = 10 print( f"Database wasn't ready. Sleep for {sleep_seconds} seconds and try again." ) time.sleep(sleep_seconds) run_migrations() # read port from .env file, if not found, use default from jesse.services.env import ENV_VALUES if 'APP_PORT' in ENV_VALUES: port = int(ENV_VALUES['APP_PORT']) else: port = 9000 # run the main application uvicorn.run(fastapi_app, host="0.0.0.0", port=port, log_level="info")
def import_candles( request_json: ImportCandlesRequestJson, authorization: Optional[str] = Header(None) ) -> JSONResponse: from jesse.services.multiprocessing import process_manager validate_cwd() if not authenticator.is_valid_token(authorization): return authenticator.unauthorized_response() from jesse.modes import import_candles_mode process_manager.add_task(import_candles_mode.run, 'candles-' + str(request_json.id), request_json.exchange, request_json.symbol, request_json.start_date, True) return JSONResponse({'message': 'Started importing candles...'}, status_code=202)
def get_candles( json_request: GetCandlesRequestJson, authorization: Optional[str] = Header(None) ) -> JSONResponse: if not authenticator.is_valid_token(authorization): return authenticator.unauthorized_response() from jesse import validate_cwd validate_cwd() from jesse.modes.data_provider import get_candles as gc arr = gc(json_request.exchange, json_request.symbol, json_request.timeframe) return JSONResponse({ 'id': json_request.id, 'data': arr }, status_code=200)
def backtest(request_json: BacktestRequestJson, authorization: Optional[str] = Header(None)): from jesse.services.multiprocessing import process_manager if not authenticator.is_valid_token(authorization): return authenticator.unauthorized_response() validate_cwd() from jesse.modes.backtest_mode import run as run_backtest process_manager.add_task(run_backtest, 'backtest-' + str(request_json.id), request_json.debug_mode, request_json.config, request_json.routes, request_json.extra_routes, request_json.start_date, request_json.finish_date, None, request_json.export_chart, request_json.export_tradingview, request_json.export_full_reports, request_json.export_csv, request_json.export_json) return JSONResponse({'message': 'Started backtesting...'}, status_code=202)
async def optimization(request_json: OptimizationRequestJson, authorization: Optional[str] = Header(None)): if not authenticator.is_valid_token(authorization): return authenticator.unauthorized_response() from jesse.services.multiprocessing import process_manager validate_cwd() from jesse.modes.optimize_mode import run as run_optimization process_manager.add_task(run_optimization, 'optimize-' + str(request_json.id), request_json.debug_mode, request_json.config, request_json.routes, request_json.extra_routes, request_json.start_date, request_json.finish_date, request_json.optimal_total, request_json.export_csv, request_json.export_json) # optimize_mode(start_date, finish_date, optimal_total, cpu, csv, json) return JSONResponse({'message': 'Started optimization...'}, status_code=202)