跳转至

rhq_plugin

TSL语言的实时行情插件,用于和事件服务器接收、回播实时行情。

安装

(已集成到mytsl发行版中)

Level1行情的动态库文件:rhq_plugin.dll或者rhq_plugin.so。

Level2行情的动态库文件:rhq_plugin_level2.dll或者rhq_plugin_level2.so。

把相关的动态库文件拷贝到执行服务器或者TSL目录的plugin目录。

配置

Level1行情:在plugin目录创建rhq_plugin.ini。

Level2行情:在plugin目录创建rhq_plugin_level2.ini。

文件内容:

;;; 设置 0 将不启用实时行情连接
enable = 1
;;; 如果在执行服务器加载,请设置 1 执行服务器模式,缺省是0
exec_server_mode = 0

[hq]
;;; 事件服务器的IP和对应的端口
server = 127.0.0.1
port = 8888
port2 = 8899
;;; 是否自动连接实时行情服务,缺省是0,设置1将在插件加载时自动连接事件服务器获取实时行情
autostart = 0

[market]
;;; 市场配置文件(market.ini等)所在目录
dir = d:\tinysoft\bin
;;; 允许生成分钟线数据,缺省是0,不生成
minutedata = 1
;;; 允许记录行情,缺省是0,不记录
toverdata = 1
;;; 保留最近多少笔行情记录, 缺省是100
toverdata_max_n = 100

[log]
;;; 配置log目录
path = d:\tinysoft\bin\log
;;; 可以配置成 trace, debug, info, warning, error, critical, off,缺省是 info
level = info

;;; Level2行情专有配置
[L2]
;;; 保留最近多少笔逐笔成交
max_n = 1000

执行服务器和TSL.exe的配置差别

  • 在执行服务器加载是多用户模式,所以需要配置执行服务器模式 exec_server_mode = 1。
  • 执行服务器需要配置成自动连接实时行情服务 autostart = 1。

使用指南

提供的TSL函数:

rhq_restart() 重新启动实时行情服务。如果没有设置自动启动服务,可以用这个方法启动服务。
rhq_stop() 停止实时行情服务。
rhq_get(stock) 获取对应股票的实时行情数据,返回的数据是array,格式是:
 [
  代码, 
  名称, 
  时间, 
   昨收, 
   开盘, 
   最高, 
   最低, 
   收盘, 
   成交量, 
   成交金额, 
   成交笔数, 
   涨停价,
   跌停价,
   收益率1, 
   收益率2,
   买卖盘中买的价格数组,
   买卖盘中买的量数组,
   买卖盘中卖的价格数组,
   买卖盘中卖的量数组,
   交易状态
 ]
 其中涨停价、跌停价、交易状态要支持的事件服务器才有值,否则是0或空值。
rhq_get_custom(stock, custom) 获取对应股票的自定义数据。
 参数custom支持的自定义数据有:
 "@1m.volume" 最近一分钟的成交量
 "@1m.amount" 最近一分钟的成交金额
 Level2行情专有:
  "@high" 利用逐笔成交计算的最高价
    "@low" 利用逐笔成交计算的最低价
    "@volume" 利用逐笔成交计算的总成交量
    "@amount" 利用逐笔成交计算的总成交金额
    "@trade.1m.volume" 利用逐笔成交计算的最近一分钟的成交量
    "@trade.1m.amount" 利用逐笔成交计算的最近一分钟的成交金额
rhq_minutedata(stock, n) 提取对应股票的分钟线数据, n是可选参数,缺省是-1,也就是提取所有数据。数据格式:
 [
  [
   时间,
   最新价格,
   开盘价,
   最高价,
   最低价,
   成交量,
   成交金额,
   成交笔数,
   收益率(或基金时点净值)
  ]
 ]
 注意:数据是倒序的,最近的数据排在前面。
rhq_toverdata(stock, n) 提取对应股票最近的n条行情记录。
 n是可选参数,缺省是100,最大值是配置中的允许保留的最大值。
 数据格式是array of rhq_get返回的数据格式。
 可以用这个方法来检查是否错过了某些行情记录。
 注意:数据是倒序的,最近的数据排在前面。
rhq_status() 返回实时行情状态,返回的数据是array,格式是:
 [ 
  [
   交易日,
   索引,
   名称,
   状态,
   最后的序列号
  ], 
  .... 
 ]
rhq_replay() 回播当天的实时行情。
rhq_replay_status() 回播状态,返回整数,值的含义:
 0 不是回播
 1 回播中
 2 回播已经完成
rhq_wait(stock, timeout) 等待相关股票数据更新。
 stock参数可以是单个股票,也可以是股票的数组。如果是股票数组,只要其中一只股票数据有更新就会返回该只股票的数据。可以用"*"来表示任意股票代码。
 timeout是可选参数,以毫秒为单位,缺省是10分钟。

 返回的结果:
 [
  状态,
  数据
 ]
 状态值含义:
  1 数据有更新
  2 超时
 数据和rhq_get返回的数据相同格式。

Level2行情专用

rhq_get_trade(stock, n) 获取最近的n条逐笔成交,n是可选参数,缺省是100。返回的数据是array,格式是:
 [
  [
   交易时间,
   交易价格,
   成交量,
   成交金额,
   成交编号,
   买卖方向,
   交易类型,
   叫卖方委托序号,
   叫买方委托序
  ],
  ...
 ]
 注意:数据是倒序的,最近的数据排在前面。

应用范例

  1. 对实时行情数据进行监控。
while 1 do
begin
 r := rhq_wait(array("SH000001","SZ399001","SZ000001","SH600000"), 3000);
 if r[0] = 2 then echo "数据有3秒未更新";
end;
  1. 用实时行情计算相关指数或因子。

  2. 用回播来回溯相关的计算。

rhq_replay();
while rhq_replay_status() <> 2 do
begin
 r := rhq_wait("SZ000001", 3000);
 // ...
end; 
rhq_stop();
  1. 交易、回测。