以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  赋值语句执行后变量值没有变化  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=162935)

--  作者:jimcnab
--  发布时间:2018/4/22 17:56:36
--  赋值语句执行后变量值没有变化

 有一个指标显示的值不正确,单步跟踪后发现赋值语句执行后变量值没有变化。
赋值语句是 NearRedMACDStartPos:= BarPosCursor + 1;  执行完后并没有把BarPosCursor + 1的值赋给NearRedMACDStartPos。

如下图1, NearRedMACDStartPos:= BarPosCursor + 1 执行前,BarPosCursor = 262, NearRedMACDStartPos = 1.

 


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


 

如下图2,NearRedMACDStartPos:= BarPosCursor + 1 执行时,BarPosCursor = 262, NearRedMACDStartPos = 1.

 


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

 

如下图3,4, NearRedMACDStartPos:= BarPosCursor + 1 执行后,NearRedMACDStartPos 变量的值没有任何变化,仍然为1.

 


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


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

--  作者:wenarm
--  发布时间:2018/4/22 18:03:49
--  
你的这些值,是全局变量?,不要用这种方式调试,直接放图表上输出自己的变量的值,一看就知道了。

[此贴子已经被作者于2018/4/22 18:05:46编辑过]

--  作者:jimcnab
--  发布时间:2018/4/22 19:42:06
--  

不是全局变量,只是普通变量,在指标开始设置了NearRedMACDStartPos = 1。 因为前面有循环语句和IF各种判断,图表上输出很难知道是不是因为前面没有满足条件没有赋值。

 

原因已经找到NearRedMACDStartPos:= BarPosCursor + 1 语句中变量NearRedMACDStartPos 后面有一个非法字符,在金字塔的编辑器中显示为空白,把语句复制到写字板显示为非法字符(ASCII 码 7F),这部分代码都是手工打的,不知道怎么进去的。

 

希望金字塔编辑器能在编译的时候检查脚本是否有非法字符,或变量名是否有非法字符。

 


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


--  作者:wenarm
--  发布时间:2018/4/23 5:40:09
--  
1.你所说的非法字符,在编译过程中会提示的,另外从编译器中复制出来的代码,以为字符类型的原因可能错在你说的现象,但是不代码软件中就存在。
2,pel中已经弱化for循环和数组的的使用,对与序列变量来说,其本身就具备数组的特性,另外for循环这种,除非是需要在一根k上处理多次计算,否则,在k线的横向坐标上for循环没有任何作用和意义,建议你先好好理解pel的执行机制以及变量特性以后再写你的代码。
3.你可以把你的代码需求表述出来,我们尝试写一个范例给你

--  作者:jimcnab
--  发布时间:2018/4/24 14:33:51
--  

1. 关于非法字符的问题,在编译过程中并没有提示,而且我随时可以重现这个问题。

 

A:1;                               
A:2;

 

请把上面两行原封不动的拷入到金字塔的公式编辑器,第二行“A:2; ”  的A后面实际上有个非法字符,拷入后在图表上显示如下图,显然金字塔把第二行的A加上那个非法字符作为一个变量来看待了,并没有报错。

 


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

 

 

2. 至于FOR循环问题,是因为有个Ref(Hhv,X)的问题实现不了,我在另外一个帖子里面提到了,见http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=162928&skin=0        现在我只好用循环语句+数组来实现,实现以后发现速度确实有点慢,但好像没其他办法。

   

[此贴子已经被作者于2018/4/24 14:35:39编辑过]

--  作者:jimcnab
--  发布时间:2018/4/25 13:01:09
--  
以下是引用jimcnab在2018/4/24 14:33:51的发言:

1. 关于非法字符的问题,在编译过程中并没有提示,而且我随时可以重现这个问题。

 

A:1;                               
A:2;

 

请把上面两行原封不动的拷入到金字塔的公式编辑器,第二行“A:2; ”  的A后面实际上有个非法字符,拷入后在图表上显示如下图,显然金字塔把第二行的A加上那个非法字符作为一个变量来看待了,并没有报错。

 


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

 

 

2. 至于FOR循环问题,是因为有个Ref(Hhv,X)的问题实现不了,我在另外一个帖子里面提到了,见http://www.weistock.com/bbs/dispbbs.asp?BoardID=4&ID=162928&skin=0        现在我只好用循环语句+数组来实现,实现以后发现速度确实有点慢,但好像没其他办法。

   

[此贴子已经被作者于2018/4/24 14:35:39编辑过]


第1个问题是否金字塔可以改进,第2个问题是否有更好的解决方法?

--  作者:FireScript
--  发布时间:2018/4/25 13:16:49
--  
 通常只能在循环之外把需要计算的值准备好,否则暂时没有其他好的办法了。