我们直接来看代码转换这个话题。在量化交易领域,策略代码的迁移是家常便饭,但如何高效准确地完成,确保策略逻辑不走样是关键。 今天就来拆解一下这个过程。万事开头难,代码转换的第一步,也是最基础的一步,就是准备文件, 这就像盖房子地基一定要打牢。你的策略代码不管是从哪个平台来的,比如这里提到的 jq, 都得规规矩矩地存成一个多拍文件。别小看这一步,格式不对,后面工具可不认账, 然后给他起个好名字,比如 strategy jq 导拍,这样以后一看就知道是干嘛的。最关键的是,把这个文件放到指定的研究根目录下, 就像这张图展示的,上传到那个特定的文件夹里。只有这样,后续的检查和转换脚本才能找到你的宝贝代码开始工作。 这一步看似简单,却是整个流程顺畅进行的前提。文件准备好了,接下来就是给代码做个全面体检。接口检查。你想啊,不同平台的 api、 接口、函数定义,甚至一些底层库可能都不一样,直接搬过去肯定水土不服。 所以我们需要一个检查工具,就像医生做 ct 一 样,扫描你的代码,看看有没有潜在的兼容性问题。 具体操作也很简单,新建一个 python 的 jupiter notebook, 把提供的 check before 到 txt 内容粘贴进去,重命名为 check before 到 type, 然后运行它。这个脚本会分析你的 jq code, 大 派生成一份详细的体检报告。 如果报告指出某些函数或参数在屁吹的平台上可能有问题,你就得根据提示回到你的原始策略代码 jq code 到 pi 里去修改。 这一步非常关键,能帮你提前发现并解决大部分潜在的兼容性隐患,避免后面踩坑。通过了体检,代码基本健康了,现在就可以进行真正的乾坤大挪移。接口转换 这一步的目标就是把我们检查过的相对干净的代码自动转换成目标平台,比如 ptrad 能识别的格式。同样,我们还是用 gp notebook 来操作。 新建一个 python 三文件,粘贴 transp trade 到 tx 的 内容,重命名为 transp trade 到 ip。 运行这个脚本,它就会启动转换引擎。注意看,这个过程不是一蹴而就的。 有时候转换脚本可能会遇到一些特殊情况,比如某些复杂的自定义函数或者不支持的语法结构,这时候就会报错。别慌,按照提示去修改你的原始代码 j q q 的 点派,解决掉这些问题,然后再重新运行。转换脚本 可能需要反复几次,直到转换顺利完成,生成一个新的带有批翠的前缀的奖牌文件。这个过程就像是翻译,既要保持原意,又要符合目标语言的语法规则。刚才我们提到了执行接口检查,现在深入看看这个过程。 当你运行 check before 到 f m 时,要密切关注它的输出日期,这些日期就像体检报告的详细解读。 首先你会看到一些关于 check jq 的 函数调用的信息,告诉你他正在分析你的代码。 特别要注意的是,如果出现 yamal larry 警告提示 yamal load 已被弃用,这通常意味着你的代码中使用了旧版的 yamal 加载方式,需要更新以符合当前的安全标准或最佳实践。 此外,日制中还会包含大量 info 级别的信息,比如它检测到了你代码中使用了 order target 或 order value 这些交易函数,并记录了它们的参数和调用情况。 这些信息对于理解代码的行为以及后续的调试都非常有帮助。仔细阅读这些日制,能让你更清楚地了解代码的健康状况,以及需要重点关注的地方。 完成了接口检查,我们进入转换阶段。执行 transp trade 到 ipam 时,同样要关注其运行日制。 这个日制不仅会显示转换进度,还会根据 transjq code 颠拍脚本的逻辑,告诉你当前处于哪种转换状态。 比如,它会告诉你某个函数是否无需转换,或者因为某种原因无法转换,或者是成功转换了。 理解这四种情况非常重要,它能帮你预判转换过程中可能出现的问题。如果转换失败,日制会给出具体的错误信息,比如某个函数的参数在两个平台上有差异,或者某个模块在目标平台不存在等等。 这时候你就需要根据这些信息回到你的 j q q 的 编拍中进行针对性的修改。可能是替换函数,也可能是调整参数,甚至是重构一部分代码 修改完成后,再次运行转换脚本,直到日制显示转换成功,没有报错为止。 这个过程可能需要几次迭代,耐心和细致是关键,代码转换成功了,是不是就可以高枕无忧了?当然不是, 理论上的完美转换还需要在实战环境中验证,这一步就是在 ptr 的 平台新建一个策略项目,把刚刚转换得到的 ptr jq code d 派文件里的代码复制进去, 然后设置好回测参数,比如你想用哪段时间的历史数据进行回测,回测周期是多久,出使资金是多少等等。 点击运行回测,这就像给你的策略做一次真金不怕火炼的考验,回测结果会告诉你策略在历史数据上的表现,包括收益回测、下扑比例等等关键指标。 如果回测过程中出现报错,那就说明转换过程中可能还有遗漏,或者原始策略本身存在一些依赖特定平台环境的问题。这时候就需要根据报错信息回到代码中进行调试,直到回测能够顺利跑通,并且结果符合预期。 只有通过了回测的检验,我们才能对策略的可信更有信心。最后一步也是最关键的一步,就是将经过严格回测验证的策略正式部署到实盘交易环境中。 在 ptr 的 交易界面创建一个新的交易任务,选择你之前调试好的那个策略,然后根据你的交易需求配置好相关的那个策略,然后根据你的交易需求风控设置等等, 一切确认无误后,点击启动交易。至此,你的策略就正式开始在真实的市场中运行了。 当然,从回测到实盘市场环境,流动性、滑点等因素都会发生变化,所以即使回测表现良好,也需要在实盘初期密切关注策略的表现,并做好风险管理。 希望今天的分享能帮助大家顺利完成代码转换,让你们的策略在新的平台上大放异彩。
粉丝7333获赞1.2万

我们小白想要做量化交易,不会写代码怎么办?今天给大家介绍的工具呢,它更简单,不用投喂 a p a 文档,直接告诉他你的思路,他就可以给你生成一个可以运行的代码。欢 迎来到蜀黍财经,今天我发现了一个 e z kunt a a 写代码的工具,这个工具呢,支持我们国金的 p c t 呃 q m t 迷你 q m t 巨宽等等的平台。它的代码 比如我们让他生成一个双均线策略,要求呢,覆盖全市场的一个股票,每次买入五万块钱,然后最多我们持仓二十只股票。 工具呢,他会自己理解我们的一个策略思路,等他生成好了代码,我们就直接复制粘贴到匹配的里面进行测试,好设置好回测参数,代码就可以自动运行,并且有详细的回测概数。 需要注意的是, ai 生成的代码请不要直接用于实盘交易,我们还需要对策略进行一些打磨。如果你也有好的炒股思路,欢迎评论区交流。

