由于第二个 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;
}
答案 0 :(得分:0)
按照设计,第一个成功的 OrderSend()
会将您指定的值返回到 ticket = OrderSend(...)
。
魔鬼隐藏得很详细。
[MQL4-Help]
说:
返回交易服务器分配给订单的凭单的数量,如果失败则返回
-1
。
因此,返回的第一个成功OrderSend()
票证是0
(在策略测试程序中,真正的MT4 /服务器会遇到从它的db.pool
票证中抽取的高数字。)
因此第二个 if ( ticket > 0 )
永远不会让你进入。
通常使用 if ( ticket > EMPTY )
来减少意图并使用符号而不是-1
整数常量