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()