以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  【提问】后台程序一定要加islastbar?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=65710)

--  作者:cathero2001
--  发布时间:2014/6/2 14:49:27
--  【提问】后台程序一定要加islastbar?
老师,您好

我刚看了“联机帮助”里的一段话有点困惑:

====================================================================================

另外请注意:

对于最后一个周期(图表上看就是最新的那个周期)才起作用的函数,如果使用了全局变量进行控制,千万记得加上islastbar控制条件,比如下面例子:

 

variable:a=10;

debugout(\'a1=%.0f\',a);

if a=10 then begin

debugout(\'a2=%.0f\',a);

tbuy(1,1,mkt);

a:=6;

debugout(\'a3=%.0f\',a);

end;

debugout(\'a4=%.0f\',a);

 

 

 

上面这个例子将无法得到下单买入的目的,因为当程序运行后,在第一周期TBUY并不执行,因为不是最新的周期,而此时a即被赋值为6,那么当程序一遍遍扫描运行到最新周期后,IF语句检测到a=6就不执行买操作了,所以您永远都不会有下单触发。

   上述公式将无法正常工作,是因为variable声明的变量是在整个计算周期内的全局变量,对于tbuy和debugout函数,他们都是在公式的最后的一个周期(最新周期的数据才能用于下单或者输入调试结果)才执行的函数,所以将导致最后一个周期到来时a实际已经等于6而不会去正确执行开仓语句。

解决办法是:if a=10 and islastbar then begin 这样加上最后周期判断,以避免a被过早赋新值,或者去掉 variable 变量声明,让a变为一个周期之内的变量即可。

====================================================================================

让我困惑的是,为什么这个TBUY无法成交?难道我打开金字塔,启动后台程序开始交易,这时候操作的对象并不是最新一根K线?我什么时候必须加islastbar?我怎么知道系统是否运行在最后一根K线上?

谢谢!

--  作者:admin
--  发布时间:2014/6/2 22:10:02
--  

上面的范例只是针对全局变量运行时赋值的一种解释,只是针对某一种特定情况,并不是表示所有后台程序都需要这样做.

不清你的专业版是否是正式账号还是测试账号,如果你还不是专业版的正式用户,那么我们强烈建议新手用户不要上来就去研究后台,先把图表交易搞明白,循序渐进的学习.


--  作者:雪球
--  发布时间:2014/6/3 5:32:59
--  
专业版测试帐号是什么意思?就是免费试用期吗
--  作者:cathero2001
--  发布时间:2014/6/3 9:00:36
--  
想这些细节的地方,图表程序和后台程序本来就不一样吧。

我的理解是,后台开始执行的时候,是从现有的第一根K线开始解析,一直到解析到最新的K线,然后再随着K线的更新逐根解析新来的K线,对吗?

如果是的话,那第一根K线指的是谁?

--  作者:jinzhe
--  发布时间:2014/6/3 9:21:32
--  
ADMIN的话好好思考理解一下,不要强行按照自己的思路来理解
--  作者:cathero2001
--  发布时间:2014/6/3 9:24:28
--  
谢谢, 那能不能帮助回答一下我的问题呢?我不是很理解它的运行机制。
--  作者:jinzhe
--  发布时间:2014/6/3 10:19:57
--  
后台是在当前最新k线上运作的,加了islastbar判断是为了防止全局变量variable在之前k线计算过的数值影响到当前的计算。所以就如admin所说,加islastbar是针对variable的,不是针对常规的后台下单
--  作者:cathero2001
--  发布时间:2014/6/3 12:37:29
--  
后台是在当前最新k线上运作的,加了islastbar判断是为了防止全局变量variable在之前k线计算过的数值影响到当前的计算。所以就如admin所说,加islastbar是针对variable的,不是针对常规的后台下单

谢谢你的回答:)

但是就像你所说的,“为了防止全局变量variable在之前k线计算过的数值影响到当前的计算”,如果后台总是运行在当前最新的K线上的话,那不应该出现这个问题啊?

我们举一个具体的例子来说吧,清楚一点。

比如现在系统里有3000跟一分钟K线,最新一根是昨天的收盘1分钟K线。今天早上我打开金字塔,开始运行后台程序,那这个程序会从第一根K线开始运行,还是直接运行今天早上第一根1分钟K线?

谢谢:)

--  作者:jinzhe
--  发布时间:2014/6/3 13:08:04
--  

就是最新k线,后台只会在最新k线算;但是variable不会,所以要用islastbar来限定

如果不能理解,那么就请记住结论


--  作者:cathero2001
--  发布时间:2014/6/4 14:46:00
--  

明白了。还有一个问题:

 

variable:a=10;

debugout(\'a1=%.0f\',a);

if a=10 then begin

    debugout(\'a2=%.0f\',a);

    tbuy(1,1,mkt);

    a:=6;

    debugout(\'a3=%.0f\',a);

end;

debugout(\'a4=%.0f\',a);

 

在逐K模式下,在lastbar之前 if begin ... end之间的代码其实是只有第一根K线才会走到,对吧?那么tbuy()其实也是被走到的,只是因为不是最后一个K线,直接忽略了,对吗?

 

谢谢