在Ptrade中实现经典的“双均线金叉死叉”策略
发布时间:1小时前阅读:23
在量化交易中,双均线策略(MA Strategy) 是最经典、最基础的 趋势跟踪策略 之一。其核心思想是通过 短期均线(如 5 日均线)与长期均线(如 10 日或 20 日均线)的交叉 来判断市场趋势。
一、策略原理
✅ 金叉(Golden Cross)
- 短期均线上穿长期均线,表示股价由弱转强;
- 买入信号,触发建仓操作。
✅ 死叉(Death Cross)
- 短期均线下穿长期均线,表示股价由强转弱;
- 卖出信号,触发平仓操作。
二、PTrade 实现思路
在 PTrade 中,我们可以使用以下步骤来实现双均线策略:
初始化函数 initialize(context):设置参数、加载数据、定义标的。盘前函数 before_trading_start(context, data):用于选股、预加载数据。盘中函数 handle_data(context, data):执行交易逻辑,判断金叉/死叉并下单。
三、完整代码实现(基于 PTrade Python API)
from ptrade import *
# 策略参数配置
g = get_g()
# 设置交易标的
g.security = '600519.SS' # 示例股票代码:贵州茅台
# 设置均线周期
g.short_window = 5 # 短期均线周期
g.long_window = 20 # 长期均线周期
def initialize(context):
"""
策略初始化函数
"""
# 设置初始资金
context.set_initial_cash(100000)
# 设置基准指数
context.set_benchmark('000001.SH')
# 设置佣金和滑点
context.set_commission(commission=0.0001) # 万1
context.set_slippage(slippage=0.002) # 滑点 0.2%
# 设置交易标的
g.security = '600519.SS'
def before_trading_start(context, data):
"""
盘前运行,用于获取历史数据
"""
# 获取过去 20 天的历史收盘价
history_data = get_history(g.security,
start_date=context.start_date,
end_date=context.end_date,
frequency='1d',
fields=['close'])
g.close_data = history_data['close'].values
def handle_data(context, data):
"""
盘中运行,执行交易逻辑
"""
security = g.security
current_price = data[security].close
# 动态更新历史数据
g.close_data = np.append(g.close_data, [current_price])
# 计算短期和长期均线
ma_short = np.mean(g.close_data[-g.short_window:])
ma_long = np.mean(g.close_data[-g.long_window:])
# 判断金叉/死叉
if ma_short > ma_long and not context.portfolio.positions[security].amount:
# 金叉,且没有持仓,买入
log.info(f"金叉信号,买入 {security}")
order_value(security, context.portfolio.cash)
elif ma_short < ma_long and context.portfolio.positions[security].amount:
# 死叉,且有持仓,卖出
log.info(f"死叉信号,卖出 {security}")
order_target_value(security, 0)
四、策略说明与注意事项
| 项目 | 说明 |
|---|---|
| 标的选择 | 可以替换为任意 A 股股票,如 000001.SZ(上证指数)、600000.SH(浦发银行)等 |
| 均线周期 | 5 日和 20 日是最常见的组合,也可根据需要调整为 10 和 30 |
| 仓位控制 | 当前策略采用 全仓买入/清仓,可进一步优化为按比例买入 |
| 回测建议 | 建议在 PTrade 的回测环境中测试策略,确保逻辑正确性 |
五、策略优化建议
✅ 1. 加入复权处理
- 使用
get_price()接口时,设置adjust='pre'或adjust='post',保证价格一致性。
price_data = get_price(g.security,
start_date=context.start_date,
end_date=context.end_date,
frequency='1d',
adjust='pre')
✅ 2. 添加止损止盈逻辑
if context.portfolio.positions[security].amount > 0:
current_return = (current_price - context.portfolio.positions[security].cost_basis) / context.portfolio.positions[security].cost_basis
if current_return < -0.05: # 亏损超过 5%
order_target_value(security, 0)
✅ 3. 加入涨跌停判断
snapshot = get_snapshot(security)
limit_up = snapshot['limit_up']
limit_down = snapshot['limit_down']
if current_price >= limit_up or current_price <= limit_down:
log.info("今日涨停或跌停,不操作")
return
六、总结:双均线策略在 PTrade 中的实现
| 项目 | 内容 |
|---|---|
| 策略类型 | 趋势跟踪策略 |
| 核心逻辑 | 金叉买入、死叉卖出 |
| 适用场景 | 趋势行情、震荡市中表现稳定 |
| 代码结构 | initialize + before_trading_start + handle_data |
| 优化方向 | 加入风控、复权处理、止损止盈等 |
一句话总结
双均线策略是量化交易中最经典的趋势跟随策略之一,通过 PTrade 的 Python API 实现后,可以轻松构建自动化交易系统。掌握这一策略,是你迈向专业量化交易的第一步!
如果你需要我帮你部署该策略到 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


问一问

+微信
分享该文章
