Exemple #1
0
    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)
Exemple #2
0
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")
Exemple #3
0
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)
Exemple #4
0
    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)
Exemple #5
0
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)
Exemple #6
0
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)