ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ptrade量化交易新手入门:从新建策略到跑通回测与模拟交易

ptrade量化交易新手入门:从新建策略到跑通回测与模拟交易 第一次打开 ptrade 终端很多人会愣一下界面密密麻麻全是功能左侧菜单一长串研究、回测、交易、风控全挤在一起完全不知道该先点哪里。我当时也是这样拿着券商给的账号登录进去第一反应是“这玩意儿到底怎么建策略怎么跑回测怎么挂上模拟交易”如果你也是第一次接触 ptrade 量化交易这个系列就是给你写的。这第 1 期先解决三个最基础的问题ptrade 到底是什么、策略文件怎么新建、回测怎么跑起来、模拟交易和实盘交易又该怎么建立。说白了就是带你走通“从 0 到 1 跑通整个流程”这一步。等你把这三个动作都做了一遍后面再去研究选股逻辑、择时指标、仓位管理才有意义。先能把工具用顺了再谈策略好不好这是一切量化的前提。1. ptrade到底是个什么东西跟其他量化工具怎么选1.1 ptrade的核心定位很多人把 ptrade 理解成一个“写 Python 的软件”这个说法没错但不够准确。ptrade 是恒生电子做的量化交易终端目前主要部署在券商端由券商采购后提供给自己的客户使用。也就是说你想用 ptrade前提是你有一个已经开通量化交易权限的券商账户然后通过对应券商下载终端、登录使用。从功能定位上看ptrade 把行情、研究、策略编写、回测、模拟交易和实盘交易全部塞进了一个客户端里。你不需要像用开源框架那样自己去接行情数据不需要自己写撮合逻辑也不需要考虑服务器部署的问题。它给你的是一套闭环在终端里写策略点击回测看报告点模拟交易让策略自动跑最后在实盘环境里挂上真实账号。对非专业量化团队来说这个闭环极其省事。我第一次用的时候最大的感受就是“快”。从写完一个最简单的均线策略到看到回测报告整个过程不超过五分钟。这在 backtrader 或者自研框架里几乎不可能做到光是把数据源、佣金、滑点配置好就够折腾半天。1.2 和 QMT、backtrader、掘金到底怎么选不少人有选择困难症其实不同工具定位差异很大关键看你的使用场景。工具定位优势短板ptrade券商端量化终端行情数据、交易通道、回测一体开箱即用必须通过券商申请界面相对固定扩展受限QMT券商端极速交易终端交易速度快适合对执行效率要求很高的场景策略研究能力相对弱学习曲线较陡backtrader开源 Python 回测框架免费、灵活、社区大可自主定制需要自己接数据、自己配交易通道A股实盘门槛高掘金GoldMiner独立量化平台跨市场支持好接口清晰很多功能需要收费实盘对接也依赖券商支持如果你已经确定在券商开户并且能拿到 ptrade 权限没有特殊理由建议先从 ptrade 开始。它最大的好处是数据和交易通道不需要你操心代码里传一个股票代码进去行情数据自然就有。对于新手来说这点比什么都重要。先学会在平台内把策略跑通再回头理解数据接口、撮合原理效率会高很多。1.3 使用 ptrade 的前置条件再强调一遍ptrade 不是下载个安装包就能用的软件。你需要做这几步在支持 ptrade 的券商开通证券账户并确认自己符合量化交易权限的准入条件向营业部或客户经理提交申请签署量化交易相关的协议和风险揭示书可能还需要完成一次测试评估拿到券商的 ptrade 客户端安装包和账号信息有的券商会给你一个单独的交易账号有的直接用资金账号登录确认行情权限比如 Level-2 行情是否开通这会影响盘中快照数据的获取这里面最容易卡住的是权限申请。不同券商对量化交易权限的准入门槛不一样有的要求资金量有的要求交易经验有的会安排专人联系你做一个简单的访谈。不要嫌麻烦这一步本质上是合规要求也是对你自己负责。没有权限的话后面所有工作都没法进行。2. 动手第一步新建策略2.1 找到策略管理入口新建一个策略文件打开 ptrade 终端并登录后先在界面各处找“策略交易”或者“策略研究”这个入口。不同券商的 ptrade 版本界面会略有差异但核心模块是相同的一般集中在左侧功能区。我已经习惯把界面切成“策略研究”工作区因为写代码、跑回测、做模拟都从这儿进来。新建策略的方法很简单进入策略研究模块后找到“新建策略”按钮点击后会弹出一个窗口让你填策略名称和描述。填写完成后系统会生成一个 Python 文件模板。这个模板就是你的策略载体后续所有代码都写在这个 .py 文件里。第一次跑策略不要求多复杂先用系统自带的模板把流程走通就好。很多新手一上来就复制一堆复杂代码报错后完全不知道哪里出了问题反而不利于建立信心。我的建议是先跑一个“啥也不干”的空策略确认整个流程通了再往里面加逻辑。2.2 最小可运行的策略模板长什么样新建出来的默认模板一般会有两个方法一个是 initialize一个是 handle_data。下面这个示例是一个最简单的双均线策略也是我在第一次测试时常用的模板你可以直接复制到自己的策略文件里跑一下def initialize(context): # 选一只股票作为观察标的 g.security 000001.SZ # 设置均线参数 g.short_win 5 g.long_win 20 # 设定股票池 set_universe([g.security]) # 设置交易成本包含印花税和佣金 set_order_cost( OrderCost( open_tax0.001, # 买入印花税A股目前买入不收 open_commission0.0003, # 买入佣金 close_tax0.001, # 卖出印花税 close_commission0.0003 # 卖出佣金 ), typestock ) # 设定基准指数用来对比策略表现 set_benchmark(000300.SH) def handle_data(context, data): # 获取长周期收盘价序列 prices get_history(g.long_win, 1d, close, g.security, fqpre) if len(prices) g.long_win: return # 计算短均线和长均线 ma_short prices[-g.short_win:].mean() ma_long prices[-g.long_win:].mean() # 获取当前价格和当前仓位 current_price get_current_data()[g.security].last_price current_position context.portfolio.positions[g.security].total_amount # 金叉买入死叉卖出 if ma_short ma_long and current_position 0: order(g.security, 100) elif ma_short ma_long and current_position 0: order_target(g.security, 0)这个策略的逻辑很简单短均线从下方穿过长均线时买 100 股短均线从上方跌破长均线时清仓。代码里有几个函数是 ptrade 的核心 API新手一定要知道它们各管什么。2.3 initialize、handle_data 和常用API都是干嘛的initialize 方法是策略启动时执行的初始化函数只在策略启动时运行一次。它里面通常放全局变量设置、股票池设定、手续费设定、基准设定等一次性工作。比如 g.short_win 5 就是把你定义的参数挂在全局对象 g 上这个 g 对象会在整个策略周期里共享数据专门用来存跨函数调用的变量。handle_data 方法是策略的主体它会按你新建策略时选择的周期被反复调用。这里有个很容易踩的坑如果你选择了日线周期handle_data 每天收盘后调用一次不同券商终端的具体触发时点可能不同如果你选择了分钟周期它就会按分钟触发。很多新手在日线周期策略里写了基于 1 分钟数据的逻辑结果发现策略根本没法按预期跑就是因为这个调用机制没搞清楚。模板里用到的几个 API 我再啰嗦一下因为你后面会频繁遇到get_history获取历史行情数据参数依次是周期数、K线类型、字段、股票代码、复权方式。复权参数 fq 很重要不设或者设错了计算结果会差很多。get_current_data获取当前最新行情快照返回的是一个字典对象里面包含 last_price、high_limit、low_limit、paused 等字段。涉及到涨跌停、停牌判断的时候非常有用。order / order_target下单函数order 是按数量下单order_target 是调整到目标仓位。比如 order_target(g.security, 0) 就是把这支股票仓位清到 0也就是全卖。实盘模式下这些函数会把指令发给券商柜台所以代码里每个函数都要认真核对参数。set_universe设定股票池告诉策略系统你关注的股票范围。有些数据接口只能取股票池以内的数据所以这个设定要尽量只放自己真正需要的股票放太多股票会拖慢回测速度。set_order_cost设置交易成本包括佣金、印花税、过户费等。A股和港股的费率规则不一样做模拟盘或实盘前一定要确认自己的佣金费率是哪档闭着眼睛用默认值容易导致回测结果偏离实际情况。set_benchmark设定基准指数回测报告里会拿你的策略收益和基准指数对比。一般用沪深300000300.SH或者中证500000905.SH。2.4 周期选择日线还是分钟线新建策略文件的时候系统通常会让你选择策略的周期常见的是“日线”和“分钟线”。不要小看这个选项它直接决定了 handle_data 的调用频率也决定了 get_history 获取数据的粒度。日线周期适合中低频策略比如持仓几天甚至几周的均线策略、趋势跟踪策略。这类策略对执行时点要求不高每天收盘后看一次行情就够了也不容易被盘中噪音干扰。分钟线周期适合日内交易或者对进场时点要求较高的策略。但分钟线的数据量比日线大很多回测时间会成倍增加而且对数据权限有要求。如果你没有开通分钟级数据权限哪怕代码写得再对回测时也会提示数据缺失。我的建议是新手阶段先从日线周期开始把整体流程跑通了再考虑分钟级策略。这就像学开车先上了大路跑直道再进市区练复杂路况。3. 回测怎么建报告怎么看3.1 新建回测的完整步骤策略写完以后最关键的一步是回测。在 ptrade 里回测入口一般在策略文件编辑界面的上方或者右侧有一个“回测”按钮。点击之后会弹出回测参数设置窗口里面有几项配置需要你设置清楚策略名称默认是当前选中的策略文件你可以单独给这次回测起个名字方便后期对比不同参数版本回测时间范围起止日期决定了策略在这段时间内的表现。一般建议至少包含一段牛市和一段熊市比如从 2018 年到 2023 年横跨牛熊才能看出策略的真实水平初始资金模拟起始资金一般填 100 万主要是方便按百分比计算收益和仓位基准指数用于对比默认和代码里的 set_benchmark 保持一致交易成本设置有些 ptrade 版本在回测设置里直接提供佣金、印花税、滑点的输入框如果代码里已经通过 set_order_cost 设置过了以代码为准滑点设置这是很多人忽略的选项。滑点可以简单理解成实际成交价格和看到价格之间的偏差一般按固定值或者比例设置建议不要设成 0太理想化的成交模拟容易高估收益设置完成后点击“确定”或“开始回测”终端就会开始跑回测。日线级别的策略假设回测区间是 5 年一般几秒钟到几十秒钟就能出结果。如果跑了几分钟还没结束多半是代码里循环写得太重或者股票池里放了太多股票。3.2 回测参数怎么设置才算合理我看到太多新手在回测设置里直接把滑点设为 0佣金设为 0跑出来收益很漂亮一到模拟盘就爆亏。这不是策略的问题是回测环境太理想化的问题。回测的目的是“尽量接近真实地检验策略逻辑”如果你把成本全部抹掉那你检验的其实不是策略的赚钱能力而是理想世界里的幻觉。我个人的习惯参数如下佣金按万分之三设置这是目前多数券商的实际佣金水平印花税卖出时千分之一这个是国家统一规则没有商量余地滑点设 0.002 或者按价格乘以千分之二计算A股流动性较好的股票一般不会出现太大的滑点但这个值能模拟出实际的交易冲击成本最低佣金有的平台支持设置单笔最低佣金通常是不足 5 元按 5 元收回测里最好也打开这个限制这里有一个小经验回测收益如果因为关闭了佣金和滑点而显著变化说明策略本身可能在做非常高频的交易。交易频率越高成本占比就越敏感这种策略到了实盘环境往往很难赚到钱。反过来如果一个策略在设置了完整费率后依然正收益那它至少具备继续验证的基础。3.3 回测报告的核心指标解读回测跑完以后ptrade 会生成一份报告里面有收益曲线、回撤曲线、月度收益表和一些统计指标。新手最常犯的错误是只看“总收益率”看到收益高就认为策略赚钱。这个习惯非常危险。你需要重点关注的指标是这几个最大回撤代表策略在某一时点从最高点到最低点跌了多少这个数字直接决定了你的心理承受能力和资金承受能力。如果回撤达到 40%意味着你手里 100 万资金曾经变到 60 万。很多人实盘扛不住不是策略不赚钱而是中途被震出去了。夏普比率可以简单理解成“每一份风险能换来多少收益”数值大于 1 说明策略风险收益比还可以大于 2 就算优秀。但要注意夏普比率是基于历史数据计算的样本区间短或者市场风格切换频繁的时候这个数字的参考价值会打折扣。胜率和盈亏比要结合起来看。有的策略胜率只有 30%但每次赚的时候赚很多、亏的时候亏很少总账照样赚钱有的策略胜率 80%但偶尔亏一次就吃掉大半利润。不要只盯着胜率。年化收益率和总收益率也有区别。总收益率是区间整体收益年化收益率是把收益折算到一年的水平。区间越长年化和总的差距越大。比如 5 年总收益 43%折算成年化才 7% 左右这个水平并不算高。3.4 回测容易犯的坑回测结果好并不代表实盘能赚钱。这句话我说多少次都不为过。回测环节有几个典型问题未来函数。这是最常见的“隐形杀手”。比如你用当天的收盘价决定当天买入但实际上当天收盘以后才能看到收盘价真正下单已经晚了。有些新手写代码时不小心用到了当时还拿不到的数据回测结果自然虚高。幸存者偏差。如果你构建股票池时只在“现在还存在于市场上的股票”里选那等于默认避开了退市股和暴跌股回测数据当然好看。解决方法是使用平台提供的历史成分股数据或者至少用全市场股票池再叠加筛选条件。过拟合。反复在同一个时间段里调参数调到收益曲线完美这种情况在所有策略框架下都存在。一个策略参数换一个时间段就失效往往就是过拟合了。建议把数据切成训练段和验证段先用训练段调参再用验证段检验。这些坑不是一次两次就能完全规避的但你在看回测报告时至少要保持怀疑态度收益太漂亮的时候先想想是不是哪里把成本算漏了或者哪段数据用错了。4. 从回测到模拟交易再到实盘交易4.1 模拟交易怎么建回测通过以后下一步是建立模拟交易。这也是新手经常搞不清楚的地方回测和模拟交易到底有什么区别打个比方回测是拿历史数据的“录像带”回放你的策略看看过去几年它表现如何而模拟交易是让策略从现在开始以当时的行情实时运行按照真实信号自动下单只不过这笔“交易”使用的是模拟资金不会真实成交。在 ptrade 中建立模拟交易的入口在策略文件的“模拟交易”或“仿真交易”按钮。点击后会让你设置策略名称、初始资金、运行周期等参数。确认后策略就开始在终端后台等待行情触发。注意模拟交易会消耗系统资源如果你没有主动停止它它会一直挂着。模拟交易建立后你可以在交易日志里看到策略每一次买入卖出的动作、成交价格、成交数量。这个日志非常宝贵建议新手养成每天查看的习惯。4.2 模拟盘和实盘最核心的差异模拟盘跑得风生水起不代表实盘一定行。这不是吓唬你而是两者之间确实存在几个很现实的差异。第一成交撮合机制不同。模拟盘的撮合往往是“看到价格就成交”不真实考虑盘口深度和流动性。遇到成交量很小的股票模拟盘你能轻松买到实盘可能一挂单就瞬间打穿好几个价位或者根本成交不了。第二时点延迟不同。模拟盘通常会基于最新快照价格立即计算信号并成交但实盘从信号产生、下单指令发出、到达柜台、再到达交易所每一步都有延迟。这种延迟在分钟级策略上影响尤其大。第三心理状态完全不同。模拟盘亏了不心疼实盘亏了会影响判断和操作。很多策略在模拟盘上能严格执行纪律到了实盘看到浮亏就开始手动干预最后策略形同虚设。所以我强烈建议模拟盘至少稳定运行一到两周确认策略没有报错、持仓符合预期、成交情况和回测假设差异不大再考虑上实盘。很多人因为模拟盘跑得好就急着上实盘结果前三天就遇到各种问题反而打击信心。4.3 转实盘前必须做的检查清单从模拟交易切换为实盘交易前建议对照这个清单逐一检查策略仓位管理逻辑是否清晰单笔下单量是否合理不能出现一次买入动用全部资金的情况是否处理了涨跌停和停牌情况如果股票停牌策略还去下单会导致报错或者持仓数据异常手续费计算是否和券商真实费率一致佣金最低收费标准是否已经计入策略是否在极端行情下有自我保护机制至少应该设置止损条件或者退出条件是否清楚如何手动停止策略防止策略出错时无法及时干预是否设置了交易日志记录方便事后复盘小资金跑几天验证别一上来就放大量资金实盘交易一旦开启你就要对每一笔下单负责。策略代码是定时自动执行的如果没有做好异常处理一个小 bug 就可能在开盘瞬间造成不可控的后果。所以新手阶段哪怕模拟盘跑得很好实盘也建议先用最小仓位起步。5. 新手最容易踩的坑和排查技巧5.1 常见报错和问题速查表以下是我自己在使用 ptrade 过程中遇到过的问题整理出来供大家参考现象可能原因处理方法回测提示“没有数据”股票代码格式不对、股票还没上市、复权参数有误检查代码是否为 6 位数字加市场后缀如 .SZ、.SH换个时间段再试策略一直不触发买入均线条件始终不满足或者仓位判断写错在 handle_data 里加 log.info 输出均线值和仓位观察变量的实际变化下单失败提示资金不足单笔下单金额超过可用资金或者没有预留手续费下单前计算可用资金注意按整手100 股整数倍下单分钟级数据为空未开通分钟级数据权限联系券商确认权限或先切换到日线策略回测结果和模拟盘差异很大撮合机制不同、手续费设置不一致、滑点假设不同优先检查交易成本设置再对比成交明细策略报错后自动停止代码有异常没有捕获在关键函数上增加 try/except保证异常时至少能输出日志而不是直接崩溃遇到报错时第一件事不是重写代码而是看日志。ptrade 的策略日志里会输出详细的报错堆栈信息定位到具体行数。很多时候就是少了个参数或者股票代码多敲了一个字母。5.2 我在实操中养成的几个习惯第一个习惯是多打日志。有人觉得 log.info 是在浪费时间其实它是排查问题时最锋利的工具。我在写任何策略时都会在 initialize 里输出股票池和参数在 handle_data 里间隔输出当前价格、均线值、持仓状态。这样一旦策略表现异常看日志就能快速定位是数据问题、逻辑问题还是执行问题。第二个习惯是先跑通再优化。新手特别容易陷入“我要写一个完美策略”的执念里结果代码写了一堆一次都没跑通。正确姿势是先把最小功能跑通比如只买卖一只股票确认流程没问题再逐步增加股票数量、增加条件判断、增加仓位管理。第三个习惯是给每个策略做好版本管理。很多人会在同一个文件里反复修改参数跑了很多次回测但分不清哪次是哪个版本。我的做法是每次改动前复制一份文件命名带上日期和参数特征比如“ma_cross_20240101_win5_20”。这样做久了以后复盘对比效率会高很多。第四个习惯是做好回测记录表。每次回测结束后把策略名称、区间、初始资金、年化收益、最大回撤、夏普比率记到一个表格里。别嫌麻烦等你积累了二十几条记录再回头对比你会很容易看出哪些参数是真正有效的哪些只是偶然跑得好。5.3 关于 ptrade 学习的路线建议如果你刚刚开始接触 ptrade我建议学习路线可以这样安排先把这一期的基础流程反复走三遍以上确认自己能不看教程独立完成“新建策略—跑回测—建模拟”这套动作然后去研究 ptrade 的官方帮助文档尤其是 API 说明不用全背但要知道有这些函数存在用的时候能想到这里有现成的工具接着开始简化复现一些经典策略比如双均线、MACD 金叉死叉、布林带突破再往后才是加入仓位管理、止损止盈、多标的组合。每一步都保持足够耐心。量化交易这个领域前期最容易被劝退的就是“流程不熟”很多人不是不想学而是连一个最简单的策略都跑不起来。你把这一期的流程弄熟就等于跨过了第一道坎后面的路其实没有想象中那么难。我自己到现在也还是保持着“每个新策略先跑完整流程再做优化”的习惯。工具这东西用多了自然就熟了关键是最初那几次不要因为小挫折就放弃。下一期我会继续写策略的数据获取和常用指标实现把双均线背后的数据接口、K线计算细节展开讲清楚。如果你在跑这一期流程时有任何卡住的地方可以先翻一翻终端自带的日志再对照上面的问题表排查一下等你自己亲手跑通一个策略的时候那种成就感比看多少篇教程都管用。
返回列表