在QMT里面做回测必须了解这些,附代码案例

QUANT 2025-12-01 10:02:47 95 举报

量化交易的核心在于策略的有效性,而策略的有效性则必须通过严谨的回测来验证。

QMT官方解释:ContextInfo QMT 平台提供的全局上下文对象,它包含了策略运行时的所有关键信息,包括:时间信息(回测开始/结束时间)资金信息(初始资金)行情信息(当前股票代码、市场、周期等)K线信息(当前K线索引、K线数量等模式信息(是否回测模式)


通俗解释:写一个股票交易策略,这个策略需要知道很多信息比如现在是什么时间?我在看的是什么股票?我有多少钱?现在是什么周期的K线?我看的是第几根K线?ContextInfo就是一个"信息容器",它把所有这些信息都装在里面,随时随地供我们查询和使用。ContextInfo 可以为我们的策略提供实时信息了解策略运行的状态支持条件判断并根据不同条件执行不同逻实现自适应策略


1. ContextInfo.capital - 设定回测初始资金(我要用100万块钱来回测这个策略,每次下单10%仓位)

# coding:gbk


def init(ContextInfo):

#场景1: 根据资金计算下单数量


ContextInfo.capital = 1000000
 
 
#100


def handlebar(ContextInfo):

#每次下单时,用总资金的10%来下单


order_amount = ContextInfo.capital * 0.1


print(f"
本次下单金额: {order_amount}")

我们在qmt来看打印结果:



2. ContextInfo.start / ContextInfo.end - 回测时间范围(回测从202311日到202511日这段时间的数据 )

# coding:gbk


def init(ContextInfo):

#设置回测时间范围

ContextInfo.start = "2023-01-01 00:00:00"  # 开始时间

ContextInfo.end = "2025-1-1 23:59:59"    # 结束时间

print(f"回测时间: {ContextInfo.start} {ContextInfo.end}")

def handlebar(ContextInfo):

#获取当前回测时间(需要用函数转换)

current_time = timetag_to_datetime(

ContextInfo.get_bar_timetag(ContextInfo.barpos),

"%Y-%m-%d %H:%M:%S"

)

print(f"当前回测时间: {current_time}")

我们在qmt来看打印结果:

3.ContextInfo.period - 获取当前周期("现在看的是日线、还是5分钟线、还是周线?")假设本段要求我们只在日线上执行策略

# coding:gbk

def handlebar(ContextInfo):

#场景1: 只在日线上执行策略

if ContextInfo.period != '1d':

return 
#
不是日线就退出

#场景2: 根据周期调整参数

if ContextInfo.period == '1d':

fast_period = 10

slow_period = 30

elif ContextInfo.period == '1h':

fast_period = 5

slow_period = 15

else:

fast_period = 3

slow_period = 10


4.ContextInfo.barpos - 获取当前K线索引号(你有一堆K线排成一队,从第0个开始编号。barpos 就是告诉你现在处理的是第几跟K线)

5.ContextInfo.time_tick_size - 获取K线总数("你总共有多少根K线?)

计算还剩多少根K线,在最后一根K线时平仓

ContextInfo.dividend_type - 获取复权处理方式

当公司分红或送股时,股价会调整。dividend_type 就是告诉我们:"这些数据是怎么处理的?是调整过的,还是没调整的?"


以上为QMT回测基本上使用到的模板,关注点赞收藏,后续将写一篇完整的回测模板赠送大家快速上手学习,欢迎 QMT/ptrade量化申请 ,量化交流找我们 一起尽快上手。




尊重知识,尊重市场 1

著作权归文章作者所有。 未经作者允许禁止转载!

最新回复 ( 0 )
发新帖
0