在Ptrade上写第一个策略:从“Hello World”开始
发布时间:21小时前阅读:16
动手创建第一个策略。我们不走传统路线,而是创造一个“活”的策略,它会看盘、会思考、会交易。用最少的代码,体会完整的量化流程。
目标:一个会“说话”的交易机器人
我们的策略目标很简单:
- 监控市场:实时获取股票价格
- 决策思考:根据价格做出买卖判断
- 执行交易:自动下单
- 汇报状态:打印日志让我们知道它在想什么
这比单纯的"Hello World"更有意义!
第一步:准备"战略地图"(策略框架)
每个Ptrade策略都遵循一个标准结构,就像烹饪的食谱。先了解这个框架:
# 1. 初始化函数:策略启动时运行一次
def initialize(context):
# 在这里设置策略参数、股票池等
pass
# 2. 开盘前运行函数:每个交易日早上9:15运行
def before_trading_start(context):
# 准备数据,更新股票池等
pass
# 3. 盘中运行函数:可以设置定时运行或逐笔运行
def handle_data(context, data):
# 核心交易逻辑在这里
pass
# 4. 收盘后运行函数:每个交易日15:00后运行
def after_trading_end(context):
# 收盘后的分析、记录等
pass
现在我们开始填充这个框架。
第二步:创建你的第一个"活"策略
完整代码(复制即可运行):
# 文件名:my_first_strategy.py
# -*- coding: utf-8 -*-
# 初始化函数:策略启动时运行一次
def initialize(context):
"""
策略的初始化设置,只运行一次
"""
# 打印启动信息
print("=" * 50)
print("我的第一个策略启动啦!")
print(f"启动时间:{context.current_dt}")
print("策略说明:这是一个演示策略,监控贵州茅台价格")
print("=" * 50)
# 1. 设置要监控的股票(贵州茅台)
context.security = '600519.SH' # 股票代码:贵州茅台
context.stock_name = "贵州茅台"
# 2. 设置策略参数
context.buy_price = 1600 # 预设的买入价格
context.sell_price = 1700 # 预设的卖出价格
context.position = 0 # 初始持仓为0
# 3. 设置运行频率(每分钟运行一次)
run_daily(handle_data, time='09:30') # 开盘时运行
run_daily(handle_data, time='10:00') # 10:00运行
run_daily(handle_data, time='11:00') # 11:00运行
run_daily(handle_data, time='14:00') # 14:00运行
run_daily(handle_data, time='14:55') # 收盘前运行
# 4. 设置收盘后运行函数
run_daily(after_trading_end, time='15:10')
print(f"开始监控 {context.stock_name} ({context.security})")
print(f"买入条件:价格低于 {context.buy_price} 元")
print(f"卖出条件:价格高于 {context.sell_price} 元")
# 开盘前准备
def before_trading_start(context):
"""
每个交易日开盘前运行(09:15)
"""
print(f"\n{context.current_dt.date()} 交易日开始")
print("检查系统状态...就绪!")
# 核心交易逻辑
def handle_data(context, data):
"""
在设定的时间点运行的核心交易函数
"""
# 1. 获取当前时间和股票数据
current_time = context.current_dt.strftime("%H:%M:%S")
# 2. 获取贵州茅台的当前价格
# 注意:在回测中,data是历史数据对象;实盘中是实时数据
current_price = data.current(context.security, 'price')
# 3. 打印监控信息
print(f"\n[{current_time}] 检查 {context.stock_name}:")
print(f" 当前价格: {current_price:.2f} 元")
print(f" 当前持仓: {context.position} 股")
# 4. 交易决策逻辑
if current_price < context.buy_price and context.position == 0:
# 价格低于买入价且空仓,执行买入
print(f" → 触发买入信号!")
print(f" → 建议操作:买入100股,价格{current_price:.2f}")
# 实际买入代码(实盘时取消注释)
# order_target_value(context.security, 10000) # 买入10000元
# context.position = 100 # 更新持仓记录
print(" [注:实盘模式下会自动执行买入]")
elif current_price > context.sell_price and context.position > 0:
# 价格高于卖出价且有持仓,执行卖出
print(f" → 触发卖出信号!")
print(f" → 建议操作:卖出持仓,价格{current_price:.2f}")
# 实际卖出代码(实盘时取消注释)
# order_target(context.security, 0) # 清仓
# context.position = 0 # 更新持仓记录
print(" [注:实盘模式下会自动执行卖出]")
else:
# 不满足交易条件
if context.position > 0:
print(f" → 持有中,当前浮盈: {(current_price - context.buy_price) * context.position:.2f} 元")
else:
print(f" → 观望中...")
if current_price < context.buy_price:
print(f" 距离买入条件还差 {context.buy_price - current_price:.2f} 元")
else:
print(f" 价格过高,等待回调")
# 收盘后运行
def after_trading_end(context):
"""
每个交易日收盘后运行
"""
print(f"\n{'='*50}")
print(f"交易日结束:{context.current_dt.date()}")
print("生成今日交易报告:")
print("1. 今日未执行实际交易(演示模式)")
print("2. 策略运行正常")
print("3. 明日继续监控")
print(f"{'='*50}")
# 可以在这里添加保存日志、发送邮件通知等代码
第三步:在Ptrade中运行策略
1. 创建新策略
- 在Ptrade左侧导航栏点击 "策略管理"
- 点击 "新建策略",命名如
first_strategy.py - 将上面的代码完整复制粘贴进去
2. 运行回测(最重要的一步!)
- 点击左侧 "数据与回测" → "策略回测"
- 设置回测参数:
- 点击 "运行回测"
3. 查看结果
等待几秒后,你会看到:
- 回测报告:收益率、夏普比率、最大回撤等
- 收益曲线图:你的策略 vs 基准对比
- 交易明细:每一天策略"想"做什么交易
- 日志输出:在"回测日志"中看到策略打印的所有信息
第四步:理解代码的关键部分
1. context 对象
这是策略的"记忆体",用于存储和传递数据:
context.security = '600519.SH' # 股票代码
context.buy_price = 1600 # 参数
context.position = 0 # 持仓状态
2. run_daily 定时函数
控制策略何时运行:
run_daily(handle_data, time='10:00') # 每天10:00运行
3. data.current 获取数据
获取股票的最新信息:
current_price = data.current('600519.SH', 'price') # 当前价格
# 还可以获取:
# 'open' - 开盘价, 'high' - 最高价, 'low' - 最低价
# 'volume' - 成交量, 'amount' - 成交额
4. 交易函数(注释状态)
实际交易时取消注释:
# 买入10000元的股票
# order_target_value('600519.SH', 10000)
# 卖出全部持仓
# order_target('600519.SH', 0)
第五步:升级你的策略(小挑战)
尝试修改代码,让策略更智能:
挑战1:监控多只股票
# 修改initialize函数
context.stocks = ['600519.SH', '000858.SZ', '300750.SZ'] # 茅台、五粮液、宁德时代
# 修改handle_data函数,循环监控
for stock in context.stocks:
price = data.current(stock, 'price')
print(f"{stock} 价格: {price:.2f}")
挑战2:动态调整买卖价格
# 根据20日均价动态设置
hist = attribute_history('600519.SH', 20, '1d', ['close'])
ma20 = hist['close'].mean()
context.buy_price = ma20 * 0.98 # 均线下方2%买入
context.sell_price = ma20 * 1.02 # 均线上方2%卖出
挑战3:添加真实交易(模拟盘)
- 将Ptrade切换到 "模拟交易" 模式(右上角)
- 取消代码中的交易注释
- 适当调整资金(改为10000元)
- 运行策略,观察实际成交
常见问题与技巧
Q:为什么回测时没有实际交易?
A:因为我们把交易代码注释了。回测只是验证逻辑,实盘/模拟盘才需要真实交易。
Q:如何看到策略的思考过程?
A:查看"回测日志"或"运行监控"中的print输出,这是策略的"自言自语"。
Q:第一次运行要注意什么?
- 一定先用模拟盘:实盘按钮旁边就是模拟盘切换
- 从小资金开始:模拟盘设置1万元即可
- 先运行1-2天观察:不要一开始就跑很久
- 关注日志错误:如果有红色错误信息,按提示修改
Q:策略不运行怎么办?
- 检查是否设置了
run_daily - 检查股票代码格式是否正确(必须带后缀
.SH或.SZ) - 检查是否在交易时间运行(非交易时间策略不执行)
恭喜!你已经跨出了最关键的一步
现在你有了一个:
- ✅ 能实时监控股价的策略
- ✅ 能根据规则思考的策略
- ✅ 能输出详细日志的策略
- ✅ 准备好扩展为真实交易的策略框架
下一步建议:
- 用模拟盘运行这个策略3天,观察它的行为
- 修改买卖价格参数,看看策略反应如何变化
- 尝试添加第二只股票的监控
- 研究回测报告,理解每个指标的含义
记住,所有复杂的策略都是从这个简单框架开始的。你已经掌握了Ptrade量化交易的核心工作流!
提示: 当你准备好进行真实交易时,只需要:
- 取消交易代码的注释
- 调整资金量为你能接受的额度
- 切换到模拟盘运行测试
- 确认无误后,再考虑实盘
现在,去Ptrade里运行你的第一个策略吧!有任何问题,随时查看策略日志,那是你和策略机器人"对话"的窗口。股票开户找我!无门槛国债逆回购一折 (百万分之一)!ETF佣金万0.5!融资利率5%以下!优惠多多!免费量化!ptrade&QMT!
温馨提示:投资有风险,选择需谨慎。
-
买股总怕买贵?【PB低估值】工具:帮你精准揪出“打折股”
2026-03-09 15:29
-
炒股不懂K线?用这个 AI 工具,小白选股不盲目
2026-03-09 15:29
-
2025年业绩涨28%之后,2026年的科创板还能投吗?(附开通条件)
2026-03-09 15:29


问一问

+微信
分享该文章
