tydocs.pages.devtydocs.pages.dev
网站首页
快速开始
关于作者
  • 在线工具大全
  • 在线ASCII码表
  • 正则表达式调试工具
  • 正则表达式可视化
  • BASE64编解码工具
  • MD5编码工具
  • AES/DES加解密
  • ASCII编解码工具
  • 在线JSON解析
  • CSS可视化工具
  • HTTP在线接口测试
  • 在线编译套装
  • 在线文本比对
  • 在线思维导图
  • 在线字数统计
  • 在线代码截图
  • 在线短链接生成
  • 在线文本替换
  • 在线文件压缩工具
  • 在线多媒体转换器
  • 在线PDF工具
  • 在线PS工具
  • logo在线制作
  • 图片智能放大工具
  • 在线抠图工具
  • ICO图标在线生成
  • 视频转GIF工具
  • DeepSeek | 深度求索
  • 通义千问 Qwen3-235B
  • 智谱清言 (chatglm.cn)
  • 豆包 - (doubao.com)
  • Kimi - (moonshot.cn)
  • 百川 - (baichuan - ai.com)
  • 通义千问 - (aliyun.com)
  • 文心一言 (baidu.com)
  • 讯飞星火 - (xfyun.cn)
  • 百度AI搜索 - deepseek
  • 天工AI - (tiangong.cn)
  • 秘塔AI搜索 (metaso.cn)
  • 微软 - copilot - 要挂梯子
网站首页
快速开始
关于作者
  • 在线工具大全
  • 在线ASCII码表
  • 正则表达式调试工具
  • 正则表达式可视化
  • BASE64编解码工具
  • MD5编码工具
  • AES/DES加解密
  • ASCII编解码工具
  • 在线JSON解析
  • CSS可视化工具
  • HTTP在线接口测试
  • 在线编译套装
  • 在线文本比对
  • 在线思维导图
  • 在线字数统计
  • 在线代码截图
  • 在线短链接生成
  • 在线文本替换
  • 在线文件压缩工具
  • 在线多媒体转换器
  • 在线PDF工具
  • 在线PS工具
  • logo在线制作
  • 图片智能放大工具
  • 在线抠图工具
  • ICO图标在线生成
  • 视频转GIF工具
  • DeepSeek | 深度求索
  • 通义千问 Qwen3-235B
  • 智谱清言 (chatglm.cn)
  • 豆包 - (doubao.com)
  • Kimi - (moonshot.cn)
  • 百川 - (baichuan - ai.com)
  • 通义千问 - (aliyun.com)
  • 文心一言 (baidu.com)
  • 讯飞星火 - (xfyun.cn)
  • 百度AI搜索 - deepseek
  • 天工AI - (tiangong.cn)
  • 秘塔AI搜索 (metaso.cn)
  • 微软 - copilot - 要挂梯子
  • RQAlpha 量化交易策略框架

RQAlpha 量化交易策略框架

RQAlpha 是一个功能强大的量化交易策略框架,专为量化投资者和机构设计。它支持多种金融工具的回测,包括股票、期货、期权、可转债、指数和场外基金等。通过 RQAlpha,用户可以快速验证交易策略的有效性,并将其应用于模拟交易或实盘交易。

一、功能特点

  • 低门槛:基于 Python,易于上手,适合初学者和专业投资者。
  • 高扩展性:支持调用第三方库,用户可以自定义插件和扩展功能。
  • 多品种支持:支持中国市场几乎所有场内金融工具。
  • 多频率回测:支持日级别、分钟级别和 tick 级别的回测。
  • 丰富的数据接口:提供丰富的数据查询接口,支持财务数据、行情数据等。

