当前位置:首页>java>别慌!QMT编程真没你想的难:3天零基础实战日记,附全部代码

别慌!QMT编程真没你想的难:3天零基础实战日记,附全部代码

  • 2026-09-16 16:10:09
别慌!QMT编程真没你想的难:3天零基础实战日记,附全部代码

导读:别被量化交易吓到,其实你可以

你是不是经常听到“量化交易”、“程序化策略”这些高大上的词,觉得那是金融天才的专利?其实,编写自己的第一个交易策略,比想象中简单得多。

QMT(Quantitative Market Trading)平台提供了完整的Python量化环境,即使你是零基础的编程小白,跟着这篇攻略,3天时间就能写出并运行你的第一个策略。


📅 三日速成计划

Day 1:基础准备与环境搭建(2-3小时)

第一步:认识你的工具箱

QMT平台是什么?

  • 一站式量化交易平台

  • 支持Python策略编写

  • 提供历史数据和实时行情

  • 支持模拟交易和实盘交易

第二步:快速安装与配置

安装流程可视化:

1. 下载安装包 → 2. 一键安装 → 3. 账户登录 → 4. 策略界面打开
避坑指南:
  • 确保Python环境正常(QMT内置Python,无需额外安装)

  • 首次登录选择“模拟交易”模式

  • 熟悉界面布局:行情、策略、交易、回测四个主要区域

第三步:编写你的第一行代码

打开策略编辑器,输入并运行:

# 第一个QMT策略脚本print("Hello QMT!")print("这是我的第一个量化策略")# 获取当前时间from datetime import datetime current_time = datetime.now()print(f"当前时间:{current_time}")

看到输出结果了吗?恭喜,你已经迈出了第一步!


Day 2:理解量化策略的核心逻辑(3-4小时)

策略三要素:选股 → 择时 → 风控

让我们通过一个简单的“均线策略”来理解:

# 简单的双均线策略框架# 导入必要的库import talibimport numpy as npdefinitialize(context):"""初始化函数,策略开始运行时调用一次"""# 设置要交易的股票     context.stock ="000001.SZ"# 平安银行# 设置均线参数     context.short_window =5# 短期均线     context.long_window =20# 长期均线# 打印初始化信息print(f"策略初始化完成,交易标的:{context.stock}")defhandle_data(context, data):"""每个K线周期都会调用这个函数"""# 获取历史价格数据     prices = data.history(         context.stock,"close",          context.long_window +1)# 计算均线     short_ma = prices[-context.short_window:].mean()     long_ma = prices.mean()# 获取当前持仓     position = context.portfolio.positions[context.stock].total_amount         # 交易逻辑if short_ma > long_ma and position ==0:# 金叉且空仓,买入         order_target_value(context.stock,10000)# 买入10000元print(f"买入信号:短均线{short_ma:.2f} > 长均线{long_ma:.2f}")elif short_ma < long_ma and position >0:# 死叉且持仓,卖出         order_target_value(context.stock,0)# 清仓print(f"卖出信号:短均线{short_ma:.2f} < 长均线{long_ma:.2f}")

价格走势图示例:

股价

  ↑

  │      ↗ 买入点(金叉)

  │     / \

  │    /   ↘ 卖出点(死叉)

  │   /       \

  │  /         \

  │ ↗           ↘

  │/             \

  └───────────────→ 时间

   短期均线 ───

   长期均线 ─────

实战练习:修改参数观察效果

尝试修改以下参数,理解其对策略的影响:

  • 将short_window改为3,long_window改为10

  • 调整买入金额为20000

  • 添加打印更多信息


Day 3:完善策略并运行回测(4-5小时)

第一步:添加风险管理

defadd_risk_management(context, data):"""添加简单的风险管理"""# 获取当前持仓市值     current_value = context.portfolio.positions[context.stock].market_value         # 单只股票仓位不超过总资金的30%if current_value > context.portfolio.total_value *0.3:print("警告:仓位超过30%,暂停买入")returnFalse# 止损检查:亏损超过10%时清仓     cost = context.portfolio.positions[context.stock].cost_basis     current_price = data.current(context.stock,"close")if cost >0and current_price / cost <0.9:         order_target(context.stock,0)print(f"触发止损:成本{cost:.2f},现价{current_price:.2f}")returnFalsereturnTrue# 在handle_data中调用defhandle_data(context, data):# 先进行风控检查ifnot add_risk_management(context, data):return# 原来的交易逻辑...

第二步:添加绩效统计

defprint_performance(context):"""打印策略绩效"""     portfolio = context.portfolio         print("\n"+"="*50)print("策略绩效报告")print("="*50)print(f"总资产:{portfolio.total_value:.2f}元")print(f"持仓市值:{portfolio.positions_value:.2f}元")print(f"可用资金:{portfolio.available_cash:.2f}元")for stock, pos in portfolio.positions.items():         profit = pos.market_value - pos.cost_basis         profit_rate = profit / pos.cost_basis *100if pos.cost_basis >0else0print(f"{stock}:持仓{pos.total_amount}股,"f"盈亏{profit:.2f}元({profit_rate:.2f}%)")print("="*50)

