问题描述
我如何确保以下if
,else if
语句遵循以下规则:
“如果
/*Condition 1*/
或/*Condition 2*/
中的所有内容都是正确的,
然后
继续评估/*Conditions 3 - 12*/
”
目前,我收到 empty controlled statement found 313 38
编译器错误/警告。
if(shiftOneClose < shiftOneOpen){ /*Condition 1*/
if((bearHammer / (shiftOneOpen - shiftOneLow) <= OoTMax))
if((bearHammer / bullNail) <= OoTMax)
if(bearHammer >= Transform(PCM,2)); /*Line 313*/
}
else if(shiftOneClose > shiftOneOpen){ /*Condition 2*/
if((bullHammer / (shiftOneClose - shiftOneLow) <= OoTMax))
if((bullHammer / bullNail) <= OoTMax)
if(bullHammer >= Transform(PCM,2));
}
if.... /*Conditions 3 - 12*/
if....
if....
if....
if....
if....
if....
if....
if....
if....
{
[execute trade]
}
解决方法
您可以使用通用控制结构,后跟其他编程语言,例如C ++,JAVA。
如果您不熟悉:
&&
表示and
||
表示or
示例:
//--- so in order to make it evaluate conditions 3-12,if only condition 1 or 2 is true
if(condition1 || condition2){
if(condition3 && condition4){ /* so on until 12 */
//--- execute trade
}
}
为了提高代码的可读性,我建议您将一些条件移到函数中
,Q :“我将如何确保以下
if
,else if
语句遵循以下规则:
“如果/*Condition 1*/
或/*Condition 2*/
中的所有内容都是正确的,
然后继续评估/*Conditions 3 - 12*/
””
原始代码在 line 313
中崩溃了,因为 ;
字符终止了一个语句构造函数,而“如果满足if(){...}else{...}
版的条件之一(else{...}
部分中存在相同的问题,则不存在{...}
代码块,并且形式上的-语句构造函数感到恐慌,因为不知道在if(){...}else{...}
两个分支中“执行”什么,因为该语句正式不完整)。
if ( shiftOneClose < shiftOneOpen ) /*Condition 1*/
{
if ( ( bearHammer / ( shiftOneOpen - shiftOneLow ) <= OoTMax ) )
if ( ( bearHammer / bullNail ) <= OoTMax )
if ( bearHammer >= Transform( PCM,2 ) ); /*Line 313*/
}
所以,根本不知道如果条件满足就该怎么办。
“我将如何确保...”部分的解决方案:
在语法上正确的是这个解释性的逻辑保留代码模板:
if ( ( ( shiftOneClose < shiftOneOpen
&& OoTMax >= ( bearHammer / ( shiftOneOpen - shiftOneLow ) )
&& OoTMax >= ( bearHammer / bullNail )
&& Transform( PCM,2 ) <= bearHammer
) /*--------------------------------------------------------------------- Condition 1 */
|| ( shiftOneClose > shiftOneOpen
&& OoTMax >= ( bullHammer / ( shiftOneClose - shiftOneLow ) )
&& OoTMax >= ( bullHammer / bullNail )
&& Transform( PCM,2 ) <= bullHammer
) /*---------------------------------------------------------------- .OR. Condition 2 */
)
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 3 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 4 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 5 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 6 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 7 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 8 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition 9 */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition A */
&& ( ... ) /*---------------------------------------------------------------- .AND.Condition B */
)
{...} /*---------------------------------- CODE-BLOCK TO EXECUTE ------------------------------*/
在我大约20多年的Quant建模工作中,我们总是更喜欢宽布局(屏幕很便宜,拥有4 x 2的屏幕,而较大的多屏幕座位非常容易,并且在最近十年中非常普遍),强调逻辑,然后减少计算中的重复(最好预先计算任何和所有逻辑“控制值”,然后由于低延迟(通常是超低延迟)而重新使用原因,我们从来没有在调用函数上花费任何额外的时间(上下文切换的开销以及在那里传递参数和返回结果)。并非所有的编译器(版本)都由于逻辑规律而缩短了执行分支。这里必须要小心(最昂贵的函数是那些用交易的数据来操纵/查询db.POOL
存储的函数,首先要进行db.POOL
-指针操纵,然后&只有这样(一旦成功,就永远不会成功)重新访问db.POOL
记录的数据项)。
还应该注意到存在一个逻辑盲点-shiftOneClose == shiftOneOpen
。