新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1890

 
Andrey Sokolov #:

你有24小时的记忆吗?

没有。我还没有找到如何实现我所需要的东西--也许我会在第二次迭代中得到它;-)
 
DanilaMactep #:
没有。我还没有找到如何实现我所需要的东西--也许我会在第二次迭代中实现;--)

马克西姆-库兹涅佐夫告诉你如何。你读过吗?

 

日安,请帮助解决错误关闭订单的问题。

当获得正的利润时,专家顾问关闭订单网格中的第一个和最后一个订单。

在模拟账户上 一切正常,但在真实账户上只有倒数第二的订单被关闭。我面临这样一个问题,当我不得不关闭整个订单网格时,问题出在重新报价上,然后设置了标志,问题就解决了。在这里,我也做了同样的工作,但问题没有得到解决。

旗帜。

int flag_close3=0;
//-------------------------------------------------------------------+  Команда на закрытие мин макс и предпоследнего ордеров в сетке профит = 0
   if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
     {
       flag_close3=1;
     }
//-------------------------------------------------------------------+  Флаг на закрытие  ордеров
   if(flag_close3==1)
      ClosseMinMaxPenultimateOrdersZero();
//+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров профит = 0    |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxPenultimateOrdersZero()
  {
   int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0  && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
                    }
                 }
              }

            if(OrderType() == OP_SELL)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
                    }
                 }
              }
           }
        }
     }
  }

谢谢!!!!

 
EVGENII SHELIPOV 在模拟账户上 一切正常,但在真实账户上只有倒数第二的订单被关闭。我面临这样一个问题,当我不得不关闭整个订单网格时,问题出在重新报价上,然后设置了标志,问题就解决了。在这里,我也做了同样的工作,但问题没有得到解决。

旗帜。

谢谢!!!!

你的旗帜在哪里重置?
 
Tretyakov Rostyslav #:
你的旗帜在哪里重置?
//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену и текста
   if(CountTrade() == 0)
     {
      flag_close=0;
      ObjectsDeleteAll(0,"AveragePriceLine");
      if(ObjectFind(0,"signal4")==0 && CountTrade(0) < 1)//для бай
        {
         ObjectDelete(0,"signal4");
        }
      if(ObjectFind(0,"signal3")==0 && CountTrade(1) < 1)//для селл
        {
         ObjectDelete(0,"signal3");
        }
     }

如果我把它放在这里,它就会是正确的

 
EVGENII SHELIPOV #:

如果我把它放在这里,它就会是正确的。

不,这种方式将在所有订单关闭时重置。

考虑到你不需要关闭所有订单,最好重新运行票据并关闭它们。

 
Tretyakov Rostyslav #:

不,这种方式将在所有订单关闭时重置。

考虑到你不需要关闭所有订单,最好重新运行票据并关闭

稍等片刻。

 
EVGENII SHELIPOV #:

请稍等。



//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if(CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
      flag_close2=0;
      flag_close3=0;
      ObjectsDeleteAll(0,"AveragePriceLineMinMaxOrders");
      if(ObjectFind(0,"signal41")==0 && (CountTrade(0)<1 || Drawdown < DrawdownClosingMinMaxOrdersZero)) //для бай
        {
         ObjectDelete(0,"signal41");
        }
      if(ObjectFind(0,"signal42")==0 && (CountTrade(1)<1 || Drawdown < DrawdownClosingMinMaxOrdersZero))//для селл
        {
         ObjectDelete(0,"signal42");
        }
     }

但这种方式。

 
Tretyakov Rostyslav #:

不,这样它就会在所有订单结束后重置。

考虑到你不需要关闭所有的订单,最好是循环浏览票据并关闭它们。

在平仓功能中,我不去看那些股票吗?

//+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров               |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxPenultimateOrders()
  {
   int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()==0 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
                    }
                 }
              }

            if(OrderType() == OP_SELL)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()==1 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol() + ", Баланс" + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств" + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
                    }
                 }
              }
           }
        }
     }
  }
 
EVGENII SHELIPOV #:


但像这样。

//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if(CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
      flag_close2=0;
      flag_close3=0;

这意味着如果没有订单