import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QAxContainer import *
from PyQt5.QtCore import *
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("한국투자증권-API")
self.setGeometry(300, 300, 800, 500)
self.text_edit = QTextEdit(self)
self.text_edit.setGeometry(10, 20, 780, 450)
# self.text_edit.setEnabled(False)
# 매수 버튼
btn_buy = QPushButton("Buy", self) # 버튼 텍스트
btn_buy.move(20, 20) # 버튼 위치
btn_buy.clicked.connect(self.btn_buy_clicked) # 클릭 시 실행할
# 매도 버튼
btn_sell = QPushButton("Sell", self) # 버튼 텍스트
btn_sell.move(60, 20) # 버튼 위치
btn_sell.clicked.connect(self.btn_sell_clicked) # 클릭 시 실행할
def btn_buy_clicked(self):
# 주문 입력 및 전송
self.tran_os_us_buy = QAxWidget("ITGExpertCtl.ITGExpertCtlCtrl.1")
self.tran_os_us_buy.SetSingleData(0, "12345678") #종합계좌번호 ##계좌일련번호[8],)
self.tran_os_us_buy.SetSingleData(1, "01") #계좌상품코드 ##계좌 상품코드, GetAccount() 함수 이용(뒤 2자리)
self.tran_os_us_buy.SetSingleData(2, self.tran_os_us_buy.GetEncryptPassword("1234")) #계좌비밀번호(반드시 암호화 처리 필요)
self.tran_os_us_buy.SetSingleData(3, "NASD") #해외거래소코드 ##거래소코드 나스닥 NASD 뉴욕 NVSE 아맥스 AMEX
self.tran_os_us_buy.SetSingleData(4, "AAPL") #상품번호 ##종목코드
self.tran_os_us_buy.SetSingleData(5, "1") #주문수량
self.tran_os_us_buy.SetSingleData(6, "6.11") #해외주문단가 ##주문가격
self.tran_os_us_buy.SetSingleData(7, "") #연락전화번호 #전화번호 필수값 아님
self.tran_os_us_buy.SetSingleData(8, "") #운용사지정주문번호 입력하지 않음
self.tran_os_us_buy.SetSingleData(9, "0") #주문서버구분코드 고정값 0
self.tran_os_us_buy.SetSingleData(10, "00") # 주문구분, 00: 지정가, 01: 시장가 LOO:32 LOC:34
#항목 설정
self.tran_os_us_buy.RequestData("OS_US_BUY")
self.text_edit.append("미국 매수주문 전송 [" + str(self.tran_os_us_buy.GetSendRqID()) + "] ")
self.tran_os_us_buy.ReceiveData.connect(self.tran_os_us_buy_receivedata) #이벤트 연결
def tran_os_us_buy_receivedata(self):
# 주문응답 이벤트
self.text_edit.append("미국 매수주문 응답 [" + str(self.tran_os_us_buy.GetSendRqID()) + "] ")
#결과 메세지
self.text_edit.append("[" + str(self.tran_os_us_buy.GetSendRqID()) + "] " + self.tran_os_us_buy.GetReqMsgCode() + " " + self.tran_os_us_buy.GetReqMessage())
self.text_edit.append("주문번호 : " + self.tran_os_us_buy.GetSingleData(1, 0))
self.text_edit.append("주문시간 : " + self.tran_os_us_buy.GetSingleData(2, 0))
def btn_sell_clicked(self):
# 주문 입력 및 전송
self.tran_os_us_sell = QAxWidget("ITGExpertCtl.ITGExpertCtlCtrl.1")
self.tran_os_us_sell.SetSingleData(0, "12345678") #계좌일련번호[8], GetAccount() 함수 이용(앞 8자리)
self.tran_os_us_sell.SetSingleData(1, "01") #계좌 상품코드, GetAccount() 함수 이용(뒤 2자리)
self.tran_os_us_sell.SetSingleData(2, self.tran_os_us_sell.GetEncryptPassword("1234")) #계좌비밀번호(반드시 암호화 처리 필요)
self.tran_os_us_sell.SetSingleData(3, "NASD") #거래소코드
self.tran_os_us_sell.SetSingleData(4, "AAPL") #종목코드
self.tran_os_us_sell.SetSingleData(5, "1") #주문수량
self.tran_os_us_sell.SetSingleData(6, "6.11") #주문가격
self.tran_os_us_sell.SetSingleData(7, "") #전화번호
self.tran_os_us_sell.SetSingleData(8, "") #운용사지정주문번호
self.tran_os_us_sell.SetSingleData(9, "0") #주문서버구분코드
self.tran_os_us_sell.SetSingleData(10, "00") # 주문구분, 지정가:00 MOO:31 MOC:33 LOO:32 LOC:34
#항목 설정
self.tran_os_us_sell.RequestData("OS_US_SELL")
self.text_edit.append("미국 매도주문 전송 [" + str(self.tran_os_us_sell.GetSendRqID()) + "] ")
self.tran_os_us_sell.ReceiveData.connect(self.tran_os_us_sell_receivedata) #이벤트 연결
def tran_os_us_sell_receivedata(self):
# 주문응답 이벤트
self.text_edit.append("미국 매도주문 응답 [" + str(self.tran_os_us_sell.GetSendRqID()) + "] ")
#결과 메세지
self.text_edit.append("[" + str(self.tran_os_us_sell.GetSendRqID()) + "] " + self.tran_os_us_sell.GetReqMsgCode() + " " + self.tran_os_us_sell.GetReqMessage())
self.text_edit.append("주문번호 : " + self.tran_os_us_sell.GetSingleData(1, 0))
self.text_edit.append("주문시간 : " + self.tran_os_us_sell.GetSingleData(2, 0))
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
실행결과 화면
실행 할때 꼭 관리자 명령 프롬프트로 실행해야 한다
색깔 진하게 말했다
관리자 권한으로 실행안하면 실행 안된다.
위 코드 파일 제목은 test.py
따라서 관리자 권한으로 cmd창 띄운 후 python test.py 치면 오른쪽 같이 된다
UI 위치 이상한건 나중에 생각하고
이 샘플코드로 애플 주식이 실제로 사지는지 안사지는지가 중요
위의 코드 설명은 따로 다시 설명할 건데
쪼금만 설명해보자면
self.tran_os_us_sell.SetSingleData(0, "12345678") #계좌일련번호[8], GetAccount() 함수 이용(앞 8자리)
12345678 숫자 대신 본인계좌 넣으면 된다(한투 계좌번호가 8자리-2자리 이런식으로 표현되어있다)
self.tran_os_us_sell.SetSingleData(1, "01") #계좌 상품코드, GetAccount() 함수 이용(뒤 2자리)
01은 계좌 8자리-2자리 중 2자리
self.tran_os_us_sell.SetSingleData(2, self.tran_os_us_sell.GetEncryptPassword("1234")) #계좌비밀번호(반드시 암호화 처리
1234대신 본인 계좌비밀번호 넣으시고요
self.tran_os_us_sell.SetSingleData(3, "NASD") #거래소코드
나스닥 거래소 코드는 NASD 임다
self.tran_os_us_sell.SetSingleData(4, "AAPL") #종목코드
애플의 종목 코드는 APPL 테슬라사고 싶으면 아마 TSLA ?
self.tran_os_us_sell.SetSingleData(5, "1") #주문수량
1주 주문
self.tran_os_us_sell.SetSingleData(6, "6.11") #주문가격
6.11달러로 주문
self.tran_os_us_sell.SetSingleData(10, "00") # 주문구분, 지정가:00 MOO:31 MOC:33 LOO:32 LOC:34
00 이면 지정가로 주문
주식이 5달러인데 6.11달러로 주문하면 5달러로 바로 사짐
'미국 주식 프로그램 만들기(eFriend expert)' 카테고리의 다른 글
5. 주식 이동평균선 구하기 (0) | 2022.03.20 |
---|---|
4. iex cloud api 연동 (0) | 2022.03.19 |
3. 파이썬 RSI 구하기 (0) | 2022.03.17 |
2. 한국투자증권 API 설명 (0) | 2022.03.16 |
0. 미국 주식 자동 매매 프로그램 만들기 준비물 (0) | 2022.03.16 |