QMT Python API

Python调用VBA指标

调用VBA指标计算历史数据

qmt://docs/python
Python
1# coding:gbk
2stocks = ['${stock_code}.${market}']
3 
4formula_name = 'MA' # VBA指标名称
5period = '1d' # 计算的数据周期,可选"1m":1分钟线;"5m":5分钟线;"15m":15分钟线;"30m":30分钟线;"1h"小时线;"1d":日线;"1w":周线;"1mon":月线;"1q":季线;"1hy":半年线;"1y":年线
6start_time = '' # %Y%m%d 或%Y%m%d%H%M%S
7end_time = '' # %Y%m%d 或%Y%m%d%H%M%S
8count = -1 # 数据条数,-1为 时间区间内全部数据
9dividend_type = 'front' # 复权方式,参考get_market_data_ex的复权种类
10extend_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 
18def 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_param
34 )
35 # 返回值是一个多层嵌套的对象
36 print(formula_results.keys()) # 外层key
37 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指标实时计算结果

qmt://docs/python
Python
1# coding:gbk
2 
3import time
4from functools import partial
5import pandas as pd
6 
7 
8def 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# 初始化参数变量
25stock_list = ['${stock_code}'] # 股票代码列表
26formula_name = 'MA' # VBA指标名称
27period = '1d' # 计算的数据周期,可选"1m":1分钟线;"5m":5分钟线;"15m":15分钟线;"30m":30分钟线;"1h"小时线;"1d":日线;"1w":周线;"1mon":月线;"1q":季线;"1hy":半年线;"1y":年线
28start_time = '' # %Y%m%d 或%Y%m%d%H%M%S
29end_time = '' # %Y%m%d 或%Y%m%d%H%M%S
30count = -1 # 数据条数,-1为 时间区间内全部数据
31dividend_type = 'front' # 复权方式,参考get_market_data_ex的复权种类
32extend_param = {'MA:N1':5,'MA:N2':20,'MA:N3':40,'MA:N4':60,} # MA指标中的参数,等同VBA编辑界面的参数设置中指定参数值
33 
34 
35def 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 

智能助手

咨询式 AI · 带入当前文档

智能助手加载中...