feat: initial upbit auto-trader implementation
Strategy C: volatility breakout (Larry Williams K=0.5) AND momentum (MA20 + 2x volume surge) must both trigger for a buy signal. Hard rules: - Trailing stop: sell when price drops -10% from peak - Max budget: 1,000,000 KRW total, up to 3 positions (333,333 KRW each) - Scan top 20 KRW tickers by 24h trading volume every 60s - Monitor positions every 10s Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
35
main.py
Normal file
35
main.py
Normal file
@@ -0,0 +1,35 @@
|
||||
"""Upbit 자동 트레이딩 봇 진입점."""
|
||||
|
||||
import logging
|
||||
import threading
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
||||
handlers=[
|
||||
logging.StreamHandler(),
|
||||
logging.FileHandler("trading.log", encoding="utf-8"),
|
||||
],
|
||||
)
|
||||
|
||||
from core.monitor import run_monitor
|
||||
from daemon.runner import run_scanner
|
||||
|
||||
|
||||
def main() -> None:
|
||||
# 트레일링 스탑 감시 스레드 (10초 주기)
|
||||
monitor_thread = threading.Thread(
|
||||
target=run_monitor, args=(10,), daemon=True, name="monitor"
|
||||
)
|
||||
monitor_thread.start()
|
||||
|
||||
# 매수 스캔 루프 (60초 주기, 메인 스레드)
|
||||
run_scanner()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user