以文本方式查看主题

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

--  作者:zhuangjyuan
--  发布时间:2018/12/13 15:22:19
--  while循环中使用ref的问题
if (dea>0) then {DEA为MACD中的DEA,前面有定义,这里 省略}
begin
 va:=0;
 j:=0;
 cond3:=0;
 while (va>=0) do { VA为中间变量,调用以前的DEA用}
 begin
  j:=j+1;
  va:=ref(dea,j);
  if ref(low,j)<=ref(ma4,j) then{MA4,为30日均线,前面有定义,这里省略)
  cond3:=1;
  break;
 end
 end

我这个的意思是:当MACD中DEA为正时,往前看DEA>0这段时间内就最低价是否触碰MA4这根均线,如果触碰就复制条件cond3=1;
这个程序编译后说ref()这个函数不能在循环语句中调用,请问不这样写要怎么写呢】


--  作者:FireScript
--  发布时间:2018/12/13 15:48:06
--  
 你这个无法处理的。一般通常ref是在循环外面计算好,然后在循环里面调用。但是你这种没办法。你的ref调用和j有关联。
--  作者:zhuangjyuan
--  发布时间:2018/12/13 16:43:18
--  
那请问有其他写法吗,我不知道有什么其他表达方式


--  作者:FireScript
--  发布时间:2018/12/13 17:14:39
--  
 你的原始思路是什么?是这个“当MACD中DEA为正时,往前看DEA>0这段时间内就最低价是否触碰MA4这根均线,如果触碰就复制条件cond3=1;”吗?
--  作者:zhuangjyuan
--  发布时间:2018/12/14 21:09:30
--  
就是DEA从之前金叉到现在这段K线,是否出现价格触碰MA4,就是这个意思


--  作者:FireScript
--  发布时间:2018/12/17 9:52:12
--  
 不需要循环。

ma4:=ma(c,4);
len:BARSLAST(cross(dea,diff));//上次金叉距离现在的周期数
cond:if(dea>0 and count(l<=ma4,len+1)>=1,1,0);//当前是dea>0,并且上次金叉到现在存在 l<=ma4成立的K。


--  作者:zhuangjyuan
--  发布时间:2018/12/17 11:45:26
--  
好的
谢谢