以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  公式测试能通过,但一用在副图就卡死。  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=62865)

--  作者:qq代人发帖
--  发布时间:2014/3/19 14:57:04
--  公式测试能通过,但一用在副图就卡死。

请教:ma1:=ma(c,5);
ma2:=ma(c,10);
ma3:=ma(c,20);
ma4:=ma(c,30);
n:=0;
A:=ref(ma3>ma4,n) and ref(ma2>ma3,n) and ref(ma1>ma2,n);
if ma1<ma2 and ma3>ma4 and ma2>ma3
then repeat n:=n+1 until not(A);
if n>10 then DRAWICON(ma1<ma2,low,4)

目前在练习用循环结构~在均线多头排列超过10天的情况下,在5日均线和10均线死叉的位置提示买入。

公式测试能通过,但一用在副图就卡死,是不是陷入死循环了,请问哪里除了问题呢?


--  作者:jinzhe
--  发布时间:2014/3/19 14:59:56
--  
then repeat n:=n+1 until not(A);
这个循环是干什么的?直到A不成立就不自加?
--  作者:usucallzk
--  发布时间:2014/3/19 15:12:04
--  
以下是引用jinzhe在2014/3/19 14:59:56的发言:
then repeat n:=n+1 until not(A);
这个循环是干什么的?直到A不成立就不自加?
A不成立的情况就说明,均线不是多头排列了,N表示从不是均线多头排列到死叉位置是多少天,少于10天就不发出买入信号


--  作者:jinzhe
--  发布时间:2014/3/19 15:19:01
--  

n:=0;
A:=ref(ma3>ma4,n) and ref(ma2>ma3,n) and ref(ma1>ma2,n);
if ma1<ma2 and ma3>ma4 and ma2>ma3
then repeat n:=n+1 until not(A);
改成

 

variable:n=0;
A:=ma3>ma4 and ma2>ma3 and ma1>ma2;
if ma1<ma2 and ma3>ma4 and ma2>ma3  then n:=n+1;

 

if not(a) then n:=0;

 

if n>10 then DRAWICON(ma1<ma2,low,4)


--  作者:usucallzk
--  发布时间:2014/3/19 15:29:16
--  
以下是引用jinzhe在2014/3/19 15:19:01的发言:

n:=0;
A:=ref(ma3>ma4,n) and ref(ma2>ma3,n) and ref(ma1>ma2,n);
if ma1<ma2 and ma3>ma4 and ma2>ma3
then repeat n:=n+1 until not(A);
改成

 

variable:n=0;
A:=ma3>ma4 and ma2>ma3 and ma1>ma2;
if ma1<ma2 and ma3>ma4 and ma2>ma3  then n:=n+1;

 

if not(a) then n:=0;

 

if n>10 then DRAWICON(ma1<ma2,low,4)

貌似没用,图上一个箭头也没显示~


--  作者:jinzhe
--  发布时间:2014/3/19 15:39:51
--  
那么无解了,你的思路不对
--  作者:usucallzk
--  发布时间:2014/3/19 15:43:52
--  
以下是引用jinzhe在2014/3/19 15:39:51的发言:
那么无解了,你的思路不对
请问下我之前的公式哪里出问题,感觉循环语句应该没毛病吧


--  作者:fly
--  发布时间:2014/3/19 16:23:08
--  

你试试这个

 

ma1:=ma(c,5);
ma2:=ma(c,10);
ma3:=ma(c,20);
ma4:=ma(c,30);


con1:=ma1>ma2 and ma2>ma3 and ma3>ma4;
con2:=ma1<ma2 and ma3>ma4 and ma2>ma3;

if ref(all(con1,10),1) and con2 then drawicon(ma1<ma2,low,4);


--  作者:usucallzk
--  发布时间:2014/3/19 16:52:13
--  
以下是引用fly在2014/3/19 16:23:08的发言:

你试试这个

 

ma1:=ma(c,5);
ma2:=ma(c,10);
ma3:=ma(c,20);
ma4:=ma(c,30);


con1:=ma1>ma2 and ma2>ma3 and ma3>ma4;
con2:=ma1<ma2 and ma3>ma4 and ma2>ma3;

if ref(all(con1,10),1) and con2 then drawicon(ma1<ma2,low,4);


其实我想知道该如何应用循环语句,因为我这个是条件触发,不一定是10天,也可能是15天,20天,策略是首次均线多头然后5、10日均线死叉,既然是首次多头排列然后死叉,前面自然不能是多头排列,起码均线缠绕,所以还有一句没写出来。

ma1:=ma(c,5);

ma2:=ma(c,10);

ma3:=ma(c,20);

ma4:=ma(c,30);

n:=0;

A:=ref(ma3>ma4,n) and ref(ma2>ma3,n) and ref(ma1>ma2,n);

if ma1<ma2 and ma3>ma4 and ma2>ma3

then repeat n:=n+1 until not(A);

if n>10 and count(not(A),n+15)>=13 then DRAWICON(ma1<ma2,low,4)


这句意思是if n>10 and count(not(A),n+15)>=13

当均线呈现10天以上的多头排列,往前寻起码15天内不能出现超过2次的多头排列,这个13、15和n>10都是可变参数来的。n是可变的,所以我才会选择循环语句。