设为首页收藏本站

 找回密码
 注册
查看: 5485|回复: 4
打印 上一主题 下一主题

交易开拓者TB夜盘编程技术集 [复制链接]

Rank: 2

精华
0
UID
118147
积分
118
帖子
81
主题
7
阅读权限
30
注册时间
2013-4-15
最后登录
2017-11-23
跳转到指定楼层
1#
发表于 2014-7-24 20:25:07 |只看该作者 |倒序浏览
引自博客:http://blog.sina.com.cn/s/blog_8195699c0102uxvs.html

一、夜盘交易的基本情况
目前期货市场上,越来越多的品种都加入了夜盘交易大军。截止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的时间。语法 Numeric Time()。

三、几个问题的编程实现
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开盘后的一天的价格。

Rank: 3Rank: 3

精华
0
UID
93332
积分
172
帖子
74
主题
22
阅读权限
40
注册时间
2012-1-17
最后登录
2017-11-22
2#
发表于 2014-12-11 11:12:57 |只看该作者

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
93332
积分
172
帖子
74
主题
22
阅读权限
40
注册时间
2012-1-17
最后登录
2017-11-22
3#
发表于 2014-12-11 11:14:48 |只看该作者
过滤掉集合竞价TB上有自带的函数Callauctionfilter。

使用道具 举报

Rank: 1

精华
0
UID
150643
积分
36
帖子
27
主题
8
阅读权限
10
注册时间
2012-5-2
最后登录
2016-3-19
4#
发表于 2015-1-5 14:07:48 |只看该作者
kyler 发表于 2014-12-11 11:14
过滤掉集合竞价TB上有自带的函数Callauctionfilter。

楼主,有夜盘的跨周期引用的函数吗?

使用道具 举报

Rank: 1

精华
0
UID
225427
积分
20
帖子
15
主题
2
阅读权限
10
注册时间
2015-12-20
最后登录
2021-2-6
5#
发表于 2019-3-14 16:50:36 |只看该作者
If (trueDate!=trueDate[1])
{                }
Else
{                }
改为
If (trueDate!=trueDate(1))
{                }
Else
{                }

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-26 12:26

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部