以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  ref函数赋值失败  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=169503)

--  作者:m1978xz
--  发布时间:2019/4/22 14:34:37
--  ref函数赋值失败
下列代码有4个变量赋值不成功,s_direction,s_status,s_czsc_high,s_czsc_low
请问是我的ref写法不对么?请版主帮忙看看什么问题。
代码全文如下:

QianH:=ref(h,1);
QianL:=ref(L,1);
direction:0;       ////当前K线方向,初值暂定为1
status:0;  //当前K线的状态,是否为顶或者底,或者两者都不是。
s_direction:ref(direction,1);  //前一K线的方向,应该有0,1,-1三个选项。
s_status:ref(status,1); 
czsc_high:0;//当前K线高点,初值暂定为前K高
czsc_low:0;   //当前K线低点,初值暂定为前K低
s_czsc_high:ref(czsc_high,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
s_czsc_low:ref(czsc_low,1);//前一K线处理完包含关系之后的低,初值暂定为前K低

        //分型
f1:=(s_czsc_high>0 or s_czsc_low>0);  //如果前一缠K高>零,或者前一缠K高>0
f2:=((s_czsc_high>High and s_czsc_low<Low) or (High>s_czsc_high and Low<s_czsc_low));
//如果前一缠K高>本K高,同时前一缠K低<本k低,或者(本K高>前一缠K高,同时本K低<前一缠K低)
f3:=s_direction>0;//如果前一K线方向大于0
f4:=s_direction<0;//如果前一K线方向<0
f5:=s_direction>0;
f6:=High<s_czsc_high;
f7:=s_direction<0;
f8:=Low>s_czsc_low;
f9:=((High>ref(h,1) and Low<ref(L,1)) or (ref(h,1)>High and ref(L,1)<Low));
f10:=ref(H,1)>ref(H,2);
f11:=ref(L,2)>ref(L,1);
f12:=ref(H,2)<ref(H,1);
f13:=ref(H,1)>High;
f14:=ref(L,2)>ref(L,1);
f15:=ref(L,1)<Low;//当前K线状态(0.表示延续方向 1.表示K线转变方向) 


///---------------第一组判断开始     
        If f1 and f2 and f3 then begin  //如果前高大于零或者前低大于零  IF1                                                                                                                                   //存在缠中说禅K线的
               
                 direction:=1; 
                 status:=0;
                 czsc_high:=Max(s_czsc_high,High); 
                 czsc_low:=Max(s_czsc_low,Low);   
                         end //对应IF3
      
 //更新最高点和最低点
                        If f1=1 and f2=1 and f3=0 and f4=1 then begin
                                direction:=-1; 
                                status:=0;
                                czsc_high:=Min(s_czsc_high,High); 
                                czsc_low:=Min(s_czsc_low,Low);
                           end//对应IF4
                      
                        
///---------------第二组判断开始
                 If f1=1 and f2=0 and f5=1 and f6=1 then begin  //如果前高大于零或者前低大于零  IF1                                                                                                                                                                             //不存在包含关系
                                       direction:=-1; 
                                        status:=1;
                                        czsc_high:=High; 
                                        czsc_low:=Low;
                 end
                 If f1=1 and f2=0 and f5=1 and f6=0 then begin  //如果前高大于零或者前低大于零  IF1                                                                                                                                                                             //不存在包含关系
                                       direction:=1; 
                                        status:=0;
                                        czsc_high:=Max(s_czsc_high,High); 
                                        czsc_low:=Max(s_czsc_low,Low);
                end
///---------------第三组判断开始
                 
                 If f1=1 and f2=0 and f5=0 and f7=1 and f8=1 then begin 
                                        direction:=1;
                                        status:=1;
                                        czsc_high:=High; 
                                        czsc_low:=Low;
                  end
                 If f1=1 and f2=0 and f5=0 and f7=1 and f8=0 then begin 
                                direction:=-1;
                                status:=0;
                                czsc_high:=min(s_czsc_high,High); 
                                czsc_low:=min(s_czsc_Low,Low);
                  end
///---------------第四组判断开始 ,从这里 开始f1为0了
                   If f1=0 and f9=1 and f10=1 then begin 
                                        direction:=1; 
                                        status:=0;
                                        czsc_high:=Max(QianH,High); 
                                        czsc_low:=Max(QianL,Low);
                          end  
                          
                  If f1=0 and f9=1 and f10=0 and f11=1 then begin                                                                                                                                 //判断方向
                                direction:=-1; 
                                status:=0;
                                czsc_high:=Min(QianH,High); 
                                czsc_low:=Min(QianL,Low);
                     end   
///---------------第五组判断开始            
                   If f1=0 and f9=0 and f12=1 and f13=1 then begin 
                                        direction:=-1; 
                                        status:=1;
                                        czsc_high:=High; 
                                        czsc_low:=Low;
                    end
                    
                    If f1=0 and f9=0 and f12=1 and f13=0 then begin
                                        direction:=1; 
                                        status:=0;
                                        czsc_high:=Max(QianH,High); 
                                        czsc_low:=Max(QianL,Low);
                     end
///---------------第六组判断开始
                          
                      If f1=0 and f9=0 and f12=0 and f14=1 and f15=1 then begin
                                        direction:=1; 
                                        status:=1;
                                        czsc_high:=High; 
                                        czsc_low:=Low;
                       end                           
                      If f1=0 and f9=0 and f12=0 and f14=1 and f15=0 then begin
                                        direction:=-1; 
                                        status:=0;
                                        czsc_high:=Min(QianH,High); 
                                        czsc_low:=Min(QianL,Low);          
                       end
                STICKLINE(czsc_low>0 and czsc_high>0,czsc_low,czsc_high,0.8,1),colorYellow;                                                                                                                      //输出缠中说禅K线
                
          


--  作者:FireScript
--  发布时间:2019/4/22 14:58:39
--  
 VARIABLE:czsc_high:=0;//当前K线高点,初值暂定为前K高
VARIABLE:czsc_low:=0;   //当前K线低点,初值暂定为前K低
s_czsc_high:ref(czsc_high,1);//前一K线处理完包含关系之后的高,初值暂定为前K高
s_czsc_low:ref(czsc_low,1);//前一K线处理完包含关系之后的低,初值暂定为前K低

试下这样。
这个和ref机制有关系。


--  作者:m1978xz
--  发布时间:2019/4/22 15:03:20
--  
好的。版主,谢谢回复。
设成全局变量啊?我试试

--  作者:m1978xz
--  发布时间:2019/4/22 15:11:26
--  
感谢版主,已经完美实现了需要的功能。严重感谢。

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