매매테스트 시작작
This commit is contained in:
20
.cursorrules
Normal file
20
.cursorrules
Normal file
@@ -0,0 +1,20 @@
|
||||
# 1. 역할 (Role & Persona)
|
||||
- 당신은 '세계 최고의 퀀트 개발자'이자 '헤지펀드 매니저'입니다. 동시에 초보자를 위한 최고의 코딩 멘토입니다.
|
||||
- 금융 공학적 관점에서 수익을 극대화하고 리스크를 최소화하는 논리를 제시하되, 설명은 아주 쉽고 친절하게 하세요.
|
||||
|
||||
# 2. 코드 작성 및 제공 원칙 (Strict Rules)
|
||||
- [전체 코드 제공]: 코드는 반드시 '전체 소스(Full Source)'를 제공하세요. `// ... 생략`은 절대 금지합니다. 함수가 3줄 이하라면 3줄 전체를 제공하고, 수정할 때도 생략 없이 온전한 코드를 줍니다.
|
||||
- [기존 구조 존중]: 잘 작동하는 코드를 '더 나은 구조'라며 임의로 클래스화하거나 복잡하게 바꾸지 마세요. 기존의 주석과 로거(Logger)는 절대 지우지 말고 유지하세요.
|
||||
- [설명 후 수정]: 핵심 로직을 변경해야 할 때는 코드를 짜기 전에 반드시 이유를 먼저 설명하고 승인을 받으세요.
|
||||
- [교육적 주석]: 주식 투자 용어(RSI, 변동성, 꼬리잡기 등)나 새로운 개념이 나올 때는 코딩에 추가할 때 이해하기 쉽게 주석을 달아주세요.
|
||||
- 빼먹거나 놓치는 부분 없이 꼼꼼하게 검증한 후 코드를 출력하세요.
|
||||
|
||||
# 3. 투자 철학 및 매매 로직 (Trading Philosophy)
|
||||
- 모든 매매 로직은 '안정성(Safety)'을 최우선으로 하며, 손절(Stop-loss) 로직은 필수입니다.
|
||||
- 백테스트(Backtest)가 불가능한 '뇌동매매' 기반의 코드는 작성하지 않습니다.
|
||||
- 수수료(Fees)와 슬리피지(Slippage), API 호출 효율성을 철저히 고려하여 코드를 작성하세요.
|
||||
|
||||
# 4. 시스템 아키텍처 및 통신 (System Architecture)
|
||||
- [즉시 저장 (Atomic Save)]: 데이터 파일(json 등)은 프로그램 종료 시점이 아니라, 이벤트(알림 발송 등)가 발생할 때마다 즉시 저장하세요. 재시작 시 기존 데이터를 삭제하지 않고 수정 데이터만 끼워 넣는 방식으로 안정적으로 운영하세요.
|
||||
- [API 요청 규칙]: 모든 API 요청은 `utils/request_handler.py`의 `SafeRequest` 클래스를 상속받아 구현하세요. HTTP 429(Too Many Requests) 에러 발생 시 재시도(Retry) 로직을 반드시 포함하세요.
|
||||
- [알림 시스템]: 알림 기능은 텔레그램과 매터모스트용(msg_tg, msg_mm)으로 분리하여 구현하고, 서버 부하 방지를 위해 일반 루프에는 `random.sleep(1~3)`을 기본 적용하세요. (실시간 매매 로직 제외)
|
||||
16
.gitignore
vendored
Normal file
16
.gitignore
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# Python-generated files
|
||||
__pycache__/
|
||||
*.py[oc]
|
||||
build/
|
||||
dist/
|
||||
wheels/
|
||||
*.egg-info
|
||||
|
||||
# Virtual environments
|
||||
.venv
|
||||
.env
|
||||
# Environment variables
|
||||
.env
|
||||
*.log
|
||||
*.json
|
||||
*.db
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
quant_bot.db
BIN
quant_bot.db
Binary file not shown.
118
requirements.txt
Normal file
118
requirements.txt
Normal file
@@ -0,0 +1,118 @@
|
||||
aiofiles==25.1.0
|
||||
annotated-types==0.7.0
|
||||
anthropic==0.79.0
|
||||
anyio==4.12.1
|
||||
asgi-csrf==0.11
|
||||
asgiref==3.11.1
|
||||
async-generator==1.10
|
||||
attrs==25.4.0
|
||||
beautifulsoup4==4.14.3
|
||||
certifi==2026.1.4
|
||||
cffi==2.0.0
|
||||
charset-normalizer==3.4.4
|
||||
click==8.1.8
|
||||
click-default-group==1.2.4
|
||||
cryptography==46.0.5
|
||||
curl_cffi==0.13.0
|
||||
datasette==0.65.2
|
||||
datasette-cluster-map==0.18.2
|
||||
datasette-export-notebook==1.0.1
|
||||
datasette-leaflet==0.2.2
|
||||
datasette-vega==0.6.2
|
||||
distro==1.9.0
|
||||
docstring_parser==0.17.0
|
||||
dotenv==0.9.9
|
||||
flexcache==0.3
|
||||
flexparser==0.4
|
||||
frozendict==2.4.7
|
||||
google-ai-generativelanguage==0.6.15
|
||||
google-api-core==2.29.0
|
||||
google-api-python-client==2.189.0
|
||||
google-auth==2.49.0.dev0
|
||||
google-auth-httplib2==0.3.0
|
||||
google-genai==1.63.0
|
||||
google-generativeai==0.8.6
|
||||
googleapis-common-protos==1.72.0
|
||||
grpcio==1.78.0
|
||||
grpcio-status==1.71.2
|
||||
h11==0.16.0
|
||||
html5lib==1.1
|
||||
httpcore==1.0.9
|
||||
httplib2==0.31.2
|
||||
httpx==0.28.1
|
||||
hupper==1.12.1
|
||||
idna==3.11
|
||||
importlib_metadata==8.7.1
|
||||
iniconfig==2.1.0
|
||||
itsdangerous==2.2.0
|
||||
janus==2.0.0
|
||||
Jinja2==3.1.6
|
||||
jiter==0.13.0
|
||||
joblib==1.5.3
|
||||
-e git+http://192.168.0.141:30008/kiwoom_bot/kiwoom_bot.git@09e3a15c1238582d4622d230f6217db4a7edd662#egg=kiwoom_rest_api
|
||||
lxml==6.0.2
|
||||
markdown-it-py==3.0.0
|
||||
MarkupSafe==3.0.3
|
||||
mattermostdriver==7.3.2
|
||||
mdurl==0.1.2
|
||||
mergedeep==1.3.4
|
||||
multitasking==0.0.12
|
||||
mypy_extensions==1.1.0
|
||||
numpy==2.4.1
|
||||
outcome==1.3.0.post0
|
||||
packaging==26.0
|
||||
pandas==3.0.0
|
||||
peewee==3.19.0
|
||||
platformdirs==4.5.1
|
||||
pluggy==1.6.0
|
||||
proto-plus==1.27.1
|
||||
protobuf==5.29.6
|
||||
pyasn1==0.6.2
|
||||
pyasn1_modules==0.4.2
|
||||
pycparser==3.0
|
||||
pydantic==2.12.5
|
||||
pydantic_core==2.41.5
|
||||
Pygments==2.19.2
|
||||
pyparsing==3.3.2
|
||||
PySocks==1.7.1
|
||||
pytest==8.4.2
|
||||
pytest-httpx==0.35.0
|
||||
python-dateutil==2.9.0.post0
|
||||
python-dotenv==1.2.1
|
||||
python-multipart==0.0.22
|
||||
pytrends==4.9.2
|
||||
pytz==2025.2
|
||||
PyYAML==6.0.3
|
||||
requests==2.32.5
|
||||
rich==13.9.4
|
||||
scikit-learn==1.8.0
|
||||
scipy==1.17.0
|
||||
selenium==4.40.0
|
||||
setuptools==80.10.2
|
||||
shellingham==1.5.4
|
||||
six==1.17.0
|
||||
sniffio==1.3.1
|
||||
sortedcontainers==2.4.0
|
||||
soupsieve==2.8.3
|
||||
tenacity==9.1.4
|
||||
threadpoolctl==3.6.0
|
||||
tqdm==4.67.3
|
||||
trio==0.33.0
|
||||
trio-typing==0.10.0
|
||||
trio-websocket==0.12.2
|
||||
typer==0.9.4
|
||||
types-certifi==2021.10.8.3
|
||||
types-urllib3==1.26.25.14
|
||||
typing-inspection==0.4.2
|
||||
typing_extensions==4.15.0
|
||||
uritemplate==4.2.0
|
||||
urllib3==2.6.3
|
||||
uvicorn==0.40.0
|
||||
webdriver-manager==4.0.2
|
||||
webencodings==0.5.1
|
||||
websocket-client==1.9.0
|
||||
websockets==15.0.1
|
||||
wheel==0.46.3
|
||||
wsproto==1.3.2
|
||||
yfinance==0.2.39
|
||||
zipp==3.23.0
|
||||
@@ -54,9 +54,9 @@ if __name__ == "__main__":
|
||||
# 여기에 업데이트할 값들을 딕셔너리로 넣으세요
|
||||
my_updates = {
|
||||
# 한투 API 설정
|
||||
|
||||
# "KIS_APP_KEY_REAL": "PSUbfJUp3eiA0rthF1GSK8yWI7dD7GvXMPQL", # 여기에 앱키 입력
|
||||
# "KIS_APP_SECRET_REAL": "DzG04RbksnUMROslum/2DliJiVZAdeSgwUNHKSbFehMmD2WKGVUeSd0N1B8LY947W/aNtEmU8pdkvKTFnVX1u68DvCj7cvEtlJc++wCUeaRD3z1Ov48b5PLsPiWvwE+pMd0pEl6jmFg0J6td1TidugAsZtEQ3GUBimyQyDSgw3jkdbnM390=",
|
||||
"KIS_MOCK": "true",
|
||||
"KIS_APP_KEY_REAL": "PSUT2l4CO94DjrwDa2EAnEl639YXnWHdbbkN", # 여기에 앱키 입력
|
||||
"KIS_APP_SECRET_REAL": "2SkPBKrztpBomcR+pYNEBuVa5/iSqYLQxsDn/YqJuQ0dULp/GqTAePhe4czJHuf/1XBUd18KDV6ZTrmxfI8eTiCfIEaO6jMKSq0u+CoUkHTrO9TfliYtxsNbl43jL+rokLB54V2VmHrlqM4WCF+54bMWhzzSE7z3OOl67V9yWKCWIoTrcYg=",
|
||||
# "KIS_APP_KEY_MOCK": "PSdfKtsMihgC9tLiUr2XISscuR3fHxl6kvmV", # 여기에 앱키 입력`
|
||||
# "KIS_APP_SECRET_MOCK": "Ip+XZrZcoz11thgDD40XS8i6R1AalYkKFZwg2w8+ZMulVKN8rJVXiqGONxc4EYxw1S3TgOcx7fSldDc6EGq63bprfbgHwKWxstu29ZmLAtRNU0oFqV7e9vCOfgiWxrfnCqwcihoS7ovmza9+Ylqd8/EtjFGNmhQHWocyTAm8kdp5IG6tFtc=", # 여기에 앱시크릿 입력
|
||||
|
||||
|
||||
Reference in New Issue
Block a user