以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于全局变量函数EXTGBDATA的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=157738)

--  作者:死亡旋律
--  发布时间:2017/9/10 11:13:18
--  关于全局变量函数EXTGBDATA的问题

----------------------------------------------------------------

//这个程序的目的是计算所交易的品种持平、 上涨、下跌的天数各是多少天。}

WARNING_DISABLE:4;
 

VARIABLE : LEVELA =0;     //定义持平天数的变量
VARIABLE : UPA =0;         
//定义上涨天数的变量
VARIABLE : DOWNA =0;     //定义下跌天数的变量

 

LEVEL0: EXTGBDATA(\'LEVELA\');
UP0: EXTGBDATA(\'UPA\');
DOWN0: EXTGBDATA(\'DOWNA\');

 

IF CLOSE=OPEN THEN
     LEVELA := LEVELA+1 ;  
//若收盘价等于开盘价,则LEVELA加一
     ELSE BEGIN
            IF CLOSE>OPEN THEN 
                  UPA := UPA+1 ;        //若收盘价高于开盘价,则UPA加一
           
ELSE BEGIN
            DOWNA := DOWNA+1 ;  
//若收盘价低于开盘价,则DOWNA加一
      
END
END

 

LEVELX : LEVELA;
UPX : UPA;
DOWNX : DOWNA;

 

EXTGBDATASET(\'LEVELA\',EXTGBDATA(\'LEVELA\')+LEVELA);  
EXTGBDATASET(\'UPA\',EXTGBDATA(\'UPA\')+UPA);
EXTGBDATASET(\'DOWNA\',EXTGBDATA(\'DOWNA\')+DOWNA);

 

LEVEL1: EXTGBDATA(\'LEVELA\');
UP1: EXTGBDATA(\'UPA\');
DOWN1: EXTGBDATA(\'DOWNA\');

----------------------------------------------------------

将以上程序运行后,遇到如下问题:

问题一、如果我进入一个品种的图表,然后双击管理面板下面的指标名:

图片点击可在新窗口打开查看
(图 一)
比如,
第一次鼠标左键双击执行后,结果为:
 
图片点击可在新窗口打开查看
(图 二)
 
第二次鼠标左键双击执行后,结果为:
 
图片点击可在新窗口打开查看
(图 三)
 
 
如果我连续双击执行下去,LEVEL0,UP0,DOWN0,LEVEL1,UP1,DOWN1的值会不断增加。这种情况在我把图表的显示K线多少通过键盘上的方向键上下移动的时候仍然会出现全局变量数据不停累加的情况。。这样的话,就没办法在全局变量数据库里面知道这个图表上到底持平、上涨和下跌的天数多少了,因为可能因为意外的多双击了一次或者使用键盘上的方向键拉伸和缩短图表上K线显示数量而发生改变,请问,如何避免这种情况??
 
问题二、 在程序中,我想达到的结果是,计算我所需要交易的所有品种的持平、 上涨和下跌的天数的总和。。但是当我在第一个品种得到数据是:
图片点击可在新窗口打开查看 
(图 四)
 
然后,我在图表上退出这个品种,进入另外一个品种后得到的数据是:
图片点击可在新窗口打开查看
(图 五)
 
问题是这样的:
因为两次操作连续进行,通过这个程序段:
 
LEVEL0: EXTGBDATA(\'LEVELA\');
UP0: EXTGBDATA(\'UPA\');
DOWN0: EXTGBDATA(\'DOWNA\');
 
在图四中显示数据:
图片点击可在新窗口打开查看
也就是说LEVEL1为164,而上面的程序段在程序的句首,也就是直接从全局变量数据库里面取出来的,所以在图五中,LEVEL0应该也为164,
可是,在图五中,LEVEL0却是169,如下:
图片点击可在新窗口打开查看
,不知道问题出在哪里?
 
以上两个问题请管理员帮忙解释,谢谢!!!

--  作者:客人
--  发布时间:2017/9/10 11:18:38
--  

为什么图片不能显示啊。。。。

补发图片看看

图片点击可在新窗口打开查看
(图 一)

--  作者:wenarm
--  发布时间:2017/9/10 11:19:33
--  
EXTGBDATA函数一般用于后台。他们没有历史值,不适合图表的机制。
另外,贴出请使用IE浏览器。

--  作者:死亡旋律
--  发布时间:2017/9/10 11:24:52
--  

我用的就是IE啊,不知道为什么贴图不显示。。。

 

在上面的程序中,我使用EXTGBDATASET把计算得到的变量值存入全局变量数据库后,为什么第二次使用全局变量时,这个全局变量的值不是我第一次存入的数值了???


--  作者:wenarm
--  发布时间:2017/9/10 11:27:52
--  
VARIABLE : LEVELA =0;     //定义持平天数的变量
VARIABLE : UPA =0;         
//定义上涨天数的变量
VARIABLE : DOWNA =0;     //定义下跌天数的变量

 这三个变量已经是全局变量了,


--  作者:死亡旋律
--  发布时间:2017/9/10 11:42:21
--  

我的问题是这样的,就只以LEVELA为例

首先我定义一个全局变量LEVELA,我的理解是这个变量只在当前图表的品种上起作用的,所以这个变量的作用是计算当前品种的历史上持平的天数。。
VARIABLE : LEVELA =0;     //定义持平天数的变量

下面这个语句,只是纯粹低显示全局变量数据库里面的LEVELA,此时我手动设置数据库里面这个变量值是0;

LEVEL0: EXTGBDATA(\'LEVELA\');

 采用逐K线模式,下面语句计算所有的持平天数:

IF CLOSE=OPEN THEN
     LEVELA := LEVELA+1 ;  
//若收盘价等于开盘价,则LEVELA加一

 

下面语句显示当前品种的持平天数:      

LEVELX : LEVELA;

将上面计算得到的当前品种的持平天数存入全局变量数据库, 如果我继续去看另外一个品种的话,这个数据会通过同样的程序累加起来,最终得到我看的所有品种的持平的天数:

EXTGBDATASET(\'LEVELA\',EXTGBDATA(\'LEVELA\')+LEVELA);  

 

显示我看过的所有的品种的持平天数:

LEVEL1: EXTGBDATA(\'LEVELA\');

----------------------------------------------------------

 

大概想法就是上面那样子,,

现在的问题是,当我看过第一个品种的显示语句,   LEVEL1: EXTGBDATA(\'LEVELA\');  显示出来的 LEVELA的数值

和我看下一个品种的显示语句,LEVEL0: EXTGBDATA(\'LEVELA\');   显示出来的LEVELA的数值,

以上两个数值应该是相等的,但是实际上在金字塔程序里的显示的数据并不相等。


--  作者:wenarm
--  发布时间:2017/9/10 13:07:46
--  
这个函数只在最新的k上有效,
你切换到其他品种上,如果k线没刷新,其值自然没有变动,在这个品种上关掉公式,在从新加载看下。


另外你这个需求,可以用自定义数据的横向统计完成。
http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=57336

[此贴子已经被作者于2017/9/10 13:08:38编辑过]