PTrade(恒生 PTrade 量化)从登录→建策略→写代码→调试→回测→仿真→实盘 的超详细、一步到位流程,和 QMT 对比会更清楚差异(PTrade 更像聚宽 / 米筐,API 更标准)。
登录 → 准备数据 → 新建策略 → 写代码(initialize handle_data)→ 编译调试 → 回测 → 仿真(模拟)→ 实盘上线 → 监控日志
PTrade 策略只有两个强制函数,和 QMT 很像但名字不同:
initialize(context) —— 初始化(只跑 1 次)def initialize(context):
# 设置股票池(单只/多只)
set_universe(['000001.SZ']) # 平安银行
# 全局参数
g.short = 5
g.long = 20
# 手续费(和实盘一致)
set_commission(Commission(open=0.0003, close=0.001))
handle_data(context, data) —— 主逻辑(每根 K 线跑 1 次)def handle_data(context, data):
# 1. 获取历史数据(最近20根收盘价)
hist = context.get_history(
symbol='000001.SZ',
bar_count=20,
frequency='1d',
fields=['close']
)
close = hist['close'].values
# 2. 计算均线
ma5 = close[-5:].mean()
ma20 = close.mean()
# 3. 交易逻辑:金叉买入、死叉卖出
if ma5 > ma20 and not context.portfolio.positions['000001.SZ'].total_amount:
order_value('000001.SZ', context.portfolio.available_cash * 0.8)
log.info("买入信号触发")
elif ma5 < ma20 and context.portfolio.positions['000001.SZ'].total_amount:
order_target('000001.SZ', 0)
log.info("卖出信号触发")
context:全局上下文(账户、持仓、资金、时间)data:当前 K 线数据(open/high/low/close/volume)g:全局变量(跨周期保存参数)log.info():打印日志(调试必备)initialize 和 handle_data,不要删context.get_history()# 止损示例
pos = context.portfolio.positions['000001.SZ']
if pos.total_amount > 0 and pos.market_value > 0:
pnl_ratio = pos.pnl / pos.market_value
if pnl_ratio < -0.05:
order_target('000001.SZ', 0)
log.info("触发止损,全部卖出")
.SZ/.SScontext.portfolio 写成 context.portinitialize/handle_data;QMT 是 init/handlebarcontext.get_history;QMT 用 ContextInfo.get_bar_dataorder_value/order_target);QMT 是 order_buy/order_sell#coding:gbk准备数据 → 新建策略 → 写 initialize 初始化 → 写 handle_data 交易逻辑 → 调试 → 回测 → 仿真 → 实盘
股票开户找我!无门槛国债逆回购一折 (百万分之一)!ETF佣金万0.5!融资利率5%以下!优惠多多!免费量化!ptrade&QMT!