아래가 호가창 클래스 코드입니다.
''' 메인 프레임'''
class OrderbookWidget(QWidget,BinanceFunction):
def __init__(self, parent=None, ticker="TRX/USD"):
super().__init__(parent)
uic.loadUi("mainUI.ui", self)
self.ticker = ticker
#item
#코인 종류 고르는 매서드
item_box = binance.symbols
self.coin_box.addItems(item_box)
#아이콘
self.setWindowTitle("System Trading")
self.setWindowIcon(QIcon("icon.png"))
#배경색
pal = QPalette()
pal.setColor(QPalette.Background, QColor('#1C1C1C'))
self.setAutoFillBackground(True)
self.setPalette(pal)
#테이블 배경색
#매도테이블
self.tableAsks.setStyleSheet("QTableWidget {\n"
"color: #F7819F;"
"background-color:rgb(28, 28, 28)\n"
" \n"
"\n"
"\n"
"\n"
"}")
#매수테이블
self.tableBids.setStyleSheet("QTableWidget {\n"
"color: #58FA82;"
"background-color:rgb(28, 28, 28)\n"
" \n"
"\n"
"\n"
"\n"
"}")
'''매수, 매도 버튼 이벤트'''
self.buy_present.setStyleSheet("background-color : #58FA82;") ##00FF00 "color: #FAFAFA;"
self.buy_present.clicked.connect(self.buy_long)
self.sell_present.setStyleSheet("background-color : #ff5522;")
self.sell_present.clicked.connect(self.sell_short)
'''취소 버튼 이벤트'''
self.cancel_all.setStyleSheet("background-color : #ff7f50 ;")
self.cancel_all.clicked.connect(self.cancel_all_order)
# ----------------- 호가창 데이터 ------------------
for i in range(10):
# 매도호가 : 3열데이터
item_2 = QTableWidgetItem(str(""))
item_2.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter)
self.tableAsks.setItem(i, 2, item_2)
# 매도 물량 : 2열데이터
item_1 = QTableWidgetItem(str(""))
item_1.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter)
self.tableAsks.setItem(i, 1, item_1)
# 매수호가 : 3열데이터
item_2 = QTableWidgetItem(str(""))
item_2.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter)
self.tableBids.setItem(i, 2, item_2)
# 매수물량 : 4열데이터
item_3 = QTableWidgetItem(str(""))
item_3.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter)
self.tableBids.setItem(i, 3, item_3)
self.ow = OrderbookWorker(self.ticker)
self.ow.dataSent.connect(self.updateData)
self.ow.start()
def updateData(self, data):
global g_tick_data #전역변수로 설정하여 유동적으로 다른코인 호가창으로 변경가능
g_tick_data = str(self.coin_box.currentText())
for i, v in enumerate(data['asks'][::-1]): #매도 i= 0 매도 v= [2.13441, 311.0]
item_2 = self.tableAsks.item(i, 2)
item_2.setText(f"{v[0]:,}")
item_1 = self.tableAsks.item(i, 1)
item_1.setText(f"{v[1]:,}")
for i, v in enumerate(data['bids']):
item_2 = self.tableBids.item(i, 2)
item_2.setText(f"{v[0]:,}")
item_3 = self.tableBids.item(i, 3)
item_3.setText(f"{v[1]:,}")
def updataBalance(self, balance, ticker):
free = str(balance[g_tick_data.split('/')[0]]['free'])
used = str(balance[g_tick_data.split('/')[0]]['used'])
total = str(balance[g_tick_data.split('/')[0]]['total'])
coin_usd = str(int(balance[g_tick_data.split('/')[0]]['total']) * round(float(ticker['close']), 2))
self.tableBalance.setItem(0, 0, QTableWidgetItem(free))
self.tableBalance.setItem(0, 1, QTableWidgetItem(used))
self.tableBalance.setItem(0, 2, QTableWidgetItem(total))
self.tableBalance.setItem(0, 3, QTableWidgetItem(coin_usd))
def closeEvent(self, event):
self.ow.close()
✔ 클래스
class OrderbookWidget(QWidget,BinanceFunction)
✔ 초기화 함수
def __init__(self, parent=None, ticker="TRX/USD")
🌳 매수, 매도, 주문취소 메서드 구현
✨매수, 매도, 버튼 이벤트
self.buy_present.setStyleSheet("background-color : #58FA82;")
self.buy_present.clicked.connect(self.buy_long)
self.sell_present.setStyleSheet("background-color : #ff5522;")
self.sell_present.clicked.connect(self.sell_short)
self.cancel_all.setStyleSheet("background-color : #ff7f50 ;")
self.cancel_all.clicked.connect(self.cancel_all_order)
✔ 데이터 불러와 호가창에 삽입하는 메서드
def updateData(self, data)
✔ 현재 거래 포지션과 잔고를 계산하는 메서드
def updataBalance(self, balance, ticker)
바이낸스에서 받아온 잔고 데이터 파라미터인 balance를 split하여 잔고 데이터를 얻어 삽입
✔ 프로그램 종료 메서드
def closeEvent(self, event)
if __name__ == "__main__":
app = QApplication(sys.argv)
ow = OrderbookWidget()
ow.show()
exit(app.exec_())
✔ 프로그램 종료 메서드
위 코드등을 통해 이제까지 만들어왔던 클래스들을 상호 연결하여 사용할 수 있다. 위의 메서드들을 활용하여 성공적인 투자를 하시기 바랍니다!💡💡