13.7 交易自定义数据

股票自动交易--记录和获取交易相关的数据

在编写交易策略的时候,有时候需要获取上一次交易的时间,数量,价格等信息.助手Order.dll之前可用 OrderInfo 函数获取下单的时间数量等。OrderInfo函数获取的是从交易软件读取的,一般来说能满足需要,不过有时候获取交易软件的数据不一定及时,又或者个别交易软件的数据根本读取不了,这时候你可以考虑使用助手最新提供的交易自定义
数据函数 GetSet 函数。

助手提供的交易自定义数据和大智慧通达信飞狐等软件提供的自定义数据类似,但助手提供的能和助手交易紧密结合,更方便。也不需要第三方插件dlll了。

Get函数可获取上一次买入或卖出时间,价格,数量,和 OrderInfo 不同,只要助手下单,这些数据
就会记录并保存,不管下单是否成功或成交。

除了获取系统(助手)记录的数据,也可以获取你自定义的数据,用户自定义数据用 Set函数定义,
一旦Set了数值,以后可以随时用Get读取。助手内部的数据不需要Set也不能Set(少数几个数据可以set主要用于动态网格交易参数),直接用Get获取。用户定义的数据必须先 Set,才能Get.

交易自定义数据和股票代码,公式号,类型相关联。公式号和大家早已熟悉的BUY函数里面的公式号意义
相同。类型 从 0-99是助手内部保留使用的.例如 0 表示上次买入日期。100或以上的类型是用户自定义
类型,用户可以任意取值,只要你知道代表什么就行。

系统自定义数据类型 从 0-99是助手内部保留使用的,系统自定义数据保存在助手安装目录下面的 TradeSelfData 子目录,目前可用的编号类型如下

 
类型  说明          代码例子(大智慧)  
0     上次买入时间  例子 上次买入时间: "Order@Get"(0,1);
1     上次买入天数  例子 上次买入天数: "Order@Get"(1,1);
2     上次买入秒数  例子 上次买入秒数: "Order@Get"(2,1);
3     上次买入价格  例子 上次买入价格: "Order@Get"(3,1);
4     上次买入数量  例子 上次买入数量: "Order@Get"(4,1);
5     上次卖出时间  例子 上次卖出时间: "Order@Get"(5,1);
6     上次卖出天数  例子 上次卖出天数: "Order@Get"(6,1);
7     上次卖出秒数  例子 上次卖出秒数: "Order@Get"(7,1);
8     上次卖出价格  例子 上次卖出价格: "Order@Get"(8,1);
9     上次卖出数量  例子 上次卖出数量: "Order@Get"(9,1);

  10-19成交数据仅在关联 Qmt极简交易版时可用
10    上次买入成交时间  例子 上次买入成交时间: "Order@Get"(10,1);
11    上次买入成交天数  例子 上次买入成交天数: "Order@Get"(11,1);
12    上次买入成交秒数  例子 上次买入成交秒数: "Order@Get"(12,1);
13    上次买入成交价格  例子 上次买入成交价格: "Order@Get"(13,1);
14    上次买入成交数量  例子 上次买入成交数量: "Order@Get"(14,1);
15    上次卖出成交时间  例子 上次卖出成交时间: "Order@Get"(15,1);
16    上次卖出成交天数  例子 上次卖出成交天数: "Order@Get"(16,1);
17    上次卖出成交秒数  例子 上次卖出成交秒数: "Order@Get"(17,1);
18    上次卖出成交价格  例子 上次卖出成交价格: "Order@Get"(18,1);
19    上次卖出成交数量  例子 上次卖出成交数量: "Order@Get"(19,1);

  50-56是区间交易动态数据,可Set
50    区间上涨幅度  例子  SET_上涨格子:="Order@Set"(2, 50*条件, 1);
51    区间下跌幅度  例子  SET_下跌格子:="Order@Set"(2, 51*条件, 1);
52    设置区间上限  例子  SET_区间上限:="Order@Set"(20, 52*条件, 1);
53    设置区间下限  例子  SET_区间下限:="Order@Set"(10, 53*条件, 1);
54    区间上次成价  例子  SET_上次成价:="Order@Set"(12, 54*条件, 1);
55    区间买入数量  例子  SET_买入数量:="Order@Set"(100, 55*条件, 1);
56    区间卖出数量  例子  SET_卖出数量 :="Order@Set"(100, 56*条件, 1);

  以下是助手记录的历史资产序列数据
