风险提示:本内容为量化技术及平台操作的纯知识分享,不构成任何投资建议,不推荐任何具体证券或交易时机。部分内容可能理解包含错误,请自行核实。市场有风险,投资需谨慎文章全部内容设计到的标的,只做策略思路的分析,不做投资参考,
今天在编写回测接口的api,例子,做回测因子的数据挖掘,感觉个人挖掘写代码太麻烦了借助ai平台,把全部系统框架的接口给ai,让ai自动去写代码分析,做研究得到结果,上次写了一个怎么样写skill的教程量化研究--怎么样快速开发量化交易skills
今天就利用具体的例子,怎么样去快速写一个skill,我把skill上线了,明天测试一些让ai自动写代码,测试组合看看结果怎么样

首先是skill.md文件的开头,研报需要定义,版本作者,描述,触发的关键词等方便ai快速的搜索

---
name: ptrade-strategy
description: |
PTRADE 量化平台策略生成技能。根据用户需求,生成可在 PTRADE 平台运行的 Python 量化交易策略代码。
触发关键词:PTRADE、ptrade、量化策略、量化交易、生成策略、写策略代码、双均线、网格交易、因子选股。
version: 1.1.0
metadata:
openclaw:
emoji: "📈"
---
基本都是一样的格式开头

---
name: xg-quant-platform
description: |
小果量化平台(XG Quant Platform)技能。小果量化是一个专业的量化交易系统,提供完整的回测、模拟交易、社区策略分享等功能。
【核心功能】
- 📊 历史行情数据获取(股票、ETF、可转债)
- 📈 多维度因子数据提取(技术指标、Alpha因子、动量因子等)
- 💰 财务数据分析(资产负债表、利润表、现金流量表等)
- 🔄 多种策略回测(定投、动量、资产配置、网格、海龟、均值方差等)
- 🤖 模拟交易和社区策略管理
- 📉 多标的量化分析(相关性矩阵、协方差矩阵、投资组合优化)
- 📊 股票组合收益分析(绩效指标、夏普比率、最大回撤等)
- ⏰ 分钟级K线数据(1/5/15/30/60分钟)
【触发关键词】
小果量化、xg_quant、量化数据、回测系统、定投回测、动量回测、资产配置、
网格策略、海龟策略、综合动量、条件因子、排序多因子、均值方差、
因子数据、财务数据、历史行情、ETF数据、可转债数据、K线数据、
相关性矩阵、协方差矩阵、投资组合优化、股票分析、绩效分析、
模拟交易、社区策略、数据API、量化分析、策略生成
【作者】
小果,微信:xg_quant
version: 2.0.0
metadata:
openclaw:
emoji: "📈"
author:
name: "小果"
wechat: "xg_quant"
---
第二部分一般都是系统的概括,功能的介绍,和需要特别注意的地方

