Skip to content

wangfeng-lab/stock-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📈 Stock Research Bot

用 Python 写的美股量化交易模拟系统。$1,000,000 虚拟资金,三桶策略(保守/成长/短线),自动选股、买卖、止损止盈。

纯模拟,不做真实下单。 所有交易记录在本地 virtual_account.json,不连接真实券商账户。


回测结果(2025 上半年)

用 TradingView 历史数据对 83 只股票回测,时间范围 2025-01-01 → 2025-06-30:

指标 结果
初始资金 $1,000,000
期末总盈亏 +$195,806
总收益率 +19.58%
胜率(盈利笔数/总笔数) 73%
总交易笔数 364
最佳单票 STX(+$14,389)

各桶分解:

收益 年化
保守桶(蓝筹) +$26,461 5.4%
成长桶(半导体/AI) +$102,745 24.7%
短线桶(高波动) +$66,601 18.7%

策略详解

为什么要分三个桶?

不同股票有不同的"节奏"。AAPL 涨得稳但慢,NVDA 跟着 AI 浪潮大起大落,PLTR 每次财报都像坐过山车。用同一套参数管所有股票,要么信号太慢错过短线机会,要么噪音太多频繁止损。

三桶结构让每类股票用最适合它的均线周期和信号逻辑,互不干扰。


🛡 保守桶(Conservative)

持仓股票: AAPL、MSFT、GOOGL、AMZN、META、BRK-B、JPM、V、JNJ、PG 等蓝筹

均线周期: 10MA(短期)/ 50MA(长期)— 周期更长,过滤掉日常波动噪音

信号逻辑:

  • 主要看金叉(10MA 上穿 50MA),代表中期趋势反转
  • 配合 RSI < 65 过滤(避免追高,RSI 过高说明短期已超买)
  • ADX ≥ 18 确认趋势真实性,防止横盘假金叉

仓位: 每笔占该股分配额的 65%

止损: -6%(容错空间大,蓝筹不容易短期大跌)


🚀 成长桶(Growth)

持仓股票: NVDA、AMD、TSM、STX、SMCI、ASML、AMAT、KLAC、ARM、MRVL 等半导体/AI 标的

均线周期: 5MA / 20MA — 周期更短,捕捉科技股的快速轮动

信号逻辑:

  • 金叉(5MA 上穿 20MA)为主要买入触发
  • 同时要求 MACD 金叉(MACD 线上穿信号线),动量双重确认
  • ADX ≥ 18 确保是真趋势而非震荡

仓位: 每笔占分配额的 70%,对高确定性趋势股给更大仓位

止损: -5%


⚡ 短线桶(Short-term)

持仓股票: TSLA、PLTR、OKLO、MSTR、COIN、RKLB、IONQ 等高波动主题股

均线周期: 5MA / 20MA

信号逻辑:

  • 金叉 + 量比 ≥ 1.5x(当日成交量至少是近期均量的 1.5 倍)
  • 量价配合是短线最重要的过滤器,有量才有驱动力
  • ADX ≥ 18 同样适用

仓位: 每笔占分配额的 55%,高波动所以仓位最保守

止损: -4%(最严格,短线不留情)


🔍 ADX 趋势过滤器(防假金叉)

金叉是经典趋势信号,但在横盘震荡期会出现大量假信号。ADX(平均趋势指数)衡量趋势的"强度"——不管涨跌,只看是否在趋势中。

ADX 值 含义 操作
< 18 市场在磨底震荡 跳过该金叉信号
18–25 趋势初步形成 允许入场
> 25 趋势强劲 允许入场

加入这个过滤器后,回测中亏损单比例显著下降。


📐 金字塔加仓(Pyramid Entry)

持仓盈利后分两次追加,越涨越加:

阶段 触发条件 加仓量
第一次加仓 盈利 +5% 初始仓位的 30%
第二次加仓 盈利 +12% 初始仓位的 20%

股票涨了说明方向判断正确,追加让利润继续跑。加仓量递减控制整体风险,避免在高位重仓。


💰 分批止盈(Tiered Profit-Taking)

不一次全卖,分三阶段锁定利润:

阶段 触发条件 操作
第一批 盈利 +4% 卖出持仓的 30%
第二批 盈利 +8% 再卖出 60%
尾仓 移动止损跟踪 盈利 ≥ 2% 时激活,ATR × 1.2 跟踪

股票继续涨时留有仓位继续吃利润,同时避免利润全部回吐。


💼 仓位计算(权重式)

传统方法用 ATR 反推最大亏损手数——低波动期仓位会极小,导致实际资金利用率很低。

本系统改用固定比例法:

手数 = floor(每股分配额 × 仓位比例 / 当前股价)
每股分配额 = 总资金 / 持仓股票数

仓位稳定,不受波动率影响,资金利用率提升约 34 倍(相比原 ATR/$200 方案)。


系统架构

stock-bot/
├── backtest.py            # 回测引擎(本地历史数据,模拟完整交易流程)
├── portfolio_bot.py       # 实盘模拟调度器入口
├── workers.py             # 后台线程(信号扫描 / 止损监控 / 定时建仓)
├── strategy_config.py     # 三桶参数配置(均线、止损、仓位比例、ADX 阈值)
├── strategy_signals.py    # 信号检测(金叉 / 回踩 / 突破 / ADX / MACD)
├── execution_policy.py    # 仓位计算(equity_pct_qty 权重式)
├── fetch_tv_data.js       # TradingView 历史数据下载(Node.js)
├── dashboard.py           # Streamlit 实时监控面板
├── local_broker.py        # 虚拟经纪商(读写 virtual_account.json)
└── historical_data/       # 83 只股票日线 CSV

使用方法

1. 下载历史数据

cd TradingView-API
node fetch_tv_data.js --from 2025-01-01 --to 2025-06-30

数据来自 TradingView,无需 API Key,存为 historical_data/<TICKER>.csv

2. 运行回测

python3 backtest.py --local --from 2025-01-01 --to 2025-06-30

完成后生成:

  • backtest_summary.csv — 各股票汇总
  • backtest_trades.csv — 每笔交易明细
  • backtest_report.html — 可视化报告

3. 查看可视化报告

open backtest_report.html

报告包含:KPI 卡片、权益曲线、三桶收益对比、最佳/最差股票、信号分布、完整交易记录。

4. 启动实时面板

需要安装并运行 moomoo OpenD(用于获取实时行情):

streamlit run dashboard.py

依赖安装

pip install pandas numpy streamlit futu-api
npm install  # 在 TradingView-API/ 目录下
组件 用途
Python 3.11+ 主要语言
pandas / numpy 数据处理与指标计算
streamlit 实时监控面板
moomoo OpenD 实时行情(仅面板使用)
Node.js + TradingView-API 历史数据下载

免责声明

本项目纯属学习研究用途,不构成任何投资建议。所有回测结果基于历史数据,不代表未来表现。

About

Local stock research and simulated trading system based on moomoo OpenD — backtesting, strategy signals, and Streamlit dashboard

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors