TB能编译通过的函数,但移植到TBQ编译出错,提示:不是所有控件路径都返回值 (图1)
在函数末尾,增加 return 0 ,函数编译虽然通过(图2),
但相关公式编译又出错(图3),
请问函数末尾该如何修改?
(函数大致功能为,设置了4种止损模式,除此以外,就 return 0 。)
NumericRef flag; //多空仓位
Numeric ratio_atr(2); //atr的系数,默认为2倍
这是两个问题。
第一个返回路径的问题,你定义了flag>0怎么处理,flag<0怎么处理,但是没有flag==0怎么处理,导致未构成全部集合,可能存在隐患。
第二个是参数定义的问题,需要你把函数定义时的参数类型,以及公式调用时,对应变量的类型都展示一下才能确认问题。
在函数里增加了上述两段,还是报错。
函数的相关参数定义:
Params
Series<Numeric> my_exitprice(0);
NumericRef flag; //对应调用该函数时的第二个参数,这里为MarketPosition
Numeric ratio_atr(2); //atr的系数,默认为2倍
Numeric ratio_loss(0.01); //亏损1%
Numeric jump(50); //亏损固定多少跳价位
Numeric mode_stop_loss(0); //增加不同的止损方式,参数名任意,例如:情况0,采取移动止损;情况1,回撤固定值后止损;等等
Vars
Numeric atr;
Numeric Num;
公式的相关参数定义:
Params
Numeric n1(10);
Numeric n2(20);
Numeric ratio_atr(2); //atr的系数,默认为2倍
Numeric flag(0);
Numeric mode_stop_loss(0);
Vars
Bool golden(False);
Bool ending(False);
Series<Numeric> ma1;
Series<Numeric> ma2;
Series<Numeric> my_exitprice(0);
Numeric atr;
Numeric n;
1.最有一个路径不用else if要用else 即else { return 0;} 或者直接return 0;
2.函数中flag参数是一个引用类型,在传递参数的时候不能用公式的参数直接传递
图1就是在函数末尾加的return 0;
公式编译出错(图3)。
flag这个引用参数,怎么传回去,不能是数字?
上一级的分支结构呢?只要最高一级的分支结构覆盖全集 都不会有这个问题
flag在公式里应该定义成变量 而不是参数
移到vars里就可以了
是的,flag 都改为numeric变量就编译通过了,感谢!