企业微信

云函数与聚宽在量化交易中的结合方式

聚宽平台提供在线研究、回测与模拟交易环境,其策略代码基于Python,依赖特定数据接口与交易API。云函数作为事件驱动的计算服务,允许用户上传代码并按需执行。将聚宽策略迁移至云函数,核心在于解决环境隔离、依赖安装、网络通信与定时触发问题。股票与期货量化策略通常需要定时获取行情、计算信号、发送委托,云函数可以承担这些任务,但需注意聚宽SDK的安装与认证机制。

环境构建与依赖管理

云函数运行环境通常为精简版Linux容器,预装Python解释器。聚宽策略依赖jqdatasdkjqdatasdk的认证以及可能用到的pandasnumpytalib等库。用户需在云函数部署包中附带requirements.txt,或直接在代码中通过subprocess调用pip install。部分云函数平台限制外网访问,需提前配置VPC或开启公网权限。认证信息如聚宽账号密码应存入云函数的环境变量,避免硬编码。


import os

import jqdatasdk as jq

def handler(event, context):

    jq.auth(os.environ['JQ_USER'], os.environ['JQ_PASS'])

    # 获取股票行情

    df = jq.get_price('000001.XSHE', count=10, frequency='daily')

    # 计算简单均线

    ma5 = df['close'].rolling(5).mean().iloc[-1]

    if df['close'].iloc[-1] > ma5:

        # 发送买入信号至交易接口

        pass

    return 'done'

环境构建时注意云函数执行超时时间,聚宽数据接口单次请求耗时约0.5至2秒,批量获取多只股票需分页或异步处理。

股票策略在云函数中的定时调度

股票量化策略常采用日频或分钟频调度。云函数平台提供定时触发器,支持cron表达式。将聚宽策略中的run_daily逻辑改写为独立函数,由定时器按交易日历触发。非交易日需跳过执行,可在函数入口读取交易日历或使用聚宽get_trade_days接口判断。股票策略涉及持仓管理,云函数无状态特性要求将持仓数据持久化至数据库或对象存储。每次触发时读取持仓,计算目标仓位,生成委托列表,再调用交易接口。

云函数可以运行聚宽量化策略吗


import json

from datetime import datetime

import jqdatasdk as jq

def daily_stock_strategy(event, context):

    today = datetime.now().strftime('%Y-%m-%d')

    trade_days = jq.get_trade_days(start_date=today, end_date=today)

    if len(trade_days) == 0:

        return '非交易日'

    # 读取持仓

    positions = json.loads(oss_get('positions.json'))

    # 选股逻辑

    stocks = jq.get_index_stocks('000300.XSHG')

    # 计算信号

    signals = []

    for stock in stocks[:50]:

        price = jq.get_price(stock, count=20, frequency='daily')

        if price['close'].iloc[-1] > price['close'].mean():

            signals.append(stock)

    # 生成委托并更新持仓

    # ...

    return 'success'

云函数并发执行时注意聚宽接口频率限制,通常每秒不超过10次请求,可采用队列或分批处理。

期货策略的事件驱动与实时风控

期货量化对延迟敏感,云函数冷启动可能达数百毫秒至数秒,不适合高频交易。中低频期货策略如日内趋势或隔夜持仓,可利用云函数处理行情推送。部分云平台支持WebSocket触发,当期货行情更新时调用云函数。策略逻辑包括计算ATR、布林带或MACD,生成开平仓信号。期货交易需处理保证金与强平风险,云函数中应内置风控模块,检查可用资金与持仓限额。


def futures_risk_check(event, context):

    account = get_futures_account()

    if account['available'] < account['margin_used'] * 0.5:

        close_all_positions()

        return '风控平仓'

    # 行情驱动信号

    tick = event['tick']

    if tick['symbol'] == 'IF2406':

        ma_short = calc_ma(tick['history'], 5)

        ma_long = calc_ma(tick['history'], 20)

        if ma_short > ma_long and account['position'] == 0:

            open_long(tick['symbol'], 1)

    return 'ok'

期货夜盘与日盘切换时,云函数定时器需调整cron表达式。跨市场套利策略涉及多个期货合约,云函数可并行调用不同品种的行情接口,汇总后计算价差。

回测与实盘的一致性保障

聚宽回测引擎模拟撮合与滑点,云函数实盘执行时需复现相同逻辑。建议将策略核心信号计算部分抽离为纯函数,回测与实盘共用。云函数中记录每笔委托的成交回报,与聚宽模拟交易记录比对。股票除权除息、期货主力合约换月需特殊处理,可在云函数中引入聚宽的get_extras接口获取复权因子。

成本与性能权衡

云函数按调用次数与执行时长计费,股票日频策略每月调用约20次,成本极低。期货分钟频策略每日数百次调用,需评估费用。冷启动延迟可通过预留实例缓解,但增加固定成本。聚宽平台自身提供模拟交易,若策略简单且无需外部数据,直接使用聚宽更便捷。需要自定义数据源、复杂调度或与其他云服务集成时,云函数方案更灵活。

代码部署与监控

将聚宽策略拆分为多个云函数,每个函数负责一个品种或一个逻辑模块。使用云平台的日志服务记录信号与异常。设置告警规则,当函数执行失败或连续亏损时发送通知。股票与期货策略的持仓文件应加密存储,避免泄露。

云函数与聚宽的结合拓展了量化策略的部署边界,股票中低频与期货趋势策略均可受益。开发者需关注环境依赖、定时精度与风控实现,确保实盘稳定。