원클릭 매도 조건 설정 UI 만들기 | 토스 자동매매 개발기 #7-8

🌐 Read in English

💡 이번 Phase 7-8 요약

  • 목적: 보유 주식 목록에서 클릭 한 번으로 매도 목표가를 설정하고, 매수/매도 조건을 독립적으로 지정할 수 있게 함
  • 핵심 포인트: python-multipart 기반 FastAPI Form API로 strategy_configs 테이블을 즉시 갱신하고, stock_names 캐시 테이블로 종목명 병행 표기(예: 삼성전자 (005930))를 구현
  • 검증: 실제 API 토큰 연동 진단 성공, pytest 단위 테스트 130개 100% 통과

원클릭 매도 조건 설정 기능을 이번 Phase 7-8에서 드디어 붙였어. 예전엔 종목코드만 줄줄이 보이니까 어떤 종목인지 매번 검색해서 확인해야 했고, 매도 조건을 걸려면 코드를 직접 열어서 값을 바꿔야 했거든.

보유 주식 시각화 & 원클릭 매도 조건 설정 UI

toss_portfolio.fetch_holdings로 가져온 계좌 보유 종목을 대시보드 상단에 표로 띄웠어. 수량, 평단가, 현재가, 평가손익, 수익률까지 한 눈에 보이게 했고, 각 행마다 인라인 폼을 붙여서 매도 목표가를 바로 입력할 수 있게 했지.

@app.post("/api/strategies")
async def create_strategy(
    symbol: str = Form(...),
    side: str = Form(...),  # BUY / SELL / BOTH
    target_price: float = Form(...),
):
    save_strategy_config(symbol, side, target_price)
    return RedirectResponse("/", status_code=303)
처음엔 python-multipart를 안 깔아놓고 폼을 붙였다가 RuntimeError: Form data requires "python-multipart" to be installed 에러를 만났어. pip install python-multipart 한 줄로 해결.

가상 계좌 기준 예시로 보면, 삼성전자 (005930)를 평단가 71,000원에 10주 보유 중이라면 목표가 78,000원을 입력하는 순간 strategy_configs 테이블에 즉시 저장되고 감시가 시작돼.

매수/매도 독립 조건 & 종목명 병행 표기

기존엔 매수 조건 하나만 걸 수 있었는데, 이제는 side 컬럼을 BUY / SELL / BOTH 세 가지로 나눴어. 이미 보유 중인 종목은 SELL만, 새로 들어가고 싶은 종목은 BUY만, 둘 다 관리하고 싶으면 BOTH로 설정하면 돼.

stock_names 캐시 테이블

API 조회 때마다 받아오는 종목명을 stock_names 테이블에 매핑해서 저장하고, get_display_name() 유틸리티 하나로 대시보드 전체 표기를 통일했어.

def get_display_name(code: str) -> str:
    name = get_cached_stock_name(code)
    return f"{name} ({code})" if name else code

이제 대시보드 어디를 봐도 “005930”이 아니라 “삼성전자 (005930)”로 뜨니까 헷갈릴 일이 없어졌어. SK하이닉스 (000660) 같은 종목도 마찬가지.

가상 매수-매도 사이클 & 알림 이중화 · 보안 진단

DRY_RUN = True 상태에서 목표가 도달 시 가상 매수 → 수익률 추적 → 익절/손절 도달 시 가상 매도까지 전체 사이클을 trades 테이블에 기록하도록 만들었어. 실제 주문 없이도 전략 로직을 그대로 검증할 수 있어.

알림도 이중화했어. WARNING 이상 등급은 텔레그램뿐 아니라 이메일(SMTP)로도 동시에 날아가게 notifier.py를 손봤고, security_check.py에서는 .env Git 보호 여부, 5중 안전 브레이크 작동 상태, OAuth2 토큰 연결 상태까지 비파괴적으로 종합 점검하도록 했어.

마지막으로 start_all_daemons.bat / stop_all_daemons.bat을 만들어서 Windows 부팅 시 auto_trader, bot_server, scheduler, dashboard 4개 데몬이 한 번에 뜨도록 정리했어.

검증: pytest 130개 통과

실제 API 토큰으로 연동 진단을 돌려봤고, python-multipart 폼 처리 포함해서 pytest 단위 테스트 130개가 전부 통과했어. 이번 변경은 UI/DB/알림/보안 전 영역을 건드린 거라 회귀 테스트가 특히 중요했지.

마무리

이번 Phase로 원클릭 매도 조건 설정이라는 목표는 얼추 달성한 것 같아. 다음엔 매도 조건 설정 UI에 손절 비율 슬라이더까지 붙여볼 생각이야.

👉 시리즈 전체 목차 보기는 이 글 상단의 series-nav 참고

댓글 남기기