当前位置:首页>python>从零开始玩量化:如何用python+PTrade完成自动化交易?(全网最详细入门教程:PTrade常用函数详解到代码实战)

从零开始玩量化:如何用python+PTrade完成自动化交易?(全网最详细入门教程:PTrade常用函数详解到代码实战)

  • 2026-08-27 05:17:24
从零开始玩量化:如何用python+PTrade完成自动化交易?(全网最详细入门教程:PTrade常用函数详解到代码实战)

量化交易的魅力,在于用代码把交易逻辑标准化、自动化。各位想入门量化交易的朋友,你是不是也曾有过这些困惑:想靠 Python 做自动化交易,却不知道从哪下手? PTrade 作为国内市场主流的量化交易平台之一,凭借简洁的 Python 接口、丰富的内置函数,成为了很多入门者的首选。今天我们从ptrade常用函数详解到策略实战,逐字逐句拆解平台核心常用函数,把这些函数串联起来,手把手教你写出可直接运行的自动化交易策略。

ptrade测试账户下载链接:https://download.gjzq.com.cn/temp/organ/gjzqptrade_ceshi.rar

一、PTrade运行框架简介

PTrade 量化平台的运行逻辑以事件触发为核心架构,在每个交易日的策略执行流程中,主要依托四类核心事件完成全周期任务:分别是初始化事件 (initialize)、盘前准备 (before_trading_start)、盘中处理 (handle_data) 以及盘后事件(after_trading_end)。

其中,initialize(初始化)与 handle_data(盘中处理)是保障策略正常运行的基础核心模块,属于策略编写的必备结构;而 before_trading_start(盘前)和 after_trading_end(盘后)事件可根据实际的策略需求灵活启用或关闭。

另外,ptrade还支持委托主推事件(on_order_response)、交易主推事件(on_trade_response),可以通过委托和成交的信息来处理策略逻辑,是tick级的一个补充。

除了以上的一些事件以外,ptrade也支持通过定时任务来运行策略逻辑,可以通过run_daily接口实现。

二、PTrade常用函数详解

1、initialize(必选)

初始化方法,用于初始化一些全局变量,是策略正常运行必要函数之一。

initialize(context)

参数:context: Context对象,存放有当前的账户及持仓信息;

def initialize(context):#g为全局对象    g.security = '600570.SS'    set_universe(g.security)def handle_data(context, data):    order('600570.SS',100)

2、before_trading_start

此函数会在每天开始交易前被调用,添加每天都要初始化的信息。如果没有盘前初始化需求,那策略中该函数可以不做定义。

before_trading_start(context, data)

参数:context:Context对象,存放有当前的账户及持仓信息;

def initialize(context):#g为全局变量    g.security = '600570.SS'    set_universe(g.security)def before_trading_start(context, data):    log.info(g.security)def handle_data(context, data):    order('600570.SS',100)

3、handle_data(必选)

此函数每个单位周期执行一次。如果按天回测,那就每天执行一次;如果按分钟,那就每分钟执行一次。

handle_data(context, data)

参数:

context: Context对象,存放有当前的账户及持仓信息;

data:是一个类对象,实现了类似字典的通过key获取value的方法,可以通过股票代码获取代码对应的BarData对象,对象中包含当前周期(日线策略是当天,分钟策略是当前分钟)的数据;

def initialize(context):#g为全局变量    g.security = '600570.SS'    set_universe(g.security)def handle_data(context, data):# 通过data对象获取股票当前周期最新价    current_price = data[g.security].price# 用当前最新价委托下单    order('600570.SS', 100, limit_price=current_price)

4、after_trading_end(可选)

此函数会在每天交易结束之后调用,用来处理每天收盘后的操作。

after_trading_end(context, data)

参数: 

context: Context对象,存放有当前的账户及持仓信息;

data:保留字段暂无数据;

def initialize(context):#g为全局变量    g.security = '600570.SS'    set_universe(g.security)def handle_data(context, data):    order('600570.SS',100)def after_trading_end(context, data):    log.info(g.security)

5、on_order_response(可选)-委托主推