大家好,我是 python 亮化交易的老湾,我们这一系列是介绍亮化交易平台,首先要介绍的是巨关,这个是大家比较熟悉的一个亮化交易平台, 我们怎么评价这个巨宽呢?先用一个六角形的一个评估图来看一下这个巨宽在各方面的能力是怎么样子,包括你需不需要编程能力,或者是你需不需要下载这个软件,还有如果你要做实盘的话,巨宽能不能符合你实盘的需求, 做量化交易肯定需要数据的支持。巨宽的数据能力是怎么样子,我们待会看一下。另外我们也会了解一下 客服的社群,他的知识度丰富丰富,如果有个社群或者是一个聊天群的话,跟不同的量化交易的朋友在交流上,不管策略或者是编辑环境上都能够得到比较大的支持。另外的话就是巨宽的交易品种有哪些,我们从这几个维度来评估一下巨宽他 的丰富度是怎么样子。我得先介绍一下巨宽的数据啊,巨宽的数据接口是非常丰富的,从股票上面的数据接口包括了财务数据或是 k 线,或者是从网面的数据, 这些个股方面的数据是非常丰富的。另外是有板块方面的数据,总可以找出不同板块的股票,你在做一些策交易策略的时候,这些数据能够支持你。那另外就是宏观的数据,还有指数上方面的数据。那如果你要做一些交易品种是齐货或者是齐全的话,或者是基金, 场内基金或者场外基金,这些都是很丰富。另外他有提供你的因子库,我们看一下他的数据库,我们看他的因子,他有提供各种指标,那指标是你直接可以去使用的财务指标或者是技术指标点进行一些回测,你可以知道这些数据他的分布情况是怎么样子,所以你对这些数据指标会比较有感觉。 巨宽的边形环境来看的话,我们先看一下之前在拍摄的边形环境这方面,因为我之前用的巨宽会比较多一点,所以巨宽 是我课堂的一个教学课程,他有分成旧环境啊。另外一个是回测环境,我们先看一下研究环境,研究环境是你在学习一些接口,或者想要测试一些数据 都是直接可以使用的,那是我在课堂上我自己的拍的电话交易课堂上面的一个范本,这是一个完整的 k 完整的策略代码。怎么去写成一个完整策略代码?因为他有数据接口,还有一些测试的 下单接口,所以你可以慢慢的写出一个比较完整的电话交易交易代码。如果你写成了一个电话交易代码的话,你可以在回测环境里面策略列表里面去运行一下策略环境,你可以每天可以回测一个小时,但如果你是跑个 呃一个月,两个月还行,但如果你跑个一年的话,一个小时真的是不够用。所以呢,这个同学在使用免费上,或者是你要买他的回测时间数,那大家可以考虑一下,如果你是真的要深入挖掘使用这些数据的话,要买他的会员,如果你只是想测试一下或者是学习的话, 拍拍审在句宽上面大概熟悉一下回车环境,学习好之后呢,再去找可以支持实盘的,不管是 p 出来 q and d 或者一串句宽 或者是绝经这些都可以实盘,而且它的数据你可以回测的时间会比较久一点,所以这是搭配使用的。这款对于基础的新手同学来说是非常友善。我们看一下社区支持,这是我觉得它比较特别的一个点了, 因为最快已经很久了,所以上面会有很多策略分享,可以在学习环境上面的话,同学可以再看看这些策略,看一下范例和他的社区里面有一些教学文章 些都有些犯例,或者是跟你解释这些策略的构成原因或怎么编写。但这个对于一般的新同学来说,如果你没有一些量化背景,或者不知道什么是编写一些策略,或者是你不知道怎么构建一些音质的话,这些参考 文档或者策略都是很很充足的。对于学习电话教育的同学来说,这个社群的支持率都是相当大的。 那我们再看一下他实盘部分,我要开巨宽的实盘的话要跟第一创业合作,不过第一创业我自己有开过,因为 巨宽跟低创业的巨宽其实是完全不同的版本。在巨宽上面,如果你有写一些回测策略,你要搬到一创巨宽上面是存在问题的,你要需要改写,所以在实盘的实用性上面,我个人觉得是有些难度的。下载安装部分,这是我对一些新手同学会比较建议去评估的。一点是因为巨宽他是直接在网页上 上面编辑的,所以你在任何时候,你只要笔记本甚至手机一开,你就可以去编写你的策略或者是回测。这样的电话交易软件的话,通常是要安装软件的,在一些软件上面进行拍摄,首先呢,你得下载那个安装软件,这个 网页上面编辑,对一般同学来说要接触拍摄量化交易使用,使用性是比较高的,你在任何一个网页都可以开了,你也不用去找任何的链接,因为很多同学会跟我要一些 petra qmt 的下载链接,不是不给,是因为没有账号, 这个巨宽就很完美的解决这个问题。我们回到这个六边形的评估表里面来看,首先是关于评估能力部分,我个人给他的是三颗星,因为编程能力这个是其实是一刀两面, 如果你的编程能力要求的越低,通常你的策略能够写的复杂程度就越低,所以呢,三颗星一方面是他能够提供的, 对于新手同学来说,对你的编程能力是有一定的要求,你必须会懂拍摄,但是他没有办法写太复杂的策略,这是对于班 编程量化交易来说,那是长板,一般也是短板。下载安装的部分,因为他是在网页上运行的,所以我个人给他最高分是五颗星,你任何一个网页上开了就行,他就可以支持你在网页上运行编写或者是回撤。 关于实盘交通开通部分,因为他目前只有跟一家券商在配合,我自己试用过的话,可能有一些呃弯路或者坑要走的,所以我个人会给他比较低的是一颗星的部分, 坏事数据的知识部分,我给他是五颗星,因为数据他是非常丰富,而且最重要是他是免费的,如果你脱离这个平台,自己要构建这么大的数据库的话,一方面你可能要去买,花钱去买,这方面你可能自己要去学爬虫。用数据这个接口来说,我想去宽 给的是非常充分的。那社群服务方面,我个人给他四颗心,因为在社群讨论上或者策略分享上面,他是非常丰富,积累这么多年的,而且他自己已经成立了私募团队, 这群的支持力度是相当大的,唯一的可惜度是五,他是没有 qq 群或者是微信群里,没办法在群里面跟同学去讨论,这是他唯一的短板。教育品种的部分,因为股票起货齐全, 一方面对于一般同学来说是够的,但是如果你要做比较其他的,加上他的实盘部分是不充分支持,你可以去交进交易的,所以在实盘部分给他扣一些分,所以我们总分来看的话, 他的长板是对于你下载安装或者是数据支持来说,或者是你要学习一些策略来说,这是非常友善。那这个角度是从 新同学接触量化交易来说是这样评论,那如果说你本身就已经很熟悉,或者甚至已经开实盘交易的话,对于自己的评估需求了还是最重要核心。那我们今天的巨宽先介绍这边,如果你喜欢我的视频的话,投币点赞加关注一件三点,下次见喽,拜拜。

给大家分享一巨宽一位用户分享的策略,那我回测了一下他二零二二年的回测收益非常非常的高,那么 我目前呢?还是没有时间去看,原码就是说,但是我估计他是有一些未来函数在里面,但是在基于这个策略,我可以把他的信号之后去看看他的年华到底有没有 真的那么高,因为他的年华回测出来,真的回测下来真的很夸张,有三百分之三千多,我靠,绝了。

hello, 大家好,最近有朋友来向我咨询,说有没有办法可以将某宽上面的策略无痛转移到 qm t 上面?当然是可以的呀,我们刚完成了重磅升级,整个流程大简化,今天就用几分钟时间带你抓住核心要点, 看完你就知道到底有多简单了。第一步,咱们需要先搞定中转站,注册我们优化好的网站之后,关键就一个文件,在巨宽研究环境里上传它。最后咱们怎么验证呢?去中转站我的记录页面看, 你需要注意,新账号是空的,但是只要等策略一跑起来,进度就会出来了。接下来我们再来看看编辑策略回测,可以通过已有的策略或新建策略进行操作,新建策略会生成默认的策略模式,默认策略特性。 新建时系统自动生成的策略包含了基础框架代码,可直接在此基础上进行修改,然后咱们再进行策略的基础配置即可。当然我们也需要看看回测验证。 首先执行方式,点击编辑编辑运行,进行快速回测,然后点击运行回测进行详细的回测,检验结果如果是曲线波动的话,有波动表表示存在买卖交易 直线的话,就表示无任何交易发生。确认是否输出函数、运行时间等关键日期信息。交易记录验证是否存在有效的订单发送记录,最重要的是要看数据有没有上传至我们的中转站,成功的话,中转站会收到一个带用户名 票代码还有买卖数量的数据包, qm t 就是 通过捕取这个数据来交易的。以上咱就是咱们要在某宽端上做的几个核心目的就是把数据通道打空, 接下来我将手把手带大家完成导入设置,并让策略真正的跑起来。我们来到 qm t 客户端,完成最后的落地,让策略跑起来。第一步,在 qm t 里面导入策略,把你改好的策略文件放到电脑指定的位置,打开 qm t, 进入模型研究,选择策略,点击导入策略, 找到你的文件就可以丢进去了。第二步,设置核心参数,基本设置账户类型,选择股票账户运行周期一定要选分笔线,记得勾上启动后自动运行。点击进去过后有更加具体的使用,我们接下来继续看交易参数设置。一般开始时间是默认的九点半,结束时间一般是默认的下午三点,因为超过时间不会运行。 设置好这些基础操作后,我们就可以来看看模拟交易测试。先模拟加载策略,选好账号和分笔线运行,模拟交易会出现信号,但不会真正的下单,因为这是用来验证逻辑的。 在实盘咱们确认无误后切换到实盘模式,这时候的委托就是真实的,会形成实际的时差显示的。由于是晚上,所以说不在交易的时间内,所以说相当于我们这里是下了一个隔夜交易单。然后这里有一个关键细节, 策略里设置的数量可能是金额,比如说五千元,也可能是股数,比如说两百股,一定要根据你的策略的意思来进行确认,不然仓位就会出错。而本期视频我们就把从某宽到 qmt 上面迁移的主干流程已经跑通了,因为平台时常限制 很多具体操作细节,比如说是文件具体放在哪里啊,参数怎么设置,然后模拟和实盘怎么精准的切换都没发详细的展开来讲。如果你在操作中遇到任何的问题,或者是想要了解整个操作流程,可以发 q m t 迁移给我,我会提供更加具体的指导,拜拜。

