设为首页收藏本站

 找回密码
 注册
楼主: wwr_5817
打印 上一主题 下一主题

求助死循环 [复制链接]

Rank: 5Rank: 5

精华
0
UID
113966
积分
1033
帖子
642
主题
207
阅读权限
60
注册时间
2012-12-9
最后登录
2021-2-18
11#
发表于 2012-12-23 18:44:50 |只看该作者
本帖最后由 wwr_5817 于 2012-12-23 18:48 编辑

按9楼nopain管理员的办法,新建一个用户函数NthConT,加fileappend,定位了问题,但不知如何解决,说明如下:
1.我的超级图表商品为IF1112的1分钟线,样本数300;
2.用户函数和公式应用,
(1)公式应用(MyMA):收过MA5画笑脸,收破画哭脸

01.Params

02.        Numeric Length(5);

03.Vars

04.        Bool boolvalueCrossOver(False);

05.        Bool boolvalueCrossUnder(False);

06.Begin

07.        boolvalueCrossOver=CrossOver(Close,AverageFC(Close,Length));

08.        boolvalueCrossUnder=CrossUnder(Close,AverageFC(Close,Length));

09.        If (boolvalueCrossOver)

10.        {  PlotBool("BoolvalueCrossOver",boolvalueCrossOver,H);

11.        }

12.        If (boolvalueCrossUnder)

13.        {  PlotBool("BoolvalueCrossUnder",!boolvalueCrossUnder,L);

14.        }

15.        PlotNumeric("MyMA",AverageFC(Close,Length));

16.        Commentary("MyMA:"+Text(Length));

17.        Commentary("当前Bar索引值"+Text(CurrentBar));

18.End
//------------------------------------------------------------------------
(2)用户函数(NthConT)
// 简称: NthConT
// 名称: 可测回溯第N个满足条件的Bar距当前的Bar数目
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
        Bool Con(false);
        Numeric N(1);
Vars
        NumericSeries PreConIndex;//回溯第i(i>1)个满足条件的Bar距当前的Bar数目
        NumericSeries BarNums;//回溯第1个满足条件的Bar距当前的Bar数目
        Numeric i(0);
        Numeric ReBars(0);//回溯第N个满足条件的Bar距当前的Bar数目
Begin
        FileAppend("C:\\Tpro.log","NthConT CurrentBar="+Text(CurrentBar)+",N="+Text(N)+",BarNums="+Text(BarNums)+",PreConIndex="+Text(PreConIndex));
        If(Con)
        {
                BarNums = 0;//当前Bar满足条件,回溯第1个满足条件的Bar距当前的Bar数目置0
                PreConIndex = BarNums[1] + 1;//当前Bar满足条件,回溯第2个满足条件的Bar距当前的Bar数目+1
                FileAppend("C:\\Tpro.log","NthConT If N="+Text(N)+",BarNums="+Text(BarNums)+",PreConIndex="+Text(PreConIndex));
        }Else
        {
                BarNums = BarNums + 1;//当前Bar不满足条件,回溯第1个满足条件的Bar距当前的Bar数目+1
                PreConIndex = BarNums;//当前Bar不满足条件,回溯第1个满足条件的Bar距当前的Bar数目+1
                FileAppend("C:\\Tpro.log","NthConT Else N="+Text(N)+",BarNums="+Text(BarNums)+",PreConIndex="+Text(PreConIndex));
        }
       
        ReBars = BarNums;//回溯第1个满足条件的Bar距当前的Bar数目
        For i = 2 To N
        {
                ReBars = ReBars + PreConIndex[ReBars];//回溯第i(i>1)个满足条件的Bar距当前的Bar数目
                FileAppend("C:\\Tpro.log","NthConT For N="+Text(N)+",i="+Text(i)+",ReBars="+Text(ReBars));
        }
        FileAppend("C:\\Tpro.log","NthConT end");
        Return ReBars;
End
//------------------------------------------------------------------------

