以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  while循环执行的问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=168326)

--  作者:JJG
--  发布时间:2019/2/20 17:13:42
--  while循环执行的问题
为何WHILE  表达式1 AND 表达式2 DO 不能执行,只能变成变量来判断?
见程序黄色部分。

程序如下:

//一致性获利法_双安全气囊

{
//取当前窗口的品种
//取当前窗口的的数据周期
//数据周期参数+1,
}

//定义变量
WEIZHIPIANYI_BUY :1;//买入双安全气囊的位置偏移,初始化为前1根K线。
买入气囊_临时_初始: CALLSTOCKEX(\'\',VTLOW,ZOUQI,-WEIZHIPIANYI_BUY,100);//买入安全气囊_临时_初始,引用当前品种,最低价,程序设定周期买入位置偏移的最近100根数据.
ANQUANQINANG_BUY_TMP : CALLSTOCKEX(\'\',VTLOW,ZOUQI,-WEIZHIPIANYI_BUY,100);//买入安全气囊_临时,引用当前品种,最低价,程序设定周期买入位置偏移的最近100根数据.
ANQUANQINANG_BUY : 买入气囊_临时_初始 - SHUZHIPIANYI; //买入安全气囊,=买入安全气囊_临时 - 数值偏移

P:=I;

TS:0;

//算法

//买入安全气囊
//若安全气囊<当前图表上周期的当前周期的最低价则循环。位置偏移+1;买入安全气囊_临时重新赋值,买入安全气囊重新赋值;

A:0;
IF ANQUANQINANG_BUY_TMP >= LOW AND P>0 THEN A=1;
WHILE  A  DO 
//上面这3句组合能执行,若用下面这1句就不能执行了。
//WHILE  ANQUANQINANG_BUY_TMP >= LOW AND P>0 DO  不能执行循环
     BEGIN
     TS:=1;  
       WEIZHIPIANYI_BUY : = WEIZHIPIANYI_BUY+1;
       ANQUANQINANG_BUY_TMP := CALLSTOCKEX(\'\',VTLOW,ZOUQI,-WEIZHIPIANYI_BUY,100);
       ANQUANQINANG_BUY := ANQUANQINANG_BUY_TMP - SHUZHIPIANYI;
       P=P-1;
       IF P=0 THEN 
           BEGIN
            ANQUANQINANG_BUY := 买入气囊_临时_初始 - SHUZHIPIANYI;
            BREAK;
          END;
     END;  
      


--  作者:FireScript
--  发布时间:2019/2/20 17:19:29
--  
 一般只有while的判断条件里面带统计类函数才会有问题。通常情况下是不会有问题的。2种形式并无差别。
--  作者:JJG
--  发布时间:2019/2/20 17:31:12
--  
这个程序能执行循环,但是会死循环,我查不出原因,请帮忙看一下!
--  作者:JJG
--  发布时间:2019/2/20 17:44:51
--  
这个程序为何死循环?
--  作者:FireScript
--  发布时间:2019/2/21 15:03:43
--  
和循环的条件有关了:
ANQUANQINANG_BUY_TMP >= LOW AND P>0

我注意到你的循环内部对
ANQUANQINANG_BUY_TMP是有重新赋值的。这可能是导致死循环的原因。

而之前的方案中的变量A只判断了一次,后面的方案每次循环一次之后对
ANQUANQINANG_BUY_TMP >= LOW AND P>0又进行计算和判断 。

--  作者:CH123456
--  发布时间:2019/4/22 14:15:12
--  
P=P-1;改成p:=p-1;