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

初始化方法,用于初始化一些全局变量,是策略正常运行必要函数之一。
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)此函数会在每天开始交易前被调用,添加每天都要初始化的信息。如果没有盘前初始化需求,那策略中该函数可以不做定义。
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)此函数每个单位周期执行一次。如果按天回测,那就每天执行一次;如果按分钟,那就每分钟执行一次。
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)此函数会在每天交易结束之后调用,用来处理每天收盘后的操作。
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)此函数会在成交单出现变化的时候进行,在委托主推回调时响应,适合对速度要求比较高的策略。
参数:
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)此函数会在成交单出现变化的时候进行,在成交主推回调时响应。
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)以上就是我们今天分享的常用函数,下面我们继续分享更实用的策略案例!
先来看一个简单但是完整的策略:
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 最核心的事件机制、基础函数,一步步讲到实盘策略的搭建逻辑,希望能帮你真正从零入门,把量化交易从概念变成可运行的代码。
(1)开户成功后入金10万后提交申请流程
(2)申请过程全程线上,预计2个工作日申请完成。
(3)等待开通过程中,可以提供测试账号、安装配置流程、量化会员资料。
(4)开通成功后,会通过邮件发送你软件下载地址,登录账号后就可以使用。

福利1:惊喜佣金
福利2:领取完整教程
福利3:添加量化讨论群
福利4:提供专业量化问题解答
福利5:量化工具安装使用教程、视频
福利6:极速柜台,量化投资者专用,速度微秒级
福利7:提供服务器托管模式:ptrade+ldp极速柜台+vip定向服务器(限50人)
