한국투자증권 주식매매프로그램 만들기

파이썬 주식매매프로그램 만들기

미국 주식 프로그램 만들기(eFriend expert)

1. 미국주식자동매매 프로그램 매수매도 프로그램

토폴로지 2022. 3. 16. 13:51
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달러로 바로 사짐

반응형