二、支持的金融工具及功能

  • 股票

    日级别回测:基于日线数据进行回测。

    分钟级别回测:基于分钟线数据进行回测。

    tick 级别回测:基于 tick 数据进行回测。

    自动处理 T+1 和分红拆分。

  • 期货

    日级别回测:支持主力连续合约和逐日盯市制度。

    分钟级别回测:支持分钟线数据。

    tick 级别回测:支持 tick 数据。

    保证金交易:支持保证金倍率设置。

  • 期权

    日级别回测:支持行权操作。

    分钟级别回测:支持分钟线数据。

    tick 级别回测:支持 tick 数据。

    行权滑点:模拟行权时的市场波动。

  • 可转债

    日级别回测:支持转股和回售操作。

    分钟级别回测:支持分钟线数据。

    tick 级别回测:支持 tick 数据。

三、快速上手指南

第一个策略

以下是一个简单的买入并持有策略示例:

def init(context):
    context.fired = False

def handle_bar(context, bar_dict):
    if not context.fired:
        order_target_percent("000001.XSHE", 0.5)  # 半仓买入平安银行
        context.fired = True

运行该策略时,RQAlpha 会在回测期间展示策略的收益曲线和部分收益及风险指标。

MACD 策略示例

以下是一个基于 MACD 指标的交易策略示例:

import talib

def init(context):
    context.stock = "000001.XSHE"
    context.SHORTPERIOD = 12
    context.LONGPERIOD = 26
    context.SMOOTHPERIOD = 9
    context.OBSERVATION = 100

def handle_bar(context, bar_dict):
    prices = history_bars(context.stock, context.OBSERVATION, '1d', 'close')
    macd, macd_signal, _ = talib.MACD(prices, context.SHORTPERIOD, context.LONGPERIOD, context.SMOOTHPERIOD)

    if macd[-1] > macd_signal[-1] and macd[-2] < macd_signal[-2]:
        order_target_percent(context.stock, 1)  # 全仓买入
    elif macd[-1] < macd_signal[-1] and macd[-2] > macd_signal[-2]:
        order_target_percent(context.stock, 0)  # 清仓

四、编写策略

初始化阶段

在 init 函数中,可以进行全局变量的初始化和策略的准备工作:

def init(context):
    context.stock = "000001.XSHE"  # 设置目标股票
    context.SHORTPERIOD = 12
    context.LONGPERIOD = 26
    context.SMOOTHPERIOD = 9
    context.OBSERVATION = 100

行情更新阶段

在 handle_bar 函数中,策略会根据市场行情进行交易决策:

def handle_bar(context, bar_dict):
    prices = history_bars(context.stock, context.OBSERVATION, '1d', 'close')
    macd, macd_signal, _ = talib.MACD(prices, context.SHORTPERIOD, context.LONGPERIOD, context.SMOOTHPERIOD)

    if macd[-1] > macd_signal[-1] and macd[-2] < macd_signal[-2]:
        order_target_percent(context.stock, 1)  # 全仓买入
    elif macd[-1] < macd_signal[-1] and macd[-2] > macd_signal[-2]:
        order_target_percent(context.stock, 0)  # 清仓

五、运行策略

终端命令运行

使用命令行工具运行策略:

rqalpha run -f macd_000001.py -a stock 100000 -s 20190101 -e 20191231 -bm 000300.XSHG -p

函数入口运行

通过 run_func 函数运行策略:

config = {
    "base": {
        "accounts": {"STOCK": 100000},
        "start_date": "20190101",
        "end_date": "20191231",
    },
    "mod": {
        "sys_analyser": {
            "plot": True,
            "benchmark": "000300.XSHG"
        }
    }
}

if __name__ == "__main__":
    from rqalpha import run_func
    run_func(config=config, init=init, handle_bar=handle_bar)

获取结果

运行策略后,可以获取以下结果:

  • 收益曲线:展示策略的收益变化。
  • 收益和风险指标:如夏普比率、最大回撤等。
  • 交易流水:记录所有交易操作。
  • 每日账户和持仓数据:展示每日的账户状态和持仓情况。

六、进阶教程

账户和持仓

访问账户和持仓信息:

# 获取当前账户的现金
cash = context.portfolio.accounts["STOCK"].cash

# 获取当前持仓数量
position = context.portfolio.positions["000001.XSHE"].quantity

