신한투자증권 모의투자계좌 개설, Open API도 발급도 모두 받았다. 이제 데이터 수집, 데이터 분석, 자동매매 시스템을 구축하기 위한 Python 개발 환경을 구성해보자.
파이썬 개발 환경
- VMware
- Windows 10
- CPU : 4core
- Mem : 16G
- Python : python3.10.11
- Editor : Visual Studio code
Python3.10.11버전을 아래의 링크를 통해서 다운로드 받고, 개발 편의성을 위한 Editor로 VScode를 설치 했다. VScode에서 Python 가상환경을 구축하는 방법 또한 지난 포스팅 링크를 참고하면 된다.
https://www.python.org/downloads/windows/
https://byj1009.github.io/python/2022/11/23/python-venv.html
+++ 추가로 Rhel8.6 기준으로 Linux에서 Open API를 통한 데이터 수집도 테스트할 예정.
mojito2
[파이썬을 이용한 한국/미국 주식 자동매매 시스템] 위키독스의 필자 혹은 저자가 빌드한 Python 모듈 중 일부로 보여진다. mojito2
파이썬 라이브러리는 한국투자증권의 Open API만을 호출할 수 있는 것으로 보여지며, 간단하게 해당 라이브러리를 기능 테스트 용도로 활용한 후, 별도로 시세정보 및 주식 자동매매 프로그래밍을 개발해보자.
https://pypi.org/project/mojito2/
mojito2 사용예시
현재가 조회
import mojito
import pprint
key = "발급받은 API KEY"
secret = "발급받은 API SECRET"
acc_no = "12345678-01"
broker = mojito.KoreaInvestment(api_key=key, api_secret=secret, acc_no=acc_no)
resp = broker.fetch_price("005930")
pprint.pprint(resp)
일봉 데이터 조회
import mojito
import pprint
key = "발급받은 API KEY"
secret = "발급받은 API SECRET"
acc_no = "12345678-01"
broker = mojito.KoreaInvestment(api_key=key, api_secret=secret, acc_no=acc_no)
resp = broker.fetch_daily_price("005930")
pprint.pprint(resp)
잔고 조회
resp = broker.fetch_balance()
pprint.pprint(resp)
주문
resp = broker.create_market_buy_order("005930", 10) # 삼성전자, 10주, 시장가
pprint.pprint(resp)
{'rt_cd': '0',
'msg_cd': 'APBK0013',
'msg1': '주문 전송 완료 되었습니다.',
'output': {'KRX_FWDG_ORD_ORGNO': '91252',
'ODNO': '0000117057',
'ORD_TMD': '121052'}}
주문 취소
resp = broker.cancel_order("91252", "0000117057", "00", 60000, 5, "Y") # KRX_FWDG_ORD_ORGNO, ODNO, 지정가 주문, 가격, 수량, 모두
print(resp)
미국주식 주문
broker = KoreaInvestment(key, secret, acc_no=acc_no, exchange="NASD")
resp = broker.create_limit_buy_order("TQQQ", 35, 1)
print(resp)
웹소켓
import pprint
import mojito
with open("../../koreainvestment.key", encoding="utf-8") as f:
lines = f.readlines()
key = lines[0].strip()
secret = lines[1].strip()
if __name__ == "__main__":
broker_ws = mojito.KoreaInvestmentWS(key, secret, ["H0STCNT0", "H0STASP0"], ["005930", "000660"], user_id="idjhh82")
broker_ws.start()
while True:
data_ = broker_ws.get()
if data_[0] == '체결':
print(data_[1])
elif data_[0] == '호가':
print(data_[1])
elif data_[0] == '체잔':
print(data_[1])