带你详细了解PTrade策略框架(第二篇)initialize函数详解

QUANT 2025-12-29 17:39:19 6 举报

本文将深入探讨PTrade撰写策略最重要的API函数——initialize()函数


1. initialize(context) 函数的核心定位
initialize() 函数是PTrade策略的入口。当我们的策略在平台启动时(无论是回测还是实盘),该函数会被自动调用,且在整个策略中仅被调用一次

我们可以将其理解为策略的“构造函数”或“设置向导”,其核心任务是为策略的后续运行搭建一个稳定不变的全局环境

2 设置策略的全局交易环境
PTrade提供了一系列以 set_ 开头的API函数,用于配置策略在回测及实盘中的基本交易规则。这些规则设定后

通常在整个策略运行期间保持不变,因此最适合在 initialize() 中进行配置


3.定义策略的全局变量
在编写策略时,我们经常需要定义一些变量,并希望它们能够在策略的不同函数之间共享。因此我们可以在PTrade撰写专门的全局对象:g

g 是一个由平台维护的全局容器,专门用于存储用户自定义的全局变量。任何挂载在 g 对象下的属性(例如 g.my_variable = 10)

都可以在策略生命周期中的任何其他函数(如 before_trading_start, handle_data)内被访问和修改


下面是一个标准的 initialize() 函数示例,用实际的案例来演示如何综合运用上述功能来完成一个策略的初始化配:

# 策略初始化函数,在策略启动时运行一次
def initialize(context):
    # 1) 基准:沪深300(文档默认也是 000300.SS,这里显式写出来)
    set_benchmark("000300.SS")  
    try:
        # 佣金:万一,最低 5 元(仅回测演示)
        set_commission(commission_ratio=0.0001, min_commission=5.0, type="STOCK")  
        # 滑点:千分之2.4(仅回测)
        set_slippage(slippage=0.0024)  
    except Exception as e:
        log.info(f"提示:当前环境可能是交易/模拟盘,set_commission/set_slippage 不生效或不可用:{e}") 

    # 3) 股票池(注意:上海用 SS,深圳用 SZ)
    g.security_list = ["600519.SS", "000001.SZ"]  

    # 4) 设定股票池
    set_universe(g.security_list) 

    # 5) 均线参数
    g.short_ma_period = 10
    g.long_ma_period  = 30

    log.info("策略初始化完成,各项参数已设置")


日志如下:


注意事项:


1.initialize() 是“初始化”。绝对不要在该函数中执行任何数据获取(如 get_history)或交易下单(如 order)的操作

因为在初始化阶段,平台的交易环境和数据服务尚未完全就绪,执行这些操作会直接导致策略出错


2. 善用 g 对象:所有需要在策略不同部分共享的变量,都应通过 g 对象进行传递

这同样是PTrade推荐的标准做法,可以有效避免使用Python原生的global关键字带来的混乱


3.与 before_trading_start 的区别:请牢记,initialize 只在策略中执行一次;而 before_trading_start 会在“每一天”的开始执行

因此,需要每日更新的变量(如重置交易标记)应放在 before_trading_start 中,(我们将在后续文章中详细介绍)

一个清晰、规范的 initialize() 函数是我们策略稳定运行的有力保障!!!



PTrade免费申请

PTrade免费领取学习案例

PTrade落地辅助

需要的朋友欢迎联系 ~~~



尊重知识,尊重市场 1

著作权归文章作者所有。

最新回复 ( 0 )
发新帖
0
DEPRECATED: addslashes(): Passing null to parameter #1 ($string) of type string is deprecated (/data/user/htdocs/xiunophp/xiunophp.min.php:48)