使用Moomoo软件中提供的量化交易功能,我们可以轻松定制自己的量化策略,从而实现自动交易机器人。
本文就将从下载和导入自定义策略开始,一步一步介绍Moomoo的量化框架,如何编码,核心代码结构,如何调整参数,回测操作以及最后的实盘运行。

免责声明:本文仅供学习交流使用,不构成任何投资建议。作者非专业人士,提醒读者:量化交易存在风险,投资需谨慎,请结合个人风险承受能力做出决策。

引言

在量化交易的世界里,策略的实现往往是最具挑战性的环节。本文将详细介绍如何使用Moomoo平台的量化功能,从策略的导入、参数设置、回测分析,直到最终的实盘部署,为读者提供一个完整的实战指南。本文采用一个基于网格交易的策略作为示例,深入讲解每个环节的关键点和注意事项。

量化交易机器人

策略下载、导入与结构解析

策略下载

本文使用的网格交易策略已在GitHub开源,读者可以直接访问网格交易策略仓库获取完整代码。该策略主要针对具有一定波动性且适合长期持有的美股标的进行自动化交易。
如果你想自行选择其它的美股标的,需要符合网格交易的特点和一些条件,具体可以参考打造你的第一个量化交易机器人:从每日盯盘到轻松自动化

策略导入

打开Moomoo软件(假定你已经完成软件下载、安装和开户入金),在Moomoo的量化功能中导入该策略,导入的方法可以查看打造你的第一个量化交易机器人 - Moomoo平台环境搭建指南

代码结构

代码的结构大致如下:

class Strategy(StrategyBase):

    def initialize(self): # 初始化
        self.trigger_symbols()
        self.custom_indicator()
        self.global_variables()

    def trigger_symbols(self):  # 定义运行标的
        self.运行标的1 = declare_trig_symbol()

    def global_variables(self):  # 定义全局变量
        pass

    def custom_indicator(self):  # 
        pass

    def handle_data(self):  # K线推送、Tick推送、固定时间间隔、指定时刻,这4种事件会触发handle_data()函数
        pass

这是一个简单的策略结构,其中initialize函数是初始化函数,trigger_symbols函数是定义运行标的,global_variables函数是定义全局变量,custom_indicator函数是定义自定义指标,handle_data函数是处理数据的函数。
我们只要知道在Moomoo中自定义量化策略大致就是这样的结构,就可以了。因为具体每个功能的实现,都可以利用AI完成。我们下一篇将介绍如何利用类似ChatGPT等AI工具,自动生成量化策略代码。

代码解析

按照上面的代码结构,我已经将网格交易策略的代码写好了,你只需要知道上面是代码的结构,之后的各个功能都从“def xxx”开始,格式上需要遵守一定的对齐规范,就可以了。
比如下面的代码:

def _is_new_period(self, current_time):
        """判断是否是新的交易周期"""

就代表一个叫做_is_new_period的函数,这个函数的功能是判断是否是新的交易周期。至于下面具体的代码实现,我们可以都交给AI去完成。
因为Moomoo的量化功能是基于Python的,所以我们需要遵守Python的代码规范,比如缩进、注释等。建议安装一个Python的代码编辑器,比如VSCode,这样可以更方便的编写代码。
根据我目前的流程,大致先使用AI生成代码,复制到VSCode中检查排版,上传到Github进行版本管理,之后复制到Moomoo的量化功能中检查语法,最后回测并实盘运行,下一篇文章我将具体介绍整个流程。

股票交易

网格交易逻辑

这个自定义策略基本按照网格交易的逻辑进行,简单说,就是在一个价格区间内,低买高卖,然后在价格波动的过程中,不断的买卖,从而获取利润。

基础价格设置

以标的的价格作为基础价格,之后根据网格数量再计算每个网格的价格。

网格数量设置

当标的的基础价格确定后,以基础价格为中心,上下设置一定数量的网格,每个网格的间距是标的金额的百分比,如3%。

交易逻辑

