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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 序列变量和全局变量的问题

   

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


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

主题:序列变量和全局变量的问题

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/12/14 9:28:55    Post IP:180.169.30.6[显示全部帖子]


看下这个帖子下的说明。
 
http://www.weistock.com/WeisoftHelp/index.html?zbgs003.htm


金字塔K线相关的行情相关的数据都是序列数据,比如开高低收成交量成交额等都是的。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/12/18 11:12:55    Post IP:180.169.30.6[显示全部帖子]

 1.“有几个问题,Q:=10这种变量是在单K内?那为何回复说用图表按TICK刷新让代码每个TICK都运行一遍,以触发条件呢?
每个TICK都运行一遍的话,Q在K线内也不能保存了,而是每个TCIK都会初始化重置Q值吧。

是的,其实这种固定值刷不刷新都无所谓的。但是如果是其他需要计算得出结果的变量,tick刷新也会进行刷新,最终结果是本根K结束时候刷新出来的数值。

2.全局变量是可以重新赋值的,否则全局变量不就毫无意义了么。

3.你想要实现的需求,在图表上并不推荐使用。一般后台才会使用超全局变量。





命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/12/19 9:46:26    Post IP:180.169.30.6[显示全部帖子]

 1.指标刷新就是分笔来一笔的时候从参与计算开始的第一个K开始把指标公式在每个K上运行一次,是一个从历史到现在的计算过程。

2.简单说VARIABLE的有效范围是跨越多个K的,而普通变量单独一个K内才有效。你可以定义一个全局变量并把他输出一下,你会看到它的值始终保持上次赋值之后的值。
VARIABLE:test:=0;
if mod(BARPOS,10)=0 then test:=BARPOS;//每十个K test赋值一次,没到10个之前保持上次的值。
q:test;//定义q只是方便输出test的值

然后你在把test换成普通变量:
test:=0;
if mod(BARPOS,10)=0 then test:=BARPOS;
q:test;
 你看下输出的差别,非常明显的。
简单用代码看下全局变量的输出值理解下怎么用的就行了。

3.riable是笔误吧,没有这种定义方式的。



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/12/19 17:03:08    Post IP:180.169.30.6[显示全部帖子]

 BARPOS函数, 表示当前K线序号,每个K都是不一样的。
而通常也就是利用BARPOS 以及TIME(日线以下) date(日线) 配合超全局变量来实现你前面说的:

“我要在新bar第一个TICK的时候只重置一次”。 这个稍迟点给你一段代码参考下。

我不太明白你想要的所谓自定义序列变量是怎样的,但是金字塔下所有变量都可以说是序列变量,因为每个变量在每个K上都有对应的值。这就是一组序列的形式了。如果你是要定义数组的话,variable就可以定义的,你看下它的函数说明里面的例子。




命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/12/19 17:21:08    Post IP:180.169.30.6[显示全部帖子]

 ma5:=ma(c,5);
//在新一根K线上记录初始化
if barpos>extgbdata('t') then //t记录的是barpos,因此当barpos>extgbdata('t')满足的时候说明是新K第一次进行计算了
begin
extgbdataset('FIR',ma5);//记录开盘值
extgbdataset('t',barpos);//值记录之后,t重新赋值
end

上面代码还需要在工具-数据管理 下设置下2个全局变量。


图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/12/20 9:35:55    Post IP:180.169.30.6[显示全部帖子]

 time 和date本身在金字塔里面是2个函数, 金字塔里面没有单独的TIME和DATE变量类型的。具体来说金字塔里面不对数据类型有很强的类型区分的。最多就是数字类型和字符串类型的区分了。日期类型的计算也是在函数内部处理掉的。

NumericSeries声明效果和variable定义的全局变量是一样的。这种全局变量都是可以回溯的。

建议你用代码做些测试 深入了解下吧。


命数如织,当如磐石。
 回到顶部