我们直接来看巨宽 a p i 的 核心价值,它就像量化交易的瑞士军刀,提供了从数据获取、策略编写到订单执行的全套工具。掌握它就是掌握了在巨宽平台上进行量化投资的关键。 要开始你的量化之旅,首先得了解策略的基本股价。 initialize 函数是你的起跑线,用来设定初始状态,比如选哪些股票,设定基准等。 handle data 则是核心战场,这里是你根据市场数据做出买卖决策的地方。 当然还有 run daily, run weekly 这些定时器,让你的策略能按计划执行。别忘了 before trading start 和 after trading end, 它们分别在交易日开盘前和收盘后运行,适合做些准备或收尾工作 来看。第一个例子非常简单,但结构完整。 initializedly 定义了我们要操作的股票,平安银行,然后用 run daily 每天调用 market open 函数, 这个 market open 函数检查我们是否持有该股票,没有就买入一千股,有就卖出八百股。注意,这只是个掩饰,实际交易中这种无脑操作是不可取的,因为它没有基于任何有效的市场分析。 现在来看一个稍微实用点的策略,这个策略的核心思想是,如果一只股票的价格相对于它的五日均线表现强势,我们就买入, 如果表现疲软,我们就卖出。这背后体现了趋势跟踪的思想,关键在于我们不再凭空交易,而是基于历史价格数据 m a 五均线来做判断。 这里就要用到 attribute history 里函数来获取过去五天的收盘价数据。我们来拆解一下这段代码 初步划部分,除了设置股票和运行函数,还用了 set benchmark 设定沪深三百作为业绩基准。 set ups use real price true 是 为了使用动态赋权的真实价格,更贴近实际交易。 在 market open 函数里,先用 attribute history 获取过去五天的收盘价, close data 计算出五日均线 m a 五和上一时间点的收盘价。 current price 接着判断,如果当前价高于均线百分之一,就用全部现金 order value 买入。 如果低于均线且有持仓,就卖出至零股 order target 最后用 log 点 info 记录交易信息, record 记录价格,用于绘图。 再聚焦一下 initialize 函数,它是整个策略生命周期的开端,只会在回测或模拟开始时执行一次。它的主要任务就是做些一次性设置。你看,我们在这里定义了一个局变量 j security 来指定目标股票, 还可以设置业绩基准,比如用 set benchmark 指定沪深三百指数,这样回测结果就能和大盘对比了。 set option 可以 调整一些运行选项,比如 use real price 开启动态赋权,让价格更真实。这些都是在策略启动初期就定好的规矩。 策略不能一直被动等待,很多时候我们需要他在特定时间点主动干活。这就是定时运行函数的作用。 run monthly, run weekly, run daily 这三兄弟就是干这个的。 你可以指定他们在每月的某一天,每周的某一天,或者每天的某个时间点去执行你定义好的函数。 比如你想在每个月的第一个交易日开盘后一小时执行某个操作,就可以用 run monthly, 并指定 month day 等于一和 time 等于 open 加 e h 十 m, 灵活性很高,可以精确控制策略的执行节奏。我们具体看看这几个定时函数的参数。 第一个 fly 很 简单,就是你要执行的那个函数名,记得这个函数必须接受 context 参数。对于 run monthly, monthly 就是 指定月份的第几天,比如 e 表示每月第一天,负一表示每月最后一天。 wrong weekly 同理, weekday 指定周几。 time 参数非常灵活,既可以是具体的时间自复串,比如十点,也可以是预设的关键字,比如 open 或 close, 甚至可以用偏移表达式, 比如 open 减三十 m, 表示开盘前三十分钟。最后一个 reference security 很 重要,特别是当你同时交易股票和期货时,它决定了你的时间参照物是哪个市场的交易时间。 time 参数的灵活性值得再强调一下,除了直接写时间,比如十点,还有很多方便的预设值。 every bar 只能在 run daily 里用表示按数据频率执行。按天就是每天开盘,按分钟就是每分钟都执行。 open, before open, after close 分 别对应开盘早盘、收盘后的固定时间点。 morning 和 night 则是更宽泛的上午和晚上。最强大的是偏移表达式,比如 open 减三十 m 就是 在开盘前三十分钟执行。 close 加 e h 三十 m 是 收盘后一点五小时执行。 注意,这里的 base 只能是 open 或 close, 不 能是其他时间。 reference security 这个参数容易被忽略,但对跨市场交易直观重要。它告诉系统你定义的那个时间,比如 open 是 相对于哪个市场的交易时间来说的。 如果你只交易股票,通常可以不指定系统默认按股票市场九点三十分到十五点的时间。 但如果你要交易期货,就必须指定,比如参照 i f 一 五一二 c c f x, 系统就会知道你的 open 是 指股指期货的开盘时间。 对于有夜盘的商品期货,比如 a 九千九百九十九 x d c e, 它会按照商品期货的交易时间二十一点开始来执行。选对参照物才能确保你的定时任务。在正确的时刻触发 handle data 函数可以说是策略的心脏,无论你选择按天还是按分钟回测,这个函数都会在每个时间单位结束时被调用一次。 它的作用就是根据最新的市场数据 data 和当前的账户状态 context 决定是否以及如何下单。 data 参数是个字典,里面包含了上一个时间单位所有你关注的股票的数据。但要注意, data 是 懒加载的,只有当你访问 data security 时,对应的数据才会被真正获取。 而且这个 data 只对当前这个时间点有效,不能保存到下一个 handle data 周期。在用。如果你想获取当天的开盘价等即时信息,需要用 get current data 函数。 除了 handle data, 还有一个重要的函数是 before trading start。 顾名思义,它在一天的交易正式开始之前被调用一次。官方文档提到,对于股票来说,这个函数大约在九点二十左右出发。 你可以在这里做一些每日的准备工作,比如更新一些需要每日刷新的数据,或者进行一些每日的初步设置。 不过要注意,对于期货交易,由于其特殊的交易时段,官方建议还是使用 run daily 或 run weekly, 并将 time 设为 before open 来实现类似的功能,以获得更好的兼容性。 与 before trading start 相对应的是 after trading and 函数,它在一天的交易结束后被调用,大约在下午三点十分左右。 同样,对于股票交易,这是个不错的收盘后处理时机。但和 before trading start 一 样,对于期货,官方也推荐使用 run daily 或 run weekly 配合 after close 参数。 需要注意的是,当这个函数被调用时,所有在当天交易中未完成的订单已经被系统自动取消了, 所以这里适合做一些收盘后的总结或数据清理工作。 process initialize 这个函数比较特殊,它是在每次模拟盘或回测进程重启时执行的,而且是在 initialize 之后。 它的主要用途是促使化那些无法持久化保存的内容。比如,有些查询对象 query 可能无法被序列化,每次进程重启都需要重新创建。 另外,如果你定义了一些以双下划线开头的变量,比如 g q 巨宽的序列化机制会忽略它们,这也适合在这里重新出使化。因为模拟盘每天都会重启,所以 process initialize 也会每天被执行一次。 on strategy and 函数提供了一个在策略正常结束时执行回调的机会。无论是回测结束还是模拟交易到期自然结束,只要过程是正常的,这个函数就会被调用。 但是,如果你手动提前终止了模拟交易,那么这个函数就不会被触发。它的作用可能包括一些最终的报告生成或者资源释放等收尾工作。记住,只有成功完成使命的策略才能触发这个结束的仪式。 最后介绍一个 after code change 的 函数。这个函数的触发场景比较特殊,当模拟盘在第二天恢复运行时,如果发现你修改了策略代码,就会执行这个函数。 一个潜在的用途是,你可以利用这个机会来重置或更新一些仅在模拟盘中需要的临时数据。不过要注意,即使在回测过程中,这个函数也会被执行一次,实际是在 process initialize 之后。 所以设计时要考虑到这一点。写好策略只是第一步,验证它的有效期才是关键。 这就是回测引擎的作用。巨宽的回测环境基于 python 二点七,所以大家的策略代码需要兼容这个版本。好消息是,它支持大量的 python 标准库和一些常用的第三方库,具体列表可以查阅官方文档。 如果你有自己的工具库,也可以放在研究目录下,回测时直接 import 就 行。当然,为了平台的安全,策略的运行是受到一定限制的,比如不能随意写文件、创建进程等。这些我们后面会讲到 回测具体是怎么进行的呢?大致流程是这样的,首先你准备好策略,选好股票池,实现了核心的 handle data 函数, 然后设置好回测的参数,比如从哪天到哪天,出示资金多少,是按天还是按分钟调仓。 接着引擎就开始工作了,它会根据你的设置获取历史数据,然后一天一天或者一分钟一分钟地调用你的 handle data 函数。 在 hando data 里,你可以根据 data 提供的历史数据做出决策并下单。下单后,引擎会根据实际的历史成交情况处理你的订单。你可以用 req 函数记录一些关键数据,回测结果页面会自动生成图标, 整个过程都会输出日制,方便你调试。最后回测结束,你会得到详细的收益曲线、风险指标等分析报告。量化分析离不开高质量的数据, 巨宽在这方面提供了非常丰富的资源。股票方面,覆盖了 a 股上市公司从二零零五年至今的行情、市值、财务、基本面、融资融券等数据,甚至还包括了已经退市的股票,避免了幸存者偏差。 基金数据也很全面,包括 e、 t、 f、 l、 f 分 级基金、货币基金等。金融期货、股票指数、行业板块、概念板块的数据一应俱全,甚至能查到历史的指数、成分股,还有宏观数据 支持。所有行情数据都处理好了,钱付权方便直接使用,不过要注意,当日的回测数据都处理好了,钱付权方便直接使用,不过要注意!当日的回测。数据都处理好了,钱付权方便直接使用,不过要注意,当日的回测数据需要等到第二天 t 加一才能更新。 策略的安全性是重中之重,巨宽采取了多层次的安全措施,网站访问全程 http 加密。你的策略代码在数据库里是加密存储的, 最关键的是,每个用户的策略都在一个独立且高度受限的进程中运行,这就是所谓的进程隔离。 在这个沙箱里,你的代码不能随便读写文件,不能创建新的进程或现成。 cpu 和内存使用也受到限制。网络访问宽带也被限制了。 handle data 函数如果执行超时超过三十分钟,会被强制停止数据读取和结果输出,通过专门的辅助进程完成,两者之间用管道通信进一步隔离风险。 底层还用了 linux 的 apollo 技术加强防护。可以说,你的策略在一个相对安全的环境中运行。 策略的执行频率,也就是 handle data 函数被调用的频率是另一个重要考量,这直接关系到你的交易速度和策略类型。最基本的单位是 bar, 也就是 k 线。 一分钟内的交易数据汇聚成一根分钟罢。一天内的分钟数据汇聚成一根日线罢。你可以选择按天频率运行策略,即每天 handle data 运行一次,对应日线罢。 也可以选择按分钟频率,即每分钟 handle data 运行一次,对应分钟罢。目前 take 频率主要是在模拟交易中可用,意味着几乎实时地响应市场变化。 这几张图能帮助大家直观理解不同频率下的运行方式。左边这张是天频率,可以看到 handle data 齿轮图标在每个日线罢的末端运行一次。 中间这张是分钟频率齿轮图标,在每个分钟 bar 的 末端运行。右边这张是 tick 频率示意图,理论上是每个 tick 点都可能触发一次 handle data。 当然,实际应用中要考虑性能和策略复杂度, 选择哪种频率取决于你的策略逻辑和交易需求。下单之后,系统是如何处理这些订单的呢?在回测中,撮合逻辑是基于半的。 对于试价单,规则大致是如果最新价加上滑点,在涨跌停板范围内就按规则撮合,否则就撤销具体交易价格。按天回测是按开盘价加滑点,按分钟回测是按上一分钟的最后一个价格加滑点 还有一个重要的限制是 order volume ratio 默认是零点二五,意思是每次下单的成交量不会超过该股票当天总成交量的百分之二十五。 所有试驾单的处理是同步完成的,也就是说,当你调用 order 函数返回时, context portfolio 中的持仓就已经更新了。 今天我们深入探讨了巨宽 a p i 的 核心功能,从策略的基本结构、函数讲解到回测流程、数据支持和安全保障 掌握这些是进行量化交易的基础。希望这些内容能帮助大家更好地利用巨宽平台进行策略开发和验证。 量化之路漫漫, a p i 只是工具,持续学习和实践才是关键。

