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

 
Sfinks35:
下午好!
我现在似乎已经得到了它。

但在编译时,它给出了一个警告:由于类型转换在行,可能会丢失数据
index = GetPatt5barsDN(index);

在编译过程中,函数头(或函数本身)中没有错误。

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print("low3= ", low3);
   Print("index= ", index);
 

你好,我有一个问题,在优化过程中,我是否有办法跳过某一个环节。

例如,我正在用2个MA优化我的机器人--快速和慢速,从10个开始,最后每个都是1000个。

当慢速段的周期小于快速段的周期时,我怎样才能跳过该段?

 
Roman Sharanov:

你好,我有一个问题,在优化过程中,我是否有办法跳过某一个环节。

例如,我正在用2个MA优化我的机器人--快速和慢速,从10个开始,最后每个都是1000个。

当慢速通道的周期小于快速通道的周期时,我如何才能跳过通道?

在这种情况下,在初始化过程中要返回(INIT_PARAMETERS_INCORRECT)。

 
Igor Zakharov:

在这种情况下,在初始化过程中使return(INIT_PARAMETERS_INCORRECT)。

谢谢

 

你好。谁能告诉我。三个不同的TS,三个不同的EA,有三个不同的魔法数字,在不同的对子上。但它们有一个共同的特点--当达到某些条件(订单数量 和少量利润)时,订单关闭(使用OrderClose()函数)。在测试器中,没有任何问题,但在实践中,人们的印象是,当订单平仓()函数在其中一个对上触发时,这个函数(OrderClose())也在其他对上触发,无论条件是否满足。这可能是什么原因? 可能是一个用户定义的Close()函数?

下面是关闭条件和自定义的Close()函数。

if(CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
      int    i;
      int    total    = OrdersTotal();
      double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
      if((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = -1;
   int k      = OrdersTotal();
   
   for(i = k - 1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if(OrderTicket() != ticket) 
      if(!OrderSelect(ticket, SELECT_BY_TICKET))
         Print("Ошибка в выборе ордеров!");

   while(true)
   {
      int  error;
      bool result = true;
      
      if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, 0);
         
      if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, 0);
         
      if(result != TRUE) 
      { 
         error = GetLastError(); 
            Print("LastError = ", error); 
      }
      else 
      { 
         error = 0; 
      }
      if(error == 135) 
         RefreshRates();
      else break;
   } 
}

 
Youri Lazurenko:

你好。谁能告诉我。三个不同的TS,三个不同的EA,有三个不同的魔法数字,在不同的对子上。但它们有一个共同的特点--当达到某些条件(订单数量 和少量利润)时,订单关闭(使用OrderClose()函数)。在测试器中,没有任何问题,但在实践中,人们的印象是,当订单平仓()函数在其中一个对上触发时,这个函数(OrderClose())也在其他对上触发,无论条件是否满足。这可能是什么原因? 也许是在用户定义的Close()函数中?

下面是关闭条件和用户定义的Close()函数。

首先,你使用OrderSelect()来检查订单,因为它应该是这样的--你控制符号和订单主编号,然后你使用OrderCloseX()关闭订单,再次搜索订单,但你在OrderSelect()中没有控制符号和主编号,因为某些原因

我认为我们应该添加OrderCloseX()以避免重写整个代码。

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 
Igor Makanu:

首先你通过OrderSelect()检查订单,因为它应该是--控制符号和订单主编号,然后你在OrderCloseX()中关闭订单,再次搜索订单,但由于某些原因,你在OrderSelect()中没有控制符号和主编号。

我想我应该添加OrderCloseX(),以避免重写所有代码。

谢谢你。我会纠正它。已经纠正了。也许这就是原因:OrderCloseX()函数在其中一个配对上被调用,然后对所有其他配对和魔法数字起作用。可能是这样,可能是这样。再次感谢。

 
Igor Makanu:

数字 - 预定义变量

我也决定使用这个函数,我读到,如果办公室的数字是5,例如1.00000,而最后的数值是零,它可能不会返回5位数字,而是0,或者例如数字看起来像1.24700,会返回3位小数,尽管应该有5位小数,这是真的吗?

 
Seric29:

我也决定使用这个函数,我读到,如果一个稳定的5个字符的数字,例如1.00000和最后一个值为0,它可能不会返回5个字符,而是0,或者例如这个数字看起来像1.24700会返回3个小数位,尽管应该有5个小数位,这是真的吗?

数字与NormalizeDouble一起使用

https://docs.mql4.com/ru/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
突然间,所有的终端都与经纪商失去了联系。到处都是连接失败的错误。
在登录窗口中,服务器不允许我选择服务器,它是空的。我之前没有改变任何东西,我没有安装任何东西或删除任何东西。
原因是什么?