import os import time import socket from datetime import datetime import datetime # from wsgiref import headers import pandas as pd from cmath import isnan import random import csv import copy import codecs from multiprocessing import Pool import datetime import json import time import pynput import requests from tkinter import filedialog, messagebox import tkinter as tk import random from tkinter.ttk import Combobox from tkinter import messagebox from tkinter import * from tkinter.messagebox import * from tkinter import font import threading import keyboard import time class Application(Frame): def __int__(self, master=None): super().__init__(master) self.master = master self.pack() # self.createWidget01() self.collect_Algo = [] self.collect_Algo_param = {} self.running = False self.thread = None self.pythonGUI_choice() def pythonGUI_choice(self): self.destroy_add1 = [] self.poetryLab = Label(root, text="枯藤老树昏鸦\n小桥流水人家\n古道西风瘦马\n夕阳西下\n断肠人在天涯", fg="black", font=('楷体', 15, 'bold')) self.poetryLab.place(x=60, y=10) self.destroy_add1.append(self.poetryLab) self.choice_loginBtn = Button(text="DMA", font=('仿宋体', 12, 'bold'), fg="black", bg="green", command=self.pythonGUI_DMA) self.choice_loginBtn.place(x=20, y=150) self.choice_algoImport = Button(text="算法单导入", font=('仿宋体', 12, 'bold'), fg="black", bg="green", command=self.pythonGUI_algoImport) self.choice_algoImport.place(x=95, y=150) self.choice_instruction = Button(text="指令", font=('仿宋体', 12, 'bold'), fg="black", bg="green", command=self.pythonGUI_instruction) self.choice_instruction.place(x=230, y=150) self.destroy_add1.append(self.choice_loginBtn) self.destroy_add1.append(self.choice_algoImport) self.destroy_add1.append(self.choice_instruction) def pythonGUI_instruction(self): if self.destroy_add1 != []: for i in self.destroy_add1: i.destroy() self.destroy_add1.clear() root.geometry("300x200+750+400") self.only_instructionBtn = Button(text="单个下发指令", font=('楷体', 12, 'bold'), fg="black", bg="orange",command=self.only_instruction) self.only_instructionBtn.place(x=20, y=20) self.batch_instructionBtn = Button(text="批量下发指令", font=('楷体', 12, 'bold'), fg="black", bg="orange",command=self.batch_instruction) self.batch_instructionBtn.place(x=160, y=20) self.update_instructionBtn = Button(text="修改指令", font=('楷体', 12, 'bold'), fg="black", bg="orange",command=self.update_instruction) self.update_instructionBtn.place(x=20, y=80) self.freezing_instructionBtn = Button(text="冻结指令", font=('楷体', 12, 'bold'), fg="black", bg="orange",command=self.freezing_instruction) self.freezing_instructionBtn.place(x=160, y=80) self.cancelled_instructionBtn = Button(text="作废指令", font=('楷体', 12, 'bold'), fg="black", bg="orange",command=self.cancelled_instruction) self.cancelled_instructionBtn.place(x=20, y=140) self.thawOut_instructionBtn = Button(text="解冻指令", font=('楷体', 12, 'bold'), fg="black", bg="orange",command=self.thawOut_instruction) self.thawOut_instructionBtn.place(x=160, y=140) self.destroy_add1.append(self.only_instructionBtn) self.destroy_add1.append(self.batch_instructionBtn) self.destroy_add1.append(self.update_instructionBtn) self.destroy_add1.append(self.freezing_instructionBtn) self.destroy_add1.append(self.cancelled_instructionBtn) self.destroy_add1.append(self.thawOut_instructionBtn) def only_instruction(self): if self.destroy_add1 != []: for i in self.destroy_add1: i.destroy() self.destroy_add1.clear() root.geometry("556x500+700+350") # Label(root, text="每秒订单量:", font=('仿宋体', 12, 'bold'), fg="blue").place(x=5, y=55) # self.targetVol = Text(root, height=1.3, width=10, fg="green", font=('仿宋体', 12, 'bold')) # 获取输入测试环境ip和端口 self.ipLab = Label(text="测试环境:", font=('仿宋体', 12, 'bold'), fg="blue") self.ipLab.place(x=5, y=15, anchor='nw') # ipText = tk.Text( height=1, width=20) # "10.5.4.109:8092", "10.5.5.174:8092" self.ipText = Combobox(values=["zy_test","zy_uat"], height=1, width=18,state="readonly") self.ipText.place(x=105, y=15, anchor='nw') self.ipText.current(0) self.ipText.configure(foreground="green") self.ipText.configure(font=('仿宋体', 12, 'bold')) # 产品号 self.productLab = tk.Label( text="产品号:", font=('仿宋体', 12, 'bold'), fg="blue") self.productLab.place(x=5, y=45, anchor='nw') self.productText = tk.Text(height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.productText.place(x=105, y=45, anchor='nw') self.productText.insert('1.0', '7001') # 资产单元 self.assetLab = tk.Label( text="资产单元:", font=('仿宋体', 12, 'bold'), fg="blue") self.assetLab.place(x=5, y=75, anchor='nw') self.assetText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.assetText.place(x=105, y=75, anchor='nw') self.assetText.insert('1.0', '7001') # 组合号 self.portfolioLab = tk.Label( text="组合号:", font=('仿宋体', 12, 'bold'), fg="blue") self.portfolioLab.place(x=5, y=105, anchor='nw') self.portfolioText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.portfolioText.place(x=105, y=105, anchor='nw') self.portfolioText.insert('1.0', '7001_000') # 获取代码 self.symbolLab = tk.Label( text="代码:", font=('仿宋体', 12, 'bold'), fg="blue") self.symbolLab.place(x=5, y=135, anchor='nw') self.symbolText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.symbolText.place(x=105, y=135, anchor='nw') self.symbolText.insert('1.0', '000001.SZ') # 交易方向 self.tradeSideLab = tk.Label( text="交易方向:", font=('仿宋体', 12, 'bold'), fg="blue") self.tradeSideLab.place(x=5, y=165, anchor='nw') self.tradeSideText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.tradeSideText.place(x=105, y=165, anchor='nw') self.tradeSideText.insert('1.0', '1') # 目标量 self.targetQtyLab = tk.Label( text="目标量:", font=('仿宋体', 12, 'bold'), fg="blue") self.targetQtyLab.place(x=5, y=195, anchor='nw') self.targetQtyText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.targetQtyText.place(x=105, y=195, anchor='nw') self.targetQtyText.insert('1.0', '10000') # 目标金额 self.targetAmtLab = tk.Label( text="目标金额:", font=('仿宋体', 12, 'bold'), fg="blue") self.targetAmtLab.place(x=5, y=225, anchor='nw') self.targetAmtText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.targetAmtText.place(x=105, y=225, anchor='nw') self.targetAmtText.insert('1.0', '') # 价格类型 #(0无限价,1有限价) self.priceTypeLab = tk.Label( text="价格类型:", font=('仿宋体', 12, 'bold'), fg="blue") self.priceTypeLab.place(x=5, y=255, anchor='nw') self.priceTypeText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.priceTypeText.place(x=105, y=255, anchor='nw') self.priceTypeText.insert('1.0', '') # 限价 self.limitPriceLab = tk.Label( text="限价:", font=('仿宋体', 12, 'bold'), fg="blue") self.limitPriceLab.place(x=5, y=285, anchor='nw') self.limitPriceText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.limitPriceText.place(x=105, y=285, anchor='nw') self.limitPriceText.insert('1.0', '') # 投资经理 self.managerLab =tk.Label( text="投资经理:", font=('仿宋体', 12, 'bold'), fg="blue") self.managerLab.place(x=5, y=315, anchor='nw') self.managerText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.managerText.place(x=105, y=315, anchor='nw') self.managerText.insert('1.0', 'tkinter') # 备注 self.remarkLab = tk.Label( text="备注:", font=('仿宋体', 12, 'bold'), fg="blue") self.remarkLab.place(x=5, y=345, anchor='nw') self.remarkText = tk.Text( height=1, width=20, font=('仿宋体', 12, 'bold'), fg="green") self.remarkText.place(x=105, y=345, anchor='nw') self.remarkText.insert('1.0', 'tkinter') self.only_instructionBtn1 = Button(text="单个下发指令", font=('仿宋体', 12, 'bold'), bg="orange",command=self.requests_only_instruction) self.only_instructionBtn1.place(x=20, y=385) self.returnBtn = Button(text="返回", font=('仿宋体', 12, 'bold'), bg="orange",command=self.pythonGUI_instruction) self.returnBtn.place(x=180, y=385) self.destroy_add1.append(self.ipLab) self.destroy_add1.append(self.ipText) self.destroy_add1.append(self.productLab) self.destroy_add1.append(self.productText) self.destroy_add1.append(self.assetLab) self.destroy_add1.append(self.assetText) self.destroy_add1.append(self.portfolioLab) self.destroy_add1.append(self.portfolioText) self.destroy_add1.append(self.symbolLab) self.destroy_add1.append(self.symbolText) self.destroy_add1.append(self.tradeSideLab) self.destroy_add1.append(self.tradeSideText) self.destroy_add1.append(self.targetQtyLab) self.destroy_add1.append(self.targetQtyText) self.destroy_add1.append(self.targetAmtLab) self.destroy_add1.append(self.targetAmtText) self.destroy_add1.append(self.priceTypeLab) self.destroy_add1.append(self.priceTypeText) self.destroy_add1.append(self.limitPriceLab) self.destroy_add1.append(self.limitPriceText) self.destroy_add1.append(self.managerLab) self.destroy_add1.append(self.managerText) self.destroy_add1.append(self.remarkLab) self.destroy_add1.append(self.remarkText) self.destroy_add1.append(self.only_instructionBtn1) self.destroy_add1.append(self.returnBtn) def requests_only_instruction(self0): print() def batch_instruction(self): print() def update_instruction(self): print() def freezing_instruction(self): print() def cancelled_instruction(self): print() def thawOut_instruction(self): print() def pythonGUI_DMA(self): if self.destroy_add1 != []: for i in self.destroy_add1: i.destroy() self.destroy_add1.clear() root.geometry("556x300+700+350") Button(root, text="输入资金账号", font=('仿宋体', 12, 'bold'), fg="blue", command=self.btnAcctFun_DMA).place(x=10,y=10) Button(root, text="输入股票代码", font=('仿宋体', 12, 'bold'), fg="blue", command=self.btnSymbolFun_DMA).place(x=231, y=10) Label(root, text="每秒订单量:", font=('仿宋体', 12, 'bold'), fg="blue").place(x=5, y=55) self.targetVol = Text(root, height=1.3, width=10, fg="green", font=('仿宋体', 12, 'bold')) self.targetVol.insert('1.0', "10") self.targetVol.place(x=110, y=55) Label(root, text="程序结束时间:", fg="blue", font=('仿宋体', 12, 'bold')).place(x=230, y=55) self.runStopTime = Text(root, height=1.3, width=7, fg="green", font=('仿宋体', 12, 'bold')) self.runStopTime.insert('1.0', "150000") self.runStopTime.place(x=350, y=55) Label(root, text="批号起始值:", fg="blue", font=('仿宋体', 12, 'bold')).place(x=5, y=100) self.beginNum = Text(root, height=1.3, width=10, fg="green", font=('仿宋体', 12, 'bold')) self.beginNum.insert('1.0', "1") self.beginNum.place(x=110, y=100) Label(root, text="批号结束值:", fg="blue", font=('仿宋体', 12, 'bold')).place(x=230, y=100) self.endNum = Text(root, height=1.3, width=10, fg="green", font=('仿宋体', 12, 'bold')) self.endNum.insert('1.0', "1000") self.endNum.place(x=350, y=100) Label(root, text="交易方向:", fg="blue", font=('仿宋体', 12, 'bold')).place(x=5, y=145) self.tradeSide = Text(root, height=1.3, width=10, fg="green", font=('仿宋体', 12, 'bold')) self.tradeSide.insert('1.0', "1") self.tradeSide.place(x=110, y=145) Label(root, text="目标量:", fg="blue", font=('仿宋体', 12, 'bold')).place(x=230, y=140) self.targetVol_symbol = Text(root, height=1.3, width=10, fg="green", font=('仿宋体', 12, 'bold')) self.targetVol_symbol.insert('1.0', "200") self.targetVol_symbol.place(x=350, y=145) self.label_orderNum = Label(root, text="生成订单数量为0", fg="red", font=('仿宋体', 12, 'bold')) self.label_orderNum.place(x=30, y=185) self.label_runStopNum = Label(root, text="运行结束批号值为0", fg="red", font=('仿宋体', 12, 'bold')) self.label_runStopNum.place(x=230, y=185) self.num = 0 Label(root, text="------------------------------------------------------------------------:", fg="orange", font=('仿宋体', 30, 'bold')).place(x=5, y=205) self.btn_DMA = Button(root, text="DMA", font=('times', 16, 'bold'), bg='orange', command=self.toggle_running_DMA) self.btn_DMA.place(x=5, y=245) # self.clock = Label(root, font=('times', 20, 'bold'), bg='orange') self.clock_second = 1000 self.clock = Button(root, font=('times', 16, 'bold'), bg='orange', command=self.photoFun_DMA) self.clock.place(x=100, y=245) self.time_update_DMA() # def OQAlgo(OQAlgo_var1,OQAlgo_var2,OQAlgo_var3,OQAlgo_var4): def btnSaveSymbolFun_DMA(self): # 保存股票 try: os.remove(symbol_file_DMA) except: print(symbol_file_DMA + "文件不存在") # 生成资金账号的CSV文件 with open(symbol_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["symbol"]] csv_file.writerows(datas) text_saveAcct = self.text_symbol.get(1.0, END) comma = 0 # 点的个数 for i in text_saveAcct: if i == ".": comma = comma + 1 if comma >= 2: break print("comma", comma) print("acctType112233", text_saveAcct) if comma == 1: print(333) symbol = text_saveAcct.replace("\n", "") print("acctType12", symbol) Parameter = [] Parameters = [] Parameter.append(symbol) Parameters.append(Parameter) with open(symbol_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) else: text_saveAcct_split = text_saveAcct.split("\n") print("15", text_saveAcct_split) for i in range(len(text_saveAcct_split)): if text_saveAcct_split[i] != "": symbol = text_saveAcct_split[i] print("symbol9999", symbol) Parameter = [] Parameters = [] Parameter.append(symbol) Parameters.append(Parameter) with open(symbol_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) def btnSymbolFun_DMA(self): # 输入股票 root_btnSymbol = Tk() root_btnSymbol.geometry("200x500+230+200") self.btnSaveSymbol = Button(root_btnSymbol, text="点击保存", font=('仿宋体', 12, 'bold'), fg="blue", command=self.btnSaveSymbolFun_DMA) self.btnSaveSymbol.pack() self.text_symbol = Text(root_btnSymbol, height=50, width=42, fg='green', font=("仿宋体", 12)) # "helvetica" self.text_symbol.pack(side=LEFT) # 在文本框开头插入一段话 filename = "symbol.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存在并且是.csv文件 data = pd.read_csv(symbol_file_DMA, encoding="gbk") if len(data["symbol"]) == 0: self.text_symbol.insert('1.0', '000001.SZ\n300001.SZ\n600000.SH\n688001.SH') else: data_text = "" for i in range(len(data["symbol"])): data_text = data_text + data["symbol"][i] + "\n" print("data_text", data_text) self.text_symbol.insert('1.0', data_text) else: self.text_symbol.insert('1.0', '000001.SZ\n300001.SZ\n600000.SH\n688001.SH') scrollbar = Scrollbar(root_btnSymbol, command=self.text_symbol.yview) scrollbar.pack(side=LEFT, fill=Y) self.text_symbol.configure(yscrollcommand=scrollbar.set) root_btnSymbol.mainloop() def btnSaveAcctFun_DMA(self): # 保存资金账号 try: os.remove(Acct_file_DMA) except: print("Acct_file_DMA" + "文件不存在") # 生成资金账号的CSV文件 with open(Acct_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["acctType", "acct"]] csv_file.writerows(datas) text_saveAcct = self.text_widget.get(1.0, END) comma = 0 # 逗号的个数 for i in text_saveAcct: if i == ",": comma = comma + 1 if comma >= 2: break print("comma", comma) print("acctType112233", text_saveAcct) if comma == 1: print(333) acctType_acct = text_saveAcct.replace("\n", "").split(",") print("acctType12", text_saveAcct.split(",")) print("acctType13", acctType_acct) acctType = acctType_acct[0] acct = acctType_acct[1] print("acctType", acctType) print("acct", acct) Parameter = [] Parameters = [] Parameter.append(acctType) Parameter.append(acct) Parameters.append(Parameter) with open(Acct_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) else: text_saveAcct_split = text_saveAcct.split("\n") print("15", text_saveAcct_split) for i in range(len(text_saveAcct_split) - 1): if text_saveAcct_split[i] != "": acctType_acct = text_saveAcct_split[i].split(",") acctType = acctType_acct[0] acct = acctType_acct[1] print("acctType", acctType) print("acct", acct) Parameter = [] Parameters = [] Parameter.append(acctType) Parameter.append(acct) Parameters.append(Parameter) with open(Acct_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) def btnAcctFun_DMA(self): # 输入资金长账号 root_btnAcct = Tk() root_btnAcct.geometry("200x500+230+200") self.btnSaveAcct = Button(root_btnAcct, text="点击保存", font=('仿宋体', 12, 'bold'), fg="blue", command=self.btnSaveAcctFun_DMA) self.btnSaveAcct.pack() self.text_widget = Text(root_btnAcct, height=50, width=42, fg='green', font=("仿宋体", 12)) # "helvetica" self.text_widget.pack(side=LEFT) # 在文本框开头插入一段话 filename = "Acct.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存在 data = pd.read_csv(Acct_file_DMA, encoding="gbk") if len(data["acctType"]) == 0: self.text_widget.insert('1.0', 'UF0,89050027916\nUM0,20100051859') else: data_text = "" for i in range(len(data["acctType"])): data_text = data_text + data["acctType"][i] + "," + str(data["acct"][i]) + "\n" print("data_text", data_text) self.text_widget.insert('1.0', data_text) else: self.text_widget.insert('1.0', 'UF0,89050027916\nUM0,20100051859') scrollbar = Scrollbar(root_btnAcct, command=self.text_widget.yview) scrollbar.pack(side=LEFT, fill=Y) self.text_widget.configure(yscrollcommand=scrollbar.set) root_btnAcct.mainloop() def time_update_DMA(self): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") weekday = datetime.datetime.now().strftime("%A") self.clock.config(text=f"日期:{current_time} 星期:{weekday}") if self.clock_second == 1000: self.master.after(1000, self.time_update_DMA) else: time.sleep(1) self.master.after(1000, self.time_update_DMA) def photoFun_DMA(self): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) ip = s.getsockname()[0] print("ip", ip) except: ip = "127.0.0.1" finally: s.close() messages = ["不要拍我", "今天是星期五", "我能倒着背出滕王阁序", "我猜你此刻不想下DMA算法", "不好,今天下班忘记打卡了", "面朝大海,春暖花开", "忘记了时光与风", "上班又迟到了,都怪早上不下雨", "最好看的还是前任三", "算法总线太简单了,两只手就能忙的过来"] choice_messages = random.choice(messages) self.clock["text"] = choice_messages self.clock_second = 3000 # showinfo(title="友情提示", message=choice_messages) # return def toggle_running_DMA(self): if self.running: # 如果程序正在运行,停止运行 self.label_orderNum.config(text="生成订单数量为" + str(self.num)) self.label_runStopNum.config( text="运行结束批号值为" + str( self.num + int(self.targetVol.get(1.0, END)))) # + int(self.beginNum.get(1.0, END)) self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False self.thread.join() # 等待线程结束 print('Program stopped') else: # 如果程序没有运行,启动运行 self.btn_DMA["text"] = "STOP" self.btn_DMA["bg"] = "red" self.running = True self.thread = threading.Thread(target=self.run_loop_DMA) # 创建新线程来运行run_loop方法 self.thread.start() # 启动线程 print('Program started') def run_loop_DMA(self): try: os.remove(algoOrder_file_DMA) except: print(algoOrder_file_DMA + "文件不存在") try: os.remove(algoOrderStop_DMA) except: print(algoOrderStop_DMA + "文件不存在") try: os.remove(assetInfo_file_DMA) except: print(assetInfo_file_DMA + "文件不存在") try: os.remove(compactInfo_file_DMA) except: print(compactInfo_file_DMA + "文件不存在") try: os.remove(crediStockInfo_file_DMA) except: print(crediStockInfo_file_DMA + "文件不存在") try: os.remove(crediTargetStockInfo_file_DMA) except: print(crediTargetStockInfo_file_DMA + "文件不存在") try: os.remove(execResult_file_DMA) except: print(execResult_file_DMA + "文件不存在") try: os.remove(OrderMaxNo_file_DMA) except: print(OrderMaxNo_file_DMA + "文件不存在") try: os.remove(orderUpdate_file_DMA) except: print(orderUpdate_file_DMA + "文件不存在") try: os.remove(positionInfo_file_DMA) except: print(positionInfo_file_DMA + "文件不存在") try: os.remove(TradeMaxNo_file_DMA) except: print(TradeMaxNo_file_DMA + "文件不存在") try: os.remove(tradeUpdate_file_DMA) except: print(tradeUpdate_file_DMA + "文件不存在") with open(algoOrder_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["updTime", "custAlgoNo", "acctType", "acct", "symbol", "tradeSide", "targetQty", "algoId", "priceType", "ticks", "highLimitPrice", "lowLimitPrice"]] csv_file.writerows(datas) with open(algoOrderStop_DMA, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["updTime", "custAlgoNo"]] csv_file.writerows(datas) beginNum = int(self.beginNum.get(1.0, END)) endNum = int(self.endNum.get(1.0, END)) targetVol = int(self.targetVol.get(1.0, END)) targetVol_symbol = int(self.targetVol_symbol.get(1.0, END)) tradeSide = self.tradeSide.get(1.0, END).strip() runStopTime = int(self.runStopTime.get(1.0, END)) filename = "Acct.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存在 data = pd.read_csv(Acct_file_DMA, encoding="gbk") if len(data["acctType"]) == 0: # 判断文件内容是否为空 self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入资金账号") return else: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入资金账号") return filename = "symbol.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存 data = pd.read_csv(symbol_file_DMA, encoding="gbk") if len(data["symbol"]) == 0: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入股票") return else: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入股票") return if len(str(runStopTime)) > 6: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif len(str(runStopTime)) <= 4: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif len(str(runStopTime)) == 6: if int(str(runStopTime)[0:2]) > 23: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif int(str(runStopTime)[2:4]) > 59: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif int(str(runStopTime)[4:6]) > 59: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif len(str(runStopTime)) == 5: if int(str(runStopTime)[1:3]) > 59: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif int(str(runStopTime)[3:5]) > 59: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return if tradeSide not in ["1","2","A","B","C","D","FA","FB","FC","FD","OC"] : self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False showinfo(title="友情提示", message="交易方向填写有误") return if runStopTime<int(datetime.datetime.now().strftime("%H%M%S")): self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False messagebox.showinfo("提示", "程序结束时间不能小于当前时间") return acctType_acct = [] # 获取资金账号 data_acctType_acct = pd.read_csv(Acct_file_DMA, encoding="gbk") for i in range(len(data_acctType_acct["acctType"])): acctType_acct.append(data_acctType_acct["acctType"][i] + "_" + str(data_acctType_acct["acct"][i])) collect_symbol = [] # 获取股票代码 data_symbol = pd.read_csv(symbol_file_DMA, encoding="gbk") for i in range(len(data_symbol["symbol"])): collect_symbol.append(data_symbol["symbol"][i]) for i in range(beginNum, endNum, targetVol): if not self.running: # 检查程序是否需要停止 break # 停止循环 for j in range(targetVol): self.num = i + j print("self.num", self.num) time.sleep(1 / targetVol) choice_acctType_acct = random.choice(acctType_acct) acctType = choice_acctType_acct.split("_")[0] acct = choice_acctType_acct.split("_")[1] symbol = random.choice(collect_symbol) Parameter = [] Parameters = [] Parameter.append("93000") Parameter.append(self.num) Parameter.append(acctType) Parameter.append(acct) Parameter.append(symbol) Parameter.append(tradeSide) Parameter.append(targetVol_symbol) Parameter.append("DMA") Parameter.append("AT") Parameter.append("1") Parameter.append("200") Parameter.append("1") Parameters.append(Parameter) with open(algoOrder_file_DMA, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) if int(datetime.datetime.now().strftime("%H%M%S")) >= runStopTime or self.num > endNum: self.btn_DMA["text"] = "DMA" self.btn_DMA["bg"] = "orange" self.running = False messagebox.showinfo("提示", "程序结束时间到了或者到了批号结束值") break def pythonGUI_algoImport(self): if self.destroy_add1 != []: for i in self.destroy_add1: i.destroy() self.destroy_add1.clear() root.geometry("700x470+650+230") Label(root, text="提示:必须选择至少一个算法", font=('仿宋体', 10, 'bold'), fg="red").place(x=5, y=5) self.OQAlgo_var1 = IntVar() self.OQAlgo_var2 = IntVar() self.OQAlgo_var3 = IntVar() self.OQAlgo_var4 = IntVar() # self.OQAlgo1 = Checkbutton(root, text='OQAlgo:', bg="green",variable=OQAlgo_var1, onvalue=1, offvalue=0, command=lambda :OQAlgo(OQAlgo_var1,OQAlgo_var2,OQAlgo_var3,OQAlgo_var4)) self.OQAlgo1 = Checkbutton(root, text='OQAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.OQAlgo_var1, onvalue=1, offvalue=0, command=self.OQAlgo_algoImport) self.OQAlgo1.place(x=5, y=25) self.OQAlgo2 = Checkbutton(root, text="TWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.OQAlgo_var2) self.OQAlgo2.place(x=100, y=25) self.OQAlgo3 = Checkbutton(root, text="VWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.OQAlgo_var3) self.OQAlgo3.place(x=180, y=25, anchor='nw') self.OQAlgo4 = Checkbutton(root, text="POV", font=('仿宋体', 10, 'bold'), fg="green", variable=self.OQAlgo_var4) self.OQAlgo4.place(x=260, y=25) self.XTAlgo_var1 = IntVar() self.XTAlgo_var2 = IntVar() self.XTAlgo_var3 = IntVar() self.XTAlgo_var4 = IntVar() self.XTAlgo1 = Checkbutton(root, text='XTAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.XTAlgo_var1, onvalue=1, offvalue=0, command=self.XTAlgo_algoImport) self.XTAlgo1.place(x=5, y=50) self.XTAlgo2 = Checkbutton(root, text="xtTWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.XTAlgo_var2) self.XTAlgo2.place(x=100, y=50) self.XTAlgo3 = Checkbutton(root, text="xtVWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.XTAlgo_var3) self.XTAlgo3.place(x=180, y=50) self.XTAlgo4 = Checkbutton(root, text="xtVP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.XTAlgo_var4) self.XTAlgo4.place(x=260, y=50) self.KFAlgo_var1 = IntVar() self.KFAlgo_var2 = IntVar() self.KFAlgo_var3 = IntVar() self.KFAlgo_var4 = IntVar() self.KFAlgo_var5 = IntVar() self.KFAlgo_var6 = IntVar() self.KFAlgo1 = Checkbutton(root, text='KFAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.KFAlgo_var1, onvalue=1, offvalue=0, command=self.KFAlgo_algoImport) self.KFAlgo1.place(x=5, y=75) self.KFAlgo2 = Checkbutton(root, text="kfpov", font=('仿宋体', 10, 'bold'), fg="green", variable=self.KFAlgo_var2) self.KFAlgo2.place(x=100, y=75) self.KFAlgo3 = Checkbutton(root, text="kftwap_core", font=('仿宋体', 10, 'bold'), fg="green", variable=self.KFAlgo_var3) self.KFAlgo3.place(x=180, y=75) self.KFAlgo4 = Checkbutton(root, text="kftwap_plus", font=('仿宋体', 10, 'bold'), fg="green", variable=self.KFAlgo_var4) self.KFAlgo4.place(x=300, y=75) self.KFAlgo5 = Checkbutton(root, text="kfvwap_core", font=('仿宋体', 10, 'bold'), fg="green", variable=self.KFAlgo_var5) self.KFAlgo5.place(x=420, y=75) self.KFAlgo6 = Checkbutton(root, text="kfvwap_plus", font=('仿宋体', 10, 'bold'), fg="green", variable=self.KFAlgo_var6) self.KFAlgo6.place(x=540, y=75) self.HXAlgo_var0 = IntVar() self.HXAlgo_var1 = IntVar() self.HXAlgo_var2 = IntVar() self.HXAlgo1 = Checkbutton(root, text='HXAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.HXAlgo_var0, onvalue=1, offvalue=0, command=self.HXAlgo_algoImport) self.HXAlgo1.place(x=5, y=100) self.HXAlgo2 = Checkbutton(root, text="HX_SMART_TWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.HXAlgo_var1) self.HXAlgo2.place(x=100, y=100) self.HXAlgo3 = Checkbutton(root, text="HX_SMART_VWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.HXAlgo_var2) self.HXAlgo3.place(x=280, y=100) self.FTAlgo_var0 = IntVar() self.FTAlgo_var1 = IntVar() self.FTAlgo0 = Checkbutton(root, text='FTAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.FTAlgo_var0, onvalue=1, offvalue=0, command=self.FTAlgo_algoImport) self.FTAlgo0.place(x=5, y=125) self.FTAlgo1 = Checkbutton(root, text="FT_AI_WAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.FTAlgo_var1) self.FTAlgo1.place(x=100, y=125) self.QNDAlgo_var0 = IntVar() self.QNDAlgo_var1 = IntVar() self.QNDAlgo_var2 = IntVar() self.QNDAlgo1 = Checkbutton(root, text='QNDAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.QNDAlgo_var0, onvalue=1, offvalue=0, command=self.QNDAlgo_algoImport) self.QNDAlgo1.place(x=5, y=150) self.QNDAlgo2 = Checkbutton(root, text="QNDTWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.QNDAlgo_var1) self.QNDAlgo2.place(x=100, y=150) self.QNDAlgo3 = Checkbutton(root, text="QNDVWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.QNDAlgo_var2) self.QNDAlgo3.place(x=280, y=150) self.YRAlgo_var0 = IntVar() self.YRAlgo_var1 = IntVar() self.YRAlgo0 = Checkbutton(root, text='YRAlgo:', font=('仿宋体', 10, 'bold'), fg="blue", variable=self.YRAlgo_var0, onvalue=1, offvalue=0, command=self.YRAlgo_algoImport) self.YRAlgo0.place(x=5, y=175) self.YRAlgo1 = Checkbutton(root, text="YRVWAP", font=('仿宋体', 10, 'bold'), fg="green", variable=self.YRAlgo_var1) self.YRAlgo1.place(x=100, y=175) Label(root, text="---------------------------------------------------------------------:", fg="orange", font=('仿宋体', 30, 'bold')).place(x=5, y=190) Button(root, text="输入资金账号", font=('仿宋体', 10, 'bold'), fg="blue", command=self.btnAcctFun_algoImport).place(x=5, y=225) Button(root, text="输入股票代码", font=('仿宋体', 10, 'bold'), fg="blue", command=self.btnSymbolFun_algoImport).place( x=200, y=225) # Label(root, text="资金账号:",font=('仿宋体', 10, 'bold'),fg="blue").place(x=5, y=235) # self.acctType_acct = Text(root, font=('仿宋体', 10, 'bold'),height=1.3, width=80,fg="green") # self.acctType_acct.insert('1.0', "UF0_890500027916,UM0_20100051859") # self.acctType_acct.place(x=80, y=235) Label(root, text="每秒订单量:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=5, y=264) self.targetVol = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.targetVol.insert('1.0', "10") self.targetVol.place(x=90, y=264) Label(root, text="程序结束时间:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=200, y=264) self.runStopTime = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.runStopTime.insert('1.0', "150000") self.runStopTime.place(x=295, y=264) Label(root, text="交易方向:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=400, y=264) self.tradeSide = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.tradeSide.insert('1.0', "1") self.tradeSide.place(x=460, y=264) Label(root, text="批号起始值:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=5, y=292) self.beginNum = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.beginNum.insert('1.0', "1") self.beginNum.place(x=90, y=292) Label(root, text="批号结束值:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=200, y=292) self.endNum = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.endNum.insert('1.0', "1000") self.endNum.place(x=295, y=292) Label(root, text="目标量:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=400, y=292) self.targetVol_symbol = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.targetVol_symbol.insert('1.0', "200") self.targetVol_symbol.place(x=460, y=292) Label(root, text="算法结束时间:", font=('仿宋体', 10, 'bold'), fg="blue").place(x=5, y=320) self.algoStopTimeSet = Text(root, font=('仿宋体', 10, 'bold'), height=1.3, width=10, fg="green") self.algoStopTimeSet.insert('1.0', "180000") self.algoStopTimeSet.place(x=100, y=324) self.algoStopTimeSet.bind("<Button-1>", self.algoStopTimeSet_bind_algoImport) # 点击输入框会清空算法结束时间单选框单选框 global algoStopTime_var self.algoStopTime_var = StringVar() self.algoStopTime_var.set("6") # Radiobutton是单选文本框 self.algoStopTime1 = Radiobutton(root, text="+5", font=('仿宋体', 10, 'bold'), fg="green", value="5", variable=self.algoStopTime_var, state="normal") self.algoStopTime1.place(x=180, y=320) self.algoStopTime2 = Radiobutton(root, text="+10", font=('仿宋体', 10, 'bold'), fg="green", value="10", variable=self.algoStopTime_var, state="normal") self.algoStopTime2.place(x=230, y=320) self.algoStopTime3 = Radiobutton(root, text="+20", font=('仿宋体', 10, 'bold'), fg="green", value="20", variable=self.algoStopTime_var, state="normal") self.algoStopTime3.place(x=280, y=320) self.algoStopTime4 = Radiobutton(root, text="+30", font=('仿宋体', 10, 'bold'), fg="green", value="30", variable=self.algoStopTime_var, state="normal") self.algoStopTime4.place(x=330, y=320) self.algoStopTime5 = Radiobutton(root, text="+60", font=('仿宋体', 10, 'bold'), fg="green", value="60", variable=self.algoStopTime_var, state="normal") self.algoStopTime5.place(x=380, y=320) Label(root, text="提示:+5表示算法只运行5分钟", font=('仿宋体', 10, 'bold'), fg="red").place(x=450, y=320) # 点击单选框会清空算法结束时间输入框 self.algoStopTime1.config(command=lambda: self.radiobutton_command_algoImport(self.algoStopTime1)) self.algoStopTime2.config(command=lambda: self.radiobutton_command_algoImport(self.algoStopTime1)) self.algoStopTime3.config(command=lambda: self.radiobutton_command_algoImport(self.algoStopTime1)) self.algoStopTime4.config(command=lambda: self.radiobutton_command_algoImport(self.algoStopTime1)) self.algoStopTime5.config(command=lambda: self.radiobutton_command_algoImport(self.algoStopTime1)) self.label_orderNum = Label(root, text="生成订单数量为0", fg="red", font=('仿宋体', 10, 'bold')) self.label_orderNum.place(x=30, y=350) self.label_runStopNum = Label(root, text="运行结束批号值为0", fg="red", font=('仿宋体', 10, 'bold')) self.label_runStopNum.place(x=200, y=350) self.num = 0 Label(root, text="---------------------------------------------------------------------:", fg="orange", font=('仿宋体', 30, 'bold')).place(x=5, y=365) self.btn_Algo = Button(root, text="ALGO", font=('times', 19, 'bold'), bg='orange', command=self.toggle_running_algoImport) self.btn_Algo.place(x=5, y=400) # self.photo = PhotoImage(file="E:/桌面/lwpaul/algoImport/imgs/logo.gif") # # image_create(END, image=self.photo) # Label(root, image=self.photo).place(x=5, y=350) # self.clock = Label(root, font=('times', 20, 'bold'), bg='orange') self.clock_second = 1000 self.clock = Button(root, font=('times', 19, 'bold'), bg='orange', command=self.photoFun_algoImport) self.clock.place(x=150, y=400) self.time_update_algoImport() # def OQAlgo(OQAlgo_var1,OQAlgo_var2,OQAlgo_var3,OQAlgo_var4): def btnSaveSymbolFun_algoImport(self): # 保存股票 try: os.remove(symbol_file_algoImport) except: print(symbol_file_algoImport + "文件不存在") # 生成资金账号的CSV文件 with open(symbol_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["symbol"]] csv_file.writerows(datas) text_saveAcct = self.text_symbol.get(1.0, END) comma = 0 # 点的个数 for i in text_saveAcct: if i == ".": comma = comma + 1 if comma >= 2: break print("comma", comma) print("acctType112233", text_saveAcct) if comma == 1: print(333) symbol = text_saveAcct.replace("\n", "") print("acctType12", symbol) Parameter = [] Parameters = [] Parameter.append(symbol) Parameters.append(Parameter) with open(symbol_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) else: text_saveAcct_split = text_saveAcct.split("\n") print("15", text_saveAcct_split) for i in range(len(text_saveAcct_split)): if text_saveAcct_split[i] != "": symbol = text_saveAcct_split[i] print("symbol9999", symbol) Parameter = [] Parameters = [] Parameter.append(symbol) Parameters.append(Parameter) with open(symbol_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) def btnSymbolFun_algoImport(self): # 输入股票 root_btnSymbol = Tk() root_btnSymbol.geometry("200x500+230+200") self.btnSaveSymbol = Button(root_btnSymbol, text="点击保存", font=('仿宋体', 10, 'bold'), fg="blue", command=self.btnSaveSymbolFun_algoImport) self.btnSaveSymbol.pack() self.text_symbol = Text(root_btnSymbol, height=50, width=42, fg='green', font=("仿宋体", 12)) # "helvetica" self.text_symbol.pack(side=LEFT) # 在文本框开头插入一段话 filename = "symbol.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存在并且是.csv文件 data = pd.read_csv(symbol_file_algoImport, encoding="gbk") if len(data["symbol"]) == 0: self.text_symbol.insert('1.0', '000001.SZ\n300001.SZ\n600000.SH\n688001.SH') else: data_text = "" for i in range(len(data["symbol"])): data_text = data_text + data["symbol"][i] + "\n" print("data_text", data_text) self.text_symbol.insert('1.0', data_text) else: self.text_symbol.insert('1.0', '000001.SZ\n300001.SZ\n600000.SH\n688001.SH') scrollbar = Scrollbar(root_btnSymbol, command=self.text_symbol.yview) scrollbar.pack(side=LEFT, fill=Y) self.text_symbol.configure(yscrollcommand=scrollbar.set) root_btnSymbol.mainloop() def btnSaveAcctFun_algoImport(self): # 保存资金账号 try: os.remove(Acct_file_algoImport) except: print(Acct_file_algoImport + "文件不存在") # 生成资金账号的CSV文件 with open(Acct_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["acctType", "acct"]] csv_file.writerows(datas) text_saveAcct = self.text_widget.get(1.0, END) comma = 0 # 逗号的个数 for i in text_saveAcct: if i == ",": comma = comma + 1 if comma >= 2: break print("comma", comma) print("acctType112233", text_saveAcct) if comma == 1: print(333) acctType_acct = text_saveAcct.replace("\n", "").split(",") print("acctType12", text_saveAcct.split(",")) print("acctType13", acctType_acct) acctType = acctType_acct[0] acct = acctType_acct[1] print("acctType", acctType) print("acct", acct) Parameter = [] Parameters = [] Parameter.append(acctType) Parameter.append(acct) Parameters.append(Parameter) with open(Acct_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) else: text_saveAcct_split = text_saveAcct.split("\n") print("15", text_saveAcct_split) for i in range(len(text_saveAcct_split) - 1): if text_saveAcct_split[i] != "": acctType_acct = text_saveAcct_split[i].split(",") acctType = acctType_acct[0] acct = acctType_acct[1] print("acctType", acctType) print("acct", acct) Parameter = [] Parameters = [] Parameter.append(acctType) Parameter.append(acct) Parameters.append(Parameter) with open(Acct_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) def btnAcctFun_algoImport(self): # 输入资金长账号 root_btnAcct = Tk() root_btnAcct.geometry("200x500+230+200") self.btnSaveAcct = Button(root_btnAcct, text="点击保存", font=('仿宋体', 10, 'bold'), fg="blue", command=self.btnSaveAcctFun_algoImport) self.btnSaveAcct.pack() self.text_widget = Text(root_btnAcct, height=50, width=42, fg='green', font=("仿宋体", 12)) # "helvetica" self.text_widget.pack(side=LEFT) # 在文本框开头插入一段话 filename = "Acct.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存在 data = pd.read_csv(Acct_file_algoImport, encoding="gbk") if len(data["acctType"]) == 0: self.text_widget.insert('1.0', 'UF0,89050027916\nUM0,20100051859') else: data_text = "" for i in range(len(data["acctType"])): data_text = data_text + data["acctType"][i] + "," + str(data["acct"][i]) + "\n" print("data_text", data_text) self.text_widget.insert('1.0', data_text) else: self.text_widget.insert('1.0', 'UF0,89050027916\nUM0,20100051859') scrollbar = Scrollbar(root_btnAcct, command=self.text_widget.yview) scrollbar.pack(side=LEFT, fill=Y) self.text_widget.configure(yscrollcommand=scrollbar.set) root_btnAcct.mainloop() def time_update_algoImport(self): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") weekday = datetime.datetime.now().strftime("%A") self.clock.config(text=f"日期:{current_time} 星期:{weekday}") if self.clock_second == 1000: self.master.after(1000, self.time_update_algoImport) else: time.sleep(1) self.master.after(1000, self.time_update_algoImport) def photoFun_algoImport(self): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) ip = s.getsockname()[0] print("ip", ip) except: ip = "127.0.0.1" finally: s.close() messages = ["不要拍我", "今天是星期五", "我能倒着背出滕王阁序", "我猜你此刻不想下算法单导入", "不好,今天下班忘记打卡了", "面朝大海,春暖花开", "忘记了时光与风", "上班又迟到了,都怪早上不下雨"] choice_messages = random.choice(messages) self.clock["text"] = choice_messages self.clock_second = 3000 def algoStopTimeSet_bind_algoImport(self, event): self.algoStopTime_var.set("6") def radiobutton_command_algoImport(self, event): print("555", self.algoStopTime_var.get()) self.algoStopTimeSet.delete(1.0, END) def OQAlgo_algoImport(self): print("111", self.OQAlgo_var1.get()) if self.OQAlgo_var1.get() == 1: self.OQAlgo_var2.set(1) self.OQAlgo_var3.set(1) self.OQAlgo_var4.set(1) else: self.OQAlgo_var2.set(0) self.OQAlgo_var3.set(0) self.OQAlgo_var4.set(0) def XTAlgo_algoImport(self): print("111", self.XTAlgo_var1.get()) if self.XTAlgo_var1.get() == 1: self.XTAlgo_var2.set(1) self.XTAlgo_var3.set(1) self.XTAlgo_var4.set(1) else: self.XTAlgo_var2.set(0) self.XTAlgo_var3.set(0) self.XTAlgo_var4.set(0) def KFAlgo_algoImport(self): print("111", self.KFAlgo_var1.get()) if self.KFAlgo_var1.get() == 1: self.KFAlgo_var2.set(1) self.KFAlgo_var3.set(1) self.KFAlgo_var4.set(1) self.KFAlgo_var5.set(1) self.KFAlgo_var6.set(1) else: self.KFAlgo_var2.set(0) self.KFAlgo_var3.set(0) self.KFAlgo_var4.set(0) self.KFAlgo_var5.set(0) self.KFAlgo_var6.set(0) def HXAlgo_algoImport(self): print("111", self.HXAlgo_var0.get()) if self.HXAlgo_var0.get() == 1: self.HXAlgo_var1.set(1) self.HXAlgo_var2.set(1) else: self.HXAlgo_var1.set(0) self.HXAlgo_var2.set(0) def FTAlgo_algoImport(self): print("111", self.FTAlgo_var0.get()) if self.FTAlgo_var0.get() == 1: self.FTAlgo_var1.set(1) else: self.FTAlgo_var1.set(0) def QNDAlgo_algoImport(self): print("111", self.QNDAlgo_var0.get()) if self.QNDAlgo_var0.get() == 1: self.QNDAlgo_var1.set(1) self.QNDAlgo_var2.set(1) else: self.QNDAlgo_var1.set(0) self.QNDAlgo_var2.set(0) def YRAlgo_algoImport(self): print("111", self.YRAlgo_var0.get()) if self.YRAlgo_var0.get() == 1: self.YRAlgo_var1.set(1) else: self.YRAlgo_var1.set(0) def toggle_running_algoImport(self): if self.running: # 如果程序正在运行,停止运行 self.label_orderNum.config(text="生成订单数量为" + str(self.num)) self.label_runStopNum.config( text="运行结束批号值为" + str(self.num + int(self.beginNum.get(1.0, END)) + int(self.targetVol.get(1.0, END)))) self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False self.thread.join() # 等待线程结束 else: # 如果程序没有运行,启动运行 self.btn_Algo["text"] = "STOP" self.btn_Algo["bg"] = "red" self.running = True self.thread = threading.Thread(target=self.run_loop_algoImport) # 创建新线程来运行run_loop方法 self.thread.start() # 启动线程 def run_loop_algoImport(self): try: os.remove(algoStart_file_algoImport) except: print(algoStart_file_algoImport + "文件不存在") try: os.remove(algoStop_file_algoImport) except: print(algoStop_file_algoImport + "文件不存在") try: os.remove(algoExecStatic_file_algoImport) except: print(algoExecStatic_file_algoImport + "文件不存在") try: os.remove(assetInfo_file_algoImport) except: print(assetInfo_file_algoImport + "文件不存在") try: os.remove(compactInfo_file_algoImport) except: print(compactInfo_file_algoImport + "文件不存在") try: os.remove(crediStockInfo_file_algoImport) except: print(crediStockInfo_file_algoImport + "文件不存在") try: os.remove(crediTargetStockInfo_file_algoImport) except: print(crediTargetStockInfo_file_algoImport + "文件不存在") try: os.remove(orderUpdate_file_algoImport) except: print(orderUpdate_file_algoImport + "文件不存在") try: os.remove(positionInfo_file_algoImport) except: print(positionInfo_file_algoImport + "文件不存在") try: os.remove(tradeUpdate_file_algoImport) except: print(tradeUpdate_file_algoImport + "文件不存在") try: os.remove(TradeMaxNo_file_algoImport) except: print(TradeMaxNo_file_algoImport + "文件不存在") try: os.remove(OrderMaxNo_file_algoImport) except: print(OrderMaxNo_file_algoImport + "文件不存在") with open(algoStart_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["updTime", "custAlgoNo", "acctType", "acct", "symbol", "tradeSide", "targetVol", "targetAmt", "algoId", "algoParam"]] csv_file.writerows(datas) with open(algoStop_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) datas = [["updTime", "custAlgoNo", "acctType", "acct"]] csv_file.writerows(datas) beginNum = int(self.beginNum.get(1.0, END)) endNum = int(self.endNum.get(1.0, END)) targetVol = int(self.targetVol.get(1.0, END)) targetVol_symbol = int(self.targetVol_symbol.get(1.0, END)) tradeSide = self.tradeSide.get(1.0, END).strip() runStopTime = int(self.runStopTime.get(1.0, END)) algoStopTimeSet = str(self.algoStopTimeSet.get(1.0, END)).replace("\n", "") algoStopTime = self.algoStopTime_var.get() # 搜集勾选的算法 if self.OQAlgo_var2.get() == 1: self.collect_Algo.append("OQ-TWAP") if self.OQAlgo_var3.get() == 1: self.collect_Algo.append("OQ-VWAP") if self.OQAlgo_var4.get() == 1: self.collect_Algo.append("OQ-POV") if self.XTAlgo_var2.get() == 1: self.collect_Algo.append("XT-TWAP") if self.XTAlgo_var3.get() == 1: self.collect_Algo.append("XT-VWAP") if self.XTAlgo_var4.get() == 1: self.collect_Algo.append("XT-VP") if self.KFAlgo_var2.get() == 1: self.collect_Algo.append("KF-POV") if self.KFAlgo_var3.get() == 1: self.collect_Algo.append("KF-TWAP-CORE") if self.KFAlgo_var4.get() == 1: self.collect_Algo.append("KF-TWAP-PLUS") if self.KFAlgo_var5.get() == 1: self.collect_Algo.append("KF-VWAP-CORE") if self.KFAlgo_var6.get() == 1: self.collect_Algo.append("KF-VWAP-PLUS") if self.HXAlgo_var1.get() == 1: self.collect_Algo.append("HX_SMART_TWAP") if self.HXAlgo_var2.get() == 1: self.collect_Algo.append("HX_SMART_VWAP") if self.FTAlgo_var1.get() == 1: self.collect_Algo.append("FT_WAP") if self.QNDAlgo_var1.get() == 1: self.collect_Algo.append("QND-TWAP") if self.QNDAlgo_var2.get() == 1: self.collect_Algo.append("QND-VWAP") if self.YRAlgo_var1.get() == 1: self.collect_Algo.append("YR-VWAP") print("collect_Algo", self.collect_Algo) if self.collect_Algo == [] and algoStopTimeSet == "" and self.algoStopTime_var.get() == "6": self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="1,请至少选择一个算法\n2,请设置算法结束时间") return elif self.collect_Algo == []: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="1,请至少选择一个算法") return elif algoStopTimeSet == "" and self.algoStopTime_var.get() == "6": self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="1,请设置算法结束时间") return elif len(str(runStopTime)) > 6: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif len(str(runStopTime)) == 6: if int(str(runStopTime)[0:2]) > 23: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif int(str(runStopTime)[2:4]) > 59: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif int(str(runStopTime)[4:6]) > 59: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif len(str(runStopTime)) == 5: if int(str(runStopTime)[1:3]) > 59: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return elif int(str(runStopTime)[3:5]) > 59: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="程序结束时间格式填写有误") return if tradeSide not in ["1", "2", "A", "B", "C", "D", "FA", "FB", "FC", "FD", "OC"]: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False showinfo(title="友情提示", message="交易方向填写有误") return if runStopTime < int(datetime.datetime.now().strftime("%H%M%S")): self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False messagebox.showinfo("提示", "程序结束时间不能小于当前时间") return filename = "Acct.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存在 data = pd.read_csv(Acct_file_algoImport, encoding="gbk") if len(data["acctType"]) == 0: # 判断文件内容是否为空 self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入资金账号") return else: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入资金账号") return filename = "symbol.csv" current_directory = os.getcwd() # 获取当前目录 print("current_directory", current_directory) file_path = os.path.join(current_directory, filename) # 构建文件路径 print("file_path", file_path) if os.path.isfile(file_path): # 检查文件是否存 data = pd.read_csv(symbol_file_algoImport, encoding="gbk") if len(data["symbol"]) == 0: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入股票") return else: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False messagebox.showinfo("提示", "请输入股票") return acctType_acct = [] # 获取资金账号 data_acctType_acct = pd.read_csv(Acct_file_algoImport, encoding="gbk") for i in range(len(data_acctType_acct["acctType"])): acctType_acct.append(data_acctType_acct["acctType"][i] + "_" + str(data_acctType_acct["acct"][i])) collect_symbol = [] # 获取股票代码 data_symbol = pd.read_csv(symbol_file_algoImport, encoding="gbk") for i in range(len(data_symbol["symbol"])): collect_symbol.append(data_symbol["symbol"][i]) for i in range(beginNum, endNum, targetVol): if not self.running: # 检查程序是否需要停止 break # 停止循环 for j in range(targetVol): self.num = i + j print("self.num", self.num) time.sleep(1 / targetVol) # print("999",1/targetVol) choice_acctType_acct = random.choice(acctType_acct) acctType = choice_acctType_acct.split("_")[0] acct = choice_acctType_acct.split("_")[1] symbol = random.choice(collect_symbol) algoStype = random.choice(self.collect_Algo) # algoParm = "beginTime="+beginTime+";"+"endTime="+self.algoStopTimeSet+";" Parameter = [] Parameters = [] Parameter.append("93000") Parameter.append(self.num) Parameter.append(acctType) Parameter.append(acct) Parameter.append(symbol) Parameter.append(tradeSide) Parameter.append(targetVol_symbol) Parameter.append("0") Parameter.append(algoStype) beginTime = str(datetime.datetime.now().strftime("%H%M%S")) if algoStopTime == "6": endTime = algoStopTimeSet else: endTime = (datetime.datetime.now() + datetime.timedelta(minutes=int(algoStopTime))).strftime( "%H%M%S") if algoStype in ["OQ-TWAP", "OQ-VWAP", "OQ-POV"]: Parameter.append( "beginTime=" + beginTime + ";endTime=" + endTime + ";limitPrice=0;participateRate=0.15;minAmount=0;tradingStyle=2;notBuyOnLLAndSellOnHL=0;custBatchNo=") elif algoStype in ["XT-TWAP", "XT-VWAP", "XT-VP"]: Parameter.append( "beginTime=" + beginTime + ";endTime=" + endTime + ";limitPrice=0;PartRate=0.20;MinAmount=0;m_nStopTradeForOwnHiLow=0;custBatchNo=") elif algoStype == "KF-POV": Parameter.append( "beginTime=" + beginTime + ";endTime=" + endTime + ";maxpercentageF=0.2;priceF=0;UpLimitF=0.05;DownLimitF=0.05;limitAction=0;afterAction=0;custBatchNo=") elif algoStype in ["KF-TWAP-CORE", "KF-TWAP-PLUS", "KF-VWAP-CORE", "KF-VWAP-PLUS"]: Parameter.append( "beginTime=" + beginTime + ";endTime=" + endTime + ";priceF=0;UpLimitF=0.05;DownLimitF=0.05;limitAction=0;afterAction=0;custBatchNo=") elif algoStype in ["HX_SMART_TWAP", "HX_SMART_VWAP"]: Parameter.append( "beginTime=" + beginTime + ";endTime=" + endTime + ";limitPrice=0;participateRate=0.20;notBuyOnLLAndSellOnHL=0") elif algoStype == "FT_WAP": Parameter.append("beginTime=" + beginTime + ";endTime=" + endTime) elif algoStype in ["QND-TWAP", "QND-VWAP"]: Parameter.append( "beginTime=" + beginTime + ";endTime=" + endTime + ";allowTradeAtLimit=0;allowTradeAfterEnd=0") elif algoStype == "YR-VWAP": Parameter.append("beginTime=" + beginTime + ";endTime=" + endTime + ";limitRule=0") Parameters.append(Parameter) with open(algoStart_file_algoImport, "a+", newline='') as file: csv_file = csv.writer(file) csv_file.writerows(Parameters) print("881", int(datetime.datetime.now().strftime("%H%M%S")), " ", runStopTime) if int(datetime.datetime.now().strftime("%H%M%S")) >= runStopTime or self.num >= endNum: self.btn_Algo["text"] = "ALGO" self.btn_Algo["bg"] = "orange" self.running = False messagebox.showinfo("提示", "程序结束时间到了或者到了批号结束值") return if __name__ == '__main__': date = str(datetime.datetime.now().strftime("%Y%m%d")) algoOrder_file_DMA = os.getcwd() + "/" + "algoOrder_" + date + ".csv" algoOrderStop_DMA = os.getcwd() + "/" + "algoOrderStop_" + date + ".csv" assetInfo_file_DMA = os.getcwd() + "/" + "assetInfo_" + date + ".csv" compactInfo_file_DMA = os.getcwd() + "/" + "compactInfo_" + date + ".csv" crediStockInfo_file_DMA = os.getcwd() + "/" + "crediStockInfo_" + date + ".csv" crediTargetStockInfo_file_DMA = os.getcwd() + "/" + "crediTargetStockInfo_" + date + ".csv" execResult_file_DMA = os.getcwd() + "/" + "execResult_" + date + ".csv" OrderMaxNo_file_DMA = os.getcwd() + "/" + "OrderMaxNo.txt" orderUpdate_file_DMA = os.getcwd() + "/" + "orderUpdate_" + date + ".csv" positionInfo_file_DMA = os.getcwd() + "/" + "positionInfo_" + date + ".csv" TradeMaxNo_file_DMA = os.getcwd() + "/" + "TradeMaxNo.txt" tradeUpdate_file_DMA = os.getcwd() + "/" + "tradeUpdate_" + date + ".csv" Acct_file_DMA = os.getcwd() + "/" + "Acct" + ".csv" symbol_file_DMA = os.getcwd() + "/" + "symbol" + ".csv" algoStart_file_algoImport = os.getcwd() + "\\" + "algoStart_" + date + ".csv" algoStop_file_algoImport = os.getcwd() + "\\" + "algoStop_" + date + ".csv" algoExecStatic_file_algoImport = os.getcwd() + "\\" + "algoExecStatic_" + ".csv" assetInfo_file_algoImport = os.getcwd() + "\\" + "assetInfo_" + date + ".csv" compactInfo_file_algoImport = os.getcwd() + "\\" + "compactInfo_" + date + ".csv" crediStockInfo_file_algoImport = os.getcwd() + "\\" + "crediStockInfo_" + date + ".csv" crediTargetStockInfo_file_algoImport = os.getcwd() + "/" + "crediTargetStockInfo_" + date + ".csv" orderUpdate_file_algoImport = os.getcwd() + "\\" + "orderUpdate_" + date + ".csv" positionInfo_file_algoImport = os.getcwd() + "\\" + "positionInfo_" + date + ".csv" tradeUpdate_file_algoImport = os.getcwd() + "\\" + "tradeUpdate_" + date + ".csv" TradeMaxNo_file_algoImport = os.getcwd() + "\\" + "TradeMaxNo.txt" OrderMaxNo_file_algoImport = os.getcwd() + "\\" + "OrderMaxNo.txt" Acct_file_algoImport = os.getcwd() + "/" + "Acct" + ".csv" symbol_file_algoImport = os.getcwd() + "/" + "symbol" + ".csv" # 初始化窗口 root = Tk() frame = Frame(root,width =200,height=200) frame.pack() root.title("tkinterGUI") # root.geometry("700x470+350+100") root.geometry("300x200+750+400") app = Application().__int__(master=root) root.mainloop()