【发布时间】:2021-03-14 20:47:57
【问题描述】:
我正在尝试为币安构建一个交易机器人。我已经成功构建了机器人并通过终端使用它。
但是,我想制作一个 GUI,它以与终端中相同的方式运行机器人,除了这次有一个界面。我已经重建了机器人以连接到 binance 数据流以对其进行测试。通过使用各种“代码”(例如 ethusdt、btcusdt),我可以调整机器人以查看特定流以获取价格信息。
现在的问题是我可以使用按钮(链接到bot.py)启动程序,但是启动后我仍然需要在终端中手动输入代码。
所以我的问题是 - 我如何将代码作为参数传递给程序,以便它自动启动,而不必在之后输入它?我基本上想在输入字段(ticker_entry)中输入一个代码并将其传递给bot.py代码请求。
这是我为bot.py 编写的代码:
import websocket
import json
import pprint
from colorama import Fore, Back, Style
import numpy as np
import tkinter as tk
tmp = [1]
print("eg. ethusdt = ETH/USDT")
ticker = input(Fore.YELLOW + "Enter ticker here: ")
print(Style.RESET_ALL)
SOCKET="wss://stream.binance.com:9443/ws/"+ ticker +"@kline_1m"
def on_open(ws):
print('Connection established')
def on_close(ws):
print("Connection closed")
def on_message(ws, message):
global tmp
print("waiting for candle to close..")
json_message = json.loads(message)
candle = json_message['k']
is_candle_closed = candle['x']
close = candle['c']
if is_candle_closed:
print("\n")
print(Fore.RED + "Last candle closed at: ")
print(*tmp, sep= ' , ')
print(Style.RESET_ALL)
print("\n")
print(Fore.GREEN +"New candle closed at: \n{}".format(close))
print("\n")
print(Style.RESET_ALL)
tmp.pop(0)
tmp.append(float(close))
ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
ws.run_forever()
这是我用tkinter 模块编写的代码:
from tkinter import *
from tkinter import filedialog
import os
root = Tk()
WIDTH = 396
HEIGHT = 594
root.title('CheckBot')
root.geometry("396x594")
bg = PhotoImage(file = "rocket.png")
def start_bot(ticker_entry):
trader = 'bot.py'
os.system('"%s"' % trader)
#Creating canvas
my_canvas = Canvas(root, width=WIDTH, height=HEIGHT)
my_canvas.pack(fill="both", expand=True)
#Setting image in canvas
my_canvas.create_image(0,0, image=bg, anchor="nw")
#Adding a label
my_canvas.create_text(200,30, text="Enter the ticker to trade", font=("Bembo Bold Italic", 15), fill="#cc5200")
ticker_entry = Entry(my_canvas, bg='white')
ticker.pack(pady=50)
my_canvas.create_text(200,100, text="Enter amount to trade", font=("Bembo Bold Italic", 15), fill="#cc5200")
amount = Entry(my_canvas, bg='white')
amount.pack(pady=10)
trade_button = Button(my_canvas, text='Start trading', bg='#00b359', fg='#000099', command=lambda:start_bot(ticker))
trade_button.pack(pady=70)
root.mainloop()
【问题讨论】:
-
确保通过单击答案旁边的复选标记将有助于您的答案标记为有效!
标签: python multithreading tkinter bots trading