当标的的价格在网格的价格区间内波动时,就会自动低买高卖,从而获取利润。
比如,如果标的Mara的(基础)价格是20元,参数设置为10个网格,网格间距是3%。
那么我们就以20元为中心,在20元的价格上下各设置5个网格,每个网格间距是20*3% = 0.6元。
在20元的价格附近的网格是19.4元和20.6元,当Mara的价格下跌到19.4元,会自动买进,然后当价格回到20元,会自动卖出,这样就完成了一次网格交易。

关键参数解释

目前针对标的Mara,主要有以下一些关键参数:

  • initial_capital: 初始资金,默认10000美元
  • max_total_position: 最大总持仓限额,默认500股
  • min_order_quantity: 每次交易数量,默认20股
  • position_limit: 单网格持仓上限,默认80股
  • time_interval: 交易时间间隔(分钟),默认60分钟
  • grid_percentage: 统一的网格间距和盈利标准,3%(按Mara Holdings股价为约0.6美元)
  • grid_num: 网格数量,默认10个
  • max_capital_usage: 最大资金使用率,默认90%
  • max_order_timeout: 订单超时时间(秒),默认300秒

参数约束

因为在确定标的(基础价格)的情况下,初始资金、最大持仓、每次交易数量、单网格持仓上限、交易时间间隔、网格间距、网格数量、最大资金使用率、订单超时时间等参数都是有约束的,所以我们在设置这些参数时,需要遵守这些约束。

最大持仓

最大持仓是指单个标的的最大持仓数量,如果超过这个数量,就不再买入。
比如当初始资金为10000美元,Mara现价为20美元时,最大持仓应该为500股。

网格数量

网格数量是指在基础价格上下设置的网格数量,比如10个。

网格区间

网格区间是指每个网格的间距,比如3%。
当Mara价格为20元时,10个网格,网格间距为3%,那么整个网格可以覆盖的价格区间就是17元到23元。

单网格持仓上限

单网格持仓上限是指每个网格的最大持仓数量,如果超过这个数量,就不再买入。
这个参数的设置是为了防止在一个网格内过多的买入,导致风险过大,如果价格始终在某个网格波动,也可以通过不同周期的多次买入创造更多盈利机会。
当最大持仓为500股,网格数量为10个时,每个网格的最大持仓就是50股。

每次交易数量

每次交易数量是指每次最小买入或卖出的数量,这个数量应该是最大持仓的约数,比如20股。
当每个网格最大持仓为80股时,如果每个网格的买入数量为20股,那么单个网格最多可以买4次。

策略回测全攻略

以下使用图文详细展示如何进行策略回测,以及参数优化等操作。

回测环境配置

首先,我们需要在Moomoo中配置回测环境,这个环境包括账户选择、触发条件设置、标的选择要点、参数优化技巧等。

选择账户

回测第一步
账户选择“xxxx-证券”,回测区间先选得小一点,比如如果是想要日线交易的,先选择2-3天进行测试,没有问题再选择更长的时间。初始资金根据自己的情况设置,比如10000美元。

触发条件设置

回测第二步
触发条件选择“即时行情触发运行”。

标的选择要点

回测第三步
标的你可以自己选择,选择的原则见前文所述,这里以Mara为例,后面的周期可以先选择“每根日K线运行一次”,注意这个周期需要和下一步的参数一致。

参数优化技巧

回测第四步
这里的参数需要根据自己的情况设置,比如网格数量、网格间距、每次交易数量等,这些参数的设置需要遵守前文所述的约束。注意这里的交易周期需要和上一步的周期一致,比如日线就应该是1440(分钟)。

回测结果分析

上述参数全部选择好,系统会跳出参数预览界面,让你再看一遍所有参数:
回测参数预览
确认后,点击“开始运行”,这时候量化策略就会根据你的参数进行回测,回测完成后,会出现回测结果。

策略收益

回测结果1
这个画面中分为三部分,最上方的部分为策略的收益情况,主要查看“总收益”,“最大回撤”。
总收益代表整个回测周期的收益情况,最大回撤代表整个回测周期的最大回撤情况,这两个指标是评估策略优劣的重要指标。

