哪种设计是正确的? - 页 5 12345678 新评论 Martingeil1 2010.06.16 09:29 #41 valenok2003: 其结果是这个脚本 问题--为什么它不总是关闭所有的订单?例如,我接连开了三个卖出订单,并试图关闭它们,但脚本可能会关闭其中一个或两个或所有的订单。原因是什么呢? 你需要一个脚本吗? 那么你就不需要while 语句了, 脚本在循环中工作就可以了。 对于脚本,你需要这样的结构... 我不记得链接了,这里是关闭所有未结订单的脚本。 //+------------------------------------------------------------------+ //| CloseAllOrders.mq4 | //| Copyright © 2008, PRMQuotes Software Corp. | //| Jedimedic77@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, PRMQuotes Software Corp." #property link "" //+------------------------------------------------------------------+ //| EX4 imports | //+------------------------------------------------------------------+ #include <stdlib.mqh> //+------------------------------------------------------------------+ //| global variables to program: | //+------------------------------------------------------------------+ double Price[2]; int giSlippage; bool CloseOpenOrders = true; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void start() { int iOrders=OrdersTotal()-1, i; if(CloseOpenOrders) { for(i=iOrders; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() && !OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],giSlippage)) Print(OrderError()); } } } //+------------------------------------------------------------------+ //| Function..: OrderError | //+------------------------------------------------------------------+ string OrderError() { int iError=GetLastError(); return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",iError," ",ErrorDescription(iError))); } //+------------------------------------------------------------------+ //| Function..: GetMarketInfo | //+------------------------------------------------------------------+ bool GetMarketInfo() { RefreshRates(); Price[0]=MarketInfo(OrderSymbol(),MODE_ASK); Price[1]=MarketInfo(OrderSymbol(),MODE_BID); double dPoint=MarketInfo(OrderSymbol(),MODE_POINT); if(dPoint==0) return(false); giSlippage=(Price[0]-Price[1])/dPoint; return(Price[0]>0.0 && Price[1]>0.0); } //+------------------------------------------------------------------+ khorosh 2010.06.16 09:49 #42 valenok2003: 其结果是这个脚本 问题--为什么它不总是关闭所有的订单?例如,我连续开了三个卖出订单,然后试图用脚本关闭它们,它可能会关闭一个或两个或所有的订单。原因是什么呢? 而引号是多少个数字? Sergey Guliaev 2010.06.16 10:15 #43 khorosh: 而引号是多少个数字? 五 Sergey Guliaev 2010.06.16 10:17 #44 Martingeil: 你需要一个脚本吗? 当然,谢谢你。但要得到一个现成的剧本很容易。我想弄清楚原因是什么。 techno 2010.06.16 10:21 #45 Martingeil: 你需要一个脚本吗? 那么你就不需要while 语句了, 脚本在循环中工作就是如此。 该脚本只起一次作用。那里没有自我循环,也从来没有过。 Valenok,你需要脚本完全关闭所有订单,还是只关闭这个符号? Sergey Guliaev 2010.06.16 10:28 #46 Martingeil: 你需要一个脚本吗? 那么你就不需要while 语句了, 脚本在循环中工作就可以了。 对于一个脚本,你需要这样的结构... 我不记得链接了,这里有一个脚本,可以关闭所有未结订单。 在while 代码中,只是为了在线程忙碌时进行延迟。 Martingeil1 2010.06.16 10:29 #47 Techno: 该脚本只工作一次。那里没有自我触发,也从来没有过。 Valenok,你想让脚本完全关闭所有的订单,还是只关闭这个符号? 是的,你说错了,我的意思是它不依赖于蜱虫。 Sergey Guliaev 2010.06.16 10:32 #48 Techno: 该脚本只工作一次。那里没有自我触发,也从来没有过。 Valenok,你需要脚本来关闭所有的订单,还是只关闭这个符号? 只开一个符号的订单。待定的不受影响。 有趣的是,在kodobase中被批评的代码 int start() { //---- while(OrdersTotal()>0) { for (int i=0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5); } } } //---- return(0); } 工作起来没有任何问题,但当我开始改进它时,我开始有问题了。 zy。 关于误串的问题 for (int i=0; i < OrdersTotal(); i++) 我已经想明白了。 techno 2010.06.16 10:34 #49 valenok2003: 只开一个符号的订单。我们不碰那些待定的。 所以,让它直接延期,顺其自然。在一般形式下。 int start() { for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()) switch(OrderType()) { case 0 : OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5); break; case 1 : OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5); break; default : OrderDelete(OrderTicket()); break; } } } Sergey Guliaev 2010.06.16 10:34 #50 Martingeil: 你是对的,我不是那个意思,不管是什么抽搐... 我很清楚这一点。 12345678 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
其结果是这个脚本
问题--为什么它不总是关闭所有的订单?例如,我接连开了三个卖出订单,并试图关闭它们,但脚本可能会关闭其中一个或两个或所有的订单。原因是什么呢?你需要一个脚本吗?
那么你就不需要while 语句了, 脚本在循环中工作就可以了。
对于脚本,你需要这样的结构...
我不记得链接了,这里是关闭所有未结订单的脚本。
其结果是这个脚本
问题--为什么它不总是关闭所有的订单?例如,我连续开了三个卖出订单,然后试图用脚本关闭它们,它可能会关闭一个或两个或所有的订单。原因是什么呢?而引号是多少个数字?
你需要一个脚本吗?
你需要一个脚本吗?
那么你就不需要while 语句了, 脚本在循环中工作就是如此。
该脚本只起一次作用。那里没有自我循环,也从来没有过。
Valenok,你需要脚本完全关闭所有订单,还是只关闭这个符号?
你需要一个脚本吗?
那么你就不需要while 语句了, 脚本在循环中工作就可以了。
对于一个脚本,你需要这样的结构...
我不记得链接了,这里有一个脚本,可以关闭所有未结订单。
该脚本只工作一次。那里没有自我触发,也从来没有过。
Valenok,你想让脚本完全关闭所有的订单,还是只关闭这个符号?
该脚本只工作一次。那里没有自我触发,也从来没有过。
Valenok,你需要脚本来关闭所有的订单,还是只关闭这个符号?
只开一个符号的订单。待定的不受影响。
有趣的是,在kodobase中被批评的代码
工作起来没有任何问题,但当我开始改进它时,我开始有问题了。
zy。
关于误串的问题
我已经想明白了。
只开一个符号的订单。我们不碰那些待定的。
所以,让它直接延期,顺其自然。在一般形式下。
你是对的,我不是那个意思,不管是什么抽搐...
我很清楚这一点。