1、AI量化学习资料 - 用DEEPSEEK玩转PTrade策略开发.zip\AI量化学习资料 - 1、PTrade策略开发提示词(参考模板).md

ops/2025/2/21 17:33:38/

🔍 第一步:需求解构——精准定义策略骨架

目标:将模糊的交易想法转化为结构化需求

📌提示词举例
当前策略需求:实现一个xxx买卖策略
请从监控标的、使用数据、指标计算、买卖规则等维度完善具体要求,每个维度一句话概括。注意:1、不支持盘后下单;2、暂不支持行业、概念板块数据

🧩 第二步:策略构建——Deepseek 自动生成代码

目标:利用模板引擎一键生成策略框架

📌 上传知识库

《PTrade所有API函数接口清单》

📌提示词举例
python">请严格遵循以下规范生成PTrade策略代码:
一、策略框架约束
ptrade量化引擎以事件触发为基础,通过初始化事件(initialize)、盘前事件(before_trading_start)、盘中事件(handle_data)、盘后事件(after_trading_end)来完成每个交易日的策略任务。
## 1、初始化initialize(context)
用于初始化一些全局变量,这是必选步骤。
## 2、盘前before_trading_start(context, data)
每天开始交易前被调用,可在此添加每天都要初始化的信息,缺省时间为 9:10,是可选步骤。
## 3、盘中
### (1)日线级别handle_data(context, data)
每日执行一次,日策策略的启动时间设为收盘前,缺省时间是 14:50,为必选。
### (2)分钟级别handle_data(context, data)
每分钟执行一次,分钟周期的启动时间为 09:30,是必选。如每隔多分钟运行一次或每日固定时间运行,可使用context.blotter.current_dt.time()判断时间后再执行逻辑。
### (3)tick 级别tick_data(context, data)、run_interval(context, func, seconds=10)
tick 级别可以通过 tick_data 或 run_interval 这两个 API 实现,tick_data 每 3 秒执行一次,run_interval 的间隔可自主设定,最小周期是 3 秒,是可选。
## 4、盘后after_trading_end(context, data)
每天交易结束之后调用,用来处理每天收盘后的事务,缺省时间为 15:30,是可选步骤。
二、API约束
禁止使用任何未在《PTrade所有API函数接口清单》中出现的函数三、策略示例
# 每日收盘运行示例
def initialize(context):g.security = '600109.SS'
set_universe(g.security)
def before_trading_start(context, data):pass
def handle_data(context, data):security = g.securitydf = get_history(10, '1d', 'close', security, fq=None, include=False) #能使用get_history就不要使用get_pricema5 = round(df['close'][-5:].mean(), 3)ma10 = round(df['close'][-10:].mean(), 3)price = data[security]['close']cash = context.portfolio.cashif ma5 > ma10:order_value(security, cash)log.info("Buying %s" % (security))elif ma5 < ma10 and get_position(security).amount > 0:order_target(security, 0)log.info("Selling %s" % (security))
def after_trading_end(context, data):pass# 盘中定时运行示例
def initialize(context):g.security = '600109.SS'
set_universe(g.security)
def before_trading_start(context, data):pass
def handle_data(context, data):current_time = context.blotter.current_dt.time()if current_time.hour != 9 or current_time.minute != 31:return  # 不是交易时间,直接退出else:security = g.securitydf = get_history(10, '1d', 'close', security, fq=None, include=False) ma5 = round(df['close'][-5:].mean(), 3)ma10 = round(df['close'][-10:].mean(), 3)price = data[security]['close']cash = context.portfolio.cashif ma5 > ma10:order_value(security, cash)log.info("Buying %s" % (security))elif ma5 < ma10 and get_position(security).amount > 0:order_target(security, 0)log.info("Selling %s" % (security))
四、当前需求
实现一个{XXX}买卖策略,具体要求:
1. 监控标的:策略监控单一股票或一组股票池中的标的,通过设置股票池来确定交易范围
2. 使用数据:策略使用每日的收盘价和成交量数据来计算XXX指标
3. 指标计算:XXX通过累计每日成交量的变化来反映市场的买卖力量,计算公式为:xxxxxx
4. 买卖规则:设定XXX指标的短期均线(如5日均线)和长期均线(如20日均线)进行交叉判断,当短期均线向上穿过长期均线时买入,向下穿过时卖出。
5. ...

🔎 第三步:规范核查——自我校正,减少幻觉

目标:一键扫描规避 API 误用与结构错误,修复大模型幻觉

📌提示词举例
以批判的角度检查策略代码及注释是否符合PTrade规范,依次确认以下要求,如需修改请输出完整策略代码:
1. 设置函数参数用法及含义是否符合《API接口明细-设置函数》规范
检查内容:
检查所有设置函数的参数是否与文档中的定义一致,包括参数名称、类型、顺序和默认值。
确保命名参数的使用正确,避免参数顺序错误。
示例:
set_commission(commission_ratio=0.0003, min_commission=3.0)  # 正确
set_commission(0.0003, 0.0003)  # 错误,参数顺序不明确
2. 数据获取函数参数用法及含义是否符合《API接口明细-获取信息函数》规范
检查内容:
(1)完整列出代码中使用的数据获取函数名称
(2)逐一检查所有数据获取函数是否在回测模块可用,所有参数用途是否与文档中定义用途一致,参数类型、格式是否与文档及函数示例保持一致。
确保参数的使用符合函数的预期行为。
示例:
get_history(10, '1d', 'close', security, fq=None, include=False)  # 正确
get_history(10, '1d', 'close', include=True)  # 错误,security、fq 参数未设置
3. 使用的所有对象、数据字典是否符合《PTrade数据结构》规范
检查内容:
逐一检查代码中使用的对象(如 g、context、data、Portfolio、Position 等)是否符合文档中的定义。
确保对象的属性和方法的使用符合规范。
示例:
context.portfolio.cash  # 正确
context.portfolio.cash_value  # 错误,cash_value 不是 Portfolio 的属性
4. 股票代码尾缀是否符合规范
检查内容:
检查所有股票代码的尾缀是否符合以下规范:
市场品种	尾缀全称	尾缀简称
上海市场证券	XSHG	SS
深圳市场证券	XSHE	SZ
指数	XBHS	
示例:
g.security = '600109.SS'  # 正确
g.security = '600109'      # 错误,缺少尾缀
5. log.info() 用法是否符合规范
检查内容:
检查 log.info() 的用法是否符合以下格式:
log.info("输出字符串 %s" % (变量名))
确保使用 %s 占位符并传入变量,避免直接拼接字符串。
如有选股逻辑,检查是否通过log.info输出选股结果。
示例:
log.info("Buying %s" % (security))  # 正确
log.info("Buying " + security)       # 错误,直接拼接字符串
6. 数据类型和数据结构是否正确
检查内容:
确保函数返回的数据类型(如 DataFrame、Series、list 等)与文档一致。
确保数据结构的使用符合规范。
示例:
df = get_history(10, '1d', 'close', security_list=None)  # 返回 DataFrame
series = df['close']  # 返回 Series
list_obj = get_history(10, '1d', 'close', security_list=None)  # 错误,期望返回 DataFrame

💡 技巧:上传物料《API接口明细-设置函数》《API接口明细-获取信息函数》《PTrade数据结构》至知识库


🐞 第四步:测试修正——快速定位与修复 BUG

目标:从报错日志到完美运行

📌 实战流程
  1. 编译回测:PTrade 回测引擎运行
  2. 报错定位:定位日志中的 Traceback 信息,复制从“错误/Exception: :Traceback (most recent call last):”到“xxxError:xxxx”之间的所有行
  3. BUG修复:将报错粘贴至 Deepseek → 获取修正代码 (tips:粘贴完报错后,补充一句“修正并返回完整代码”)

📂 案例

