Last active
August 9, 2017 11:43
-
-
Save kwakseonghun/9f5acea6394bd64800a46805f6849c8c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from PyQt5.QtWidgets import * | |
from PyQt5.QtCore import * | |
from PyQt5 import uic | |
from kiwoomd import * | |
import sqlite3 | |
import pandas as pd | |
from pandas import Series,DataFrame | |
import numpy as np | |
from datetime import date,timedelta | |
con=sqlite3.connect("c:/Users/skehrha/PycharmProjects/StockProject/don30.db") | |
form_class = uic.loadUiType("don3030.ui")[0] | |
class MyWindow(QMainWindow, form_class): | |
def __init__(self): | |
super().__init__() | |
self.setupUi(self) | |
self.kiwoomconnect() | |
self.timercall() | |
self.pushbtevent() | |
self.actioneve() | |
self.initval() | |
def kiwoomconnect(self): | |
self.kiwoom = Kiwoom() | |
self.kiwoom._comm_connect() | |
self.kiwoom.OnReceiveTrData.connect(self.tr_check) | |
self.kiwoom.OnReceiveRealData.connect(self.real_check) | |
self.kiwoom.OnReceiveMsg.connect(self.msg_check) | |
self.kiwoom.OnReceiveChejanData.connect(self.chejan_check) | |
def timercall(self): | |
self.timer = QTimer(self) | |
self.timer.start(1000) | |
self.timer.timeout.connect(self.timeout) | |
def pushbtevent(self): | |
self.pushButton_2.clicked.connect(QCoreApplication.instance().quit) | |
self.pushButton.clicked.connect(self.redata) | |
self.pushButton_3.clicked.connect(self.bt3) | |
self.pushButton_6.clicked.connect(self.bt6) | |
def action(self): | |
QMessageBox.about(self, "돈벌어보자3030", "연락처 : 010-****-****\n제작자 : 곽성훈") | |
def actioneve(self): | |
self.actionAbout.triggered.connect(self.action) | |
def __del__(self): | |
con.commit() | |
con.close() | |
def initval(self): | |
#초기변수 지정 | |
self.initialval() | |
self.callacc() | |
self.calltime=[] | |
self.Kospi200init() | |
self.todaycall() | |
def initialval(self): | |
self.count = 0 | |
self.bt33 = 1 | |
self.bt11 = 0 | |
self.timee = 0 | |
self.dla = 0 | |
self.bt66=0 | |
self.opt81=0 | |
def callacc(self): | |
accouns_num = int(self.kiwoom._get_login_info("ACCOUNT_CNT")) | |
accounts = self.kiwoom._get_login_info("ACCNO") | |
accounts_list = accounts.split(";")[0:accouns_num] | |
self.comboBox.addItems(accounts_list) | |
def Kospi200init(self): | |
self.codekey = pd.read_sql("SELECT * FROM Kospi200", con, index_col=None) | |
self.codekey = list(self.codekey['종목코드']) | |
self.dic = [] | |
for i in self.codekey: | |
self.dic.append(i + 'u') | |
self.dic.append(i + 'd') | |
self.dic.append(i + 'p') | |
self.dic.append(i + 'v') | |
self.inidic() | |
def inidic(self): | |
self.temrealdata = {} | |
self.realdata = {} | |
self.temrealdata['time'] = 0 | |
self.realdata['time']=[] | |
self.realdata['time'].append(0) | |
for i in self.dic: | |
self.realdata[i]=[] | |
self.realdata[i].append(0) | |
self.temrealdata[i] = 0 | |
def todaycall(self): | |
today = date.today() | |
self.todayyymmdd = today.strftime('%Y-%m-%d') | |
def bt1(self): | |
if self.count<5: | |
self.kiwoom.call_opw00011() | |
self.calltime.append(self.stime) | |
self.bt11+=1 | |
self.count+=1 | |
if self.count<5: | |
self.kiwoom.call_opw00018() | |
self.calltime.append(self.stime) | |
self.bt11 += 1 | |
self.count+=1 | |
if self.count<5: | |
self.kiwoom.call_opt10085() | |
self.calltime.append(self.stime) | |
self.bt11 += 1 | |
self.count += 1 | |
def bt4(self): | |
self.df = pd.read_sql("SELECT * FROM Kospi200", con, index_col=None) | |
self.d1 = self.df['종목코드'] | |
self.d2 = self.df['index'] | |
self.d3 = [] | |
for i in self.d1: | |
self.d3.append(self.kiwoom._get_master_last_price(i)) | |
dfg = {'index': self.d2, '종목코드': self.d1, '전일가': self.d3} | |
dfg = pd.DataFrame(dfg, columns=['종목코드', '전일가'], index=self.d2) | |
dfg.to_sql('KOSPI200전일가', con, if_exists='replace') | |
def bt3(self): | |
if self.bt33==1: | |
self.kiwoom.res_set_real2("1001") | |
self.listWidget.addItem("KOSPI200 연결1") | |
self.bt33=2 | |
self.pushButton_3.setText("KOSPI200 연결2") | |
elif self.bt33==2: | |
self.kiwoom.res_set_real3("1002") | |
self.listWidget.addItem("KOSPI200 연결2") | |
self.bt33 = 3 | |
self.pushButton_3.setText("KOSPI200 연결3") | |
elif self.bt33==3: | |
self.kiwoom.res_set_real4("1003") | |
self.listWidget.addItem("KOSPI200 연결완료") | |
self.bt33 = 4 | |
self.pushButton_3.setText("해제하기") | |
elif self.bt33==4: | |
self.kiwoom._set_real_remove("ALL","ALL") | |
self.listWidget.addItem("실시간연결 해제완료") | |
self.bt33=1 | |
self.pushButton_3.setText("실시간연결") | |
def bt6(self): | |
if self.bt66==0: | |
self.setGeometry(500,320,820,420) | |
self.tableWidget = QTableWidget(self) | |
self.tableWidget.setRowCount(self.kiwoom.opt85_r+1) | |
self.tableWidget.setColumnCount(5) | |
self.setTableWidgetData() | |
self.tableWidget.resize(400, 420) | |
self.tableWidget.move(420,0) | |
self.tableWidget.resizeColumnsToContents() | |
self.tableWidget.resizeRowsToContents() | |
self.tableWidget.show() | |
self.bt66+=1 | |
elif self.bt66==1: | |
self.setGeometry(750, 320, 420, 420) | |
self.tableWidget.close() | |
self.bt66 += -1 | |
def opt04(self): | |
if self.opt81==1: | |
self.kiwoom.call_opt10081("229200") | |
self.opt81=1 | |
else: | |
self.kiwoom.call_opt10081("250780") | |
def setTableWidgetData(self): | |
w_5=0 | |
col_headers=['종목명','매입가','현재가','수량','수익률'] | |
self.tableWidget.setHorizontalHeaderLabels(col_headers) | |
for j in range(0,self.kiwoom.opt85_r): | |
item1=QTableWidgetItem(self.kiwoom._get_master_code_name(self.kiwoom.opt85_1[j])) | |
w_1=int(self.kiwoom.opt85_2[j]) | |
item2 = QTableWidgetItem(str(w_1)) | |
w_2=int(self.kiwoom.opt85_4[j]) | |
item3 = QTableWidgetItem(str(w_2)) | |
w_3=int(self.kiwoom.opt85_3[j]) | |
item4 = QTableWidgetItem(str(w_3)) | |
w_4=int(10000*(int(self.kiwoom.opt85_4[j]) - int(self.kiwoom.opt85_2[j]))/int(self.kiwoom.opt85_2[j]))/100 | |
item5 = QTableWidgetItem(str(w_4)+'%') | |
item1.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) | |
item2.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) | |
item3.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) | |
item4.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) | |
item5.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) | |
self.tableWidget.setItem(j+1, 0, item1) | |
self.tableWidget.setItem(j+1, 1, item2) | |
self.tableWidget.setItem(j+1, 2, item3) | |
self.tableWidget.setItem(j+1, 3, item4) | |
self.tableWidget.setItem(j+1, 4, item5) | |
w_5=w_5+(w_2-w_1)*w_3 | |
item_1=QTableWidgetItem('총계: '+str(w_5)+'원') | |
item_1.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) | |
self.tableWidget.setItem(0, 0, item_1) | |
def tr_check(self, sScrNo, sRQName, sTrCode, sRecordName, sPreNext, nDataLength, sErrorCode, sMessage,sSplmMsg): | |
print(sRQName) | |
if sRQName=="opw00011_req": | |
self.pmoney=self.kiwoom.res_opw00011(sRQName,sTrCode) | |
self.lineEdit_2.setText(self.pmoney) | |
if self.lineEdit.text()=="": | |
self.lineEdit.setText(self.pmoney) | |
else: | |
self.tmoney=int(self.pmoney)+int(self.kiwoom.nowasset) | |
self.tmoney=str(self.tmoney) | |
self.lineEdit.setText(self.tmoney) | |
elif sRQName=="opw00018_req": | |
self.kiwoom.res_opw00018(sRQName, sTrCode) | |
self.lineEdit_5.setText(self.kiwoom.buyasset) | |
self.lineEdit_6.setText(self.kiwoom.nowasset) | |
if self.lineEdit.text()=="": | |
self.lineEdit.setText(self.kiwoom.nowasset) | |
else: | |
self.tmoney = int(self.pmoney) + int(self.kiwoom.nowasset) | |
self.tmoney = str(self.tmoney) | |
self.lineEdit.setText(self.tmoney) | |
elif sRQName == "opt10085_req": | |
self.kiwoom.res_opt10085(sRQName, sTrCode) | |
elif sRQName == "opt10004_req": | |
self.kiwoom.res_opt10004(sRQName, sTrCode) | |
elif sRQName == "opt10081_req": | |
self.kiwoom.res_opt10081(sRQName, sTrCode) | |
self.op={} | |
self.op['시가']=self.kiwoom.opt81_1 | |
self.op['고가']=self.kiwoom.opt81_2 | |
self.op['저가']=self.kiwoom.opt81_3 | |
self.op['종가']=self.kiwoom.opt81_4 | |
self.op['거래량']=self.kiwoom.opt81_5 | |
self.op['일자']=self.kiwoom.opt81_6 | |
op_ = pd.DataFrame(self.op, columns=['시가','고가','저가','종가','거래량'], index=self.op['일자']) | |
op_.to_sql('콜풋비교6', con, if_exists='append') | |
def real_check(self, sRealKey, sRealType, sRealData): | |
if self.kiwoom._get_comm_real_data(sRealKey, 20)!="": | |
if self.kiwoom._get_comm_real_data(sRealKey, 20)!=0: | |
self.temrealdata['time'] = self.kiwoom._get_comm_real_data(sRealKey, 20) | |
for i in self.codekey: | |
if i==sRealKey: | |
if self.kiwoom._get_comm_real_data(sRealKey, 27)!="": | |
self.temrealdata[i + 'u'] = abs(int(self.kiwoom._get_comm_real_data(sRealKey, 27))) | |
if self.kiwoom._get_comm_real_data(sRealKey, 28) != "": | |
self.temrealdata[i + 'd'] = abs(int(self.kiwoom._get_comm_real_data(sRealKey, 28))) | |
if self.kiwoom._get_comm_real_data(sRealKey, 23) != "": | |
self.temrealdata[i + 'p'] = abs(int(self.kiwoom._get_comm_real_data(sRealKey, 23))) | |
if self.kiwoom._get_comm_real_data(sRealKey, 13) != "": | |
self.temrealdata[i + 'v'] = abs(int(self.kiwoom._get_comm_real_data(sRealKey, 13))) #거래량 값이 없을떄 처리 | |
self.realdata['time']=[] | |
self.realdata[i + 'u']=[] | |
self.realdata[i + 'd']=[] | |
self.realdata[i + 'p'] = [] | |
self.realdata[i + 'v'] = [] | |
self.realdata['time'].append(self.temrealdata['time']) | |
self.realdata[i+'u'].append(self.temrealdata[i + 'u']) | |
self.realdata[i+'d'] .append(self.temrealdata[i + 'd']) | |
self.realdata[i+'p'] .append(self.temrealdata[i + 'p']) | |
self.realdata[i+'v'] .append(self.temrealdata[i + 'v']) | |
def msg_check(self, sScrNo, sRQName, sTrCode, sMsg): | |
pass | |
def chejan_check(self, sGubun, nItemCnt, sFidList): | |
pass | |
# 이벤트 처리하는곳 | |
def timeout(self): | |
current_time = QTime.currentTime() | |
text_time = current_time.toString("hh:mm:ss") | |
time_msg = "현재시간: " + text_time | |
state = self.kiwoom._get_connect_state() | |
if state == 1: | |
state_msg = "서버 연결 중" | |
else: | |
state_msg = "서버 미 연결 중" | |
self.statusbar.showMessage(state_msg + " | " + time_msg+" | "+self.todayyymmdd+" | "+"돈벌어보자3030_ver_1.5") | |
self.stime = 1000*(current_time.hour() * 3600 + current_time.minute() * 60 + current_time.second())+current_time.msec() | |
self.tcalltime=self.calltime | |
for i in self.calltime: | |
if i+1000<self.stime: | |
self.count+=-1 | |
if self.count<=0: | |
self.count=0 | |
self.calltime = [] | |
else: | |
self.calltime=self.tcalltime[len(self.tcalltime)-self.count:len(self.tcalltime)] | |
self.upd() | |
def upd(self): | |
self.redata() | |
if self.bt11 < 3: | |
self.bt1() | |
def redata(self): | |
retypedata=pd.DataFrame(self.realdata,columns=self.dic,index=self.realdata['time']) | |
retypedata.to_sql('KOSPI200'+self.todayyymmdd,con,if_exists='append') | |
if __name__ == "__main__": | |
app = QApplication(sys.argv) | |
myWindow = MyWindow() | |
myWindow.show() | |
app.exec_() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment