导读:别被量化交易吓到,其实你可以
你是不是经常听到“量化交易”、“程序化策略”这些高大上的词,觉得那是金融天才的专利?其实,编写自己的第一个交易策略,比想象中简单得多。
QMT(Quantitative Market Trading)平台提供了完整的Python量化环境,即使你是零基础的编程小白,跟着这篇攻略,3天时间就能写出并运行你的第一个策略。
📅 三日速成计划
Day 1:基础准备与环境搭建(2-3小时)
第一步:认识你的工具箱
QMT平台是什么?
一站式量化交易平台
支持Python策略编写
提供历史数据和实时行情
支持模拟交易和实盘交易
第二步:快速安装与配置
安装流程可视化:
1. 下载安装包 → 2. 一键安装 → 3. 账户登录 → 4. 策略界面打开
避坑指南:
第三步:编写你的第一行代码
打开策略编辑器,输入并运行:
# 第一个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}")价格走势图示例:
股价
↑
│ ↗ 买入点(金叉)
│ / \
│ / ↘ 卖出点(死叉)
│ / \
│ / \
│ ↗ ↘
│/ \
└───────────────→ 时间
短期均线 ───
长期均线 ─────
实战练习:修改参数观察效果
尝试修改以下参数,理解其对策略的影响:
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)第三步:运行回测并分析
回测设置步骤:
点击“回测”选项卡
设置回测时间(如:2023-01-01 到 2023-12-31)
选择K线周期(日线/30分钟线等)
设置初始资金(如:100000元)
点击“开始回测”
回测结果分析要点:
总收益率
年化收益率
最大回撤(重要!)
夏普比率
胜率(盈利交易比例)
完整策略示例:加入日志和优化
# 完整版:均线策略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)🎯 学习资源与后续建议
资源推荐:
官方文档:QMT帮助文档中的策略示例
社区论坛:与其他量化爱好者交流
开源策略:GitHub上的量化项目参考
进阶路线图:
text
复制下载第1周:掌握基础策略编写 第2周:学习技术指标(MACD、RSI、布林带等) 第3周:理解风险管理和资金管理 第4周:尝试多因子选股策略 第2个月:学习机器学习在量化中的应用
避坑提醒:
⚠️ 策略在实盘前必须:
进行充分的历史回测
在模拟盘运行至少1个月
理解策略的局限性
准备好风险管理方案
📝 结语:你的量化之旅正式开始
恭喜!经过3天的学习,你已经:
✅ 搭建了QMT开发环境
✅ 理解了量化策略的基本结构
✅ 编写了完整的均线策略
✅ 学会了回测和绩效分析
记住: 第一个策略不需要完美,重要的是开始。即使简单的策略,通过不断优化和迭代,也能成为你的交易利器。
现在,打开QMT平台,复制上面的代码,运行你的第一个策略吧!遇到问题不要怕,这是学习的一部分。量化交易的世界很大,但第一步,你已经迈出了。
今日行动: 修改策略中的股票代码,换成你关注的股票,运行回测看看效果如何!