- 精华
- 0
- 在线时间
- 1983 小时
- UID
- 113966
- 积分
- 1033
- 帖子
- 642
- 阅读权限
- 60
- 注册时间
- 2012-12-9
- 最后登录
- 2021-2-18
- 精华
- 0
- UID
- 113966
- 积分
- 1033
- 帖子
- 642
- 主题
- 207
- 阅读权限
- 60
- 注册时间
- 2012-12-9
- 最后登录
- 2021-2-18
|
nopain管理员,我按您的方法检测并在自编的用户函数中添加了
64. }Else
65. {CrossUpMAOverBarPos=0;
66. }
不死循环了,但结果不对!我说明现存问题如下:
1.我的超级图表商品为IF1112的1分钟线,样本数300;
2.为便于检测,插入4个公式应用,
(1)公式应用(MyMA):收过MA5画笑脸,收破画哭脸- Params
- Numeric Length(5);
- Vars
- Bool boolvalueCrossOver(False);
- Bool boolvalueCrossUnder(False);
- Begin
- boolvalueCrossOver=CrossOver(Close,AverageFC(Close,Length));
- boolvalueCrossUnder=CrossUnder(Close,AverageFC(Close,Length));
- If (boolvalueCrossOver)
- { PlotBool("BoolvalueCrossOver",boolvalueCrossOver,H);
- }
- If (boolvalueCrossUnder)
- { PlotBool("BoolvalueCrossUnder",!boolvalueCrossUnder,L);
- }
- PlotNumeric("MyMA",AverageFC(Close,Length));
- Commentary("MyMA:"+Text(Length));
- Commentary("当前Bar索引值"+Text(CurrentBar));
- End
复制代码 (2)公式应用(T1):验证回溯第1个上缠绕MA5顶值、收过MA5Bar索引值- Params
- Numeric Length(5);
- Vars
- Numeric ReBarsCrossOverMA(0);
- Numeric ReBarsCrossOverMAplus(0);
- Numeric ReBarsCrossUnderMA(0);
- Numeric i;
- Numeric CrossUpMAHigh;
- Numeric CrossUpMAOverBarPos;
- Begin
- ReBarsCrossOverMA=NthCon(CrossOver(C,AverageFC(C,Length)),1);
- ReBarsCrossOverMAplus=NthCon(CrossOver(C,AverageFC(C,Length)),2);
- ReBarsCrossUnderMA=NthCon(CrossUnder(C,AverageFC(C,Length)),1);
- Commentary("N=1,ReBarsCrossOverMA1="+Text(ReBarsCrossOverMA)+",ReBarsCrossOverMAplus1="+Text(ReBarsCrossOverMAplus)+",ReBarsCrossUnderMA1="+Text(ReBarsCrossUnderMA));
- If ((ReBarsCrossOverMA<ReBarsCrossUnderMA)&&((CurrentBar-ReBarsCrossOverMAplus)>(Length-1)))
- {
- For i=ReBarsCrossOverMAplus DownTo ReBarsCrossUnderMA
- {
- If ( H[ i ] > CrossUpMAHigh)
- CrossUpMAHigh = H[ i ];
- }
- CrossUpMAOverBarPos=CurrentBar-ReBarsCrossOverMAplus;
- }
- Commentary("CrossUpMAHigh1="+Text(CrossUpMAHigh)+",CrossUpMAOverBarPos1="+Text(CrossUpMAOverBarPos));
- End
复制代码 (3)公式应用(T2):验证回溯第2个上缠绕MA5顶值、收过MA5Bar索引值- Params
- Numeric Length(5);
- Vars
- Numeric ReBarsCrossOverMA(0);
- Numeric ReBarsCrossOverMAplus(0);
- Numeric ReBarsCrossUnderMA(0);
- Numeric i;
- Numeric CrossUpMAHigh;
- Numeric CrossUpMAOverBarPos;
- Begin
- ReBarsCrossOverMA=NthCon(CrossOver(C,AverageFC(C,Length)),2);
- ReBarsCrossOverMAplus=NthCon(CrossOver(C,AverageFC(C,Length)),3);
- ReBarsCrossUnderMA=NthCon(CrossUnder(C,AverageFC(C,Length)),2);
- Commentary("N=2,ReBarsCrossOverMA2="+Text(ReBarsCrossOverMA)+",ReBarsCrossOverMAplus2="+Text(ReBarsCrossOverMAplus)+",ReBarsCrossUnderMA2="+Text(ReBarsCrossUnderMA));
- If ((ReBarsCrossOverMA<ReBarsCrossUnderMA)&&((CurrentBar-ReBarsCrossOverMAplus)>(Length-1)))
- {For i=ReBarsCrossOverMAplus DownTo ReBarsCrossUnderMA
- {If (H[i] > CrossUpMAHigh)
- CrossUpMAHigh = H[i];
- }
- CrossUpMAOverBarPos=CurrentBar-ReBarsCrossOverMAplus;
- }
- Commentary("CrossUpMAHigh2="+Text(CrossUpMAHigh)+",CrossUpMAOverBarPos2="+Text(CrossUpMAOverBarPos));
- End
复制代码 (4)公式应用(TproNthCrossUpMAHighOverBarPos):验证验证回溯递增第2个上缠绕MA5顶值、收过MA5Bar索引值- Params
- Numeric N(2);
- Numeric Length(5);
- Vars
- Numeric CrossUpMAHigh;
- Numeric CrossUpMAOverBarPos;
- Numeric i;
- Numeric j;
- Numeric MyHigh;
- Numeric MyBarPos;
- Begin
- i=2;
- j=1;
- CrossUpMAHigh=NthCrossUpMAHighOverBarPos(1,Length,CrossUpMAOverBarPos);
- MyBarPos=CrossUpMAOverBarPos;
- FileAppend("C:\\nthcon.log","Tpro N="+Text(N)+",i="+Text(i)+",CurrentBar="+Text(CurrentBar));
- While ((j<N)&&(MyBarPos>0))
- {MyHigh=NthCrossUpMAHighOverBarPos(i,Length,CrossUpMAOverBarPos);
- MyBarPos=CrossUpMAOverBarPos;
- i=i+1;
- If (MyHigh>CrossUpMAHigh)
- {CrossUpMAHigh=MyHigh;
- j=j+1;
- }
- FileAppend("C:\\nthcon.log","While j="+Text(j)+",i="+Text(i)+",MyHigh="+Text(MyHigh)+",MyBarPos="+Text(MyBarPos));
- }
- If (CrossUpMAOverBarPos==0)
- {CrossUpMAHigh=0;
- }
- Commentary("回溯递增第"+Text(N)+"个上缠绕MA顶值"+Text(CrossUpMAHigh));
- Commentary("回溯递增第"+Text(N)+"个上缠绕MA收过MABar索引值"+Text(CrossUpMAOverBarPos));
- End
复制代码 (5)上述公式应用(TproNthCrossUpMAHighOverBarPos)中自编用户函数(NthCrossUpMAHighOverBarPos):回溯第N个上缠绕MA顶值、收过MABar索引值
// 简称: NthCrossUpMAHighOverBarPos
// 名称: 回溯第N个上缠绕MA顶值、收过MABar索引值
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------- Params
- Numeric N(1);
- Numeric Length(5);
- NumericRef CrossUpMAOverBarPos;
- Vars
- Numeric ReBarsCrossOverMA(0);
- Numeric ReBarsCrossOverMAplus(0);
- Numeric ReBarsCrossUnderMA(0);
- Numeric i;
- Numeric CrossUpMAHigh;
- Begin
- ReBarsCrossOverMA=NthCon(CrossOver(C,AverageFC(C,Length)),N);
- ReBarsCrossOverMAplus=NthCon(CrossOver(C,AverageFC(C,Length)),N+1);
- ReBarsCrossUnderMA=NthCon(CrossUnder(C,AverageFC(C,Length)),N);
- FileAppend("C:\\nthcon.log","Cross Length="+Text(Length)+",N="+Text(N)+",CurrentBar="+Text(CurrentBar)+",ReBarsCrossOverMA="+Text(ReBarsCrossOverMA)+",ReBarsCrossOverMAplus="+Text(ReBarsCrossOverMAplus)+",ReBarsCrossUnderMA="+Text(ReBarsCrossUnderMA));
- If ((ReBarsCrossOverMA<ReBarsCrossUnderMA)&&((CurrentBar-ReBarsCrossOverMAplus)>(Length-1)))
- {For i=ReBarsCrossOverMAplus DownTo ReBarsCrossUnderMA
- {FileAppend("C:\\nthcon.log","for step");
- If (H[i] > CrossUpMAHigh)
- CrossUpMAHigh = H[i];
- }
- FileAppend("C:\\nthcon.log","for end");
- CrossUpMAOverBarPos=CurrentBar-ReBarsCrossOverMAplus;
- }Else
- {CrossUpMAOverBarPos=0;
- }
- FileAppend("C:\\nthcon.log","Cross end,CrossUpMAOverBarPos="+Text(CrossUpMAOverBarPos));
- Return CrossUpMAHigh;
- End
复制代码 3.发现问题出在超级图表中索引值为26的Bar,截图见附件
FileAppend文件无法上传,烦请插入公式应用后获得,
截图的显示提示窗中,公式应用(T2)在N=2时,ReBarsCrossOverMA2=12,即回溯第2个上缠绕MA5之收过MA5Bar回溯索引值为12;
FileAppend文件中,Cross Length=5,N=2,CurrentBar=26,ReBarsCrossOverMA=1,即回溯第2个上缠绕MA5之收过MA5Bar回溯索引值为1;
前者对,后者错,百思不得其解!NthCon为内建函数,无法检测。
恳请解答,多谢! |
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
|