자동매매 관련로직 수정
This commit is contained in:
@@ -179,8 +179,8 @@ SHORT_TERM_VOLUME_MULTIPLIER=1.5 # 거래량 필터 배수 (1.5배)
|
|||||||
# ═══════════════════════════════════════════════════════════════════════════════
|
# ═══════════════════════════════════════════════════════════════════════════════
|
||||||
# 감시 목록 관리 (watchlist.py)
|
# 감시 목록 관리 (watchlist.py)
|
||||||
# ═══════════════════════════════════════════════════════════════════════════════
|
# ═══════════════════════════════════════════════════════════════════════════════
|
||||||
WATCHLIST_INIT_SIZE=50 # 아침 배치 초기화 종목 수
|
WATCHLIST_INIT_SIZE=150 # 아침 배치 초기화 종목 수
|
||||||
WATCHLIST_MAX_SIZE=100 # 최대 관리 종목 수
|
WATCHLIST_MAX_SIZE=150 # 최대 관리 종목 수
|
||||||
WATCHLIST_ENTRY_SCORE=60 # 장중 신규 진입 기준 점수
|
WATCHLIST_ENTRY_SCORE=60 # 장중 신규 진입 기준 점수
|
||||||
WATCHLIST_EXIT_SCORE=20 # 장중 제거 기준 점수
|
WATCHLIST_EXIT_SCORE=20 # 장중 제거 기준 점수
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ auto-stock/
|
|||||||
# 환경 변수 설정
|
# 환경 변수 설정
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
|
|
||||||
|
# 기본값
|
||||||
|
# - `DATABASE_URL`은 `.env.example`에 이미 도커 컨테이너(127.0.0.1:5432)를
|
||||||
|
# 가리키도록 설정되어 있습니다. 로컬 개발 시 별도 수정이 필요 없습니다.
|
||||||
|
# 원격 DB를 사용하려면 여기에 URL을 덮어쓰십시오.
|
||||||
|
|
||||||
# Docker로 전체 시스템 시작
|
# Docker로 전체 시스템 시작
|
||||||
./scripts/deploy.sh
|
./scripts/deploy.sh
|
||||||
|
|
||||||
@@ -51,7 +56,7 @@ cp .env.example .env
|
|||||||
- `KOREA_INVESTMENT_APP_KEY`: 한국투자증권 앱키
|
- `KOREA_INVESTMENT_APP_KEY`: 한국투자증권 앱키
|
||||||
- `KOREA_INVESTMENT_APP_SECRET`: 한국투자증권 시크릿
|
- `KOREA_INVESTMENT_APP_SECRET`: 한국투자증권 시크릿
|
||||||
- `ANTHROPIC_API_KEY`: Claude API 키
|
- `ANTHROPIC_API_KEY`: Claude API 키
|
||||||
- `DATABASE_URL`: PostgreSQL 연결 URL
|
- `DATABASE_URL`: PostgreSQL 연결 URL (기본값은 도커 컨테이너)
|
||||||
- `REDIS_URL`: Redis 연결 URL
|
- `REDIS_URL`: Redis 연결 URL
|
||||||
|
|
||||||
## 라이센스
|
## 라이센스
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from sqlalchemy import select
|
|||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
from app.services.market_analyzer import (
|
from app.services.market_analyzer import (
|
||||||
check_market_regime, get_all_tradable_stocks, analyze_stock,
|
check_market_regime, get_all_tradable_stocks, analyze_stock,
|
||||||
|
analyze_stock_for_batch,
|
||||||
RecommendationCriteria, StockRecommendation, KST
|
RecommendationCriteria, StockRecommendation, KST
|
||||||
)
|
)
|
||||||
from app.services.trade_executor import execute_auto_trade_background, execute_auto_trade
|
from app.services.trade_executor import execute_auto_trade_background, execute_auto_trade
|
||||||
|
|||||||
@@ -73,6 +73,23 @@ class Settings(BaseSettings):
|
|||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self._apply_kis_mode()
|
self._apply_kis_mode()
|
||||||
|
self._apply_docker_db_override()
|
||||||
|
|
||||||
|
def _apply_docker_db_override(self):
|
||||||
|
"""If running inside Docker, convert localhost in DATABASE_URL to the
|
||||||
|
postgres service hostname.
|
||||||
|
|
||||||
|
Users often copy `.env.example` which defaults to
|
||||||
|
`postgresql://...@localhost:5432/...`. That works on the host machine,
|
||||||
|
but inside the backend container `localhost` refers to the container
|
||||||
|
itself, not the Postgres server. When `/.dockerenv` exists we assume the
|
||||||
|
code is running in Docker and automatically patch the URL.
|
||||||
|
"""
|
||||||
|
if os.path.exists("/.dockerenv"):
|
||||||
|
# simple string replacement; pydantic does not throw if format
|
||||||
|
# changes after initialization
|
||||||
|
if "localhost" in self.DATABASE_URL:
|
||||||
|
self.DATABASE_URL = self.DATABASE_URL.replace("localhost", "postgres")
|
||||||
|
|
||||||
def _apply_kis_mode(self):
|
def _apply_kis_mode(self):
|
||||||
"""KIS_MODE에 따라 모의/실전 API 설정을 자동 선택"""
|
"""KIS_MODE에 따라 모의/실전 API 설정을 자동 선택"""
|
||||||
@@ -254,8 +271,8 @@ class Settings(BaseSettings):
|
|||||||
# ═════════════════════════════════════════════════════════════════════════════
|
# ═════════════════════════════════════════════════════════════════════════════
|
||||||
# 감시 목록 (watchlist.py)
|
# 감시 목록 (watchlist.py)
|
||||||
# ═════════════════════════════════════════════════════════════════════════════
|
# ═════════════════════════════════════════════════════════════════════════════
|
||||||
WATCHLIST_INIT_SIZE: int = 50 # 아침 배치 초기화 종목 수
|
WATCHLIST_INIT_SIZE: int = 150 # 아침 배치 초기화 종목 수
|
||||||
WATCHLIST_MAX_SIZE: int = 100 # 최대 관리 종목 수
|
WATCHLIST_MAX_SIZE: int = 150 # 최대 관리 종목 수
|
||||||
WATCHLIST_ENTRY_SCORE: int = 60 # 장중 신규 진입 기준 점수
|
WATCHLIST_ENTRY_SCORE: int = 60 # 장중 신규 진입 기준 점수
|
||||||
WATCHLIST_EXIT_SCORE: int = 20 # 장중 제거 기준 점수
|
WATCHLIST_EXIT_SCORE: int = 20 # 장중 제거 기준 점수
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ from app.models.models import WatchlistStock, StockAnalysis
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# 스캐너 신호 종목에 배정하는 최대 슬롯 수 (settings.WATCHLIST_INIT_SIZE 중 이 수만큼 우선)
|
# 스캐너 신호 종목에 배정하는 최대 슬롯 수 (settings.WATCHLIST_INIT_SIZE 중 이 수만큼 우선)
|
||||||
SCANNER_PRIORITY_SLOTS: int = 20
|
SCANNER_PRIORITY_SLOTS: int = 50
|
||||||
|
|
||||||
|
|
||||||
async def initialize_watchlist(
|
async def initialize_watchlist(
|
||||||
|
|||||||
19
init_db.py
19
init_db.py
@@ -10,13 +10,20 @@ async def init_database():
|
|||||||
with open('docker/init-db.sql', 'r') as f:
|
with open('docker/init-db.sql', 'r') as f:
|
||||||
sql = f.read()
|
sql = f.read()
|
||||||
|
|
||||||
# Connect to database
|
# Connect to database using settings or environment variable
|
||||||
|
# (fall back to defaults in .env.example which point at the local docker container)
|
||||||
|
from app.core.config import Settings
|
||||||
|
settings = Settings()
|
||||||
|
# parse DATABASE_URL to asyncpg components
|
||||||
|
from sqlalchemy.engine.url import make_url
|
||||||
|
url = make_url(settings.DATABASE_URL)
|
||||||
|
|
||||||
conn = await asyncpg.connect(
|
conn = await asyncpg.connect(
|
||||||
host='shium.net',
|
host=url.host or 'localhost',
|
||||||
port=55432,
|
port=url.port or 5432,
|
||||||
user='stock',
|
user=url.username or 'autostock',
|
||||||
password='Tjduddn!!12',
|
password=url.password or 'autostock_password',
|
||||||
database='stock'
|
database=url.database or 'autostock_db'
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user