大家好,我是杜川,普通散户如何零门槛研究量化?我觉得核心其实就三件事,稳定、免费的数据电路、尽可能顺手的交易接口,以及一个真正属于我们自己 开原版本的强大回测系统。今天我想带大家看一看我自研的这套杜川量化回测平台,看看他是怎么把原本复杂的量化回测流程尽量做的简单直观、触手可及的。那回测到底是什么呢? 简单来说,就是让大家的交易策略在过去的历史数据里完整跑一遍,看看他在当时的市场环境下到底会有怎样的表现。回测最关键的作用就是在投入真金白银之前, 先对策略做一次严格的压力测试,他能帮大家把收益和风险量化出来, 找到策略的优点和问题,这也是后续迭代优化的必经之路。整个系统我主要把它分成四个核心部分,主界面、数据工具、回测报告以及后续的参数优化、因子归音分析、 pbo 和 isos 防过逆核测试。优化好的策略还能继续入库做策略矩阵和批量跟踪。首先是主界面,它是所有操作的指挥中心, 整个流程的起点都在这里,大家可以在这里完成从回测参数、股票池到策略触发方式的全部配置, 也能定义盘前盘后的触发任务。这背后其实是我以配置为中心的设计思路。 负责的量化研究很容易陷入脚本混乱、参数不明、结果无法复现的困境。所以我希望把每一次回测都定义成一项严谨的工程, 配置文件里会把策略参数、出发规则、本金和回测条件尽量固化在一起, 确保每一次实验都有序、严谨、精准、可复现。第二个是数据工具,这是回测所需数据的来源,也是很多普通散户最容易卡壳的地方。系统内置了数据下载功能,我这边也会免费提供数据下载服务, 先把最麻烦的数据门槛尽量降下来。常用的 a 股研究数据基本都能统一纳入系统, 包括日线分中线、开盘集合、竞价、股票列表、 etf 信息、指数成分、交易入利,还有板块概念、资金流向、热点、鱼情财务数据、特殊事件等内容。 底层用本地 da 科 db 做存储,任意数据都能导出成 csb 文件,方便大家做二次开发、跨平台研究, 或是给外部模型训练使用。像 q m t 这类依赖券商服务的链路,周末或节假日易维护,回测和数据下载就容易受影响。但本地数据底座不一样, 只要数据已经存在大家自己的电脑里,基本能七成二十四小时随时可用,不受这个限制。我自己一直很在意安全感。很多人做量化,最怕的不是不会做,而是策略。数据研究过程都放在别人那里, 一旦机口停了,服务变了,整个研究链路就断了。所以我更希望把数据底座做成本地化、私有化, 让大家的数据尽量留在自己的电脑里,研究起来更可控,也更安心。而且这套系统已经有开源版本,大家不仅能用,还能看到他的实现逻辑,甚至能按自己的想法继续修改。 第三个是回测报告,他是策略表现的量化总结,特点就是信息尽量全面,而且尽可能可交互。他不只是给一条收益曲线就结束, 而是会把交易明细每日汇总,跳过,记录策略信号,记录资金曲线、最大回撤、 每日盈亏和买卖点尽量整合到一个完整的视角里。微测引擎也是专门按照 a 股真实交易环境设计的,像连续一字板、涨跌停、无法买卖、延迟卖出这些情况,系统都会按更真实的规则去处理, 所有细节尽量摆在明面上,尽量减少黑箱操作,多还原真实交易场景。在业绩分析这块系统里有十七项核心绩效指标和七维雷达评分、年化收益、最大回撤、下浮比例, 这些关键指标都会清晰呈现,同时还有收益分布图、阅读热力图、月内周次表现、星期几表现、节假日前后表现、策略画像、行业归因、事件驱动、 因子分析等多个维度。目的不是只告诉大家这个策略赚没赚钱,而是让大家尽快从感觉还行转变为我清楚它的表现规律。好了,对整体架构有了基本了解之后,我们直接进入实战。 比如一个 macd 金叉策略,大家既可以用系统内置的 ai 一 键生成, 也能对接巨宽通达、信果人网,甚至自己整理好的策略数据。只要数据里包含买入时间和股票代码,都能直接接入这个平台继续验证,后续点击执行选股,开始回测。 从回测周期、股票池、触发时机、出市资金到可市化报表和多维切面统计, 系统会尽量把整条链路串联起来,一步到位。如果大家还想进一步深入,系统也支持参数优化和网格搜索,买入和卖出的关键参数都能系统化调整。 这里面不只是简单扫描一遍参数,还会配合 i s o o s 时间切分验证和 p p o 过你和检测。 说白了,他不是只帮大家找一个看起来最漂亮的数字,而是尽量帮大家避开那个好看却不实用的数字陷阱。 优化好的策略,还能继续入库做策略矩阵和批量跟踪,不是跑一次就结束,能持续迭代优化这部分其实也是我花时间最多的模块之一, 因为我一直想做的,就是让我们这些普通散户也能真正拥有一个入门接触、探索量化的入口。从数据库的选择、本地 dkdb 数据底座、 免费数据下载服务,到专门针对 a 股交易规则的回测引擎,再到参数优化和防过你核,我确实是一路硬啃过来的。我自己前后花了四百多天,从零开始一点点把这套系统搭建起来。 可当系统真正跑起来以后,我感受到的不只是兴奋,更多的是一种深深的无力感。因为我曾经也真的相信,只要一个策略足够好,只要自己能足够严格的按纪律执行, 一年赚十几倍不是没可能,靠策略快速翻身也不是吗?可当我开始用它反复验证那些我曾经特别看好的策略,甚至一些别人宣称年化百分之九十以上的策略时,结果往往很残忍。 很多我以前觉得很好的策略,拉长到几年来看,也只是跑赢大盘而已。有些听起来特别夸张的策略, 真正回测下来年化甚至是负数,真正长期稳定可复制还能持攀执行的策略,往往不可能每个指标都完美年化特别高,通常意味着要在其他地方付出代价。 而那种长期高年化回撤幼小胜率和下扑比例还都特别漂亮的结果,在现实里其实极其罕见。所以我现在再看到那种各项指标都特别漂亮的策略,第一反应已经不是兴奋, 而是先怀疑他到底有没有经过真正的验证。这种无力感不是因为系统白做了,也不是因为努力没有意义,而是我们终于看清了一件事, 单靠一个好策略,并不能轻轻松松带我们翻身致富。这不是悲观,也不是放弃,而是退去幻想之后的清醒。所以这套系统对我来说,意义从来不只是找一个能赚钱的公式, 而是让人更客观的看待市场,也更客观的看待自己的想法。大家会慢慢明白,量化不是魔术,不是许愿,也不是黑箱,他更像是一套寄语, 一套科学的验证方法。最后说一下这套系统更适合哪些人,他更适合那些想建立自己交易体系,而不是永远跟着别人操作的人。 适合那些愿意用历史数据验证想法,而不是只凭感觉下判断的人。适合能接受日线级别低频交易节奏的人。适合追求稳定可复制收益,而不是沉迷一年十倍神话的人。尤其适合那种比起赚了多少 更在意最多会亏多少的人,因为只有先活下来,才有下一次盈利的机会。当然,他可能不太适合天天都想交易, 一天不看盘就难受的人,也不太适合情绪一上来就忍不住动手的人,更不适合刚跑几天回测就不断修改参数,永远不愿意等待策略周期的人。 量化从来就不是魔术,而是纪律。如果大家也不想再靠感觉做决定,而是想把自己的交易想法真正放到历史数据里认真验证一次, 那这套系统也许就是大家一直在找的东西。

