以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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线,直接忽略了,对吗?
谢谢 |