应用7:用小白量化智能体金融模块做一个股票选股工具
【小白量化智能体】包含有丰富的金融模块。可以让智能体写各种金融量化工具。
我用让小白量化智能体写一个股票选股工具。
我们给【小白量化智能体】一个程序生成话术。
帮我写一个 选股 的应用程序,要求能够输入。
原始股票池和保存的股票池,以及能够选择选股的周期。生成全部源代码。
【小白量化智能体】生成程序如下:
import tkinter as tk
from tkinter import ttk, filedialog, messagebox, scrolledtext
import time
import HP_global as g
import HP_tdx as htdx # 小白量化行情模块
import HP_formula as hgs # 小白通达信公式库
from HP_formula import * # 小白股票指标公式函数库
#加V: xblhzntclass StockSelectorApp:def __init__(self, root):self.root = rootself.root.title("股票选股工具")self.root.geometry("800x600")self.root.resizable(True, True)# 设置中文字体支持self.style = ttk.Style()self.style.configure("TLabel", font=("SimHei", 10))self.style.configure("TButton", font=("SimHei", 10))self.style.configure("TEntry", font=("SimHei", 10))self.style.configure("TCombobox", font=("SimHei", 10))# 初始选股公式self.initial_formula = '''XG:IF(C>=HHV(REF(H,1),10),1,0)*IF(V>=HHV(REF(V,1),10),1,0);'''self.create_widgets()def create_widgets(self):# 创建主框架main_frame = ttk.Frame(self.root, padding="10")main_frame.pack(fill=tk.BOTH, expand=True)# 原始股票池路径ttk.Label(main_frame, text="原始股票池路径:").grid(row=0, column=0, sticky=tk.W, pady=5)self.source_path_var = tk.StringVar(value="D:\\new_tdx\\T0002\\blocknew\\zxg8.blk")self.source_path_entry = ttk.Entry(main_frame, textvariable=self.source_path_var, width=60)self.source_path_entry.grid(row=0, column=1, sticky=tk.W, pady=5)ttk.Button(main_frame, text="浏览...", command=self.browse_source).grid(row=0, column=2, padx=5, pady=5)# 保存股票池路径ttk.Label(main_frame, text="保存股票池路径:").grid(row=1, column=0, sticky=tk.W, pady=5)self.save_path_var = tk.StringVar(value="D:\\new_tdx\\T0002\\blocknew\\zxg88.blk")self.save_path_entry = ttk.Entry(main_frame, textvariable=self.save_path_var, width=60)self.save_path_entry.grid(row=1, column=1, sticky=tk.W, pady=5)ttk.Button(main_frame, text="浏览...", command=self.browse_save).grid(row=1, column=2, padx=5, pady=5)# 选股周期选择ttk.Label(main_frame, text="选股周期:").grid(row=2, column=0, sticky=tk.W, pady=5)self.period_var = tk.IntVar(value=4) # 4代表日线,默认值period_frame = ttk.Frame(main_frame)period_frame.grid(row=2, column=1, sticky=tk.W, pady=5)periods = {"5分钟线": 0,"15分钟线": 1,"30分钟线": 2,"1小时线": 3,"日线": 4,"周线": 5,"月线": 6}for idx, (text, value) in enumerate(periods.items()):ttk.Radiobutton(period_frame, text=text, variable=self.period_var, value=value).grid(row=0, column=idx, padx=8)# 选股公式编辑区域ttk.Label(main_frame, text="选股公式 (必须包含XG信号):").grid(row=3, column=0, sticky=tk.NW, pady=5)formula_frame = ttk.Frame(main_frame)formula_frame.grid(row=3, column=1, columnspan=2, sticky=tk.NSEW, pady=5)self.formula_text = scrolledtext.ScrolledText(formula_frame, height=6, width=70, wrap=tk.WORD, font=("SimHei", 10))self.formula_text.pack(fill=tk.BOTH, expand=True)self.formula_text.insert(tk.END, self.initial_formula)# 日志显示区域ttk.Label(main_frame, text="选股日志:").grid(row=4, column=0, sticky=tk.NW, pady=5)log_frame = ttk.Frame(main_frame)log_frame.grid(row=4, column=1, columnspan=2, sticky=tk.NSEW, pady=5)self.log_text = scrolledtext.ScrolledText(log_frame, height=10, width=70, wrap=tk.WORD, font=("SimHei", 10))self.log_text.pack(fill=tk.BOTH, expand=True)# 选股按钮button_frame = ttk.Frame(main_frame)button_frame.grid(row=5, column=1, pady=10)ttk.Button(button_frame, text="开始选股", command=self.start_selection).pack(pady=10)# 设置网格权重,使区域可扩展main_frame.columnconfigure(1, weight=1)main_frame.rowconfigure(3, weight=1)main_frame.rowconfigure(4, weight=2)def browse_source(self):filename = filedialog.askopenfilename(title="选择原始股票池文件",filetypes=[("通达信板块文件", "*.blk"), ("所有文件", "*.*")])if filename:self.source_path_var.set(filename)def browse_save(self):filename = filedialog.asksaveasfilename(title="保存选股结果",defaultextension=".blk",filetypes=[("通达信板块文件", "*.blk"), ("所有文件", "*.*")])if filename:self.save_path_var.set(filename)def log(self, message):"""在日志区域显示消息"""self.log_text.insert(tk.END, f"{time.strftime('%H:%M:%S')} - {message}\n")self.log_text.see(tk.END) # 滚动到最后self.root.update_idletasks() # 刷新界面def start_selection(self):"""开始选股过程"""# 清空日志self.log_text.delete(1.0, tk.END)# 获取用户输入source_path = self.source_path_var.get()save_path = self.save_path_var.get()period = self.period_var.get()formula = self.formula_text.get(1.0, tk.END).strip()# 验证输入if not source_path or not save_path:messagebox.showerror("错误", "请设置原始股票池和保存路径")returnif not formula:messagebox.showerror("错误", "请输入选股公式")returnif 'XG:' not in formula:if messagebox.askyesno("警告", "公式中未发现XG信号,可能导致选股失败,是否继续?"):self.log("警告:公式中未明确包含XG信号,可能无法正确选股")else:returntry:self.log("开始初始化通达信连接...")# 初始化通达信hq = htdx.TdxInit(ip='183.60.224.178', port=7709)if not hq:self.log("通达信连接失败,请检查网络或服务器地址")returnself.log(f"从 {source_path} 加载股票池...")# 获取自选股codes = htdx.getzxgfile(source_path)if not codes:self.log("未找到股票数据,请检查原始股票池文件")returnself.log(f"共加载 {len(codes)} 只股票,开始选股...")tgs1 = hgs.Tdxgs()selected_stocks = []# 遍历所有股票for i, (market, code) in enumerate(codes):try:# 显示进度if i % 10 == 0:self.log(f"正在处理第 {i+1}/{len(codes)} 只股票...")# 获取K线数据df = htdx.get_security_bars(nCategory=period, nMarket=market, code=code,nStart=0, nCount=200)if df is None or df.empty:self.log(f"股票 {code} 没有获取到数据,跳过")continue# 数据处理df.dropna(inplace=True)mydf = hgs.initmydf(df)tgs1.loaddf(mydf)mydf = tgs1.rungs(formula) # 使用用户输入的公式# 检查选股信号if 'XG' in mydf.columns:xg = mydf['XG']else:mydf['XG'] = 0xg = mydf['XG']# 全局变量赋值(用于公式计算)global CLOSE, LOW, HIGH, OPEN, VOL, C, L, H, O, V, AMO, AMOUNTC = CLOSE = mydf['close']L = LOW = mydf['low']H = HIGH = mydf['high']O = OPEN = mydf['open']V = VOL = mydf['volume']AMO = AMOUNT = mydf['amount']# 检查最后一个交易日是否满足选股条件if xg.iloc[-1] > 0:selected_stocks.append((market, code))self.log(f"选中股票: {code}")except Exception as e:self.log(f"处理股票 {code} 时出错: {str(e)}")continue# 保存选股结果if selected_stocks:htdx.putzxgfile(selected_stocks, save_path)self.log(f"选股完成,共选中 {len(selected_stocks)} 只股票")self.log(f"结果已保存至: {save_path}")messagebox.showinfo("成功", f"选股完成,共选中 {len(selected_stocks)} 只股票")else:self.log("没有选中任何股票")messagebox.showinfo("结果", "没有选中任何股票")except Exception as e:self.log(f"选股过程出错: {str(e)}")messagebox.showerror("错误", f"选股过程出错: {str(e)}")
#加微信:xblhznt
if __name__ == "__main__":root = tk.Tk()app = StockSelectorApp(root)root.mainloop()
程序运行和执行窗口如下:
在程序中输入一个选股指标公式,自动进行选股。
上面给出了自动生成Python选股工具的程序的示例。
《小白量化智能体》相当一位计算机本科生免费帮你写指标公式,免费写Python策略,写Python量化工具,辅助你做机器学习、深度学习量化研究。
本身是支持中文Python语法和西文Python语法的集成开发工具,适合7岁-70岁人都适合学习中文Python编程。
今天的文章先写到这里,欢迎继续关注我的博客。后面我还介绍更多的【小白量化智能体】开发Python策略的知识。
超越自己是我的每一步!我的进步就是你的进步!