新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 70

 
wishmast:

请告诉我为什么OrdersTotal()函数 在搜索订单的时候会写-1。

例子: for (i=OrdersTotal()-1 ;i>=0; i--)

为什么不直接使用OrdersTotal()?

这个函数中的订单数是从0开始还是从1开始?也就是说,如果有一个订单,OrdersTotal()是等于0还是1?

从零开始计算
 
wishmast:

请告诉我为什么OrdersTotal()函数 在搜索订单的时候会写-1。

例子: for (i=OrdersTotal()-1 ;i>=0; i--)

为什么不直接使用OrdersTotal()?

这个函数中的订单数是从0开始还是从1开始?也就是说,如果有一个订单,OrdersTotal()是等于0还是1?

OrdersTotal()显示的是数量,即如果有一个订单,那么OrdersTotal()等于1,但在订单列表中,报告以0开始

0--一阶

1-二阶

2 - 第三次

等等。

因此,如果我们从列表的末尾开始搜索,我们必须从OrdersTotal() 的总数中减去1

 
Sergey Gritsay:

OrdersTotal()显示数量,即如果有一个订单,那么OrdersTotal()将是1,但在订单列表中,报告从零开始

0--一阶

1-二阶

2 - 第三次

等等。

因此,如果我们从列表的末端开始搜索,我们必须从OrdersTotal() 的总数中减去1

但是如果我们不从第一个表达式中减去1,就不会有错误,因为如果我们有一个命令,就会发生两次迭代。除非我们不需要进行两次迭代,而我们可以在一次中完成所有需要的事情,所以-1,对吗?
 
wishmast:
但如果第一个表达式没有减去1,就不会有错误,如果我们有一个顺序,就会发生两次迭代。除非没有必要做两次迭代,而我们需要的一切都可以在一次中完成,所以-1,对吗?
是的,这是正确的。
 
Sergey Gritsay:
是正确的

不太对。

你可以使用前缀decrement

for(int i = OrdersTotal(); i >= 0; --i)
 
trader781:
既然我们有一叠订单,为什么不能直接抽出我们需要的那张?(正确的),并随心所欲地做我们想做的事? 例如命令(i-4)
因为它只能在MT4测试器中工作。或者当只在一个符号上交易,而且只有一个这个EA。
 
Vitalie Postolache:
因为这只能在MT4测试器中工作。或者当只在一个符号上交易,而且只有一个这个EA。

如果你想一想,每个货币对的EA都是一样的,只有账户余额 是共同的(切换将是最后的)。

如果符号相吻合,过滤器将进入所有满足专家顾问的 "开市 "条件的订单。

什么是错的?

 
trader781:

如果你想一想,每个货币对的EA都是一样的,只有账户余额 是共同的(切换将是最后的)。

如果模拟结果吻合,过滤器将进入所有满足EA的市场开放条件的订单。

什么是错的?

那么,上面已经向你解释了什么是错误的。我们可以把订单只算作我们的,按总金额取数组索引--我们将得到一个有空单元格的数组。这又是为了什么呢?而且,如果数组不是空的,"不必要的 "字段将包含不必要的垃圾,导致错误,而我们正在谈论钱。
 
Vitalie Postolache:
嗯,上面已经向你解释了什么是错的。订单只计算自己的,并对总数取数组索引--你会得到一个带有空单元的数组。这又是为了什么呢?而如果数组不是空的,"不必要的 "字段将包含不必要的垃圾,导致错误,而我们正在谈论钱。

好吧,这就是它的作用。

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


对吗?

 
帮我写下条件:如果账户中的可用资金量 少于存款的50%,那么{行动}MT5
原因: