如何访问第二个if语句

时间:2015-10-03 06:01:31

标签: trading algorithmic-trading mql4 metatrader4

由于第二个 if 声明无法执行,我完全消失了。

我最初的想法是当波动率在90到110之间时,程序会发送一个且只有一个订单。它将等待直到波动率达到111-150的范围,然后它将发送第二个订单

如果我在此处未使用 bool 功能,则该程序会在达到范围时发送无数顺序。

有人可以帮助我吗?

  if (  TodayMaxVolatilityPercentage >= 90.0
     && ( dayTrend  == 1 )
     && orderOpened == false
        )
  {
        Print( "Entered if clause" );
     // Print( "Today volatility percentage is: ", TodayMaxVolatilityPercentage + "%" );
     // ticket: Returns number of the ticket assigned to the order by the trade server or -1 if it fails.
        ticket = OrderSend( Symbol(),
                            OP_SELL,
                            0.3,
                            Bid,
                            3,
                             0 * MyPoint,
                            30 * MyPoint,
                            NULL,
                            MagicNumber,
                            0,
                            Blue
                            );
        Print( "Order is opened on", OrderOpenTime()+" at price: ", OrderOpenPrice() );
        Print( "trend number is ",dayTrend );

        if (  ticket > 0 )
        {
              if (  TakeProfit > 0 ) TheTakeProfit = Bid - TakeProfit * MyPoint;
              OrderSelect( ticket, SELECT_BY_TICKET ); // bool value
           /* OrderModify( OrderTicket(),
                           OrderOpenPrice(),
                           0,
                           NormalizeDouble( TheTakeProfit, Digits  ),
                           0,
                           Green
                           );
                         */
        }
        orderOpened = true;
        if (  TodayMaxVolatilityPercentage >= 110.0 ) orderOpened = false;              
  }
  if (  TodayMaxVolatilityPercentage >= 110.0
     && ( dayTrend  == 1 )
     && orderOpened == false
        )
  {
        Print( "Entered second if clause" );
     // ticket: Returns number of the ticket assigned to the order by the trade server or -1 if it fails.
        ticket = OrderSend(  Symbol(),
                             OP_SELL,
                             0.3,
                             Bid,
                             3,
                              0 * MyPoint,
                             30 * MyPoint,
                             NULL,
                             MagicNumber,
                             0,
                             Blue
                             );
        if (  ticket > 0 )
        {
              if (  TakeProfit > 0 ) TheTakeProfit = Bid - TakeProfit * MyPoint;
              OrderSelect( ticket, SELECT_BY_TICKET ); // bool value
           /* OrderModify( OrderTicket(),
                           OrderOpenPrice(),
                           0,
                           NormalizeDouble( TheTakeProfit, Digits ),
                           0,
                           Green
                           );
                       */
        }
        orderOpened = true;
     }

1 个答案:

答案 0 :(得分:0)

一个隐藏的表演者:

按照设计,第一个成功的 OrderSend() 会将您指定的值返回到 ticket = OrderSend(...)

魔鬼隐藏得很详细。

[MQL4-Help]说:

  

返回交易服务器分配给订单的凭单的数量,如果失败则返回 -1

因此,返回的第一个成功OrderSend()票证是0(在策略测试程序中,真正的MT4 /服务器会遇到从它的db.pool票证中抽取的高数字。)

因此第二个 if ( ticket > 0 ) 永远不会让你进入。

通常使用 if ( ticket > EMPTY ) 来减少意图并使用符号而不是-1整数常量