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

 
novichok2018:

是的,谢谢,我看了那页。我对MKL4的了解只够注意到,在我的循环中,位置从零到最后一个,而在例子中则相反,从最后一个到零。我仍然不知道 该在哪里插入断裂当我把循环改为反向时,位置 完全停止关闭

当关闭位置时,必须反转循环以避免跳过位置。在这个循环中不需要break操作符--它是循环的中断,并从其主体中退出。你需要的是继续--过渡到下一个循环迭代。

而且只有你知道它为什么没有关闭,你为它做了什么。

 
Artyom Trishkin:

在关闭职位时,必须反转循环,以便没有职位被跳过。在这个循环中,你不需要break操作符--它是一个中断和退出循环的主体。你需要的是继续--过渡到下一个循环迭代。

只有你知道它为什么不能关闭,以及你为它做了什么。


我完全按照说明行事。以下是更正后的代码。

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

现在它关闭了两个仓位,但它不会关闭一个,而是等待第二个。这是个疯子。我想也许我把ClosePoz() 函数插入了一个错误的位置。其结果是零。我在哭着求救。不可能是没有人能够解决这个问题。

 

如何兑现原始账户(100美元)?

 
novichok2018:

完全按照指示做了。以下是更正后的代码。

现在它关闭了两个位置,但它没有关闭一个,而是在等待另一个。这是个疯子。我想也许我把ClosePoz() 函数插入了一个错误的位置。其结果是零。我在哭着求救。不可能是没有人能够解决这个问题。

我不知道。我把它画在我的膝盖上。当然我不能检查--你的条件不够,所以你自己做。

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
和WPR里面的功能进行检查--它在某种程度上是不正常的。WPR应该是调用 关闭函数的 条件之一。
 
不可能修改挂单的手数。
 
igrok333:
我知道你不能修改挂单中的手数。

只开一个额外的,有你需要的量的。

 
Alekseu Fedotov:

只需用你想要的体积再开一个

删除一个现有的并建立一个新的可能会更容易。毕竟,所需的体积不一定要比已经放置的体积大。而且遵循一个命令更容易。

 

日安,我有一个问题,我将解释我是如何理解它的

有没有一种书面的算法,可以让专家顾问在最底部买入蜡烛,在最顶部卖出蜡烛?

我如何把它改编成一个EA?
 
iisvlg: 是否有一种书面的EA算法,将买入蜡烛放在最下面,卖出蜡烛放在最上面,以及如何将其改编为EA?

这将是巨大的!!!。

 
iisvlg:

日安,我有一个问题,我将解释我是如何理解它的

对于在底部买入蜡烛并在顶部卖出蜡烛的专家顾问,是否有一个书面的算法?

你如何把它改编成一个EA?

将 "买入限制 "放在低位,"卖出限制 "放在高位。

关于算法,挖掘基础

原因: