PTrade 量化开发入门(七):Python 函数基础与核心内置函数实战解析 摘要本文是 PTrade 量化交易入门系列第七篇从 Python 函数基础概念出发结合股票收益计算实战案例详解 PTrade 策略开发中最核心的内置函数 —— 初始化函数initialize、周期执行函数handle_data、定时执行函数run_daily以及交易下单函数帮助零基础读者快速掌握 PTrade 策略的基本框架与开发逻辑。一、Python 函数基础量化策略的 “积木单元”如果把量化策略比作一套完整的交易系统Python 的函数就像是多功能料理机你放入食材传入参数选择对应功能调用函数名就能得到预期的料理返回结果。函数的核心价值是封装重复逻辑让策略代码更简洁、更易维护。1.1 函数的标准定义格式Python 中函数通过def关键字定义标准结构如下def 函数名(参数1, 参数2, ...): # 函数体具体的执行逻辑 return 返回值1.2 实战案例计算股票交易收益我们以 “计算单只股票买卖收益” 为例编写一个可复用的函数直观感受函数的使用方式def calculate_profit(buy_price, sell_price, shares): 计算股票交易收益 :param buy_price: 买入单价 :param sell_price: 卖出单价 :param shares: 交易股数 :return: 总收益金额 profit (sell_price - buy_price) * shares return profit # 调用函数计算收益 buy 10.5 # 买入价 sell 12.8 # 卖出价 quantity 100 # 交易股数 result calculate_profit(buy, sell, quantity) print(f股票收益: {result} 元)运行输出结果股票收益: 230.00000000000006 元1.3 函数执行完整流程上述代码的执行逻辑可以拆解为 5 步定义函数通过def声明calculate_profit函数预设参数与计算逻辑调用函数传入买入价、卖出价、股数三个实际参数触发函数运行执行计算函数内部完成收益公式的运算返回结果通过return将计算结果返回给调用处输出打印接收返回值并格式化打印最终收益。二、PTrade 核心内置函数详解PTrade 作为券商官方量化交易终端内置了大量封装好的 Python 函数直接对应策略运行、行情获取、交易下单等核心能力。掌握这些内置函数是编写可运行 PTrade 策略的基础。2.1 策略入口初始化函数 initialize ()每一个可运行的 PTrade 策略都必须包含initialize(context)函数它是策略的启动入口仅在策略启动时执行 1 次用于完成全局配置。核心要点context策略运行的上下文对象存储账户资金、持仓、运行状态等全局信息set_universe()设置策略的股票池指定策略关注的标的范围set_benchmark()设置策略回测 / 实盘的业绩基准指数g全局变量对象可在策略全生命周期内存储和读取自定义变量。代码示例def initialize(context): 策略初始化设置 # 设置股票池 set_universe([600570.SS, 000001.SZ]) # 设置基准指数沪深300 set_benchmark(000300.SS) # 定义全局变量 g.security 600570.SS g.buy_threshold 1.02 # 买入阈值价格高于均线2%2.2 策略运行控制函数PTrade 提供两类执行逻辑分别对应 “周期循环运行” 和 “定点定时运行” 两种场景。2.2.1 周期循环执行handle_data ()handle_data(context, data)是 PTrade 的默认周期执行函数会按照策略设定的周期日线 / 分钟线自动重复执行适合需要持续盯盘、逐周期判断信号的策略。适用场景分钟级短线交易、日内做 T 策略日线级别均线、量能等指标循环判断。代码示例均线突破买入策略def handle_data(context, data): 每分钟执行一次的交易逻辑 # 获取当前标的最新价格 current_price data[g.security].price # 获取最近5日收盘价计算5日均线 hist get_history(5, 1d, close, g.security) ma5 hist[close].mean() # 当前价高于5日均线2%时买入100股 if current_price ma5 * g.buy_threshold: order(g.security, 100) # 买入100股 log.info(f{g.security} 买入100股当前价格{current_price})2.2.2 定点定时执行run_daily ()run_daily()用于在每日固定时间点执行指定函数适合无需持续盯盘、仅在特定时点操作的策略如尾盘选股、收盘前调仓。适用场景每日收盘前固定时间检查持仓、调仓换股开盘后固定时间执行选股下单。代码示例每日 14:30 持仓检查def initialize(context): # 配置每日14:30执行持仓检查函数 run_daily(check_position, 14:30) def check_position(context): 每天下午2:30检查持仓无持仓则买入 position get_position(g.security) if position.amount 0: log.info(f当前持仓{g.security} {position.amount} 股) else: order(g.security, 100) log.info(f未持有标的执行买入{g.security} 100股)2.3 交易下单核心函数下单交易是量化策略的最终落地动作PTrade 提供了多种下单函数覆盖不同的交易需求。2.3.1 按股数下单order ()最基础的下单函数直接指定标的和交易股数正数为买入负数为卖出。# 买入标的600570.SS 100股 order(600570.SS, 100) # 卖出标的600570.SS 100股 order(600570.SS, -100)2.3.2 按资金比例下单如果想按账户可用资金的固定比例买入需要结合持仓与资金查询函数实现。例如用账户可用资金的 20% 买入标的def buy_by_ratio(context, security, ratio0.2): 按可用资金比例买入 # 获取账户可用资金 available_cash context.portfolio.cash # 获取标的最新价格 current_price get_history(1, 1d, close, security)[close][0] # 计算买入股数取整为100的整数倍 buy_amount int((available_cash * ratio) / current_price / 100) * 100 if buy_amount 100: order(security, buy_amount) log.info(f按20%资金买入 {security}数量{buy_amount} 股)三、学习思路总结PTrade 的内置函数就像乐高积木每一个函数对应一项独立能力掌握基础组件后就能通过组合搭建出复杂的交易策略。学习建议从简单入手先熟练掌握initializehandle_dataorder的基础框架写出第一个可运行的简单策略逐层累加逻辑在基础框架上逐步添加指标计算、仓位管理、风险控制等函数不要一开始就追求复杂策略先模拟后实盘所有函数逻辑先在模拟环境验证跑通确认下单、撤单、持仓查询均正常后再接入实盘运行。风险提示本文只做教学不做任何投资建议投资有风险入市需谨慎不呢恩作者对文章享有一切解释权