量化策略怎么写?PTrade/QMT 基础策略模板分享
发布时间:8小时前阅读:5
PTrade 基础策略模板:简单均线策略
策略原理
利用短期均线与长期均线的交叉来产生买卖信号。当短期均线向上穿过长期均线时,产生买入信号;当短期均线向下穿过长期均线时,产生卖出信号。
代码实现
python
# 初始化函数,设定要操作的股票、基准等等
def initialize(context):
# 定义一个全局变量, 保存要操作的股票
g.security = '600519.SH'
# 设定沪深300作为基准
set_benchmark('000300.SH')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 输出内容到日志 log.info()
log.info('初始函数开始运行且全局只运行一次')
# 过滤掉order系列API产生的比error级别低的log
log.set_level('order', 'error')
# 设定滑点为0
set_slippage(FixedSlippage(0))
# 设定手续费
set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_data(context, data):
# 获取股票的收盘价
close_data = data[g.security].close
# 计算短期均线和长期均线
short_window = 5
long_window = 20
short_ma = close_data[-short_window:].mean()
long_ma = close_data[-long_window:].mean()
# 获取当前的现金
cash = context.portfolio.cash
# 获取当前股票持仓数量
position = context.portfolio.positions[g.security].quantity if g.security in context.portfolio.positions else 0
# 金叉买入
if short_ma > long_ma and position == 0:
# 计算可买入数量
num_to_buy = int(cash / data[g.security].close)
if num_to_buy > 0:
order(g.security, num_to_buy)
log.info("买入 %s" % (g.security))
# 死叉卖出
elif short_ma < long_ma and position > 0:
order_target(g.security, 0)
log.info("卖出 %s" % (g.security))
QMT 基础策略模板:双均线策略
策略原理
同样基于双均线交叉原理进行买卖操作,通过对比短期和长期移动平均线的数值关系来决定交易时机。
代码实现
python
import numpy as np
from qmtsdk import *
def initialize(context):
# 设置交易品种
context.symbol = '000001.SZ'
# 设置短期窗口和长期窗口
context.short_window = 5
context.long_window = 20
# 初始化仓位
context.position = 0
def handle_data(context, data):
# 获取收盘价序列
close_prices = data.get_bars(context.symbol, 'D', context.long_window).close
if len(close_prices) < context.long_window:
return
# 计算短期均线和长期均线
short_ma = np.mean(close_prices[-context.short_window:])
long_ma = np.mean(close_prices[-context.long_window:])
# 获取可用资金
available_cash = context.account().cash
# 金叉买入
if short_ma > long_ma and context.position == 0:
num_shares = int(available_cash / data.current(context.symbol, 'close'))
if num_shares > 0:
order_shares(context.symbol, num_shares)
context.position = num_shares
log.info('买入 %s, 数量 %d' % (context.symbol, num_shares))
# 死叉卖出
elif short_ma < long_ma and context.position > 0:
order_shares(context.symbol, -context.position)
context.position = 0
log.info('卖出 %s, 数量 %d' % (context.symbol, context.position))
以上两个基础策略模板在 PTrade 和 QMT 上实现了简单的双均线策略,新手可以根据实际情况调整参数和优化策略,例如改变均线周期、添加止损止盈条件等,进一步丰富策略的功能和适应性。股票/量化开户找我!无门槛国债逆回购一折 (百万分之一)!ETF佣金万0.5!优惠多多!免费量化使用量化软件QMT+miniQMT+ptrade!

温馨提示:投资有风险,选择需谨慎。
-
REITs打新:本周共有4个商业REITs基金发售:唯品商业、首农商业、砂之船和地产商业
2026-05-25 16:03
-
网格交易条件单怎么选?小叩深度测评国金、华泰、国泰海通三大主流券商APP
2026-05-25 16:03
-
聪明投资者都会做的止盈止损,应该如何设置?(附自动交易工具)
2026-05-25 16:03


问一问

+微信
分享该文章
