以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  [求助]用VARIABLE定义的变量和直接赋值定义的变量有何不同?  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=2501)

--  作者:z7c9
--  发布时间:2010/8/17 15:53:16
--  何时才能让交易系统评测可以使用信号出现价成交测试

用VARIABLE定义的变量和直接赋值定义的变量有何不同?

比如

VARIABLE:N=0;

N:=0;

这两种定义N的方式在使用上有什么不一样么?

[此贴子已经被作者于2010-8-17 15:59:27编辑过]

--  作者:fly
--  发布时间:2010/8/17 16:48:30
--  

variable 为全局变量申明语句,一般用在逐周期计算模式。因为variable变量在序列模式与普通的变量是没有区别的。

 

关于全局变量的用处,可参考

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=2262&page=5

 

用下面的例子在股指期货上面测试,可直观的看到有何不同

//测试全局变量
variable:maxprofit=0;

IF BARPOS = 2 THEN
   MAXPROFIT := 10;
 
IF BARPOS = 10 THEN
   MAXPROFIT := 30;
 
AA:MAXPROFIT,linethick0;

 

 

//测试普通变量
n:=0;
IF BARPOS = 2 THEN
    n:=1;
IF BARPOS = 10 THEN
    n:=2;

BB:n,linethick0; 


--  作者:readonly
--  发布时间:2012/10/18 13:58:19
--  
楼上的例子,去掉第一行: variable:maxprofit=0;
得出的AA值,跟有那行,没有区别,为什么要加申明全局变量呢?

--  作者:jinzhe
--  发布时间:2012/10/18 14:15:34
--  

逐k线模式下不定义全局变量,maxprofit每根k线上的初始值都是0,然后再进行计算。

定义全局变量后,第一根k线以初始值0进行计算,然后后面的k线就以上根k线计算出的值为初始值进行计算


--  作者:readonly
--  发布时间:2012/10/18 14:33:39
--  
事实上并非如你所说,你测试一下那段程序吧。
去掉variable:maxprofit=0;
在第三棍k线时,AA仍然等于10.


--  作者:every
--  发布时间:2012/10/18 14:41:19
--  

variable 为全局变量申明语句,一般用在逐周期计算模式。因为variable变量在序列模式与普通的变量是没有区别的。

 

你看到的,没有区别,就是因为是在序列模式下看的.

 

逐周期和序列的区别,请参考该页

http://www.weistock.com/runmode.htm

 

逐周期模式下,在每根K线上,代码都会从头到尾重新执行一次; 

         Variable型的全局变量,只会在一开始的时候初始化一次随后的每个周期,会根据具体条件对此全局变量赋予不同的值,从而可以让编程者根据其返回值再行判断和利用.

         全局变量maxprofit,只在第1根的K线上初始化为0,

                              在BARPOS = 2的K线上(第2根K线上),重新赋值为10,且此后的K线上为10

                              在BARPOS = 10的K线上(第10根K线上),重新赋值为30,且此后的K线上为30

        

         普通变量n则不是,执行每根K线,都会先赋值为0

                              在BARPOS = 2的K线上(第2根K线上),先赋值为0,在赋值为2

                              在BARPOS = 10的K线上(第10根K线上),先赋值为0,在赋值为10

                              在其它K线上,都是赋值为0

 

如果还不明白,就出去走动走动换换心情,自己用K线再看看理解理解

[此贴子已经被作者于2012-10-18 14:42:00编辑过]

--  作者:jinzhe
--  发布时间:2012/10/18 14:44:40
--  

你不要用结果来套原理,

换个最简单的公式,然后再结合理解我的话


variable:n=0;
m:=0;
if c>o then n:=n+1;
if c>o then m:=M+1;
n1:n;
m1:m;

 

看看M和N的差别,是不是你所说的一样
--  作者:readonly
--  发布时间:2012/10/18 14:45:18
--  
我是在逐k模式下测试的,你试一下。
--  作者:3dian
--  发布时间:2012/10/18 14:47:39
--  

Variable的变量有点类似一个类里面的public声明的变量,另外一个类似private声明的变量,生命周期不同!


--  作者:jinzhe
--  发布时间:2012/10/18 14:51:08
--  
我给的公式能体现全局变量定义和不用全局变量定义的变量区别,READONLY导入公式看看结果。