應用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策略的知識。
超越自己是我的每一步!我的進步就是你的進步!