以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  怎样通过全局变量控制PLAYSOUND函数只播报一遍声音  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=390)

--  作者:轮回
--  发布时间:2009/12/7 11:12:49
--  怎样通过全局变量控制PLAYSOUND函数只播报一遍声音
当K线满足触发条件时,打开声音播报,但这个条件要维持到这根K线周期走完声音才停止,如何控制声音只播报一遍?
[此贴子已经被admin于2009-12-7 11:24:38编辑过]

--  作者:admin
--  发布时间:2009/12/7 11:30:17
--  

使用 EXTGBDATASET(S,X)EXTGBDATA(S) 来设置和读取全部变量.

金字塔的全局变量属于一个小型数据库,保存的变量值会一直保存下去,即便关了金字塔软件也会在下次启动时保存数据.

全局变量的管理在 工具->数据->全局变量 菜单项找到.

 

具体实现思路是:

EXTGBDATASET(\'LastBar\',barpos);

lastbarpos:=EXTGBDATA(\'\'LastBar\'\');

PLAYSOUND(COND AND lastbarpos != barpos,\'e:\\music.mp3\');


--  作者:轮回
--  发布时间:2009/12/7 11:41:33
--  
从原理上看这种思路并不能实现只报一遍的功能。
--  作者:admin
--  发布时间:2009/12/7 11:50:59
--  

把你试过了不能实现的代码贴出来看看


--  作者:轮回
--  发布时间:2009/12/7 12:17:16
--  

EXTGBDATASET(\'LastBar\',barpos);    //存地址

lastbarpos:=EXTGBDATA(\'\'LastBar\'\');  //取地址

PLAYSOUND(COND AND lastbarpos != barpos,\'e:\\music.mp3\');  //这里lastbarpos永远是当前地址,所以lastbarpos != barpos条件永远不会成立,因此永远不会播报。

该问题我已解决。

[此贴子已经被作者于2009-12-7 12:18:11编辑过]

--  作者:bhwhui
--  发布时间:2009/12/7 12:35:38
--  

怎么解决的?感兴趣,用Variable? 谢谢。

[此贴子已经被作者于2009-12-7 12:35:50编辑过]

--  作者:轮回
--  发布时间:2009/12/7 12:40:57
--  
全局变量并不好用,应该有一些问题.即使使用字符型全局变量,也会使K图压缩变形,解决只报一遍的这个问题不需要使用全局变量.
--  作者:bhwhui
--  发布时间:2009/12/7 12:53:49
--  

呵呵呵,您还是没说出来,估计有3个方法.

1:时钟控制

2:Variable 控制

3:信号跳变一瞬间控制。

 

“也会使K图压缩变形”,什么意思?不明白,谢谢。


--  作者:轮回
--  发布时间:2009/12/9 15:09:17
--  
以下是引用bhwhui在2009-12-7 12:53:49的发言:

呵呵呵,您还是没说出来,估计有3个方法.

1:时钟控制

2:Variable 控制

3:信号跳变一瞬间控制。

 

“也会使K图压缩变形”,什么意思?不明白,谢谢。

呵呵,还在测试阶段,有时侯会在中间自动插入一个"叮当"的铃声,也有个别时候会报两遍,还在找原因.


--  作者:dzfp2010
--  发布时间:2010/3/18 12:16:43
--  关于:彻底解决:【残害贩卖!流浪儿童!】

可以实现的,加IF判断,代码如下:

 

\'如果不是最后一根K线 

IF BarPos<>EXGBDATA("LastBar") THEN BEGIN

 

\'播放音效文件

PLAYSOUND(1,\'e:\\music.mp3\');   

 

\'给自定义的全局变量重新赋值:

EXGBDATASET("LastBar",BarPos);

END

 

 

[此贴子已经被作者于2010-3-18 12:24:25编辑过]