量化交易者在策略迁移时经常面临这样的困境,巨宽平台策略写好了,想转到 ptr 的 平台运行,但两个平台 a p i 相似,但不完全相同,手动修改容易出错,转换后代码运行报错不知道哪里有问题, 这不仅浪费时间,还可能影响策略的及时部署和验证。要解决这个问题,我们得先搞清楚这两个平台到底有哪些关键差异。 就像不同国家的语言,虽然有相似之处,但语法词汇还是有讲究,主要集中在几个方面,定时任务怎么设置、全局变量怎么存取股票代码怎么表示、 获取数据用什么函数,这些细微差别累积起来就是迁移的拦路虎。先看定时函数,这是个大坑,巨宽提供了 run daily, run weekly, run monthly 用起来挺方便, 但在 patreon 里, run weekly 和 run monthly 直接不支持,这意味着什么,你得自己想办法。通常就是用 run daily, 再加上判断今天是不是周一或一号的逻辑去模拟。 而且就算 run daily, 参数顺序也变了,必须把 context 放在第一个位置,还有那个 reference security 参数, patreon 根本不认识。 这一下写好的定时任务,逻辑就得大改。再来看大局变量,这个相对简单点,但也得注意括宽习惯用 g 开头,比如 g doc num 等于十。 到了 p trade, 规矩变了,得用 context 开头,也就是 context stock num 等于十。 定义访问判断是否存在,都得把 g 换成 contacts。 这就像给你的变量换个名字,虽然只是前缀变了,但不改的话,程序肯定跑不起来。 证券代码的后缀也是一个明显的区别,巨宽用 x s h g 代表上海股票, x s h e 代表深圳股票,而 p trade 用的是更常见的 s, s 和 z。 这个转换还算直接,就是把后缀换掉就行。不过,如果你的代码里硬编码了很多股票代码,或者通过某些方式动态生成了列表,那就得确保所有地方都改对了。 数据获取方面也有差异,比如获取所有股票列表,巨宽用 get a shares。 注意看 api 名字都不一样。更麻烦的是,传入日期参数时,巨宽接受 date time date 对 象,而 p trade 只认 y y y y 年 m m 月 d d 这样的自复串格式。 这意味着你原来代码里可能直接用了 date time 模块生成的日期对象,到了 p trade 就 得先转换成自复串才行。 最后是模块导入。巨宽生态里有很多方便的工具,比如 jq data 或者 jq factor, 但在拍锤的环境下,这些可能不可用,或者需要不同的导入方式。 好消息是,我们的转换器会自动处理这些差异,尽量保证你能用上类似功能的替代品,或者帮你调整导入语句,减少这部分的麻烦。了解了这些痛点和差异,我们来看看这个转换器是怎么工作的。 它就像一个智能翻译官,专门负责把巨宽的代码翻译成 pad try 的 能懂的语言。它的核心功能就是针对刚才提到的那些差异进行自动化、智能化的转换。 第一个核心功能就是处理定时函数。你看左边巨宽的代码用了 run daily, run weekly, run monthly 还带了 reference security, 右边是转换后的结果, run weekly 和 run monthly 被替换成了 run daily, 然后在对应的函数 weekly adjustment 和 monthly adjust 里面加了 if 判断,检查是不是目标星期或日期,如果不是就直接 readton, 相当于实现了原来的功能。 同时 run daily 的 参数也调整了,加上了 context reference security, 这个参数直接被移除了,因为它在 patreon 里无效。 这样一套组合拳下来,就把复杂的定时逻辑给捋顺了。第二个功能,全局变量替换, 这个很简单粗暴,就是把代码里所有的 g 前缀换成 context 前缀,比如 g stock num 就 变成 context stock num。 转换器会用正则表达式扫描整个代码,找到所有匹配 g 的 地方,然后替换成 context 变量名本身保持不变,这样你原来的变量逻辑就不用动了,只是换个加而已。第三个,证券代码后缀转换,这个也很直接,就是字母串替换, 把代码里出现的 x, s h, g 全换成 s s s, 把 x s h e 全换成 z。 如果你的代码里直接写了很多股票代码,或者通过列表、自付串拼接等方式生成,转换器都会帮你处理到位。 这个算是比较机械的操作,但也是必不可少的一步。第四个,日期格式智能转换, 这个稍微复杂一点,还记得吗? portrayed 的 get asher's 函数要求日期是 y y, y, y, m, m, d, d 字母串,而巨宽的 get all securities 可以 接受 date time date 对 象。 转换器会做两件事,第一,如果代码里用了 datam, dota 之类的,它会自动帮你 import datam。 第二,它会插入一个辅助函数,比如叫 format date, 这个函数的作用就是把任何类型的日期值,无论是 date 对 象还是其他,都安全地转换成 p trade 需要的 y y y d 格式自复串, 然后再调用 get a shares 的 时候,自动把这个函数包装一下,把日期参数传进去,这样你原来的日期计算逻辑基本不用改,转换器帮你搞定格式问题。 第五个功能, api 名称映射。这个也很直观,就是把巨宽的 api 函数名换成 pet 对 应的函数名,比如 get all securities, 就 变成 get a shares。 这个转换通常和前面的日期格式转换结合起来,像我们刚才看到的例子, get i shares, 不 仅名字变了,日期参数也通过 format date 函数进行了处理。 第六个也是个很有意思的功能,智能添加技术指标函数。我们知道巨宽内置了很多常用的技术指标,比如 macd、 rsi 等等, 但 ptr 的 平台可能没有直接提供这些函数。怎么办?我们的转换器很聪明,它会先扫描你的代码,看看你是不是真的用了这些指标。 如果用了,比如你写了 macd 零零零零零一 x s h 一, 那么转换器就会自动帮你把这段代码替换成一个自定义的实现函数。比如 get macd, 并且把完整的 macd 计算代码也一并添加到你的策略文件里, 而且它只添加你实际用到的指标函数,避免了无谓的代码膨胀,这大大简化了依赖外部库的处理。 说了这么多功能,实际效果怎么样呢?我们来看数据,这是对一个实际策略进行转换前后的对比,可以看到总行数从四百一十九行减少到了三百三十一行,减少了八十八行,降幅超过百分之二十。 特别是永瑜的辅助函数,从一百二十三行锐减到二十四行,足足少了百分之八十。 当然,注时行数有所增加,但这是为了保留并精练关键,说明让代码更清晰。总的来说,转换不仅准确,还带来了代码的优化。 再来看准确性,这张表展示了各项转换操作的准确率。定时函数、矩阵变量、代码后缀、日期格式这四项准确率都是百分之一百,说明这些基础转换非常可靠。 api 映设覆盖了常用 api, 准确率也达到了百分之九十五以上。就连智能检测并添加 data time 模块导入,准确率也是百分之一百。 这表明转换器在处理这些核心差异时是非常精准和值得信赖的。现在我们来做一个最直观的对比,手动转换 versus 自动转换器 耗时,手动可能要半小时到一小时,转换器只要三秒钟。准确性,手动容易出错。转换器百分之九十五以上调试次数,手动可能要反复调试好几次。转换器几乎不需要最多一次。 学习成本,手动你需要熟悉两个平台的 api 差异,转换器的学习成本为零。这对比简直是降维打击啊!对于专业人士来说,时间就是金钱,效率就是生命,转换器的价值不言而喻。 这么好用的工具怎么用呢?非常简单,推荐使用图形界面方法, 打开 mini q m t 的 扩展至 ui, 找到代码转换里的巨宽转批缀的选项,粘贴你的巨宽带码,选中推荐的那个统一转换器 v 三点四点一下转换按钮搞定。 如果你是开发者或者喜欢脚本化操作,也可以用第二种方法,直接调用 python 代码, 导入相应的转换器类,读取你的巨宽代码文件。创建转换器时历调用 convert 方法,最后保存输出的 ptr 的 代码文件。两种方式都极其便捷, 我们来看一个完整的转换视力。左边是原始的巨宽带码,包含了 initialize, get stock, list, weekly, adjustment 函数,使用了 g 变量、 run weekly, get all securities 等。 右边是转换后的批 print 代码,可以看到 g 变量变成了 context, wrong weekly 被改成了 wrong daily, 并在函数内加了星期检查。 get all securities 变成了 get a shares, 日期参数被 format date 处理了, x s, h, g 也变成了 s s, 整个转换过程清晰可见,逻辑保持一致,同时适应了批锤的要求。这个转换器之所以高效可靠,有几个技术亮点, 第一,它的规则不是拍脑袋想出来的,也不是完全照搬文档,而是基于在拍锤的平台上实际跑出来的结果验证过的,所以更靠谱。 第二,它很智能,不是一股脑把所有可能用到的辅助函数都塞给你,而是看你代码里到底用了哪些才按需添加,避免了代码臃肿。 第三,它支持多种策略类型,无论是纯回测、实盘还是混合策略都能处理。第四,如果你开启了 vbox 模式,它还会输出详细的转换报告,告诉你具体做了哪些替换和添加,让你心里有数。 当然,这个转换器也不是万能的,它最适合的场景是从巨宽迁移到 p trade, 特别是你的策略主要使用了巨宽的标准 api, 如果你追求快速转换,减少人工干预,它绝对是首选。 但是如果你的策略用了很多巨宽特有的高级 api, 或者 get fundamentals 里写了非常复杂的查询逻辑,或者依赖了一些 pe tree 的 平台可能没有的第三方自定义库,那么转换后可能还需要一些手动调整。 不过对于大多数标准策略来说,这个转换器已经能解决绝大多数问题了。总结一下,这个巨宽转帕瑞的转换器通过一套系统化的、经过实战验证的转换规则,能够智能地帮你完成策略迁移。 它精准识别、智能转换、自动优化,并且所有规则都基于真实平台运行。测试 最终目的就是让你这些专业人士能把更多精力放在策略的创新和优化上,而不是被平台迁移的繁琐细节所困扰。希望这个工具能给大家带来实实在在的帮助。