回测频率

  • 日级别回测:每个交易日触发一次 handle_bar。
  • 分钟级别回测:每分钟触发一次 handle_bar。
  • tick 级别回测:每个 tick 触发一次 handle_tick。

事前风控

设置事前风控参数:

# 关闭验资风控
config = {
    "mod": {
        "sys_risk": {
            "validate_cash": False
        }
    }
}

模拟撮合

设置撮合模型和滑点:

# 设置撮合模型为当前 bar 收盘价撮合
config = {
    "mod": {
        "sys_simulation": {
            "matching_type": "current_bar",
            "slippage_model": "PriceRatioSlippage",
            "slippage": 0.001
        }
    }
}

七、示例策略

多股票 RSI 策略

以下是一个多股票 RSI 策略示例:

import talib

def init(context):
    context.s1 = "000001.XSHE"
    context.s2 = "601988.XSHG"
    context.s3 = "000068.XSHE"
    context.stocks = [context.s1, context.s2, context.s3]
    context.TIME_PERIOD = 14
    context.HIGH_RSI = 85
    context.LOW_RSI = 30
    context.ORDER_PERCENT = 0.3

def handle_bar(context, bar_dict):
    for stock in context.stocks:
        prices = history_bars(stock, context.TIME_PERIOD + 1, '1d', 'close')
        rsi_data = talib.RSI(prices, timeperiod=context.TIME_PERIOD)[-1]

        cur_position = context.portfolio.positions[stock].quantity
        target_available_cash = context.portfolio.cash * context.ORDER_PERCENT
        if rsi_data > context.HIGH_RSI and cur_position > 0:
            order_target_value(stock, 0)  # 清仓
        elif rsi_data < context.LOW_RSI:
            order_value(stock, target_available_cash)  # 用部分现金买入

商品期货跨品种配对交易

以下是一个简单的商品期货跨品种配对交易策略示例:

import numpy as np

def init(context):
    context.s1 = 'AG1612'  # 白银期货
    context.s2 = 'AU1612'  # 黄金期货
    context.window = 60  # 滚动窗口
    context.ratio = 15  # 对冲比率
    context.entry_score = 2  # 入场临界值
    subscribe([context.s1, context.s2])  # 订阅行情

def handle_bar(context, bar_dict):
    position_a = context.portfolio.positions[context.s1]
    position_b = context.portfolio.positions[context.s2]

    price_array_a = history_bars(context.s1, context.window, '1m', 'close')
    price_array_b = history_bars(context.s2, context.window, '1m', 'close')

    spread_array = price_array_a - context.ratio * price_array_b
    std = np.std(spread_array)
    mean = np.mean(spread_array)
    up_limit = mean + context.entry_score * std
    down_limit = mean - context.entry_score * std

    price_a = bar_dict[context.s1].close
    price_b = bar_dict[context.s2].close
    spread = price_a - context.ratio * price_b

    if spread <= down_limit and position_a.buy_quantity == 0:
        buy_open(context.s1, 1)  # 多头开仓
        sell_open(context.s2, context.ratio)  # 空头开仓
    elif spread >= up_limit and position_b.buy_quantity == 0:
        sell_open(context.s1, 1)  # 空头开仓
        buy_open(context.s2, context.ratio)  # 多头开仓
    elif spread >= mean and position_a.buy_quantity > 0:
        sell_close(context.s1, 1)  # 多头平仓
        buy_close(context.s2, context.ratio)  # 空头平仓
    elif spread < mean and position_b.buy_quantity > 0:
        buy_close(context.s1, 1)  # 空头平仓
        sell_close(context.s2, context.ratio)  # 多头平仓

八、总结

RQAlpha 是一个功能强大且易于使用的量化交易策略框架,支持多种金融工具和回测频率。通过详细的文档和丰富的示例策略,用户可以快速上手并开发自己的量化策略。无论是初学者还是专业投资者,都能在 RQAlpha 中找到适合自己的工具和功能。