一、夜盘交易的基本情况
目前期货市场上,越来越多的品种都加入了夜盘交易大军。截止7月23日,目前已经确定在夜盘交易的有:
上海期货交易所:白银ag,铜cu,金au,锌zu
大连商品交易所:棕榈油p、焦炭J
另外,根据郑州商品交易所的公告,2014年8月4日也将会启用白糖、棉花和甲醇三个品种的夜盘交易。
二、交易开拓者与夜盘相关的几个函数
1、Date
属于系统函数,使用时类似于序列变量回溯值的使用。如Date,Date[1],Date[2]。
在无夜盘的情况下,我们经常使用这种语句来表示一天的开始初始化:
If(Date!=Date[1])
{}
Else
{}
这种语句,在有夜盘的情况下不能使用。原因是晚上2:00的bar的date值,与早上9:00的bar的date值是一样。晚上21:00的bar的值,也与下午3:00的bar的date值一样。Date!=Date[1]只发生在晚上0:00的时候。
2、CurrentDate
获取交易开拓者平台的当前日期。获取的是当前时间,与bar值无关。
3、Truedate
交易开拓者TB平台自带的“用户函数”,但在TB手册中没有介绍。
由于是用户函数,引用方法是:Truedate(0), truedate(1), truedate(2)等。
truedate返回指定Bar的真正交易日期。
所谓真正交易日期,简单而言就是所有夜盘算入一一个白天的交易日日期。
周一晚上21:00开始的夜盘,其truedate属于周二的日期;周五晚上开始的夜盘,其truedate属于下周一。用以下语句可以作为一天的初始化
If(trueDate!=trueDate[1])
{}
Else
{}
4、OpenD
交易开拓者TB平台自带的“用户函数”,但在TB手册中也有介绍。其引用方法是OpenD(0), OpenD(2), OpenD(3)等。
OpenD是求N天前的开盘价,语法是:Numeric OpenD(Numeric daysAgo)
有夜盘的品种的开盘价OpenD是取晚上9:00的开盘价,
而没有夜盘的品种的开盘价OpenD是取早上9:00的开盘价。
而highD,lowD,其意义是相同的,即是取一个完整truedate的最高、最低值。
5、Time
系统函数,返回当前公式应用商品在当前Bar的时间。语法NumericTime()。
三、几个问题的编程实现
1、如何过滤掉集合竞价
采用以下语句,过滤掉两个时间的集合竞价,适合于夜盘与非夜盘品种一起用。
If(BarStatus==2 && Time==0.090000 &&High==Low) return;
If(BarStatus==2 && Time==0.210000 &&High==Low) return;
2、是否可以用bar的数目来判断当天的情况
虽然当使用的K线周期确定,一天bar的数目也是确定的。但是在遇到节假日时,当天晚上经常没有夜盘,所以会导致bar的数目混乱,不宜使用。
3、如何用交易开拓者查看各函数值的情况
当不清楚各函数,如前文所说的openD,truedate的取值时,建议使用以下公式应用,放在具体的超级图表上,则可以看到各函数的取值情况。
Params
Vars
Begin
FileAppend ("d:\print2.log",DateTimeToString(Date+Time)+" Date="+Text(Date)+" Date[1]="+Text(Date[1])+"CurrentDate="+Text(CurrentDate)+" OpenD(0)="+Text(OpenD(0))+"OpenD(1)="+Text(OpenD(1))+" OpenD(2)="+Text(OpenD(2))+"truedate(0)="+Text(truedate(0))+"truedate(1)="+Text(truedate(1))+"t");
End
4、将以往程序修改成为适应夜盘程序的思路
主要看使用的策略情况,以下是几个可能影响到的点:
(1)交易日bar的数目,bar的时间
(2)是否使用(Date!=Date[1])的判断
(3)使用openD,HighD, LowD的逻辑判断,如有夜盘,会指到21:00开盘后的一天的价格。