循环和关闭或删除订单 - 页 4 12345 新评论 William Roeder 2014.09.23 13:04 #31 ggekko:专家你好,你对这个方案有什么看法?while(OrdersTotal()>0)这意味着它与其他所有的EA(包括它自己)和手动交易 都不兼容。(在其他图表上的交易) Gordon Gekko 2014.09.23 14:46 #32 WHRoeder: ggekko。专家你好,你对这个方案有什么看法?这意味着它与其他所有的EA(包括它自己)和手动交易都不兼容。(在其他图表上的交易) 当然了。这是一个完全关闭的所有。有时有些情况下(例如你想立即关闭太多未平仓的交易),"原始 "版本不能发挥作用。这个版本很适合这种情况。 Simon Gniadkowski 2014.09.23 15:59 #33 ggekko:当然了。这是一个完全关闭的全部。有时有些情况下(例如你想立即关闭太多未平仓的交易),"原始 "版本不能发挥作用。这个版本很适合这种情况。 你为什么不尝试对错误做出反应呢? 你不是应该分析错误并做出相应的反应吗? 对于一些错误,你可以重试,对于其他错误,你必须停止尝试。 [删除] 2015.02.02 12:23 #34 你好。我有一个关于while循环的问题。我想尽可能频繁地在一个循环中运行当前的EA。因此,我的想法是把当前的代码放在一个while循环里,里面包含一个睡眠函数,使while每隔1毫秒才执行一次。然而,当我这样做的时候,(我有一些Print("...")函数的调用,可以跟踪每个循环中发生的事情),我看到这个冻结,不再打印到屏幕上了。我想知道问题出在哪里。循环运行EA的频率为1ms,这可以吗?例如,每隔一毫秒从服务器上获取最新的买入/卖出价,会有问题吗?这是否会给那里带来太多负担,导致冻结?可能是我的算法做的其他事情导致了这个问题,我不确定。我在200ms的周期上运行,仍然得到同样的问题(虽然没有那么直接)。会不会是在日志文件中打印了太多行的问题?谢谢你在这方面的建议。问候。C. Carl Schreiber 2015.02.02 12:58 #35 可能是代码问题 - 但不知道代码? William Roeder 2015.02.02 14:27 #36 14967057:我有一个关于while循环的问题。我想尽可能频繁地在一个循环中运行当前的EA。 因此,我的想法是把当前的代码放在一个while循环里,里面包含一个睡眠函数,使while每隔1毫秒才执行一次。 试图获得最新的买入/卖出价会不会有问题。会不会存在向日志文件打印过多行的问题?这个主题是关于关闭和删除订单的。不要劫持线程来讨论非主题问题。发表一个新的主题。你为什么要连续循环?没有什么在变化。你所做的只是在浪费CPU时间。从开始 返回,当Bid/Ask变化时,你的开始 将被尽可能快地调用。是的,你已经用这些行填满了所有可用的内存,比Windows把它们放到磁盘上的速度快。所有程序都被分页了。所有东西都挂了。 [删除] 2015.02.03 09:08 #37 你好。事实证明,我遇到的问题并不是因为将我的EA代码封装在一个带有1ms睡眠的while循环中。这一部分似乎很好(不管我是否打印到屏幕上),因为我现在已经运行了半个小时,没有出现任何问题。问题是由于我在代码中的另一个偷偷摸摸的while,最终导致EA陷入了一个无限循环。感谢gooly和Roesder的意见。问候。 [删除] 2015.02.18 21:27 #38 大家好。我读了这个主题,我有个问题。我试图做一个代码,删除挂单(只有STOP,没有LIMIT),但只有当另一个挂单被激活(开始是OP_SELL或OP_BUY)。所以代码是这样的(但有一个错误,但我不知道在哪里)。你能看一下我的代码吗? bool result; int i, j, cmd, cmd2,total; total=OrdersTotal(); for(i=0; i<total; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); if(cmd!=OP_BUYSTOP && cmd!=OP_SELLSTOP) //take an orders which was activated { for(j=0; j<total; j++) //another variable j { if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){ cmd2=OrderType(); if(cmd2!=OP_BUY && cmd2!=OP_SELL) { OrderPrint(); result=OrderDelete(OrderTicket()); //first pending order become to OP_SELL or OP_BUY, second pending order will be delete if(result!=TRUE) Print("LastError = ", GetLastError()); break; } } } } } } spgandau 2018.04.20 01:26 #39 OrdersTotal()不正确... 我对使用OrdersTotal() 的循环代码序列没有给出正确的结果感到惊讶(在两个不同的经纪商那里观察到)。 我在Linux Ubuntu-MATE 16.04桌面上使用MT4 1090版本,运行WINE 3.0。 以下是我一直在使用的方法... for(int cc = 0; cc < OrdersTotal(); cc++){ if (!OrderSelect(cc, SELECT_BY_POS, MODE_TRADES) ) 继续。 如果(OrderSymbol() != Symbol() ) 继续。 如果(OrderType() > 1) 继续; //--忽略挂单交易 OpenTradecnt++; //--对该符号的每一个真实头寸进行计数。 Print("此符号的未平仓交易数为: ", OpenTradecnt);} 我注意到在两个不同的经纪商那里,OrdersTotal()的值并不总是与MT4经纪商的'Trade'标签中显示的一致。 最初,我认为是经纪商导致OrdersTotal()不能正常运行。当我在第二个经纪商那里注意到时,我开始怀疑MT4是否有一个内部'问题',或者我的代码是错误的,或者这是否是MT4与服务器同步的一个问题....? 在阅读了这个论坛主题后,我想知道如果我改变for...循环的读取方式,结果是否会有变化。 for(int cc = OrdersTotal() - 1; cc >= 0; cc-){...........} 或者,是否有一个标志或一行代码可以确保OrdersTotal()在OnTick()事件中被正确同步? 关于这个问题的任何澄清都将是非常有帮助的,我们将非常感激! Loops and Closing or 我将写一个免费的mql4顾问 淘宝网上有卖的,有卖的,有卖的,有卖的,有卖的,有卖的,有卖的,有卖的。 Eleni Anna Branou 2018.04.20 07:58 #40 请使用</>按钮来插入你的代码。 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
专家你好,你对这个方案有什么看法?
专家你好,你对这个方案有什么看法?
当然了。这是一个完全关闭的所有。
有时有些情况下(例如你想立即关闭太多未平仓的交易),"原始 "版本不能发挥作用。这个版本很适合这种情况。
当然了。这是一个完全关闭的全部。
有时有些情况下(例如你想立即关闭太多未平仓的交易),"原始 "版本不能发挥作用。这个版本很适合这种情况。
你好。
我有一个关于while循环的问题。我想尽可能频繁地在一个循环中运行当前的EA。因此,我的想法是把当前的代码放在一个while循环里,里面包含一个睡眠函数,使while每隔1毫秒才执行一次。
然而,当我这样做的时候,(我有一些Print("...")函数的调用,可以跟踪每个循环中发生的事情),我看到这个冻结,不再打印到屏幕上了。
我想知道问题出在哪里。循环运行EA的频率为1ms,这可以吗?例如,每隔一毫秒从服务器上获取最新的买入/卖出价,会有问题吗?这是否会给那里带来太多负担,导致冻结?
可能是我的算法做的其他事情导致了这个问题,我不确定。
我在200ms的周期上运行,仍然得到同样的问题(虽然没有那么直接)。会不会是在日志文件中打印了太多行的问题?
谢谢你在这方面的建议。
问候。
C.
14967057:
我有一个关于while循环的问题。我想尽可能频繁地在一个循环中运行当前的EA。
因此,我的想法是把当前的代码放在一个while循环里,里面包含一个睡眠函数,使while每隔1毫秒才执行一次。
试图获得最新的买入/卖出价会不会有问题。
会不会存在向日志文件打印过多行的问题?
你好。
事实证明,我遇到的问题并不是因为将我的EA代码封装在一个带有1ms睡眠的while循环中。这一部分似乎很好(不管我是否打印到屏幕上),因为我现在已经运行了半个小时,没有出现任何问题。
问题是由于我在代码中的另一个偷偷摸摸的while,最终导致EA陷入了一个无限循环。
感谢gooly和Roesder的意见。
问候。
大家好。我读了这个主题,我有个问题。我试图做一个代码,删除挂单(只有STOP,没有LIMIT),但只有当另一个挂单被激活(开始是OP_SELL或OP_BUY)。所以代码是这样的(但有一个错误,但我不知道在哪里)。你能看一下我的代码吗?
OrdersTotal()不正确...
我对使用OrdersTotal() 的循环代码序列没有给出正确的结果感到惊讶(在两个不同的经纪商那里观察到)。
我在Linux Ubuntu-MATE 16.04桌面上使用MT4 1090版本,运行WINE 3.0。
以下是我一直在使用的方法...
for(int cc = 0; cc < OrdersTotal(); cc++)
{
if (!OrderSelect(cc, SELECT_BY_POS, MODE_TRADES) ) 继续。
如果(OrderSymbol() != Symbol() ) 继续。
如果(OrderType() > 1) 继续; //--忽略挂单交易
OpenTradecnt++; //--对该符号的每一个真实头寸进行计数。
Print("此符号的未平仓交易数为: ", OpenTradecnt);
}
我注意到在两个不同的经纪商那里,OrdersTotal()的值并不总是与MT4经纪商的'Trade'标签中显示的一致。 最初,我认为是经纪商导致OrdersTotal()不能正常运行。当我在第二个经纪商那里注意到时,我开始怀疑MT4是否有一个内部'问题',或者我的代码是错误的,或者这是否是MT4与服务器同步的一个问题....?
在阅读了这个论坛主题后,我想知道如果我改变for...循环的读取方式,结果是否会有变化。
for(int cc = OrdersTotal() - 1; cc >= 0; cc-)
{
...........
}
或者,是否有一个标志或一行代码可以确保OrdersTotal()在OnTick()事件中被正确同步?
关于这个问题的任何澄清都将是非常有帮助的,我们将非常感激!
请使用</>按钮来插入你的代码。