QMT Python API
Python调用VBA指标
调用VBA指标计算历史数据
1
# coding:gbk2
stocks = ['${stock_code}.${market}']3
4
formula_name = 'MA' # VBA指标名称5
period = '1d' # 计算的数据周期,可选"1m":1分钟线;"5m":5分钟线;"15m":15分钟线;"30m":30分钟线;"1h"小时线;"1d":日线;"1w":周线;"1mon":月线;"1q":季线;"1hy":半年线;"1y":年线6
start_time = '' # %Y%m%d 或%Y%m%d%H%M%S7
end_time = '' # %Y%m%d 或%Y%m%d%H%M%S8
count = -1 # 数据条数,-1为 时间区间内全部数据9
dividend_type = 'front' # 复权方式,参考get_market_data_ex的复权种类10
extend_param = {'MA:N1':5,'MA:N2':20,'MA:N3':40,'MA:N4':60,} # MA指标中的参数,等同VBA编辑界面的参数设置中指定参数值11
12
# 注意!VBA指标中的变量和值必须以 `:` 符号赋值,才能被python取到13
# 14
# 例如 MA 指标的VBA写法15
# ma1:MA(C,N1);ma2:MA(C,N2);......16
# 其中,N1等VBA指标使用的参数可用通过extend_param字典进行指定17
18
def after_init(C):19
# for s in stocks:20
# 订阅后,call_formula可以获取到盘中动态结果21
# id = C.subscribe_quote(s, period, '', '', -1)22
23
for s in stocks:24
# 通过 call_formula 去调用客户端中的 `MA` 指标25
formula_results = call_formula(26
formula_name,27
s,28
period=period,29
start_time=start_time,30
end_time=end_time,31
count=count,32
dividend_type=dividend_type,33
extend_param=extend_param34
)35
# 返回值是一个多层嵌套的对象36
print(formula_results.keys()) # 外层key37
print(formula_results['outputs'].keys()) # 输出MA指标输出值名称38
for k in formula_results['outputs']:39
# 依次输出 标的代码, 指标值名称, 时间戳, 指标值列表40
print(s, k, formula_results['timelist'][-1],formula_results['outputs'][k][-5:])41
订阅VBA指标实时计算结果
1
# coding:gbk2
3
import time4
from functools import partial5
import pandas as pd6
7
8
def callback(s, data):9
'''10
回调函数,展示结果11
data格式示例:12
{'dbt': 0, 'timelist': [1712592000000, 1712678400000], 'outputs': {'ma1': [nan, nan], 'ma2': [nan, nan], 'ma3': [nan, nan], 'ma4': [nan, nan]}}13
'''14
15
# 转换时间戳16
timelist = data['timelist'][-5:]17
timelist_fmt = [timetag_to_datetime(t,'%Y%m%d') for t in timelist]18
for index_name in data['outputs']:19
20
for k, t, v in zip(timelist,timelist_fmt,data['outputs'][index_name][-5:]):21
# 依次输出 : 标的代码, 时间戳, 转换后的格式化时间, 指标值名称, 指标值值22
print(s, k, t, index_name, v)23
24
# 初始化参数变量25
stock_list = ['${stock_code}'] # 股票代码列表26
formula_name = 'MA' # VBA指标名称27
period = '1d' # 计算的数据周期,可选"1m":1分钟线;"5m":5分钟线;"15m":15分钟线;"30m":30分钟线;"1h"小时线;"1d":日线;"1w":周线;"1mon":月线;"1q":季线;"1hy":半年线;"1y":年线28
start_time = '' # %Y%m%d 或%Y%m%d%H%M%S29
end_time = '' # %Y%m%d 或%Y%m%d%H%M%S30
count = -1 # 数据条数,-1为 时间区间内全部数据31
dividend_type = 'front' # 复权方式,参考get_market_data_ex的复权种类32
extend_param = {'MA:N1':5,'MA:N2':20,'MA:N3':40,'MA:N4':60,} # MA指标中的参数,等同VBA编辑界面的参数设置中指定参数值33
34
35
def after_init(C):36
37
for s in stock_list:38
# 订阅该指标实时计算结果,并把结果传给回调函数39
id = subscribe_formula(formula_name,s,period,start_time,end_time,count=count,extend_param=extend_param,callback = partial(callback, s))40
41
42