stock/server.py
2025-08-15 12:19:07 +02:00

84 lines
2.4 KiB
Python

from __future__ import annotations
import logging
from flask import Flask, jsonify, render_template, request
from trader import TraderWorker
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s | %(levelname)-8s | %(name)s | %(message)s"
)
log = logging.getLogger("server")
app = Flask(__name__, template_folder="templates", static_folder="static")
worker = TraderWorker()
@app.before_request
def _log_request():
log.debug("REQ %s %s args=%s json=%s",
request.method, request.path, dict(request.args), request.get_json(silent=True))
@app.after_request
def _after(resp):
resp.headers["Cache-Control"] = "no-store, max-age=0"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"
log.debug("RESP %s %s %s", request.method, request.path, resp.status)
return resp
@app.get("/")
def index():
return render_template("index.html")
@app.get("/api/status")
def api_status():
return jsonify(worker.status())
@app.get("/api/positions")
def api_positions():
return jsonify({"positions": worker.list_positions()})
@app.get("/api/trades")
def api_trades():
return jsonify({"trades": worker.list_trades()})
@app.get("/api/equity")
def api_equity():
return jsonify({"equity": worker.list_equity()})
@app.post("/api/start")
def api_start():
ok = worker.start()
return jsonify({"started": ok, "running": worker.is_running()})
@app.post("/api/stop")
def api_stop():
ok = worker.stop()
return jsonify({"stopped": ok, "running": worker.is_running()})
@app.post("/api/run-once")
def api_run_once():
took = worker.tick_once()
return jsonify({"ok": True, "took_s": took})
# testowe (opcjonalne)
@app.post("/api/test/long")
def api_test_long():
data = request.get_json(silent=True) or {}
worker.test_open_long(data.get("ticker","AAPL"), data.get("price",123.45), data.get("size",1.0))
return jsonify({"ok": True})
@app.post("/api/test/short")
def api_test_short():
data = request.get_json(silent=True) or {}
worker.test_open_short(data.get("ticker","AAPL"), data.get("price",123.45), data.get("size",1.0))
return jsonify({"ok": True})
@app.post("/api/test/close")
def api_test_close():
data = request.get_json(silent=True) or {}
worker.test_close(data.get("ticker","AAPL"), data.get("price"))
return jsonify({"ok": True})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=False)