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, ratio=0.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 的内置函数就像乐高积木,每一个函数对应一项独立能力,掌握基础组件后,就能通过组合搭建出复杂的交易策略。
学习建议:
- 从简单入手:先熟练掌握
initialize+handle_data+order的基础框架,写出第一个可运行的简单策略; - 逐层累加逻辑:在基础框架上逐步添加指标计算、仓位管理、风险控制等函数,不要一开始就追求复杂策略;
- 先模拟后实盘:所有函数逻辑先在模拟环境验证跑通,确认下单、撤单、持仓查询均正常后,再接入实盘运行。
风险提示:本文只做教学,不做任何投资建议,投资有风险,入市需谨慎,不呢恩作者对文章享有一切解释权
更多推荐



所有评论(0)