99    历史资产曲线  例子  历史资产: "Order@GetGlobal"(99);{日线周期调用}
98    历史信用资产  例子  信用资产: "Order@GetGlobal"(98);{日线周期调用}
97    历史净值曲线  例子  历史净值: "Order@GetGlobal"(97);{日线周期调用}
96    历史信用净值  例子  信用净值: "Order@GetGlobal"(96);{日线周期调用}

99    当天资产曲线  例子  当天资产: "Order@GetGlobal"(99);{分时或分钟周期调用}
98    当天信用资产  例子  信用资产: "Order@GetGlobal"(98);{分时或分钟周期调用}
97    当天净值曲线  例子  当天净值: "Order@GetGlobal"(97);{分时或分钟周期调用}
96    当天信用净值  例子  信用净值: "Order@GetGlobal"(96);{分时或分钟周期调用}
  

类型100以上的用户自定义数据是用户定义。用户自定义数据保存在行情软件安装目录下面的 TradeSelfData 子目录,如果你要读取不同行情软件的数据(比如从大智慧读取通达信写入的助手自定义数据,需要在Order.ini中指定数据路径,例如

path=D:\new_tdx\TradeSelfData\data.db

用户自定义数据类型从100开始,其中 100到9999为单值数据,即每调用一次Set都是设置同一个数据。

10000以上类型表示时间序列数据,时间序列数据在公式代码里面大家其实已经很熟悉了,最常用的C就是一个时间序列数据,其他比如开高低收量额等等历史数据都是时间序列。序列值和运行公式所用的时间周期有关,如果是日线,每天记录有一个值。如果是1分钟线,每一分钟记录一个值。 序列类型的支持大智慧兼容的dll如大智慧,飞狐系列。也支持通达信了。

这里是时间序列数据应用的一个例子: 记录每天的集合竞价成交量,并在图形上显示竞价成交量占全天成交量的比例。

 

除了 SetGet.函数,助手还有 SetGlobalGetGlobal 函数, 这两个函数的数据不和具体股票代码关联,是全局的.

助手还提供 交易自定义数据的管理工具,方便查看和使用数据。从 助手主窗口右上角的 功能 ,选择交易自定义数据。

如下图。对于用户自定义的数据,用户可以双击说明栏目更改数据类型说明。对于数据序列类型的数据,可以点击 显示图形 按钮查看历史图形和导出数据查看。点击 按钮可以生成获取此数据的公式代码,复制到你的指标就行了。

注意:系统定义数据需要勾选 启用 按钮 才会记录和访问数据如果需要修改或删除需先关闭行情软件,删除修改完需要重启助手才能正常工作.

 

对于用户自定义的数据,用户可以双击说明栏目更改数据类型说明。双击数值栏可以修改数据的值。对于数据序列类型的数据,可以点击 显示图形 按钮查看历史图形和导出数据查看,编辑数据。

 

对于数据序列类型的数据,可以点击 显示图形 按钮查看历史图形和导出数据查看。

也可以在行情软件图形上 Get 和 Set ,并查看数据

 

 

大智慧Get Set 函数调用例子 

 
{获取助手系统内置的交易数据,类型<100为助手内置的类型数据如上次买入时间等,
这些数据不需要设置就能获取}
上次买入时间: "Order@Get"(0,1);
上次买入天数: "Order@Get"(1,1);
上次买入秒数: "Order@Get"(2,1);
上次买入价格: "Order@Get"(3,1);
上次买入数量: "Order@Get"(4,1);

{类型 100 以上为用户可定义数据,可以写入任意单值数据,并读取}
条件: c > 10;
if 条件 then begin
	SET_OK:"Order@Set"(c, 100*条件, 1);
	GET:"Order@Get"(100, 1);
end;
	
  

通达信Get Set 函数调用例子 (Get是25号函数,Set是24)

 
{获取助手系统内置的交易数据,类型<100为助手内置的类型数据如上次买入时间等,
这些数据不需要设置就能获取}

上次买入时间: TDXDLL1(25, STR2CON(CODE), 0, 1);
上次买入天数: TDXDLL1(25, STR2CON(CODE), 1, 1);
上次买入秒数: TDXDLL1(25, STR2CON(CODE), 2, 1);
上次买入价格: TDXDLL1(25, STR2CON(CODE), 3, 1);
上次买入数量: TDXDLL1(25, STR2CON(CODE), 4, 1);

{类型 100 以上为用户可定义数据,可以写入任意单值数据,并读取}
条件:= C > 10;
SET_OK: TDXDLL1(24, STR2CON(STRCAT('1',CODE)), 100*条件, C);{写入}
GET: TDXDLL1(25, STR2CON(CODE), 100, 1);{读取};