我用AI Agent炒A股,亏了3000块后顿悟了
01 第一次上头:全职AI交易员,爆亏
02 血的教训:AI操盘的三个死穴
03 正确姿势:人机协作,这样搞(附完整代码)
【完整可运行的代码】
import tushare as tsimport pandas as pdimport requestsfrom openai import OpenAIimport scheduleimport timefrom datetime import datetimeimport tkinter as tk======== 配置 ========TUSHARE_TOKEN = '你的tushare_token'去tushare.pro注册获取OPENAI_API_KEY = '你的openai_key'去openai官网注册MAX_LOSS = 7止损线7%====================初始化ts.set_token(TUSHARE_TOKEN)pro = ts.pro_api()client = OpenAI(api_key=OPENAI_API_KEY)持仓 {代码: 买入价}positions = {}======== 获取数据 ========def get_movers():"""获取当天涨幅>5%的股票"""date_str = datetime.now().strftime('%Y%m%d')df = pro.daily_basic(trade_date=date_str)return df[df['pct_chg'] > 5].sort_values('pct_chg', ascending=False).head(20)def get_sectors():"""获取主力净流入板块"""url = "http://push2.eastmoney.com/api/qt/clist/get"params = {'pn': 1, 'pz': 50, 'po': 1, 'np': 1,'ut': 'bd1d9ddb04089700cf9c27f6f7426281', 'fl': 1, 'fs': 1}response = requests.get(url, params=params, timeout=10)data = response.json()sectors = []for item in data['data']['diff']:inflow = item.get(' inflow', 0)if inflow and inflow > 0:sectors.append({'name': item['name'], 'inflow': inflow})return sorted(sectors, key=lambda x: x['inflow'], reverse=True)[:10]======== AI分析 ========def ai_analyze(movers, sectors):"""让AI分析市场"""movers_info = "\n".join([f"{i+1}. {row['ts_code']} +{row['pct_chg']:.1f}%"for i, (_, row) in enumerate(movers.head(5).iterrows())])sectors_info = "\n".join([f"{i+1}. {s['name']} 净流入{s['inflow']//10000}万"for i, s in enumerate(sectors[:5])])prompt = f"""你是10年经验的A股短线高手。请分析:主力净入板块:{sectors_info}今日强势股:{movers_info}给出:1.市场主线 2.风险点 3.仓位建议。200字内。"""response = client.chat.completions.create(model="gpt-4o-mini",messages=[{"role": "user", "content": prompt}])return response.choices[0].message.content======== 风控 ========def add_position(code, price):positions[code] = pricedef check_risk():"""检查是否触及止损线"""alerts = []for code, buy_price in positions.items():df = pro.daily_basic(ts_code=code)if df.empty:continuecurrent = df.iloc[0]['close']pct = (current - buy_price) / buy_price * 100if pct < -MAX_LOSS:alerts.append(f"{code}亏损{abs(pct):.1f}%")return alertsdef show_alert(alerts):"""弹窗提醒"""if not alerts:returnroot = tk.Tk()root.title("风控提醒")root.attributes('-topmost', True)tk.Label(root, text="触及止损线:\n\n" + "\n".join(alerts),font=('微软雅黑', 14), fg='red').pack(padx=20, pady=20)tk.Button(root, text="知道了", command=root.destroy,font=('微软雅黑', 12)).pack(pady=10)root.mainloop()======== 每日运行 ========def daily_routine():print(f"\n{'='*40}\n{datetime.now().strftime('%Y-%m-%d %H:%M')}\n{'='*40}")movers = get_movers()sectors = get_sectors()print("【强势股】")for i, (_, r) in enumerate(movers.head(5).iterrows()):print(f" {i+1}. {r['ts_code']} +{r['pct_chg']:.1f}%")print("【主力板块】")for i, s in enumerate(sectors[:5]):print(f" {i+1}. {s['name']} +{s['inflow']//10000}万")print("\n【AI分析】")print(ai_analyze(movers, sectors))alerts = check_risk()if alerts:print(f"\n【风控】{len(alerts)}只触及止损线")show_alert(alerts)if __name__ == "__main__":add_position('000001.SZ', 12.50)add_position('600519.SH', 1800.00)schedule.every().day.at("09:00").do(daily_routine)print("AI炒股助手已启动,每9点自动分析\n按Ctrl+C停止")while True:schedule.run_pending()time.sleep(60)---
【使用方法】
-
去 tushare.pro 注册,获取token -
去 openai官网 注册,获取api key -
保存代码为 ai_trader.py,填入token -
运行 python ai_trader.py
夜雨聆风