第三步:运行回测并分析

回测设置步骤:

  1. 点击“回测”选项卡

  2. 设置回测时间(如:2023-01-01 到 2023-12-31)

  3. 选择K线周期(日线/30分钟线等)

  4. 设置初始资金(如:100000元)

  5. 点击“开始回测”

回测结果分析要点:

  • 总收益率

  • 年化收益率

  • 最大回撤(重要!)

  • 夏普比率

  • 胜率(盈利交易比例)

完整策略示例:加入日志和优化

# 完整版:均线策略v1.0import numpy as npfrom datetime import datetimeimport logging# 设置日志logging.basicConfig(level=logging.INFO)logger = logging.getLogger(__name__)classMovingAverageStrategy:"""双均线交易策略"""def__init__(self):         self.stock ="000001.SZ"         self.short_window =5         self.long_window =20         self.trade_log =[]definitialize(self, context):"""初始化"""         context.strategy = self         logger.info(f"策略启动时间:{datetime.now()}")         logger.info(f"交易标的:{self.stock}")defhandle_data(self, context, data):"""处理每个周期的数据"""# 1. 获取数据         prices = self.get_price_data(context, data)iflen(prices)< self.long_window:return# 2. 计算指标         short_ma, long_ma = self.calculate_ma(prices)# 3. 获取持仓         position = context.portfolio.positions[self.stock].total_amount                 # 4. 生成交易信号         signal = self.generate_signal(short_ma, long_ma, position)# 5. 执行交易if signal:             self.execute_trade(context, data, signal, position)# 6. 记录日志(每20个周期记录一次)iflen(self.trade_log)%20==0:             self.log_status(context, data)defget_price_data(self, context, data):"""获取价格数据"""return data.history(             self.stock,"close",              self.long_window +10# 多取一些数据)defcalculate_ma(self, prices):"""计算移动平均线"""         short_ma = prices[-self.short_window:].mean()         long_ma = prices[-self.long_window:].mean()return short_ma, long_ma         defgenerate_signal(self, short_ma, long_ma, position):"""生成交易信号"""if short_ma > long_ma *1.01and position ==0:# 加入1%的过滤return"BUY"elif short_ma < long_ma *0.99and position >0:return"SELL"returnNonedefexecute_trade(self, context, data, signal, position):"""执行交易"""if signal =="BUY":# 使用总资金的20%买入             buy_value = context.portfolio.total_value *0.2             order_target_value(self.stock, buy_value)# 记录交易             self.trade_log.append({'time': data.current_dt,'type':'BUY','price': data.current(self.stock,'close'),'amount': buy_value            })             logger.info(f"买入 {self.stock},金额{buy_value:.2f}")elif signal =="SELL":             order_target(self.stock,0)             self.trade_log.append({'time': data.current_dt,'type':'SELL','price': data.current(self.stock,'close')})             logger.info(f"卖出 {self.stock},清仓")deflog_status(self, context, data):"""记录状态"""         logger.info(f"当前时间:{data.current_dt}")         logger.info(f"总资产:{context.portfolio.total_value:.2f}")         logger.info(f"交易次数:{len(self.trade_log)}")# 策略入口definitialize(context):     strategy = MovingAverageStrategy()     strategy.initialize(context)     context.strategy_instance = strategydefhandle_data(context, data):     context.strategy_instance.handle_data(context, data)

🎯 学习资源与后续建议

资源推荐:

  1. 官方文档:QMT帮助文档中的策略示例

  2. 社区论坛:与其他量化爱好者交流

  3. 开源策略:GitHub上的量化项目参考

进阶路线图:

text

复制下载
第1周:掌握基础策略编写 第2周:学习技术指标(MACD、RSI、布林带等) 第3周:理解风险管理和资金管理 第4周:尝试多因子选股策略 第2个月:学习机器学习在量化中的应用

避坑提醒:

⚠️ 策略在实盘前必须:

  1. 进行充分的历史回测

  2. 在模拟盘运行至少1个月

  3. 理解策略的局限性

  4. 准备好风险管理方案

📝 结语:你的量化之旅正式开始

恭喜!经过3天的学习,你已经:
✅ 搭建了QMT开发环境
✅ 理解了量化策略的基本结构
✅ 编写了完整的均线策略
✅ 学会了回测和绩效分析

记住: 第一个策略不需要完美,重要的是开始。即使简单的策略,通过不断优化和迭代,也能成为你的交易利器。

现在,打开QMT平台,复制上面的代码,运行你的第一个策略吧!遇到问题不要怕,这是学习的一部分。量化交易的世界很大,但第一步,你已经迈出了。


今日行动: 修改策略中的股票代码,换成你关注的股票,运行回测看看效果如何!

最新文章

随机文章