fix: restore positions on restart and fix notify env loading
- restore_positions(): read Upbit balances on startup to prevent double-buying after restart - notify.py: read TOKEN/CHAT_ID inside _send() to avoid empty values when module is imported before load_dotenv() Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,6 +39,38 @@ def get_positions() -> dict:
|
||||
return _positions
|
||||
|
||||
|
||||
def restore_positions() -> None:
|
||||
"""시작 시 Upbit 실제 잔고를 읽어 포지션 복원 (재시작 이중 매수 방지)."""
|
||||
upbit = _get_upbit()
|
||||
balances = upbit.get_balances()
|
||||
for b in balances:
|
||||
currency = b["currency"]
|
||||
if currency == "KRW":
|
||||
continue
|
||||
amount = float(b["balance"]) + float(b["locked"])
|
||||
if amount <= 0:
|
||||
continue
|
||||
ticker = f"KRW-{currency}"
|
||||
current = pyupbit.get_current_price(ticker)
|
||||
if not current:
|
||||
continue
|
||||
invested_krw = int(amount * current)
|
||||
if invested_krw < 1_000: # 소액 잔고 무시
|
||||
continue
|
||||
with _lock:
|
||||
_positions[ticker] = {
|
||||
"buy_price": current, # 정확한 매수가 불명 → 현재가로 초기화
|
||||
"peak_price": current,
|
||||
"amount": amount,
|
||||
"invested_krw": min(invested_krw, PER_POSITION),
|
||||
"entry_time": datetime.now(),
|
||||
}
|
||||
logger.info(
|
||||
f"[복원] {ticker} 수량={amount} | 현재가={current:,.0f}원 "
|
||||
f"(재시작 시 복원, 매수가 불명으로 현재가 기준)"
|
||||
)
|
||||
|
||||
|
||||
def buy(ticker: str) -> bool:
|
||||
"""시장가 매수. 예산·포지션 수 확인 후 진입."""
|
||||
with _lock:
|
||||
|
||||
Reference in New Issue
Block a user