# PTRADE 量化策略生成 Skill
## 概述
本 Skill 用于为 PTRADE 量化交易平台生成、修改、检查 Python 策略代码。模型应严格使用本文件中的 PTRADE 官方 API(全局函数形式),**禁止混用 QMT / 迅投 的 `security.` / `trade.` 对象式 API**。
**⚠️ 核心原则:PTRADE 使用全局函数获取行情与下单(如 `get_price()`、`order()`),不是 `security.get_bars()` / `trade.open_long()`。后者属于 QMT 平台,在 PTRADE 中会直接报 "name not defined" 错误。**
---
## 一、策略必备函数(必写)
```python
initialize(context) # 初始化(必写)
handle_data(context, data) # 行情/交易主函数(必写)
before_trading_start(context, data) # 盘前运行
after_trading_end(context, data) # 盘后运行
tick_data(context, data) # Tick 级别处理
on_order_response(context, order_list) # 委托回调
on_trade_response(context, trade_list) # 成交回调
handle_data 的第二个参数 data 为当根 K 线数据,可不使用但建议保留签名。
基本都是一样的,写法思路

小果量化平台(XG Quant Platform)
一、平台简介
小果量化数据API是一个基于HTTP的量化数据接口,提供股票历史数据、因子数据、财务数据以及多种量化策略回测功能。
主要功能
| 功能模块 |
说明 |
| 📊 历史行情数据 |
获取股票、ETF、可转债的日线历史数据 |
| 📈 因子数据提取 |
数百种技术指标、Alpha因子、动量因子 |
| 💰 财务数据查询 |
资产负债表、利润表、现金流量表、估值数据 |
| 🔄 策略回测 |
定投、动量、资产配置、网格、海龟等9种策略 |
| 🤖 模拟交易 |
个人策略模拟交易和社区策略分享 |
| 📉 量化分析 |
相关性矩阵、协方差矩阵、投资组合优化 |
| 📊 组合分析 |
完整绩效指标(50+项) |
后面基本都是写怎么样使用的教程接口什么的,后面没有固定的格式

一、策略必备函数(必写)
initialize(context) # 初始化(必写)
handle_data(context, data) # 行情/交易主函数(必写)
before_trading_start(context, data) # 盘前运行
after_trading_end(context, data) # 盘后运行
tick_data(context, data) # Tick 级别处理
on_order_response(context, order_list) # 委托回调
on_trade_response(context, trade_list) # 成交回调
handle_data 的第二个参数 data 为当根 K 线数据,可不使用但建议保留签名。
二、生成策略工作流(模型必须遵循)
- 澄清需求:确认策略类型(择时 / 选股 / 套利 / 事件驱动)、标的范围、周期、风控要求。
- 锁定 API:只使用本文件列出的 PTRADE 全局函数;严禁
security.xxx / trade.xxx / get_json() 等 QMT 写法。
- 选择 / 套用模板:优先使用下方「策略模板」,或在其基础上修改。
- 代码生成:输出完整的
initialize + handle_data,参数用模块级常量定义,便于在 PTRADE 界面调整。
- 自检:生成的代码必须通过
scripts/validate_strategy.py 检查(无 QMT API、含 initialize/handle_data)。
- 运行说明:附 PTRADE 平台导入 / 回测 / 实盘步骤。
三、PTRADE 关键约定(必读,否则策略无法运行)
- 全局函数:
get_price、get_history、get_positions、get_position、get_index_stocks、get_fundamentals、order 等均为全局函数,直接调用,不要当成对象方法。
g 全局对象:用 g.xxx = yyy 在 initialize 中保存自定义状态,在 handle_data 中读取。g 在 PTRADE 中已预定义。
context 对象:context.portfolio.cash、context.portfolio.total_value、context.portfolio.positions、context.blotter.current_dt。
- 下单
order(security, amount, limit_price=None):amount > 0 买入,amount < 0 卖出;limit_price=None 表示市价。每笔数量须为 100 的整数倍(1 手 = 100 股)。
- T+1:A 股当日买入不可当日卖出,卖出请用
position.enable_amount(可用持仓)。
- 行情返回:
get_price(..., fields=[...], count=N) 返回 pandas DataFrame,列名为字段名;取数组用 df["close"].values。
- 回测撮合:默认以开盘价成交;使用最新价需订阅实时行情。
一般重点是写api的使用教程,注意的地方

6.3 行情信息
# 获取历史K线(核心API)
get_history(count, frequency, field, security_list, fq=None, include=False, fill='nan', is_dict=False)
get_price(security, start_date=None, end_date=None, frequency='1d', fields=None, fq=None, count=None, is_dict=False)
# 个股委托/成交明细
get_individual_entrust(stocks=None, data_count=50, start_pos=0, search_direction=1, is_dict=False)
get_individual_transaction(stocks=None, data_count=50, start_pos=0, search_direction=1, is_dict=False)
# Tick数据
get_tick_direction(symbols=None, query_date=0, start_pos=0, search_direction=1, data_count=50, is_dict=False)
# 板块排序
get_sort_msg(sort_type_grp=None, sort_field_name=None, sort_type=1, data_count=100)
虽然系统不一样,写法大同小异的

# ============================================================
# 完整示例71:读取个人全部模拟策略
# ============================================================
"""
参数说明:
user: str = '小果' - 用户名称
返回数据:
strategies - 策略列表(包含策略类型、名称、建立时间等)
total - 策略总数
"""
print("\n" + "=" * 60)
print("📊 读取个人全部模拟策略")
print("=" * 60)
result = client.get_all_moni_trader_data(
user='小果'
)
print("模拟策略列表:")
print(f"策略总数: {result.get('total', 0)}")
strategies = result.get('strategies', [])
for i, s in enumerate(strategies, 1):
print(f" {i}. {s.get('策略类型')} - {s.get('策略名称')} (建立时间: {s.get('建立时间')})")
4读取个人全部社区策略
from xg_quant_backtrader_data.xg_quant_backtrader_data import xg_quant_backtrader_data
# 初始化客户端
client = xg_quant_backtrader_data(
url="124.220.32.224",
port=8888,
user="小果",
password="小果",
auth_code="小果"
)
# ============================================================
# 完整示例72:读取个人全部社区策略
# ============================================================
"""
参数说明:
user: str = '小果' - 用户名称
返回数据:
strategies - 策略列表(包含策略类型、名称、建立时间等)
total - 策略总数
"""
print("\n" + "=" * 60)
print("📊 读取个人全部社区策略")
print("=" * 60)
result = client.get_all_moni_trader_data_sq(
user='小果'
)
print("社区策略列表:")
print(f"策略总数: {result.get('total', 0)}")
strategies = result.get('strategies', [])
for i, s in enumerate(strategies, 1):
print(f" {i}. {s.get('策略类型')} - {s.get('策略名称')} (建立时间: {s.get('建立时间')})")
最后面的结尾基本都是依赖的例子,参数,策略参考等参考内容,官方的教程

IDX_A = "000.XSHG" # 沪深300
IDX_B = "005.XSHG" # 中证500
LOOKBACK = 20
def initialize(context):
g.idx = [IDX_A, IDX_B]
set_universe(g.idx)
def _ret(sym):
df = get_price(sym, frequency="1d", fields=["close"], count=LOOKBACK)
c = df["close"].values.astype(float)
return (c[-1] / c[0]) - 1
def handle_data(context, data):
ra, rb = _ret(IDX_A), _ret(IDX_B)
winner = IDX_A if ra >= rb else IDX_B
for pos in get_positions():
if pos.security != winner and pos.total_amount > 0:
order(pos.security, -int(pos.total_amount))
pos = get_position(winner)
if (pos is None) or (pos.total_amount == 0):
order(winner, 100)
log.info("轮动买入 %s (300收益=%.2f%%, 500收益=%.2f%%)" % (winner, ra*100, rb*100))
基本都是一样的写法

skill结尾一般是总结的内容

十四、风控与最佳实践
- 必须设置股票池:set_universe(...) 决定 handle_data 能拿到的数据范围。
- 数量取整到 100:order 的 amount 必须是 100 的整数倍,否则委托会被拒。
- T+1 卖出约束:卖出数量不要超过 position.enable_amount。
- ST / 退市过滤:上线前用 filter_stock_by_status(stocks, filter_type=["ST","HALT","DELISTING"]) 剔除风险标的。
- 先回测再实盘:用 check_strategy(strategy_path=...) 做静态检查;在 PTRADE 回测通过后再开启实盘。
- 日志而非打印:用 log.info(...) 而非 print(...),便于在 PTRADE 日志面板查看。
- 全局函数陷阱:再一次强调 —— PTRADE 没有 security.get_bars / trade.open_long / get_json,误用会直接运行失败。
十五、在 PTRADE 平台运行步骤
- 打开 PTRADE → 策略研究 → 新建策略
- 粘贴生成的代码 → 保存(Ctrl+S)
- 回测:设置时间范围与初始资金,查看收益 / 回撤
- 参数优化:调整模块级常量(如 SHORT_WIN / LONG_WIN)
- 实盘:订阅实时行情,开启自动执行
十六、离线校验(新增)
仓库附带 scripts/validate_strategy.py,可在本地(非 PTRADE 环境)快速检查生成的策略是否误用了 QMT API:
python scripts/validate_strategy.py your_strategy.py
校验项:是否包含 initialize / handle_data、是否出现 security.get_bars / trade.open_long / get_json 等禁用写法、是否使用 PTRADE 全局函数。
不懂的问我就可以。加我备注入群可以加入量化交流群,需要完整的ptrade 的skill加我要就可以

找我开户也可以专业的技术支持服务

[#量化交易]() [#skill开发]() [#ptrade]() [#skill]() [#skill开发教程]()