stock-lab 자동 매매 요청 삭제, 수동 매매 요청 추가

This commit is contained in:
2026-01-28 01:20:31 +09:00
parent 21a8173963
commit d28c291a55

View File

@@ -1,5 +1,6 @@
import os import os
import json import json
from typing import Optional
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
@@ -7,6 +8,17 @@ import requests
from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.schedulers.background import BackgroundScheduler
from pydantic import BaseModel from pydantic import BaseModel
# ... (중략) ...
class OrderRequest(BaseModel):
code: str
name: Optional[str] = None # 종목명 (옵션)
qty: int
price: int = 0 # 0이면 시장가
type: str # 'buy' or 'sell'
@app.post("/api/trade/order")
from .db import init_db, save_articles, get_latest_articles from .db import init_db, save_articles, get_latest_articles
@@ -98,10 +110,11 @@ def get_balance():
) )
class OrderRequest(BaseModel): class OrderRequest(BaseModel):
code: str ticker: str # 종목 코드 (예: "005930")
qty: int action: str # "BUY" or "SELL"
price: int = 0 # 0이면 시장가 quantity: int # 주문 수량
type: str # 'buy' or 'sell' price: int = 0 # 0이면 시장가
reason: Optional[str] = "Manual Order" # 주문 사유 (AI 기록용)
@app.post("/api/trade/order") @app.post("/api/trade/order")
def order_stock(req: OrderRequest): def order_stock(req: OrderRequest):
@@ -122,27 +135,6 @@ def order_stock(req: OrderRequest):
content={"error": "Connection Failed", "detail": str(e), "target": WINDOWS_AI_SERVER_URL} content={"error": "Connection Failed", "detail": str(e), "target": WINDOWS_AI_SERVER_URL}
) )
@app.post("/api/trade/auto")
def auto_trade():
"""AI 자동 매매 트리거 (Windows AI Server Proxy)"""
print(f"[Proxy] Triggering Auto Trade at {WINDOWS_AI_SERVER_URL}...")
try:
# 빈 JSON Body를 명시적으로 전송하여 422 에러 방지
resp = requests.post(f"{WINDOWS_AI_SERVER_URL}/trade/auto", json={}, timeout=120)
if resp.status_code != 200:
print(f"[ProxyError] Auto Trade Error: {resp.status_code} {resp.text}")
return JSONResponse(status_code=resp.status_code, content=resp.json())
result = resp.json()
print(f"[Proxy] Auto Trade Success. Response:\n{json.dumps(result, indent=2, ensure_ascii=False)}")
return result
except Exception as e:
print(f"[ProxyError] Auto Trade Connection Failed: {e}")
return JSONResponse(
status_code=500,
content={"error": "Connection Failed", "detail": str(e), "target": WINDOWS_AI_SERVER_URL}
)
@app.get("/api/stock/analyze") @app.get("/api/stock/analyze")
def analyze_market(): def analyze_market():