ㅁㅁ

ㅇㅇ
0
3847
2025.04.21 06:35:31
import yfinance as yf import pandas as pd from datetime import datetime, timedelta
설정값들
SPIKE_THRESHOLD = 0.03 # 5분간 3% 이상 상승 VOLUME_MULTIPLIER = 2.0 # 거래량 2배 이상 증가 HOLD_DURATION = timedelta(hours=1) # 1시간 보유 후 매도
관심 종목 리스트
watchlist = ['AAPL', 'MSFT', 'TSLA', 'NVDA']
가짜 포트폴리오용 기록
portfolio = {}
급등 탐지 함수
def detect_spike(ticker): df = yf.download(ticker, period="1d", interval="5m") if len(df) < 2: return False, None
latest = df.iloc[-1]
prev = df.iloc[-2]
price_change = (latest['Close'] - prev['Close']) / prev['Close']
volume_ratio = latest['Volume'] / (df['Volume'].mean())
if price_change > SPIKE_THRESHOLD and volume_ratio > VOLUME_MULTIPLIER:
return True, latest['Close']
return False, None
매수 & 예약 매도
now = datetime.now() for symbol in watchlist: spike, buy_price = detect_spike(symbol) if spike: print(f"[매수] {symbol} 급등 탐지됨. 매수가: {buy_price}") portfolio[symbol] = { 'buy_price': buy_price, 'buy_time': now, 'sell_time': now + HOLD_DURATION }
1시간 후 매도 처리 시뮬레이션
print("\n[1시간 후 매도 시뮬레이션]") for symbol, info in portfolio.items(): df = yf.download(symbol, start=info['sell_time'], end=info['sell_time'] + timedelta(minutes=10), interval="1m") if len(df) > 0: sell_price = df.iloc[0]['Close'] profit = sell_price - info['buy_price'] print(f"[매도] {symbol}: 매수가 {info['buy_price']} -> 매도가 {sell_price} | 수익: {profit:.2f} USD") else: print(f"[실패] {symbol}: 매도 시점 데이터 없음.")