哪种设计是正确的? - 页 7

 
Vladon:
我曾经一度在代码库中发布自己的一套关于关闭不同类型的代码。
在这种情况下,你给出的是已编译的文件,这在这个分支中没有任何用处。
弗拉登
https://www.mql5.com/ru/code/mt4

还有这里,对不起,走错论坛了。

无意冒犯。

 

哦,这不是它:-),现在。


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
那么这样的设计在理论上应该是完全关闭所有的订单,但它只关闭了当前窗口的一对,错误在哪里?
 
Vladon:

哦,这不是它:-),现在。


https://www.mql5.com/ru/code/9052


是的,你的工具包很好,然而我无法弄清楚我的代码中的错误在哪里。
 
valenok2003:

是的,你的工具包很好,然而我无法弄清楚我的代码中的错误在哪里。

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
有时,这种固执的态度令人吃惊。在本主题的第3页和更远的地方,你看到了一个关于推翻命令的正确例子。在一天结束时,RTFM。我得告诉你多少次:退出阵列之外。编号为
的订单
OrdersTotal()

不存在!然后,它将发挥作用。

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
有时,这种固执的态度实在令人震惊。在本主题的第3页和更远的地方,你看到了正确的订单超限的例子。在一天结束时,RTFM。我得告诉你多少次:退出阵列。有编号的订单

不存在!然后,它将发挥作用。


弗拉迪斯拉夫,我道歉,这不是固执,而是不注意。我在做实验,没有纠正代码。

当然是这样。

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

然而,这似乎并不是原因,因为修正后的设计

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

仍然只关闭你抛出脚本的窗口中的一对订单,而不是所有的一对。

 

从启动者的简介中,"我用MQL4写作,包括定制。" - 一个典型的过度热心的例子。

我理解程序员可能很普通。你会习惯的。而我自己有时也会写出糟糕的代码,尽管我在努力。但什么会是...

我证实了某人的老假设,启动者的脑子里有羊毛。

 
valenok2003:


弗拉迪斯拉夫,我道歉,这不是固执,而是不注意。我在做实验,没有纠正代码。

当然是这样。

然而,这似乎并不是原因,因为修正后的设计

仍然只对抛出脚本的窗口中的一对订单进行关闭,而不是所有的一对。

如果是所有的交易对,那么你没有正确使用Ask,Bid - 你是从当前的图表中获取的。如果你在关闭订单时处理错误 - 你会看到这些信息。

而不是Ask - MarketInfo(OrderSymbol(),MODE_ASK); 而不是Bid - MarketInfo(OrderSymbol(),MODE_BID)。

好运。

ZS并改变脚本的名称,因为根据名称它可以正常工作;)。

 
gip:

从启动者的简介中,"我用MQL4写作,包括定制。" - 一个典型的过度热心的例子。

我理解程序员可能很普通。你会习惯的。而我自己有时也会写出糟糕的代码,尽管我在努力。但什么会是...

我证实了某人的老假设,话题发起人的脑子里有羊毛。


当然,听到这个消息是很遗憾的。然而,我从不接受我无法完成的订单。而且,我希望你能理解,订单水平也会有所不同。而且,正如有人所说--不知道并不可耻。不问可耻....而根据我的理解,这个论坛的存在正是为了提供一个学习的机会。因此,你的,势利眼对我来说并不清楚,你的批评,我不接受。虽然我承认你是这个论坛上最聪明的。

P.S. 编程的艺术不在于写代码的能力,而在于做出正确算法的能力。这就像如果你一生都在开拉达车,然后你搬到了奔驰车,不知道所有的旋钮和按钮在哪里,你并没有因此而成为一个坏司机。

 
VladislavVG:

如果是所有的货币对,你没有正确使用Ask,Bid--你是从当前的图表中抽取。如果你在关闭订单时处理错误,你会看到消息。

而不是Ask - MarketInfo(OrderSymbol(),MODE_ASK); 而不是Bid - MarketInfo(OrderSymbol(),MODE_BID)。

好运。


非常感谢,我正在处理错误,信息回来了--错误的价格,但我搞不清楚哪里出了问题。
原因: