# 5분, 15분 이평선을 이용한 모의투자 (한투) 5분과 15분 이동평균선을 활용해 골든크로스와 데드크로스 신호로 매매하는 전략을 구현하고, 이를 모의투자 환경에서 검증해보도록 하겠습니다. 모의투자는 한국투자증권에서 진행합니다. ## 전략 만들기 임의의 이름을 가진 디렉토리(폴더)를 만듭니다. 이 예제에서는 `example`이라는 디렉토리를 만들어 사용하겠습니다. ```bash $ mkdir example $ cd example ``` 이제 파이썬 가상환경을 만듭니다. ```bash $ python -m venv .venv $ source .venv/bin/active ``` ```{note} 윈도우에서는 .venv\Scripts\activate 또는 .venv\Scripts\activate.bat 실행 ``` 전략 실행에 필요한 패키지는 `requirements.txt` 파일에 나열합니다. ``` pyqqq>=0.12.117 ``` 이후, 패키지를 설치합니다. ```bash $ pip install -r requirements.txt ``` ### 환경변수 모의투자 계좌의 Open API 정보를 `.env` 파일에 저장합니다. ``` KIS_APP_KEY= KIS_APP_SECRET= KIS_CANO= KIS_ACNT_PRDT_CD= ``` ### 전략 코드 골든크로스, 데드크로스 전략을 구현한 샘플 코드입니다. 샘플 코드는 `golden_dead_cross.py`로 저장합니다. ```{literalinclude} ../../../../examples/user_guide/golden_dead_cross_strategy.py ``` - **KODEX 코스닥150 레버리지** ETF 가격의 5분, 15분 이동평균선을 활용합니다. - 배포시에는 `run()` 함수를 실행하게 됩니다. - PC에서는 직접 실행해서 테스트하면 됩니다. 대신 실행하는 부분은 `__name__ == '__main__'` 조건으로 감싸 줘야 배포 시 문제가 생기지 않습니다. - pandas의 데이터프레임을 이용하여 `golden_cross`, `dead_cross`를 손쉽게 찾을 수 있습니다. ```python >>> print(df) open high low close volume value cum_volume cum_value ma5 ma15 golden_cross dead_cross time 2025-01-23 09:14:00 53600 53600 53500 53600 39237 2101891700 2951184 159783022700 53580.0 53660.000000 False False 2025-01-23 09:15:00 53500 53700 53500 53700 95271 5107186600 3046455 164890209300 53600.0 53646.666667 False False ... ... ... ... ... ... ... ... ... ... ... ... ... 2025-01-23 15:36:00 53700 53700 53700 53700 0 0 13827190 744242339200 53700.0 53700.000000 False False 2025-01-23 15:37:00 53700 53700 53700 53700 910152 48875162400 14737342 793117501600 53700.0 53700.000000 False False ``` ### 디렉토리 구조 최종적으로 `example` 디렉토리 구성을 보면 다음과 같습니다. ``` . ├── .env ├── .venv ├── golden_dead_cross.py └── requirements.txt ``` ## PC에서 실행하기 전략 코드에 문제는 없는지 배포하기 이전에 PC에서 실행하여 봅니다. ```bash $ python golden_dead_cross.py ``` 프로그램 실행 시 `초당 거래 건수를 초과했습니다.` 라는 에러 메시지가 나타날 수 있지만, 이는 무시해도 됩니다. 모의투자 환경에서는 1초당 API 요청이 2회로 제한되어 있어 이로 인한 에러 메시지가 발생할 수 있습니다. ``` {"rt_cd":"1","msg_cd":"EGW00201","msg1":"초당 거래건수를 초과하였습니다."} 500 Server Error: Internal Server Error for url: https://openapivts.koreainvestment.com:29443/uapi/domestic-stock/v1/quotations/inquire-time-itemchartprice?FID_ETC_CLS_CODE=&FID_COND_MRKT_DIV_CODE=J&FID_INPUT_ISCD=233740&FID_INPUT_HOUR_1=132300&FID_PW_DATA_INCU_YN=N Retrying in 0.5 seconds... ``` ```{admonition} 한국투자증권의 API 호출 유량 :class: tip :class: dropdown 실전투자는 1초당 20건이고, 모의투자는 1초당 2건입니다. ``` ## 배포하기 `qqq deploy` 명령어를 사용해 배포할 수 있습니다. 위 명령어를 실행하면 디렉토리의 모든 파일을 압축하여 업로드 합니다. ```bash $ qqq deploy ./golden_dead_cross.py Deploying ./golden_dead_cross.py as golden_dead_cross Uploading ./golden_dead_cross.py to GCS bucket ... ```