此函数会在成交单出现变化的时候进行,在委托主推回调时响应,适合对速度要求比较高的策略。

参数:

context: Context对象,存放有当前的账户及持仓信息;

order_list:一个列表,当前委托单发生变化时,发生变化的委托单列表。

def initialize(context):    g.security = ['600570.SS','002416.SZ']    set_universe(g.security)    g.flag = 0def on_order_response(context, order_list):    log.info(order_list)if(g.flag==0):        order('600570.SS', 100)        g.flag = 1else:        log.info("end")def handle_data(context, data):    order('600570.SS', 100)

6、on_trade_response(可选)-成交主推

此函数会在成交单出现变化的时候进行,在成交主推回调时响应。

on_trade_response(context, trade_list)

参数:

context: Context对象,存放有当前的账户及持仓信息;

trade_list:一个列表,当前成交单发生变化时,发生变化的成交单列表。

def initialize(context):    g.security = ['600570.SS','002416.SZ']    set_universe(g.security)    g.flag = 0def on_trade_response(context, trade_list):    log.info(trade_list)if(g.flag==0):        order('600570.SS', 100)        g.flag = 1else:        log.info("end")def handle_data(context, data):    order('600570.SS', 100)

以上就是我们今天分享的常用函数,下面我们继续分享更实用的策略案例!

三、PTrade量化策略代码实战

先来看一个简单但是完整的策略:

def initialize(context):    set_universe('600570.SS')def handle_data(context, data):    pass

上面就有我们前面提到的一个策略必备的两个函数 initialize和handle_data。这是一个完整的策略,但是我们没有任何交易,下面我们来添加一些交易。

def initialize(context):    g.security = '600570.SS'# 是否创建订单标识    g.flag = False    set_universe(g.security)def handle_data(context, data):if not g.flag:        order(g.security, 1000)        g.flag = True

这里我们使用下单order函数进行了交易,但只是没有经过条件判断的委托下达,下面我们再加一些条件下单,比如根据历史价格做出判断:

  • 如果上一时间点价格高出五天平均价1%,则全仓买入

  • 如果上一时间点价格低于五天平均价,则清仓卖出

def initialize(context):    g.security = '600570.SS'    set_universe(g.security)def handle_data(context, data):    security = g.security    sid = g.security# 获取过去五天的历史价格    df = get_history(5, '1d', 'close', security, fq=None, include=False)# 获取过去五天的平均价格    average_price = round(df['close'][-5:].mean(), 3)# 获取上一时间点价格    current_price = data[sid]['close']# 获取当前的现金    cash = context.portfolio.cash# 如果上一时间点价格高出五天平均价1%, 则全仓买入if current_price > 1.01*average_price:# 用所有 cash 买入股票        order_value(g.security, cash)        log.info('buy %s' % g.security)# 如果上一时间点价格低于五天平均价, 则清仓卖出elif current_price < average_price and get_position(security).amount > 0:# 卖出所有股票,使这只股票的最终持有量为0        order_target(g.security, 0)        log.info('sell %s' % g.security)

以上就是一个完整的买卖策略。

以上就是今天分享的全部内容,我们从 PTrade 最核心的事件机制、基础函数,一步步讲到实盘策略的搭建逻辑,希望能帮你真正从零入门,把量化交易从概念变成可运行的代码。

四、如何开通QMT实盘量化软件?

1、量化软件开通流程

(1)开户成功后入金10万后提交申请流程

(2)申请过程全程线上,预计2个工作日申请完成。

(3)等待开通过程中,可以提供测试账号、安装配置流程、量化会员资料。

(4)开通成功后,会通过邮件发送你软件下载地址,登录账号后就可以使用。

2、VIP服务

3、VIP福利

福利1:惊喜佣金

福利2:领取完整教程

福利3:添加量化讨论群

福利4:提供专业量化问题解答

福利5:量化工具安装使用教程、视频

福利6:极速柜台,量化投资者专用,速度微秒级

福利7:提供服务器托管模式:ptrade+ldp极速柜台+vip定向服务器(限50人)

最新文章

随机文章