智能交易网,程序化交易,自动交易,量化交易

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

参加MT4智能交易编程培训,7课免费在线试听MT4指标,EA代写,或EA指标加密账户远程验证服务 最完善商业MT4跟单系统(0.1秒极速响应不漏单)
为论坛做贡献有奖学金,奖学金可直接换真钱 扫本站微信公 众号部分视频课程指标EA免费得智能交易网MT4操盘神器,扫公众号免费得
查看: 2373|回复: 3

请问光辉老师,关于for循环的一点问题

[复制链接]
发表于 2014-12-16 14:36:25 | 显示全部楼层 |阅读模式
本帖最后由 慧鑫 于 2014-12-16 14:40 编辑

我查询当前持仓订单,并且打印订单编号的ea,于是我在void OnTick()中写了下面代码:
  1. void OnTick()
  2.   {
  3.   int ticket=0;
  4.    for(int i=0;i<OrdersTotal();i++)
  5.     {
  6.       if(OrderSelect(i, SELECT_BY_TICKET,MODE_TRADES)==true)
  7.         {
  8.           ticket = OrderTicket();
  9.         }
  10.      }
  11.    Print(ticket);
  12.   }
复制代码

代码哪里有逻辑错误吗?怎么输出的全是0呢(账户中已经有两个订单)?
还有for循环我看到别人还有一种写法“for (int i = OrdersTotal() - 1; i >= 0; i--)”这两种写法什么区别?
先谢光辉老师!
回复

使用道具 举报

发表于 2014-12-16 21:06:02 | 显示全部楼层
第一个问题:
  应将 if(OrderSelect(i, SELECT_BY_TICKET,MODE_TRADES)==true)修改为:
       if(OrderSelect(i, SELECT_BY_POS ,MODE_TRADES)),要按位置而不能用订单号选择,所以你选的全是0;
第二个问题:
   区别不是很大,一个是先进先选,一个是后进先选。

我替老师回答了,呵呵{:soso_e100:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-17 10:57:11 | 显示全部楼层
MQL4MQL5 发表于 2014-12-16 21:06
第一个问题:
  应将 if(OrderSelect(i, SELECT_BY_TICKET,MODE_TRADES)==true)修改为:
       if(Order ...

一层纸的困惑自己却很难想通,十分感谢,你也是老师
回复 支持 反对

使用道具 举报

发表于 2017-10-5 11:50:26 | 显示全部楼层
遍历时一个从一号单开始,这个是顺序,另外一个是倒序
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|sitemap|智能交易网,程序化交易,自动交易,量化交易 ( 苏ICP备08108698号,苏州智德金网络科技股份有限公司版权所有 )

GMT+8, 2019-10-21 19:25 , Processed in 0.043749 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表