(3)用户函数(NthCrossUpMAHighOverBarPos)
// 简称: NthCrossUpMAHighOverBarPos
// 名称: 回溯第N个上缠绕MA顶值、收过MABar索引值
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
        Numeric N(1);
        Numeric Length(5);
        NumericRef CrossUpMAOverBarPos;//回溯第N个上缠绕MA之收过MABar索引值
Vars
        Numeric ReBarsCrossOverMA(0);//回溯第N个收过MABar回溯索引值
        Numeric ReBarsCrossOverMAplus(0);//回溯第(N+1)个收过MABar回溯索引值
        Numeric ReBarsCrossUnderMA(0);//回溯第N个收破MABar回溯索引值
        Numeric i;
        Numeric CrossUpMAHigh(0);//回溯第N个上缠绕MA顶值
Begin
        FileAppend("C:\\Tpro.log","Cross CurrentBar="+Text(CurrentBar));
        ReBarsCrossOverMA=NthConT(CrossOver(C,AverageFC(C,Length)),N);//回溯第N个收过MABar回溯索引值
        ReBarsCrossOverMAplus=NthConT(CrossOver(C,AverageFC(C,Length)),N+1);//回溯第(N+1)个收过MABar回溯索引值
        ReBarsCrossUnderMA=NthConT(CrossUnder(C,AverageFC(C,Length)),N);//回溯第N个收破MABar回溯索引值
        FileAppend("C:\\Tpro.log","Cross N="+Text(N)+",ReBarsCrossOverMA="+Text(ReBarsCrossOverMA)+",ReBarsCrossOverMAplus="+Text(ReBarsCrossOverMAplus)+",ReBarsCrossUnderMA="+Text(ReBarsCrossUnderMA));
        If ((ReBarsCrossOverMA<ReBarsCrossUnderMA)&&((CurrentBar-ReBarsCrossOverMAplus)>(Length-1)))
        {For i=ReBarsCrossOverMAplus DownTo ReBarsCrossUnderMA
         {FileAppend("C:\\Tpro.log","Cross for step,i="+Text(i));
          If (H > CrossUpMAHigh)
           CrossUpMAHigh = H;//回溯第N个上缠绕MA顶值
         }
         CrossUpMAOverBarPos=CurrentBar-ReBarsCrossOverMAplus;//回溯第N个上缠绕MA之收过MABar索引值
         FileAppend("C:\\Tpro.log","Cross for end,CrossUpMAHigh="+Text(CrossUpMAHigh)+",CrossUpMAOverBarPos="+Text(CrossUpMAOverBarPos));
        }Else
        {CrossUpMAHigh=0;//回溯第N个上缠绕MA顶值置0
         CrossUpMAOverBarPos=0;//回溯第N个上缠绕MA之收过MABar索引值置0
        }
        FileAppend("C:\\Tpro.log","Cross end,CrossUpMAHigh="+Text(CrossUpMAHigh)+",CrossUpMAOverBarPos="+Text(CrossUpMAOverBarPos));
        Return CrossUpMAHigh;
End
//------------------------------------------------------------------------
(4)公式应用(TproNthCrossUpMAHighOverBarPos)
// 简称: TproNthCrossUpMAHighOverBarPos
// 名称: 验证回溯递增第N个上缠绕MA顶值、收过MABar索引值
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
        Numeric N(2);
        Numeric Length(5);
Vars
        Numeric everCrossUpMAHigh;//回溯递增第N个上缠绕MA顶值
        Numeric everCrossUpMAOverBarPos;//回溯递增第N个收过MABar索引值
        Numeric i;
        Numeric j;
        Numeric MyHigh;//回溯第i个上缠绕MA顶值
