设为首页收藏本站

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

请问TB的代码是在K线的第几分钟执行? [复制链接]

Rank: 1

精华
0
UID
185717
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2014-4-27
最后登录
2022-4-17
跳转到指定楼层
1#
发表于 2014-5-15 03:47:09 |只看该作者 |倒序浏览
比如我的策略是15分钟K线,那么是15分钟K线刚形成时(也就是第一分钟的第一tick)来执行程序,还是15分钟的最后一个tick执行程序?或者每个tick执行一遍程序?着急,谢谢大家啊

Rank: 1

精华
0
UID
185717
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2014-4-27
最后登录
2022-4-17
2#
发表于 2014-5-15 03:48:29 |只看该作者
如果是K线的第一个TICK就执行程序,那么SAR就不能判断本BAR的,必须判断上一个BAR的值。如果是最后一个TICK执行,那么就没有这个问题。

使用道具 举报

Rank: 1

精华
0
UID
185717
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2014-4-27
最后登录
2022-4-17
3#
发表于 2014-5-15 03:49:17 |只看该作者
所以这个问题涉及到程序的设计思想,很重要啊。

使用道具 举报

Rank: 1

精华
0
UID
185717
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2014-4-27
最后登录
2022-4-17
4#
发表于 2014-5-15 03:54:56 |只看该作者
看到一遍文章,貌似每个TICK都会执行一遍程序?





挖掘交易开拓者(TB)的运行机理
(2012-08-28 15:25:09)
转载▼
标签:
tb
交易开拓者
交易系统
运行机理
程序化交易
财经
        分类: 交易开拓者(TB)


一、历史数据测试

假设商品样本中有200根K线,TB的执行过程是:
    1、先显示出200根K线,此时由于有历史数据,每根K线的数据都是现成的,最后一根K线,也是历史数据,因此所有的数据都是静止的,也没有新的数据进来;

    2、从第一条K线开始(最左边的一条),开始执行交易公式,读取参数值,然后再初始化局部变量,执行Begin和End之间的代码;
    3、然后,进入下一根K线,再初始化局部变量,执行Begin和End之间的代码;
    4、依次处理所有的K线;
    5、在某根K线上,发现符合开仓条件,于是在超级图表上显示出开仓标识,并修改MarketPosition的值;
    6、继续运行下面的K线;
    7、在某根K线上,发现符合平仓条件,于是在超级图表上显示出平仓标识,并在开仓和平仓价之间画出连线。若该笔交易盈利,则用红色连线,若该笔交易亏损,则用绿色连线;
    8、继续运行后面的K线,直到最后一条。
【注意事项】
    1、由于是历史数据,每根Bar都是现成的,是没有Tick的概念的,交易代码会在每根Bar上运行一遍;
    2、由于参数是不能动态改变的,所以,虽然也是程序代码的一部分,但没有必要在每根Bar上都读取一次。只在第一根Bar上读取参数,以后共用即可;
    3、由于是历史数据,不会再发生改变,所以,不会出现信号时有时无的现象;
    4、由于是历史数据,没有买卖盘的动态数据,所以,不会出现滑点,也不会出现成交不了的现象。

二、在开盘前启动自动交易

假设商品样本中有200根K线,假设在开盘前2分钟启动TB的自动交易,TB的执行过程是:
    1、对于已经存在的200根K线,第一根的BarStatus是0,中间的是1,最后面一根是2。对于BarStatus小于2的K线,只在每根Bar上运行一次交易代码;

    2、从第一根K线,直到第200根K线,在每根K线上运行一次交易代码。如果发现某些K线符合开仓或平仓条件,只是显示标示符号,但不实际发出交易指令,因为还没开盘;
    3、开盘后,分笔交易数据(Tick)开始传过来,为了保持实时性,TB就必须对每个Tick做出响应,就是在每个Tick都运行一次程序代码,由此可见,交易时间里,每根最新的Bar上,程序代码都被多次执行,这一点,和历史数据测试时明显不同;
    4、由于在最新的一根Bar上,交易代码反复被Tick数据触发,而此时下一根Bar还没出现,这根Bar的数据中,除了开盘价之外,其他的比如:收盘价、最高价、最低价都在随着每个Tick的变动而变动。当下一根K线出现的瞬间,这条Bar的所有数据才能被确定下来。
【注意事项】

    如果交易代码中的开平仓条件中,用到了Close、High、Low,则有可能使信号时有时无。同样的一根Bar上,由于主力的拉升,价格突然走高,符合了买入条件,该Tick出现后,交易代码执行一次,发现符合买入条件,就发出买入指令。下一笔,价格又被打压下来,再次执行交易代码,买入条件又不符合了,但刚才的买入指令已经发出去了,甚至已经成交了。价格如此反复几次,就会在该Bar上反复买入多次。从而形成反复开仓。如果该Bar最终定型时,价格被打压回来了,超级图表上在该Bar上是不会显示任何交易信号的,但实际上,却在该Bar上买入了多次。

三、在交易时间内启动自动交易

假设商品样本中有200根K线,假设在开盘后2分钟启动TB的自动交易,TB的执行过程是:
    1、读取出200根K线,其中,有2条还是开盘后刚产生的。
    2、在前199根Bar上,每根Bar上执行一次交易代码。如果发现某些Bar上符合开平仓条件,仅仅显示交易信号,但不实际发出交易指令。因为你迟到了,刚才的行情已经成为历史了。
    3、在新的Bar上,依据Tick去运行交易代码。
由此可见,TB的交易指令,应该只能在Barstauts = 2且有行情数据时才能发出。这一点,应该是TB内部的运行机制,不需要我们在TB代码中去再写一遍。

四、Solution

    1、在交易代码中,开平仓指令 If(Barstauts==2)在历史数据测试中不会显示出交易信号。因为除了最后一根bar之外,前面的Bar都不符合条件。但这样的代码,在交易开始后,是可以正常运作的。在交易时间内,TB 仅仅处理最新的一根Bar中的Tick,加了也没用。
    2、使用最新 Bar/Tick 的数据去做判断(Open 除外),容易引发误开仓或反复开仓。要消除误动作,在开平仓条件中,就只能用前面K线的数据去做判断,或使用 high > high[1]、low < low[1] 之类的判断。

    3、Debug 时在可疑的地方设置断点,然后将Bar的编号、时间,各个变量的状态记录在文本中,看看与你设想的是否一样。



五、全局变量(SetGlobalVar、SetTBProfileString)

    1、以一个200根K线的超级图表为例。在这200个Bar中,公式运行是从第一根K线开始,把公式代码从第一行到最后一行计算一遍。当第一个Bar计算完,有输出指令则输出,有交易指令则下单。但是,第一根K线运行的结果,是不会保留到第二根的。在计算第二根前,所有的变量值会全部重算。如果你想把前面BAR运行结果保存到后面,就要用全局变量。

    2、TB还提供另一种方式使用以前Bar的运算结果:序列变量。定义序列变量,然后进行回溯引用以前BAR的运行结果。全局变量和序列变量各有优劣,前者效率高,但是一旦出现断线的情况,就会重置,导致重复开仓,后者虽然效率不高,但是能够保证数据计算在网络不稳定时前后一致。

    3、只能最多设 50 个不同的全局变量。每一个都可以反复赋值,但赋予新值后,之前的值则被清除。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-18 10:41

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部