欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 【提问】后台程序一定要加islastbar?

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4108人关注过本帖树形打印复制链接

主题:【提问】后台程序一定要加islastbar?

帅哥哟,离线,有人找我吗?
cathero2001
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
【提问】后台程序一定要加islastbar?  发帖心情 Post By:2014/6/2 14:49:27    Post IP:192.102.204.36[显示全部帖子]

老师,您好

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

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

另外请注意:

对于最后一个周期(图表上看就是最新的那个周期)才起作用的函数,如果使用了全局变量进行控制,千万记得加上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线上?

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/3 9:00:36    Post IP:192.102.204.37[显示全部帖子]

想这些细节的地方,图表程序和后台程序本来就不一样吧。

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/3 9:24:28    Post IP:192.102.204.38[显示全部帖子]

谢谢, 那能不能帮助回答一下我的问题呢?我不是很理解它的运行机制。

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/3 12:37:29    Post IP:192.102.204.38[显示全部帖子]

后台是在当前最新k线上运作的,加了islastbar判断是为了防止全局变量variable在之前k线计算过的数值影响到当前的计算。所以就如admin所说,加islastbar是针对variable的,不是针对常规的后台下单

谢谢你的回答:)

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

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

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

谢谢:)

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/4 14:46:00    Post IP:192.102.204.36[显示全部帖子]

明白了。还有一个问题:

 

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线,直接忽略了,对吗?

 

谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/4 15:26:38    Post IP:192.102.204.36[显示全部帖子]

又晕了!~

 

没有一个完整的有例子的文档啊。。

 

我们不讲islastbar,就讲讲下面的例子吧,你能帮我完整讲解一下,在逐K模式下面,从第一根K线到最后一根K线,这段程序是怎么执行的吗?拜托啊。。。

 

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);


 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/4 15:52:29    Post IP:192.102.204.36[显示全部帖子]

现在没有一个结果呀。

"逐k线就是variable就是从360根k线第一根就要计算数值" 这个怎么计算?计算些什么?

 

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);

<!--fatiejztpost.asp##回帖帖子循环部分-->

variable和其他代码有2个不同的视角?

从第一根K线开始计算写什么??



 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/4 15:55:36    Post IP:192.102.204.36[显示全部帖子]

能不能说的具体一点。。

 

对于Variable来说,从第一根K线开始计算,是不是下列代码变成了下下面那样呢:

 

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);

 

变成:

 

variable:a=10;

for firstBar to LastBar

    if a=10 then begin

        a:=6;

    end;


 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/4 16:22:39    Post IP:192.102.204.36[显示全部帖子]

谢谢,你说的意思我明白。但是你说的“计算计算”,能不能具体一点?

 

我的理解,计算就是把程序执行一遍,难道不是吗?

 

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);


 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:308 积分:0 威望:0 精华:0 注册:2014/2/10 23:56:25
  发帖心情 Post By:2014/6/6 11:16:04    Post IP:192.102.204.36[显示全部帖子]

你指的公式是什么?

 回到顶部
总数 11 1 2 下一页