收到 "empty controlled statement found" 警告 |元编辑器

Getting the "empty controlled statement found" warning | MetaEditor

我如何确保以下 ifelse if 语句遵循以下规则:

"If everything in either /*Condition 1*/ or /*Condition 2*/ is true,
then
carry on assessing /*Conditions 3 - 12*/"

目前,我正在获取 empty controlled statement found 313 38 编译器 error/warning。

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 : "How would I ensure that the following if,else if statement follows the following rule:
"If everything in either /*Condition 1*/ or /*Condition 2*/ is true,
then carry on assessing /*Conditions 3 - 12*/""

原始代码在 line 313 中爆炸了,因为 ; 字符终止了 statement-constructor,而如果满足 if(){...}else{...}-ed 条件中的任何一个,则没有什么可“执行”的(同样的问题出现在 else{...} 部分,其中也是 none {...}-code-block 存在并且 formal-statement 构造函数变得恐慌,不知道在任何 if(){...}else{...} 分支中“执行”什么,因为语句在形式上是不完整的)。

    if (  shiftOneClose < shiftOneOpen )                               /*Condition 1*/
    {                                                       
       if ( ( bearHammer / ( shiftOneOpen - shiftOneLow ) <= OoTMax )            )
       if ( ( bearHammer / bullNail )                     <= OoTMax              )
       if (   bearHammer                                  >= Transform( PCM, 2 ) ); /*Line 313*/

    }

所以,不告诉满足条件时该怎么做是上面的根本问题。


“我如何确保...”的解决方案 部分:

句法正确的是这个解释性 logic-preserving 代码模板:

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 建模中,我们总是更喜欢 wide-layout(屏幕很便宜,而且有 4 x 2 和更大的 multi-screen 座位很容易也很常见比最近十年),强调逻辑,然后减少 dup-es 计算(最好 pre-computing 任何和所有逻辑-"control-values" 然后 re-used并且由于 low-latency (通常是超 low-latency )的原因,我们从来没有花费任何额外的时间来调用函数( context-switching 的开销并在那里传递参数并返回结果)。并非所有由于 laws-of-logic,编译器(版本)做了 short-cutting 执行分支,所以这里必须小心(最昂贵的功能是那些 manipulate/query db.POOL-存储与交易'数据,首先必须进行 db.POOL-pointer 操作,然后 & 只有然后(在成功时,否则不会)re-access db.POOL-record 的数据项,成本非常高).

还应该注意到有一个合乎逻辑的 blind-spot -- shiftOneClose == shiftOneOpen.