欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 分支语句的多层嵌套问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4709人关注过本帖树形打印复制链接

主题:分支语句的多层嵌套问题

帅哥哟,离线,有人找我吗?
m1978xz
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
分支语句的多层嵌套问题  发帖心情 Post By:2019/4/18 12:49:10    Post IP:123.168.88.72[显示全部帖子]

在第48行显示错误:ELSE前边缺少IF
这个else实际是对应第一个IF的。
我以为一个IF后边可以有多个ELSE if的多分支判断。莫非这样不可以?应该怎么修改啊?

TB中可以用{}来清晰化嵌套关系,请问金字塔中有类似的方法么?

以下内容为程序代码:

1 s_czsc_high:ref(H,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
2 s_czsc_low:ref(L,1);//前一K线处理完包含关系之后的低,初值暂定为前K低
3 s_direction:0;
4 s_status:0;
5
6 //包含
7 czsc_high:=0;//当前K线高点,初值暂定为前K高
8 czsc_low:=0; //当前K线低点,初值暂定为前K低
9 //分型
10 direction:=0; //当前K线方向
11 status:=0;
12 //分型
13 direction:=0; //当前K线方向
14 status:=0;
15 //当前K线状态(0.表示延续方向 1.表示K线转变方向)
16 If (s_czsc_high>0 or s_czsc_low>0)then begin //如果前高大于零或者前低大于零 IF1 //存在缠中说禅K线的
17 If ((s_czsc_high>High and s_czsc_low<Low) or (High>s_czsc_high and Low<s_czsc_low))then begin //是否存在包含关系IF2
18 If (s_direction>0)then begin //IF3 //依据上一根K线方向确定当前K线方向
19 direction=1;
20 status=0;
21 czsc_high=Max(s_czsc_high,High);
22 czsc_low=Max(s_czsc_low,Low);
23 end //对应IF3
24 //更新最高点和最低点
25 Else begin
26 if (s_direction<0)then begin//IF4
27 direction=-1;
28 status=0;
29 czsc_high=Min(s_czsc_high,High);
30 czsc_low=Min(s_czsc_low,Low);
31 end//对应IF4
32 end//对应IF2
33
34 ///---------------上边暂时没问题了
35 Else begin //不存在包含关系
36 If (s_direction>0)then begin //IF5 //依据上一根K线方向确定当前K线方向
37 If (High<s_czsc_high)then begin //IF6 //是否发生转向
38 direction=-1; status=1;
39 czsc_high=High;
40 czsc_low=Low;
41 end//对应IF6
42 Else begin
43 direction=1;
44 status=0;
45 czsc_high=Max(s_czsc_high,High);
46 czsc_low=Max(s_czsc_low,Low);
47 end //对应F5
48 Else begin
49 If (s_direction<0)then begin
50 If (Low>s_czsc_low)then begin
51 direction=1;
52 status=1;
53 czsc_high=High;
54 czsc_low=Low;
55 end
56 Else begin
57 direction=-1;
58 status=0;
59 czsc_high=Min(s_czsc_high,High);
60 czsc_low=Min(s_czsc_low,Low);
61
62 Else begin
63 If ((High>High[1] and Low<Low[1]) or (High[1]>High and Low[1]<Low))then begin //当不存在缠中说禅K线时用K线高低点作为依据判断存在包含关系
64 If (High[1]>High[2])then begin //判断方向
65 direction=1;
66 status=0;
67 czsc_high=Max(High[1],High);
68 czsc_low=Max(Low[1],Low);
69 end
70 Else begin
71 If (Low[1]<Low[2])then begin
72 direction=-1;
73 status=0;
74 czsc_high=Min(High[1],High);
75 czsc_low=Min(Low[1],Low);
76 end
77 Else begin
78 If (High[2]<High[1])then begin
79 If (High[1]>High)then begin
80 direction=-1;
81 status=1;
82 czsc_high=High;
83 czsc_low=Low;
84 Else begin
85 direction=1;
86 status=0;
87 czsc_high=Max(High[1],High);
88 czsc_low=Max(Low[1],Low);
89
90 Else begin
91 If (Low[2]>Low[1])then begin
92 If (Low[1]<Low)then begin
93 direction=1;
94 status=1;
95 czsc_high=High;
96 czsc_low=Low;
97 end
98 end
99 Else begin
100 direction=-1;
101 status=0;
102 czsc_high=Min(High[1],High);
103 czsc_low=Min(Low[1],Low);
104
105 If (czsc_low>0 or czsc_high>0)then begin
106 PlotNumeric("czsc",czsc_low,czsc_high); //输出缠中说禅K线
107 Commentary("("+Text(direction)+","+Text(status)+")");
108 end
109
110 End
111



[此贴子已经被作者于2019/4/18 12:49:48编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 13:12:42    Post IP:123.168.88.72[显示全部帖子]

抱歉,我刚才看了下,这个else 对应的是36行的那个IF


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

 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 13:32:11    Post IP:123.168.88.72[显示全部帖子]

那这个问题是不是因为不支持多层嵌套导致的?

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

就是说不支持这样的Else模块中包含更低一级别的Else?



 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 13:38:39    Post IP:123.168.88.72[显示全部帖子]

那版主您能帮我看看问题出在哪里么?
我从上午一直鼓捣这个,实在看不出错在哪儿了图片点击可在新窗口打开查看

s_czsc_high:ref(H,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
s_czsc_low:ref(L,1);//前一K线处理完包含关系之后的低,初值暂定为前K低
s_direction:0;
s_status:0;

        //包含
czsc_high:=0;//当前K线高点,初值暂定为前K高
czsc_low:=0;   //当前K线低点,初值暂定为前K低
        //分型
direction:=0;        //当前K线方向
status:=0;
        //分型
direction:=0;        //当前K线方向
status:=0;
//当前K线状态(0.表示延续方向 1.表示K线转变方向)      
        If (s_czsc_high>0 or s_czsc_low>0)then begin  //如果前高大于零或者前低大于零  IF1                                                                                                                                   //存在缠中说禅K线的
                If ((s_czsc_high>High and s_czsc_low<Low) or (High>s_czsc_high and Low<s_czsc_low))then begin       //是否存在包含关系IF2
                        If (s_direction>0)then begin   //IF3                                                                                                                                                 //依据上一根K线方向确定当前K线方向
                                direction=1; 
                                status=0;
                                czsc_high=Max(s_czsc_high,High); 
                                czsc_low=Max(s_czsc_low,Low);   
                         end //对应IF3
 //更新最高点和最低点
                         Else begin
                          if (s_direction<0)then begin//IF4
                                direction=-1; 
                                status=0;
                                czsc_high=Min(s_czsc_high,High); 
                                czsc_low=Min(s_czsc_low,Low);
                           end//对应IF4
                           end//对应IF2
                           
///---------------上边暂时没问题了
                Else begin                                                                                                                                                                                       //不存在包含关系
                        If (s_direction>0)then begin  //IF5                                                                                                                                                      //依据上一根K线方向确定当前K线方向
                                If (High<s_czsc_high)then begin  //IF6                                                                                                                                     //是否发生转向
                                        direction=-1; status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end//对应IF6
                                Else begin  
                                        direction=1; 
                                        status=0;
                                        czsc_high=Max(s_czsc_high,High); 
                                        czsc_low=Max(s_czsc_low,Low);
                           end //对应F5
                        Else begin 
                         If (s_direction<0)then begin
                                If (Low>s_czsc_low)then begin
                                        direction=1;
                                        status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end
                                Else begin
                                        direction=-1; 
                                        status=0; 
                                        czsc_high=Min(s_czsc_high,High); 
                                        czsc_low=Min(s_czsc_low,Low);
        
        Else begin
                If ((High>High[1] and Low<Low[1]) or (High[1]>High and Low[1]<Low))then begin                                                               //当不存在缠中说禅K线时用K线高低点作为依据判断存在包含关系
                        If (High[1]>High[2])then begin                                                                                                                                              //判断方向
                                direction=1; 
                                status=0;
                                czsc_high=Max(High[1],High); 
                                czsc_low=Max(Low[1],Low);
                        end
                        Else begin
                        If (Low[1]<Low[2])then begin 
                                direction=-1; 
                                status=0;
                                czsc_high=Min(High[1],High); 
                                czsc_low=Min(Low[1],Low);
                         end
                Else  begin
                        If (High[2]<High[1])then begin
                                If (High[1]>High)then begin
                                        direction=-1; 
                                        status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                Else begin
                                        direction=1; 
                                        status=0;
                                        czsc_high=Max(High[1],High); 
                                        czsc_low=Max(Low[1],Low);
                          
                        Else begin
                         If (Low[2]>Low[1])then begin
                                If (Low[1]<Low)then begin
                                        direction=1; 
                                        status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end
                          end 
                                Else begin
                                        direction=-1; 
                                        status=0;
                                        czsc_high=Min(High[1],High); 
                                        czsc_low=Min(Low[1],Low);          

        If (czsc_low>0 or czsc_high>0)then begin
                PlotNumeric("czsc",czsc_low,czsc_high);                                                                                                                        //输出缠中说禅K线
                Commentary("("+Text(direction)+","+Text(status)+")");
       end       
        
End


 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 13:51:21    Post IP:123.168.88.72[显示全部帖子]

我把这个分支 语句单独提出来做成一个公式,还是出现这个问题:

s_czsc_high:ref(H,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
s_czsc_low:ref(L,1);//前一K线处理完包含关系之后的低,初值暂定为前K低
s_direction:0;
s_status:0;

        //包含
czsc_high:=0;//当前K线高点,初值暂定为前K高
czsc_low:=0;   //当前K线低点,初值暂定为前K低
        //分型
direction:=0;        //当前K线方向
status:=0;
        //分型
direction:=0;        //当前K线方向
status:=0;

                      If (s_direction>0)then begin  //IF5                                                                                                                                                      //依据上一根K线方向确定当前K线方向
                                If (High<s_czsc_high)then begin  //IF6                                                                                                                                     //是否发生转向
                                        direction=-1; status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end//对应IF6
                                Else begin  
                                        direction=1; 
                                        status=0;
                                        czsc_high=Max(s_czsc_high,High); 
                                        czsc_low=Max(s_czsc_low,Low);
                           end //对应F5
                        Else begin 
                         If (s_direction<0)then begin//F7
                                If (Low>s_czsc_low)then begin //F8
                                        direction=1;
                                        status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end//对应F8
                                Else begin
                                        direction=-1; 
                                        status=0; 
                                        czsc_high=Min(s_czsc_high,High); 
                                        czsc_low=Min(s_czsc_low,Low);
                          end  //对应F7

 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 13:56:30    Post IP:123.168.88.72[显示全部帖子]

您说的我大致明白了。我有的Else后边没有IF,就像下边这样了。

 Else begin  
                                        direction=1; 
                                        status=0;
                                        czsc_high=Max(s_czsc_high,High); 
                                        czsc_low=Max(s_czsc_low,Low);

不过前边的if不是判断过了么?
else是否则的意思,就是如果前一个IF的条件不成立,就按后边的方式来改变变量的值。

所以else 后边 不一定要有if吧?
[此贴子已经被作者于2019/4/18 13:56:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 14:40:03    Post IP:123.168.88.72[显示全部帖子]

我感觉您说的是下边这种情况:

此主题相关图片如下:qq截图20190418141654.png
按此在新窗口浏览图片

而我在这个代码里需要的是:

此主题相关图片如下:2.png
按此在新窗口浏览图片

下边就是我遇到问题的那个代码段,在第28行卡住了,说Else前边缺少IF。

但是我在第16行明明写了与之对应的IF。

s_czsc_high:ref(H,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
s_czsc_low:ref(L,1);//前一K线处理完包含关系之后的低,初值暂定为前K低
s_direction:0;
s_status:0;

        //包含
czsc_high:=0;//当前K线高点,初值暂定为前K高
czsc_low:=0;   //当前K线低点,初值暂定为前K低
        //分型
direction:=0;        //当前K线方向
status:=0;
        //分型
direction:=0;        //当前K线方向
status:=0;

                      If (s_direction>0)then begin  //IF5                                                                                                                                                      //依据上一根K线方向确定当前K线方向
                                If (High<s_czsc_high)then begin  //IF6                                                                                                                                     //是否发生转向
                                        direction=-1; status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end//对应IF6
                                Else begin  
                                        direction=1; 
                                        status=0;
                                        czsc_high=Max(s_czsc_high,High); 
                                        czsc_low=Max(s_czsc_low,Low);
                           end //对应F5
                        Else begin 
                         If (s_direction<0)then begin//F7
                                If (Low>s_czsc_low)then begin //F8
                                        direction=1;
                                        status=1;
                                        czsc_high=High; 
                                        czsc_low=Low;
                                 end//对应F8
                                Else begin
                                        direction=-1; 
                                        status=0; 
                                        czsc_high=Min(s_czsc_high,High); 
                                        czsc_low=Min(s_czsc_low,Low);
                          end  //对应F7




 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 15:28:12    Post IP:123.168.88.72[显示全部帖子]

谢谢 您,给您添麻烦了。

 回到顶部
帅哥哟,离线,有人找我吗?
m1978xz
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:193 积分:0 威望:0 精华:0 注册:2018/12/18 15:40:26
  发帖心情 Post By:2019/4/18 19:59:56    Post IP:123.168.88.72[显示全部帖子]

版主。我把这个指标的代码先按条件分支语句的结构梳理了下,大致是下边这个图的样子:

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


 回到顶部