以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  PEL数据库操作问题  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=175442)

--  作者:分析者
--  发布时间:2020/4/9 22:30:42
--  PEL数据库操作问题

请问,如下PEL语句在语法上应该没问题,但是,为何只有最后一条else if DATATYPE=4 后面的语句才可以正确执行,而如果把这条删除,则else if DATATYPE=6 then后面的也可以正确执行,反正就是只能正确执行最后一条else if 语句


DATABASE(\'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\JZTdb1.mdb\');
if  DATATYPE=2 then
BEGIN
   DBREADTYPE( 1 );
   DBTABLE(\'Select * From @Code@ where zhouqi="5m" Order By StockDate\');
end
else if DATATYPE=6 then
BEGIN
   DBREADTYPE( 1 );
   DBTABLE(\'Select * From @Code@ where zhouqi="1d" Order By StockDate\');
end
else if DATATYPE=4 then
BEGIN
   DBREADTYPE( 1 );
   DBTABLE(\'Select * From @Code@ where zhouqi="30m" Order By StockDate\');
end
//读取STOCKCLOSE字段数据
   收盘价:DBVALUE(\'stockclose\');


--  作者:yukizzc
--  发布时间:2020/4/10 9:14:54
--  
你在每个if里面加上一个不同的debugfile,看下是否有执行
--  作者:分析者
--  发布时间:2020/4/10 14:40:21
--  回复:(yukizzc)你在每个if里面加上一个不同的debug...

老师,按照您说的方法测试了,发现应该执行的代码是执行了的,不应该执行的代码没有执行,但就是读取出的数据不正确,只要不用IF语句,只写一条读数据库语句就是正确的。


--  作者:分析者
--  发布时间:2020/4/10 16:08:39
--  
老师,可否尽快帮我分析解决下吧,我着急推进哦,谢谢!
--  作者:分析者
--  发布时间:2020/4/11 11:41:11
--  

老师,这个问题能答复吗?


--  作者:无为剑
--  发布时间:2020/4/11 12:26:25
--  
DBTABLE在你的公式中只能使用一条的,没法像你这样使用的。
你这个需求PEL是无法满足的,建议你改用VBA

--  作者:分析者
--  发布时间:2020/4/12 10:36:47
--  回复:(无为剑)DBTABLE在你的公式中只能使用一条的,...
金字塔指导老师好,你们可否优化一下这点呢?我发现其实是IF语句的问题,不该执行的代码执行了。
我用了个折衷的土办法解决了,同时写多个指标,都叠加到图上,每个指标仅限在某个周期下显示,方法很土,反正凑合用。
但,如果金字塔优化IF语句就好了

--  作者:分析者
--  发布时间:2020/4/12 10:43:24
--  

if DATATYPE!=4 THEN exit;
if DATATYPE=4 then
BEGIN
WARNING_DISABLE:4 ;
runmode:1;//序列模式
DATABASE(\'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\JZTdb1.mdb\');
DBREADTYPE(1);
DBTABLE(\'Select * From @Code@  Order By StockDate\') ;
收盘价:DBVALUE(\'stockclose\');
end

例如上述代码,不论在任何周期,计算其他语句没有执行,但数据库语句都是执行了的,这个金字塔PEL语句的BUG

--  作者:无为剑
--  发布时间:2020/4/12 15:04:20
--  
这不是BUG,是数据库的
DATABASE(\'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\JZTdb1.mdb\');
DBTABLE(\'Select * From @Code@  Order By StockDate\') ;
在你的公式编译时就已经内置到PEL中了,这2个语句是不会通过公式运行来改变加载的,你不可以将这2个当作函数来用,你就理解为2个设置就行了。
金字塔这么设计的原则是PEL作为基础语言给大家使用,简单实用是PEL的设计原则

--  作者:分析者
--  发布时间:2020/4/13 9:20:29
--  
金字塔可以优化这点吗?我现在要写至少5个PEL指标同时加载,确实麻烦,也不美观,而这个需求也是重要的,建议能尽快优化。