Begin
        FileAppend("C:\\Tpro.log","Tpro CurrentBar="+Text(CurrentBar)+",N="+Text(N));
        i=2;
        j=1;
        everCrossUpMAHigh=NthCrossUpMAHighOverBarPos(1,Length,everCrossUpMAOverBarPos);//回溯第1个上缠绕MA顶值
        While ((j<N)&&(everCrossUpMAOverBarPos>0))
        {FileAppend("C:\\Tpro.log","TproWhile begin ,i="+Text(i)+",j="+Text(j)+",everCrossUpMAHigh="+Text(everCrossUpMAHigh)+",everCrossUpMAOverBarPos="+Text(everCrossUpMAOverBarPos));
         MyHigh=NthCrossUpMAHighOverBarPos(i,Length,everCrossUpMAOverBarPos);//回溯第i个上缠绕MA顶值
         i=i+1;
         If (MyHigh>everCrossUpMAHigh)
     {everCrossUpMAHigh=MyHigh;
          j=j+1;
         }
         FileAppend("C:\\Tpro.log","TproWhile end j="+Text(j)+",i="+Text(i)+",everCrossUpMAHigh="+Text(everCrossUpMAHigh)+",everCrossUpMAOverBarPos="+Text(everCrossUpMAOverBarPos));
        }
        If (everCrossUpMAOverBarPos==0)
        {everCrossUpMAHigh=0;
        }
        FileAppend("C:\\Tpro.log","Tpro回溯递增第"+Text(N)+"个上缠绕MA顶值"+Text(everCrossUpMAHigh));
        FileAppend("C:\\Tpro.log","Tpro回溯递增第"+Text(N)+"个上缠绕MA收过MABar索引值"+Text(everCrossUpMAOverBarPos));
End
//------------------------------------------------------------------------
3.发现问题出在超级图表中索引值为26的收过MA5之Bar(截图见8楼附件,FileAppend文件无法上传,烦请插入公式应用后获得)
FileAppend文件中索引值为26的收过MA5之Bar,公式应用(TproNthCrossUpMAHighOverBarPos)首次执行While:
TproWhile begin ,i=2,j=1,everCrossUpMAHigh=2368,everCrossUpMAOverBarPos=14
Cross CurrentBar=26
NthConT CurrentBar=26,N=2,BarNums=0,PreConIndex=0
NthConT Else N=2,BarNums=1,PreConIndex=1
NthConT For N=2,i=2,ReBars=1
NthConT end
NthConT CurrentBar=26,N=3,BarNums=0,PreConIndex=0
NthConT Else N=3,BarNums=1,PreConIndex=1
NthConT For N=3,i=2,ReBars=1
NthConT For N=3,i=3,ReBars=1
NthConT end
NthConT CurrentBar=26,N=2,BarNums=0,PreConIndex=0
NthConT Else N=2,BarNums=1,PreConIndex=1
NthConT For N=2,i=2,ReBars=1
NthConT end
Cross N=2,ReBarsCrossOverMA=1,ReBarsCrossOverMAplus=1,ReBarsCrossUnderMA=1
Cross end,CrossUpMAHigh=0,CrossUpMAOverBarPos=0

Length=5,N=2,CurrentBar=26,在求回溯第2、3个收过MABar回溯索引值时,NthConT的条件在该Bar上满足,应执行NthConT的If却执行了Else,结果ReBarsCrossOverMA=1,即回溯第2个上缠绕MA5之收过MA5Bar回溯索引值为1(应为12);
出错,不得其解!

我已尽量简化、注释并定位了问题。按各位TB管理员的办法检测4天了,我仍然无能为力,恳请nopain管理员仔细看过本帖,一步到位给出解决办法!我实在担心,何时才能实现程序化交易?

多谢!
入市须谨慎,TB有风险!

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
113966
积分
1033
帖子
642
主题
207
阅读权限
60
注册时间
2012-12-9
最后登录
2021-2-18
12#
发表于 2012-12-24 11:04:33 |只看该作者
难道自编的用户函数,其参数不能由变量传入?

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
113966
积分
1033
帖子
642
主题
207
阅读权限
60
注册时间
2012-12-9
最后登录
2021-2-18
13#
发表于 2012-12-25 09:22:49 |只看该作者
6天了,还没解决我的问题,TB服务效率太低了!

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
113966
积分
1033
帖子
642
主题
207
阅读权限
60
注册时间
2012-12-9
最后登录
2021-2-18
14#
发表于 2012-12-25 16:54:42 |只看该作者
TB能求出回溯递增第N个上缠绕MA顶值吗?不能早说呀,真耽误人!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-19 08:43

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部