标的交易情况

中间的部分是交易情况,其中标的的K线会标注出策略的买入卖出点,可以看到策略的交易情况。
其中B代表买入,S代表卖出,T代表该周期有买入和卖出。

资产走势和运行日志

最下方的部分是资产走势和运行日志。
资产走势是策略的资产曲线,可以看到策略的收益情况,你可以和买入并持有标的的收益进行比较。
运行日志包括订单情况、策略运行日志,注意这部分将在下一篇文章中详细介绍,这里只是简单的展示。

回测数据导出与分析

仔细分析回测的订单历史和运行日志,能够看清楚整个策略的运行情况,从而更好的优化策略。
回测数据导出
注意这部分支持导出,你可以将这些数据导出到Excel中,然后利用AI进行更详细的分析并以此优化策略。

从回测到实盘

完成了策略回测,我们就可以将策略投入实盘运行了,这里需要注意的是,实盘运行和回测是有区别的,因为实盘运行涉及到真实的资金,所以需要更加谨慎。
实盘运行
实盘也需要经过回测时的四个步骤,账户选择、设置触发条件、选择标的(含周期)、修改策略参数,这里不再赘述,只是需要注意实盘运行时,需要更加谨慎,因为涉及到真实的资金。

实盘运行注意事项

  • 确保策略在回测中表现稳定
  • 准备充足的资金缓冲
  • 设置合理的风险控制参数
  • 定期检查策略运行状态
  • 监控持仓和盈亏情况
  • 及时调整策略参数

策略调优案例

以下三个案例,针对美股Mara,回测时间11月1日至11月25日,日线交易,网格10个,网格间距3%(约0.6元)。

初始资金1000美元,每次2股,单网格上限8股,总收益3.83%(1038.26美元),期末持股2股,交易15次,最大回撤3.68%,夏普比率2.87。

策略1

初始资金1000美元,每次5股,单网格上限15股,总收益9.58%(1095.76美元),期末持股5股,交易15次,最大回撤8.89%,夏普比率2.97。

策略2

初始资金10000美元,每次50股,单网格上限150股,总收益9.58%(10958.13美元),期末持股50股,交易15次,最大回撤8.89%,夏普比率3.53。

策略3

如果调整其它参数,比如将回测周期按30分钟线交易,就会有很大的差异:

初始资金10000美元,每次20股,单网格上限100股,总收益23.54%(12354.15美元),期末持股180股,交易148次,最大回撤20.24%,夏普比率3.79。

策略4

总结展望

本文主要介绍了如何使用Moomoo的量化功能,导入自定义策略,然后进行回测和实盘运行。

策略优势

  • 自动化执行,减少人为干预
  • 系统化的交易决策
  • 适应性强,可根据市场状况调整参数

局限性

  • 震荡市表现优异
  • 单边趋势市可能表现不佳
  • 需要合理控制单个网格的持仓量
  • 防止过度积累风险

优化方向

  • 引入机器学习优化网格参数
  • 开发自适应网格间距算法
  • 整合多个技术指标增强交易信号
  • 添加市场趋势判断模块
  • 开发动态止损机制
  • 完善资金管理策略

后续规划

下一步计划探索如何利用人工智能技术优化策略开发流程,同时注意量化交易是一个需要不断学习和优化的过程。通过本文介绍的网格交易策略实现,读者可以构建自己的初始量化交易系统。建议在实盘之前,进行充分的回测和参数优化,并始终保持对市场的敬畏之心。

轻松交易

行动建议

  • 从小资金开始,逐步熟悉策略特性
  • 持续记录和分析交易数据
  • 定期检查和优化策略参数
  • 建立完整的风险控制体系
  • 保持学习和改进的心态
    通过不断的实践和优化,相信每个投资者都能找到适合自己的量化交易之路。

重要提醒:量化交易虽然可以帮助我们克服情绪困扰,但也存在其特有的风险。建议读者在尝试量化交易时,从小规模开始,在对策略充分验证后再逐步扩大规模。切记:任何投资都要量力而行,严格控制风险。