问题描述
东莞证券支持ptrade和qmt,miniQMT , 本来门槛不太高,作为备用也是不错的.
也不知道上面领导怎么想的. 把编程模块移走了.
目前就剩ptrade上内置的一些基础功能
无法通过python编程实现自己的自定义策略.
有点可惜.
解决方案
虽然部分券商(如东莞证券)可能在特定版本中调整或隐藏了 ptrade 的 Python 编程模块,但对于开通了完整 ptrade 权限的投资者来说,使用 Python 编写自定义策略依然是其最核心的优势。
一、 ptrade 策略基础框架
ptrade 的策略代码主要由几个核心事件函数构成:
- initialize(context):初始化函数(必选)。仅在策略启动时运行一次,用于设置股票池、基准、滑点、手续费及全局变量。
- handle_data(context, data):盘中运行函数(必选)。根据策略频率(日线或分钟线)周期性触发,是编写交易逻辑的主要模块。
- before_trading_start(context, data):盘前运行函数(可选)。每天交易开始前调用,用于初始化当日信息。
二、 核心 API 概览
- set_universe(security_list):设置策略操作的股票池。
- get_history(...):获取历史 K 线数据,支持多股票、多字段查询。
- order(security, amount):按数量买卖标的,正数买入,负数卖出。
- order_target(security, amount):买卖股票,直到持仓达到指定数量。
三、 实战案例:双均线交易策略
以下是一个经典的双均线策略源码。逻辑:当5日均线上穿10日均线时全仓买入;当5日均线下穿10日均线时清仓。
def initialize(context):
# 设置我们要操作的股票池:恒生电子
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
security = g.security
# 获取过去10天的历史收盘价
df = get_history(10, '1d', 'close', security, fq=None, include=False)
# 计算5日和10日均线
ma5 = round(df['close'][-5:].mean(), 3)
ma10 = round(df['close'][-10:].mean(), 3)
# 获取当前资金余额
cash = context.portfolio.cash
# 金叉:5日均线大于10日均线,全仓买入
if ma5 > ma10:
order_value(security, cash)
log.info('Buying %s' % security)
# 死叉:5日均线小于10日均线,且有持仓,全仓卖出
elif ma5 < ma10 and get_position(security).amount > 0:
order_target(security, 0)
log.info('Selling %s' % security)
四、 注意事项
如果您在客户端中未找到编程模块,建议联系所属券商的客户经理,确认是否需要满足特定资金门槛或签署相关协议才能开通 ptrade 的完整量化编程(Python)权限。