新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 70 1...636465666768697071727374757677...1953 新评论 Mickey Moose 2017.01.14 10:40 #691 wishmast:请告诉我为什么OrdersTotal()函数 在搜索订单的时候会写-1。 例子: for (i=OrdersTotal()-1 ;i>=0; i--)为什么不直接使用OrdersTotal()?这个函数中的订单数是从0开始还是从1开始?也就是说,如果有一个订单,OrdersTotal()是等于0还是1? 从零开始计算 Sergey Gritsay 2017.01.14 11:18 #692 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。 wishmast 2017.01.14 12:36 #693 Sergey Gritsay:OrdersTotal()显示数量,即如果有一个订单,那么OrdersTotal()将是1,但在订单列表中,报告从零开始。0--一阶1-二阶2 - 第三次 等等。 因此,如果我们从列表的末端开始搜索,我们必须从OrdersTotal() 的总数中减去1。 但是如果我们不从第一个表达式中减去1,就不会有错误,因为如果我们有一个命令,就会发生两次迭代。除非我们不需要进行两次迭代,而我们可以在一次中完成所有需要的事情,所以-1,对吗? Sergey Gritsay 2017.01.14 13:22 #694 wishmast: 但如果第一个表达式没有减去1,就不会有错误,如果我们有一个顺序,就会发生两次迭代。除非没有必要做两次迭代,而我们需要的一切都可以在一次中完成,所以-1,对吗? 是的,这是正确的。 Alexey Viktorov 2017.01.14 13:49 #695 Sergey Gritsay: 是正确的不太对。你可以使用前缀decrement。for(int i = OrdersTotal(); i >= 0; --i) Vitalie Postolache 2017.01.14 15:07 #696 trader781: 既然我们有一叠订单,为什么不能直接抽出我们需要的那张?(正确的),并随心所欲地做我们想做的事? 例如命令(i-4) 因为它只能在MT4测试器中工作。或者当只在一个符号上交易,而且只有一个这个EA。 Mickey Moose 2017.01.14 15:12 #697 Vitalie Postolache: 因为这只能在MT4测试器中工作。或者当只在一个符号上交易,而且只有一个这个EA。如果你想一想,每个货币对的EA都是一样的,只有账户余额 是共同的(切换将是最后的)。如果符号相吻合,过滤器将进入所有满足专家顾问的 "开市 "条件的订单。什么是错的? Vitalie Postolache 2017.01.14 15:16 #698 trader781:如果你想一想,每个货币对的EA都是一样的,只有账户余额 是共同的(切换将是最后的)。如果模拟结果吻合,过滤器将进入所有满足EA的市场开放条件的订单。什么是错的? 那么,上面已经向你解释了什么是错误的。我们可以把订单只算作我们的,按总金额取数组索引--我们将得到一个有空单元格的数组。这又是为了什么呢?而且,如果数组不是空的,"不必要的 "字段将包含不必要的垃圾,导致错误,而我们正在谈论钱。 Mickey Moose 2017.01.14 15:26 #699 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++; }} 对吗? Any questions from newcomers 10点3.mq4 如何编码? Sile Si 2017.01.14 16:00 #700 帮我写下条件:如果账户中的可用资金量 少于存款的50%,那么{行动}MT5 1...636465666768697071727374757677...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请告诉我为什么OrdersTotal()函数 在搜索订单的时候会写-1。
例子: for (i=OrdersTotal()-1 ;i>=0; i--)
为什么不直接使用OrdersTotal()?
这个函数中的订单数是从0开始还是从1开始?也就是说,如果有一个订单,OrdersTotal()是等于0还是1?
请告诉我为什么OrdersTotal()函数 在搜索订单的时候会写-1。
例子: for (i=OrdersTotal()-1 ;i>=0; i--)
为什么不直接使用OrdersTotal()?
这个函数中的订单数是从0开始还是从1开始?也就是说,如果有一个订单,OrdersTotal()是等于0还是1?
OrdersTotal()显示的是数量,即如果有一个订单,那么OrdersTotal()等于1,但在订单列表中,报告以0开始。
0--一阶
1-二阶
2 - 第三次
等等。
因此,如果我们从列表的末尾开始搜索,我们必须从OrdersTotal() 的总数中减去1。
OrdersTotal()显示数量,即如果有一个订单,那么OrdersTotal()将是1,但在订单列表中,报告从零开始。
0--一阶
1-二阶
2 - 第三次
等等。
因此,如果我们从列表的末端开始搜索,我们必须从OrdersTotal() 的总数中减去1。
但如果第一个表达式没有减去1,就不会有错误,如果我们有一个顺序,就会发生两次迭代。除非没有必要做两次迭代,而我们需要的一切都可以在一次中完成,所以-1,对吗?
是正确的
不太对。
你可以使用前缀decrement。
既然我们有一叠订单,为什么不能直接抽出我们需要的那张?(正确的),并随心所欲地做我们想做的事? 例如命令(i-4)
因为这只能在MT4测试器中工作。或者当只在一个符号上交易,而且只有一个这个EA。
如果你想一想,每个货币对的EA都是一样的,只有账户余额 是共同的(切换将是最后的)。
如果符号相吻合,过滤器将进入所有满足专家顾问的 "开市 "条件的订单。
什么是错的?
如果你想一想,每个货币对的EA都是一样的,只有账户余额 是共同的(切换将是最后的)。
如果模拟结果吻合,过滤器将进入所有满足EA的市场开放条件的订单。
什么是错的?
嗯,上面已经向你解释了什么是错的。订单只计算自己的,并对总数取数组索引--你会得到一个带有空单元的数组。这又是为了什么呢?而如果数组不是空的,"不必要的 "字段将包含不必要的垃圾,导致错误,而我们正在谈论钱。
好吧,这就是它的作用。
{
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++;
}
}
对吗?