我们直接来看一个更硬核的案例,四,因子加权排名选股策略。这个策略的核心在于如何从巨宽迁移到批吹的,特别是处理那些复杂的因子数据获取。 先快速过一下这个策略本身。它是个经典的多因子模型,目标是全市场 a 股,但会剔除掉科创板、创业板、 st 和四新股这些相对特殊或风险较高的标的。核心是四个因子, roe t t m, 也就是净资产回报率越高越好,占百分之十五。权重 总市值越小越好,占百分之二十,收盘价越低越好,占百分之十五。以及现金流收入比衡量经营现金流与营收的关系越高越好,权重高达百分之五十。这最后一个因子权重最大,体现了对真实盈利能力的重视, 最终是把每个因子单独排名乘以权重求和,总分越低的股票越优。调仓节奏很明确,每天盘前更新列表,早盘执行交易,下午收盘前检查涨停情况。 好!现在来看,迁移的第一道坎,在巨宽里获取因子数据简直不要太方便,一横 get fetish 就 能搞定指定股票列表,因子列表截止日期返回一个包含所有股票所有因子数据的 dat 方。你看,代码简洁明了,效率极高。但是 到了 ptr 的 这边,你会发现没有对应的官方接口,这意味着什么?意味着我们不能简单的复制粘贴代码,必须另起炉灶,用 toshire 这个第三方库来从零开始搭建一套完整的因子获取体系。这可不是小事,挑战才刚刚开始, 我们尝试用 to 十二来替代,但很快发现 to 十二的因子数据分布很散,而且存在限制,比如总是值 market cap 在 daily bc 接口中可以批量获取没问题, 但是像 r o, e, t, t, m 和现金流收入比 cash rate of schuster 这两个关键因子,它们藏在 finn if niger 接口里,而且这个接口不支持批量查询。这意味着,如果你想用 toshar 获取这两个因子,你得一只股票一只股票的去查。 这下麻烦大了,因为巨宽那一行代码就能搞定的事情,现在变成了需要便利几千只股票的任务。显然,这不是简单的 api 替换能解决的。我们必须设计一个更复杂的数据获取框架。 第一个坑来了,而且是个非常隐蔽的坑。我们的转换器最初生成的代码格式转换成巨宽的格式。 你看, two share 的 six l cells 被转换成了 six, l, x, s, h, g, 但是 p trade 识别的是 s 和 s c 格式。 结果就是,当代码试图用巨宽格式的代码去匹配 p trade 系统里的股票时,完全对不上号。 最开始,我们用反算 r o e 的 方法从 del bis 获取了一千八百七十六只股票的数据,结果因为代码格式问题,这一千八百七六只股票的 r o e 数据全都没了,匹配结果是零只。 这简直让人抓狂。修复很简单,把那个转换函数改成直接输出 p trade 需要的 s, s 和 s z 格式就行了。 但这事告诉我们,代码格式转换这个看似不起眼的基础环节,如果出错了,会导致整个数据管线静默失败。没有任何报错,只是你的数据突然就没了。解决了代码格式问题,我们转向 finn 一 丁的这个接口。 理论上, toshares 允许通过 period 或 end date 参数进行批量查询,不用指定具体的股票代码。但我们实际测试发现,这几种批量方式全部失败, 有的提示访问频率过高,有的干脆说缺少必填参数次扣。究其原因,是 topher 不 同积分等级的用户权限不一样,有些账户压根就不让你用批量方式查询 finn e fender。 那 怎么办?只能退而求其次,阻止股票查询。 我们写了第一个版本的代码,对每一只股票都调用一次 finnahand, 结果呢?成功率只有可怜的百分之四十二,五百只股票只成功获取了二百幺二只的数据。为什么? 因为 two 十二的 api 有 隐性的限流机制,你连续快速的请求,它就会把你挡在外面。面对 two 十二的限流,我们不能坐以待毙。 于是我们设计了一个动态限频策略,核心思想是监测连续失败的次数,一旦连续失败达到一定预值,比如五次,就认为触发了限流,暂停一小段时间,比如二秒,让服务器的访问窗口重置。同时,我们还加入了重试机制, 第一次查询如果失败了记录下来,等主循环结束后,再对这些失败的股票进行第二轮查询。这时候可以使用更保守的间隔,比如零点二秒。 你看这个逻辑有点像打游戏遇到 boss, 连续攻击几次没效果,就得换个姿势,或者稍微等一下,再继续。通过这套动态限频加失败重试的组合权,最终的查询成功率从百分之四十二提升到了百分之八十二以上, 这大大提高了数据获取的稳定性和效率。当我们满怀希望地用逐枝查询 finn e dinger 获取数据时,又遇到了第三个坑。 我们发现返回的 data from 里竟然没有我们想要的 rotatum 列,这是怎么回事?原来 topher 的 不同积分等级提供字段也不一样,某些账户压根就没有 rotatim 这个字段。 那策略还怎么跑?难道要放弃?当然不,我们想到了一个反算法,我们知道 r o e 等于净利润除以净资产,而 pb 市净率等于市值除以净资产 p e t t m 市盈率 t t m 等于市值除以净利润。所以 ro 约等于 pb 除以 p t t m。 这个公式虽然不是精确等价,但在很多情况下足够近似的。幸运的是, daily basic 接口提供了 p team 和 pb, 并且支持按 trade date 批量查询。于是我们用这个接口获取了这两个指标,然后现场计算出 rocuscock。 这一招果然奏效,成功为两千八百七十六只股票补充了 r o e 数据。这再次证明,在数据受限的情况下,灵活运用已有资源和数学知识,往往能找到出路。 解决了单个因子的问题,我们再来看整体效率。我们知道逐只查询 finner 获取 cash already of 这种因子速度很慢,大概零点零伏秒一只。 如果我们对全市场的三千多只股票都这么做,总时间会超过二分钟。而在 ptr 的 巴尔执行环境中,通常会有个超时限制,大概也是二分钟左右。 这意味着,如果你的因子获取代码跑太久,整个策略可能就直接挂掉了。怎么办?我们引入了两步筛选法。第一步,先做快速预筛。 我们只用那些容易获取的因子,比如反算出来的 row team, 来自 daily bleed 的 market cap, 再加上收盘加 close, 用这三个因子槽快速做一个排名,选出 top 五排的股票。 注意,这里的权重和最终的权重不一样,因为我们缺少了现金流因子权重分配做了调整。 第二步,慢速精确筛选。我们只对刚才筛选出来的五百只股票,再去逐只查询那个慢速的 cash。 因此 这样原本需要对三千多只股票进行的慢速查询,现在只需要对五百只股票进行,时间一下子就从二分钟以上降到了大约二十五秒左右,完全避开了 ptr 的 超时陷阱。 最后一步,就是把这五百只股票的所有四个因子数据合并起来,按照原始的十五百分之十五百分之五十权重进行最终的加权排名,选出我们想要的 top 三十股票。 这个两步筛选法可以说是这次迁移中非常关键的一个优化点,它不仅保证了策略能跑完,还保证了能在规定时间内跑完。 除了单次运行的效率,我们还要考虑回测的效率。一个完整的回测可能要跑几百个交易日。如果每个交易日都重新查询 finetinder, 哪怕用了两步筛选,也还是太浪费时间了。 这里有个关键观察财务数据,比如现金流收入比,通常是季度发布的,一般在每个季度末公布。 在一个回测年份内大部分交易日的财务数据其实是相同的。基于这个观察,我们引入了季度缓存机制。我们建立一个缓存字典,用年份和需要查询的因子列表作为缓存的 key。 只有当第一次查询某个年份的特定因子组合时,才真正去调用 api 获取数据并存入缓存。之后在这个年份内的其他交易日直接从缓存中提取数据即可,无需重复查询。 这样每个回测年份只需要查询一次 finna finnander, 后续交易日几乎零成本获取数据,效率提升非常明显。 现在,我们把前面提到的所有环节整合起来,看看最终的完整数据获取流程。整个过程就像一个流水线,首先从全市场股票中筛选出基础池,剔除掉不需要的标地, 然后进入核心步骤,利用 delibsy 接口快速获取 roddim 和 market cap, 再获取收盘价,用这三个因子进行快速预筛选出约五百只股票。 接着对这幅本质股票通过 finna eventetter 逐只查询 catchrat of shell。 在 这个过程中,我们采用了多种查询方法,优先尝试批量查询,其次是日期范围查询,最后才是逐只查询,并结合了动态现频策略来应对 toshar 的 限制。拿到所有四个因子的数据后,进行最终的加权排名,选出后选股票。 这个流程图清晰地展示了从海量数据到最终结果的每一步骤和决策点。我们把这次四因子策略迁移过程中克服重重困难积累的所有经验和技巧都沉淀了下来,并且同步更新到了 gpu trade 转换器的模板代码中, 这意味着什么呢?意味着以后你再用这个转换器去迁移任何涉及到 get file flash 的 巨宽策略时,下面这些能力会自动注入到你的代码里。比如,它会自动处理代码格式转换,确保用的是 ptr 的 需要的格式, 它会自动帮你反算 r o e。 它内置了我们前面讨论的多方法查询策略,从批量到逐只,它有动态限频和重置机制,还有季度缓存来提高回测效率。所有这些都不需要你手动去修改代码了,转换器会帮你搞定。 为了让大家更直观地感受到这次模板的进化,我们来看一下更新前后的对比。更新前的模板逻辑比较简单粗暴,就是尝试用 period 的 参数批量查询 finna fender, 只要成功拿到一个季度的数据就 break 掉,不再尝试其他方法。 这种方式很脆弱,一旦批量查询失败,就没了退路,也无法利用缓存。而更新后的模板逻辑就复杂和强大得多。 他首先会检查是否有缓存,如果有,直接用,如果没有,他会依次尝试三种方法。第一种是尽可能多地累积四个季度的数据,不会中途停止。 第二种是尝试用日期范围查询。第三种,如果前两种都没拿到数据,而且股票数量不多的话,才会起用。逐只查询,并且带有动态限评和重试机制, 拿到所有数据后合并起来再存入缓存。这种多方法累积降级缓存的策略显然更加健壮和高效。 为了确保我们辛辛苦苦迁移出来的 p 吹的版本是正确的,我们还把它和原来的巨宽版本进行了逐行对比验证。 大家看这张表,从策略参数、选股逻辑、因子权重、调仓、时间过滤、规则、行业集中度到涨停处理,这些核心配置项在两个版本中都是完全一致的。 唯一的差异主要体现在数据获取方式上,一个是用巨宽的 j p factor, 一个是用 tushir, 这自然导致了因子覆盖率的差异, 巨宽那边几乎是全覆盖,而 ptr 的 因为 api 的 限制,覆盖率大概在百分之八十二左右。但除了这个,策略的核心逻辑和配置都保持了高度一致, 这给了我们信心,迁移是成功的。这次四因子策略的迁移之旅,让我们深刻体会到了从巨宽迁移到 ptr 的 深层痛点,那就是数据接口的巨大差异。 这绝不仅仅是换个 api 名字那么简单,很多时候需要我们彻底重构数据获取的架构, 但挑战也带来了收获。我们总结了几点核心经验,第一,代码格式是基石 adx s a g 和 s s 的 区别,它可能让你的数据凭空消失。第二, api 权限千差万别 to share, 不 同等级级的用户能用的功能不一样,不能想当然。 第三,批量到逐只的降级策略是必备的,总有一款适合你。第四,动态限频是应对限流的利器,固定延时根本不够看。第五,两步筛选法能有效减轻 api 压力,先快后慢,事半功倍。这些都是实打实的干货。 最重要的是,我们已经把刚才提到的所有这些宝贵经验都封装进了 j 曲屁 tree 的 转换器的最新版本里, 这意味着从今天开始,只要你用这个转换器去处理那些依赖 get 发 pals 的 巨宽策略,它就会自动帮你完成代码格式转换、 roe 反算、多方法查询、动态限频、季度缓存等一系列工作, 你不需要再手动去操心这些细节。开源的目的就是希望能帮助更多人顺利地完成策略迁移。 关于聚宽道劈 tree 的 因子数据迁移,特别是这个四因子策略的实战案例就分享到这里,希望能给大家带来一些启发和帮助,谢谢大家!

哦,巨宽我觉得是最好的吧,它这个社区活跃程度啊,教程啊,还有免费的额度啊,这些都是不少的,包括数据各方面都挺全的。第二个就是米矿吧,米矿它这个专业度很强,速度回测速度也蛮快的。 三个就是这个 u 框,它应该是有这个通联的数据背景,我记得它好像是另类的数据比较多,想做一些因子的挖掘,这个是更适合的。第四个就是这个 b 框的吧,它主打这个 ai 策略吧,它去开发这些 ai 策略会比较方便,然后格式化也挺好的, 尝试机器学习的,我比较建议这个国际平台的话也也挺多的,我比较熟悉的是这个 back trader, 它也完全免费,代码也完全开源嘛,啊,里边的很多的这个模块也都是可以这个自定义的, 它缺点应该是自己需要,就是自己解决数据的问题。还有一个就是本地化部署,需要有一些这个编程能力比较好的一些同学。 最后总结一下吧,如果是自己是纯新手的话,我觉得是巨宽或者是 bqant, 它教程比较多,如果是有一些编程能力的话,我觉得用米况就可以了。如果是说是学生党就是,那就用 backtrader, 它这个本身是比较免费嘛,然后自己找一点免费的数据源,像这个 to share 啊, 雅虎的一些数据啊等等这些都可以直接免费拿过来用。一开始我觉得先找一个免费的平台,先去把这我们整个的策略给它跑通,逐步的才慢慢的去尝试更专业的平台,或者说自己直接搭建一个自己的这个回测的框架, 整个的这个策略呢,先去跑模拟盘,成熟之后呢才去逐步的去考虑说应用到实盘还是要很谨慎一些,因为说你模拟和实盘完全是两码事的,一开始先做一点资金, 慢慢的一步一步有一些小的盈利了,再逐步的再往前推,平台本质上还是个工具,策略才是核心。

相信不少同行都有过这样的经历,策略在巨宽上跑得风生水起。一到 ptr 的 石盘,发现 a、 p、 i 完全不一样,改代码改到怀疑人生。 看看这张表,全局变量、定时函数、基础数据、 api、 持仓对象、订单判断、实时数据、行业数据、滑点设置,几乎每个环节都有显著差异,手动去改不仅效率低下,还容易遗漏细节。尤其是真实策略可能用到几十个 api, 工作量巨大。 面对这些痛点,我们开发了 j 渠 p 吹的转换器,这不是简单的脚本,而是经历了五个大版本迭代的成果。 我们踩遍了 ptr 的 石盘运行的各种坑,积累了大量实战经验。这套工具的核心价值在于一键转换,让复杂的迁移过程变得简单高效。 为了验证它的效果,我们用经典的四大搅屎棍策略进行了实测,结果表明,转换后的策略逻辑与原版完全一致,可以直接部署运行。 右边这张图展示了 ptr 的 交易系统的界面,可以看到策略代码回测结果和交易日记,这就是我们转换器的目标输出。在深入转换器细节之前,我们先快速了解一下四大搅屎棍这个策略, 他其实是一个经典的行业轮动加小盘价值策略名字听起来有点细血,但背后有其逻辑。观察发现,当银行、有色金属、煤炭、钢铁这四大行业集体大涨时,往往意味着市场避险情绪升温,而非真正的牛市信号。 所以策略的第一步是判断市场宽度,计算中证全指成分股里,各个行业有多少个股占上了二十日均线。第二步就是看最强的那个行业是不是搅屎棍之一,如果是,那就空仓,因为风险可能来了。 第三步,在非搅屎棍时期,从中小板里选股,要求 roe 大 于百分之十五, roa 大 于百分之十,然后按市值从小到大牌选前十个优先小盘, 每周一调仓等权持有。对于昨天涨停的股票,第二天下午两点检查,如果打开了涨停板就卖出,不贪心。 这个策略涉及了行业数据、基本面筛选、定时任务、持仓管理等多个方面,非常适合作为测试转换器的试金石。 现在我们来看一下这个四大搅屎棍策略在巨宽上的原始代码片段,这是以泥石来函数的一部分,可以看到它设置了精准指数,使用真实价格,避免未来数据。设置了滑点和订单成本,还配置了日制级别, 定义了全局变量 gistagnu 和 g holdlit, 并安排了三个定时任务,每天九零五准备股票列表,每周一九三十停进行周度调整,每天十四零零检查涨停股。这些都是巨宽平台特有的 api 和语法, 经过我们的转换器处理后,这段代码变成了什么样呢?请看右边。首先注意到那些被注视掉并标注已移除的部分,比如 setock, set logos, log dot, set lever, 这些都是 p trade 不 支持的 api, 转换器会自动识别并安全移除,避免遗漏全局变量。 g stand num 被自动转换成了 context, run weekly 被转换成了 run diary, 并在函数内部添加了星期判断逻辑。 fixed slippage 也被简化为 p trade 兼容的其他的变量和函数调用也相应地进行了转换,整个过程自动化完成,大大提高了效率和准确性。 转换过程中最复杂也是最容易出错的部分就是巨宽的 query o r m。 链式调用。大家看左边这段巨宽代码,一行 query 就 完成了过滤 r o e r o a 排序、市值限制数量等一系列操作,非常简洁优雅。 但是 p trade the get fundamentals api 完全不同,需要分布调用。我们的转换器能够智能地将这种复杂的 o m 链式调用拆解成等效的 p trade。 多步操作如右边所示,第一步,先过滤 r o e 大 于百分之十五,得到一个后选列表。 第二步,在这个列表基础上再过滤 i o a 大 于百分之十。第三步,由于 petri 的 get fundamentals 不 直接提供市值自断,转换器会利用预装的 to share 库去获取市值数据,然后进行排序和取数。 这个过程需要精确匹配括号,处理嵌套结构,并且保留原始代码的缩进和逻辑,确保转换后的代码功能完全一致。除了 api 映射,另一个关键能力是 to share 数据桥接。 ptrad 虽然强大,但确实缺少一些巨宽常用的 api, 比如直接获取深万行业分类的 get industry, 或者某些实时行情自断,我们的转换器会自动检测到这些缺失,并注入基于 toshar 的 替代实现。 比如上面这个 init the spell one industry 函数就是利用 two share 的 index clause f i 和 index member 结构构建了一个深万一级行业的股票映设表 spell one white cacside。 这个缓存只在回测开始时出实化一次,提高了效率。转换器会智能地只注入你需要的替代函数,保持最终生成的 pet trade 代码干净整洁,不需要你手动去处理这些底层细节。 现在我们来聊聊回测踩坑实录。这部分内容非常重要,揭示了一些隐藏的 bug。 我 们在用四大搅屎棍策略做长周期回测,比如从二零一三年到二零二三年时,连续踩了两个大坑。 这两个 bug 非常隐蔽,它们在短周期回测里根本不会触发,只有拉长回测周期才会暴露出来。这就是量化开发中最危险的一类 bug。 短回测跑不出来,长回测炸雷。第一个坑是关于日期格式的 包错信息是 billet object of type date time date time has no limit。 原因是在 check limited up 函数里,我们直接把 context dot carkant dot t 这个 type 对 象传给了 get price 的 end dot t 参数,而 p trade 期望的是自互串格式。 为什么短回测不报错?因为在这个策略里, check limit up 只在有昨日涨停股的时候才执行。而在短回测初期,可能正好遇到搅屎棍占优策略,一直空仓,根本没走到这一步。 所以短回测看起来没问题,但长回测就会挂掉。第二个坑是关于分中频率下不支持 high limit 自断。 报错信息是当前频率不支持 field 指定四段 high limit。 这是因为 p trade 的 get press 在 分钟频率下确实不支持 high limit 这个四段。这个四段通常只在日线数据里才有, 而巨宽的 api 设计相对宽松,允许你在分钟频率下指定它。这两个坑都说明 api 转换不能只做表面映射,必须深入理解平台差异,并通过长周期回测严格验证。正是这些踩坑的经历,驱动了我们不断迭代升级转换器。 v 五点三版本主要修复了刚才提到的长周期回测发现的两个隐藏 bug。 针对 get price 分 钟频率不支持 high lim 的 问题,转换器现在能自动检测到这种模式,并将其拆分为两次调用,一次用分钟频率取收盘价,另一次用日线频率取涨跌停价, 同时还会自动替换后续的 ilove 引用。对于日期格式问题,新增了 fact state 二函数,专门处理 nowtie 和 context docker at, 确保传递的是字串。 而 v 五点二版本则整合了在调试四大搅屎棍策略时发现的所有其他问题,包括改用 toshia 获取行业数据、适配 get 代码的方式、调整 o 的 对象判断逻辑处理 get fundamentals 返回的 datos 格式变化,以及修复 get matrix values 在 回测模式下的不可用问题等等。可以说,每一次版本更新都是对实际问题的反向修复,让转换器越来越健壮。 使用这个转换器也非常方便,我们提供了两种方式,命令行和图形界面。如果你喜欢脚本化操作,可以使用命令型方式 导入 jqptapedonified converter, 类型化时传入你的 to show token, 然后调用 convert 方法传入巨宽的圆代码字母串,就能得到转换后的 p trade 代码。如果你更喜欢格式化操作,可以直接运行图形界面, 打开后粘贴你的巨宽代码,点击转换按钮,结果就会显示出来,还可以一键复制到剪贴板, 无论哪种方式都能让你轻松完成从巨宽到 ptr 的 策略迁移。总结一下, j 区 ptr 的 转换器是开源的,核心转换逻辑和 toshia 数据函数都可以在 github 上查看。 从 v 三到现在的 v 五点三,每一次迭代都源于真实策略在 ptr 的 上运行时遇到的问题,特别是 v 五点三修复的那两个隐藏 bug, 深刻说明了 api 转换不只是语法替换,必须经过长周期回测验证。 四大搅屎棍策略作为试金石,能跑通它基本就能覆盖百分之八十以上的巨宽策略场景。我们相信这个工具能成为大家量化开发中的利器,助力量化策略高效迁移,加速策略落地。

