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


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

   

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


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

主题:【提问】后台程序一定要加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线上?

谢谢!

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


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2014/6/2 22:10:02    Post IP:61.164.211.211[只看该作者]

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

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


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


加好友 发短信
等级:蜘蛛侠 帖子:1089 积分:0 威望:0 精华:0 注册:2013/11/4 11:07:43
  发帖心情 Post By:2014/6/3 5:32:59    Post IP:123.153.157.90[只看该作者]

专业版测试帐号是什么意思?就是免费试用期吗

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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线指的是谁?

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


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2014/6/3 9:21:32    Post IP:58.246.57.26[只看该作者]

ADMIN的话好好思考理解一下,不要强行按照自己的思路来理解


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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[只看该作者]

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

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


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2014/6/3 10:19:57    Post IP:58.246.57.26[只看该作者]

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


金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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线?

谢谢:)

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


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2014/6/3 13:08:04    Post IP:58.246.57.26[只看该作者]

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

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



金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
cathero2001
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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线,直接忽略了,对吗?

 

谢谢


 回到顶部
总数 21 1 2 3 下一页