python"># 报错:AttributeError: 'Portfolio' object has no attribute 'cash_value'  
# 修正后  
cash = context.portfolio.cash  # ✅ 正确属性  

💡 注意:该步骤可能存在修复后仍有报错情形,需耐心完成下一轮交互,直到策略可正常运行。


📈 第五步:绩效优化——参数调优与压力测试

目标:让策略表现更加稳定,适应不同市场环境

参考提示词:“逐行增加注释,明确小白可修改之处,并将所有小白可修改的参数集中到初始化函数”

python">def initialize(context):  g.ma_short = 5    # 🎯 小白可修改此处!  g.ma_long = 20  

🚀 第六步:落地实战——从小资金到实盘验证

目标:低风险验证策略有效性

操作指南
  1. 模拟盘测试
  2. 实盘启动
  3. 监控日志

🔄 第七步:持续改进——迭代升级策略

目标:动态适应市场变化

迭代思路
  1. 信号增强
  2. 风控模块
  3. AI 进化

http://www.ppmy.cn/ops/159846.html

相关文章

Pipeline 定义 Parameter 显示在Jenkins 构建中

Pipeline 定义 Parameter 显示在Jenkins 构建中 Pipeline 中通过 parameters 定义参数&#xff0c;代码如下 pipeline {agent any// 自定义参数&#xff0c;在Jenkins 中显示parameters {// 定义 string 类型参数string(name: PARAM_NAME, defaultValue: default_value, desc…

AOSP Android14 部分页面使用触摸会崩溃

最近在项目上遇到一个奇怪的问题&#xff0c;这里记录下&#xff1a; 应用部门同事反馈&#xff0c;某些页面如果本身不能响应触摸消息&#xff0c;但是此时接一块usb触摸屏进行触摸时&#xff0c;会导致系统崩溃。 在应用层解决无果后遂向RK提问&#xff0c;原来这是一个AOS…

如何利用AI一键生成PPT,提升工作效率和创意灵感

如何利用AI一键生成PPT&#xff0c;提升工作效率和创意灵感&#xff01;在日常的工作和学习中&#xff0c;PPT&#xff08;PowerPoint演示文稿&#xff09;已经成为不可或缺的工具之一。无论是做汇报、展示成果&#xff0c;还是进行学术讲解&#xff0c;PPT的设计和内容都直接影…

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑩】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase10 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月18日 关键词&#xff1a;UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-010测试用例 用例ID测试场景验证要点参考条款预期结果TC…

蓝桥杯 Java B 组之链表操作(单向链表增删查改)

Day 3&#xff1a;链表操作&#xff08;单向链表增删查改&#xff09; 一、链表&#xff08;Linked List&#xff09;基础 1. 什么是链表&#xff1f; 链表&#xff08;Linked List&#xff09;是一种动态数据结构&#xff0c;它由一系列节点&#xff08;Node&#xff09; 组…

rustdesk编译修改名字

最近&#xff0c;我用Rust重写了一个2W行C代码的linux内核模块。在此记录一点经验。我此前没写过内核模块&#xff0c;认识比较疏浅&#xff0c;有错误欢迎指正。 为什么要重写&#xff1f; 这个模块2W行代码量看起来不多&#xff0c;却在线上时常故障&#xff0c;永远改不完。…

【kafka系列】broker

目录 Broker 接收生产者消息和返回消息给消费者的流程逻辑分析 Broker 处理生产者消息的核心流程 Broker 处理消费者消息的核心流程 关键点总结 Broker 接收生产者消息和返回消息给消费者的流程逻辑分析 Broker 处理生产者消息的核心流程 接收请求 Broker 的 SocketServer …

rust笔记1-学习资料推荐

学习Rust的Trait、生命周期和模式确实需要一些时间&#xff0c;尤其是当这些概念在其他语言中不常见时。以下是一些学习资料和建议&#xff0c;帮助你更好地理解这些概念&#xff1a; 1. 官方文档与书籍 《The Rust Programming Language》&#xff08;俗称“The Book”&…