免费开通量化权限,只要您在国金的铺上面有十万块以上,就可以选择开通 ptr 的 或者是 qmt, 当然你也可以选择全部开通。我们会在开通之前跟您进行一个小小的沟通,给你一个选择的建议,降低你的决策成本和时间成本,让你的入门更加丝滑, 没有进行额外的收费,非常划算。而且我们是一个团队来服务大家的,我和饶子轩来负责解决您日常的量化技术问题和账户使用问题。而且我们还有一个量化实盘的客户, 大家有什么问题也可以在群里面和其他的实盘用户进行交流,他们都是我的客户,所以我们可以畅所欲言,欢迎大家。对了,还有很多资料可以领取。

在巨宽平台编写了策略,我想提升回测效果要怎么办?无论一个量化策略有多优秀,我们都希望能进一步提升他的收益率。 今天和大家分享在巨宽平台做提升的方法,简单而且实用。我先随便调一个巨宽社区中大神共享出来的策略实操来举例,这是一个名为高古稀低杠杆、小四肢轮动的策略,把它磕拢进来,进入编写页面,稍加修改 好,我们运行回测,得到一个回测报告。在报告中可以看见,这个策略在近三年的收益率为百分之五百零四。我们不纠结策略是否含有未来函数,先看看能否在此基础上进一步做策略优化。 接下来,我对策略建立了一个进化模型,并在代码中调用了这个进化模型,这是新的回测效果,可以看到收益率来到了百分之八百八十, 这是效果的对比。左边是原始策略,右边是我调用进化模型后的策略效果,收益率提升了百分之三百七十六,代价是减少了百分之三十四的股票,因为这百分之三十四的股票中的一部分是会带来负收益的。 那这是怎么做到的呢?首先,进化模型不是简单的将负收益的股票踢走,否则就是自欺欺人而已。它的原理是这样, 一、根据回测出来的股票明细表,上传给一个负责建立模型的运算服务。二、模型根据根据一个项量算法,翻阅这批股票,再买入当天的因子,其中有好的因子,也有坏的因子。三、算法提取出共性最大的好因子,将他们画像组合成模型专用的因子库。 四、最后对每只股票的买点根据因子库做重新给评估,符合要求的留下,否则剔除。具体来说,我会 会建立一个进化模型,然后导出巨宽平台回测后的股票明细表,将他们喂养给这个模型。模型开始根据每个股票在买入当天的特征做因子交集运算,得到结果后,模型就建立成功了。 我们可以通过一个 api 来调用模型成果,在巨宽的策略代码中拉到选择股票买入的环节调用借口。例如告诉模型我想在三月十七日买入六零零四六二这只股,模型则对应返回 yes no 两种应答结果, 也可以同时传入多支股票。我们简单总结一下,我的模型有三个原则,一、不影响原有策略中的业务代码。二、用 api 接口调用,直接返回匹配结果。三、模型性格根据自己需要可在保守到激进中灵活调整。好了,你学会了吗?

刚开始接触量化交易,很多人都会被海量的平台名搞晕,像巨宽啊、优矿啊、 v n p y 等等。那我们说选错工具不仅浪费时间,甚至可能在实盘的时候给你带来巨大的隐性成本。 那今天我直接从入门门槛、核心优势、试用场景这三个梳理逻辑,给你介绍我在实操中曾经用过的几个工具, q m t p trade 和 t q s d k。 帮你把这笔账算清楚。如果你是刚入门,甚至还没搞清楚回测和实盘的区别,那么 t q s d k 是 目前性价比比较高的选择。 为什么?我们来看它的逻辑模型。 t q s d k 的 核心在于 d o 和高内聚的 api 设计,它的语法非常接近 python 原生的逻辑。对于新手来说,不需要去理解复杂的图形化界面,只需要写几行代码,就能跑通数据获取、回测模拟的全流程。 它的回测速度很快,因为它在设计上做了向量化集团的优化。你可以低成本、高效率的验证你的策略逻辑是否有效,免费版足够你度过新手期。但我们要理性看待,它的实盘能力是有限的,特别是在 a 股股票的交易接口上,它的稳定性和券商支持度远不如后面两个。 所以,如果你现在的目标是学习,或者想先在期货市场练练手, t q s d k 是 你最低成本的试错工具。当你的策略经过验证,准备在 a 股市场进行高频或城市化交易的时候,你会发现 q m t。 是 一个绕不开的存在。 q m t 的 逻辑在于稳定,优先于一切。 q m t 本质上是一个本地终端,它的优势在于低延迟,因为策略运行在你的本地电脑或券商提供的服务器上,指令直接通过券商柜台发出,跳过了中间层。 另外,它支持 vba 和 python 双核驱动。这意味着什么?意味着它不仅能用 python 写复杂逻辑,还能用图形化界面做风控。对于 a 股实盘,它的功能完整性是最高的,无论是篮子交易、算法拆单还是风控管理都非常成熟。但它的门槛是硬性指标, 资金门槛高,学习成本也高。如果你想把策略部署进去,需要理解它的数据结构,这需要你付出额外的时间成本。 因此,如果你的资金量达标,并且目标是严肃的 a 股实盘交易, q m t 是 逻辑上最稳妥的选择。最后说 pettrade。 很多人分不清 pettrade 和 pettrade, 其实它们的逻辑定位完全不同, pettrade 更偏向云交易和专业期货。 从逻辑上讲, pettrade 是 运行在券商云端的,这意味着你不需要维护本地电脑,策略在云端二十四小时运行。 对于期货这种需要夜盘连续交易的品种来说,这解决了物理断电断网的风险。 ptr 在 期货的回测精细度上做的非常深,它支持更复杂的滑点模型和保证金模型。 如果你做的是跨品种套利期权策略,它的专业性更强。它还支持多账户管理,这对于资金量稍大的期货交易者是刚需。 但正因为它的专业性,它的上手难度也是最高的。文档风格比较偏向传统的金融工程,人员不够友好。而且它的生态主要围绕期货,如果你想兼顾股票,它的体验不如 qmt。 所以, 如果你已经过了新手期,决定深耕期货或期权,量化 ptr 的是你应该认真考虑的工具。最后,我们来做一个总结, tqsdk 适合低成本试错逻辑验证阶段性价比最高。 q m t 适合 a 股高频实盘本地执行稳定性和低延迟最优。 p trade 适合期货专业进阶、云端运行、多账户与夜盘安全性最强。其实在量化这个领域,工具是数,策略是道。这三个工具无论选哪个,只要符合你当前的资金量、交易品种和技术水平,就是最好的。 千万不要陷入工具的纠结中无法自拔,哪怕你用 python 手搓一个脚本,只要能稳定盈利,那就是好工具。