错误、漏洞、问题 - 页 276

 
Yedelkin:
查看MQL5参考指南 /技术指标/ iCustom

非常感谢您的迅速行动)

 

关于主题。我几乎得到了它,但COUNTER没有启动,在终端日志中说


移除

成功加载


成功了!!!
 

你这里有一个错误。

   v161_handle=iCustom(NULL,0,"ErolМТ5");                            
   v162_handle=iCustom(NULL,0,"ErolМТ5");
   Sum_handle=iCustom(NULL,0,"ErolМТ5");
在这种情况下,所有三个变量都会有相同的句柄。因为你在三次调用同一个指标。
 
sergey1294:

你这里有一个错误

在这种情况下,所有三个变量都会有相同的句柄,因为你正在调用同一个指标三次。

是的,但按照我的理解,指标的 索引线 的值(3条线的值)是指

我们得到了通过。

CopyBuffer(v161_handle,1,0,3,Spr1Buffer)
CopyBuffer(v162_handle,2,0,3,Spr2Buffer)
CopyBuffer(Sum_handle,4,0,3,SumBuffer)

这里1、2和4是指标线的索引值,储存在缓冲区内。

然后我们将其相互比较。

但这不是一个问题,它不能用这些指标线指数来正确计算

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 

对去哪里或在这里做什么有什么建议吗?


void OnTick()
{  
   ArraySetAsSeries(Spr1Buffer,true);
   ArraySetAsSeries(Spr2Buffer,true);
   ArraySetAsSeries(SumBuffer,true);

   if(CopyBuffer(v161_handle,1,0,3,Spr1Buffer)<0 || CopyBuffer(v162_handle,2,0,3,Spr2Buffer)<0 || CopyBuffer(Sum_handle,4,0,3,SumBuffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      }
   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
   bool SellSum1 =(SumBuffer[1]>=Sp);
   if(SellSpr1 && SellSum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =(Spr1Buffer[1] < Spr2Buffer[1]);
   bool BuySum1 =(SumBuffer[1]>=Sp);
   if(BuySpr1 && BuySum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenBuy1();
      }
 
alexluek:

是的,但根据我的理解,指标的 索引线 的值(3条线的值)

我们得到了通过。

这里1、2和4是指标线的索引值,储存在缓冲区内。

然后我们将其相互比较。

但这不是一个问题,它没有根据这些指标线的指数进行正确计算

只需加载一份指标的副本,并通过副本缓冲器寻址必要的缓冲器索引即可。
 
sergey1294:
只需加载一个指标的副本,并通过copybuffer寻址所需的缓冲区索引即可

不是的,我无法得到第二行的数值。

因为存储在不同缓冲区的2个行指数的值被比较。


   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
 
alexluek:

错了,不可能得到第二行的值

因为存储在不同缓冲区的2个行指数的值被比较。


指标本身可能存在错误
 
sergey1294:
指标本身可能存在错误

指示器读数正确

 

拯救溺水者是溺水者的工作。

它可能会在未来派上用场。

在EA中为当前条形图调用2个或多个指标线

选择1个句柄并调用指标,然后使用copybuffer来保存索引值。

然后用这些缓冲区工作。sergey1294 谢谢你的帮助!

int OnInit()
  {
   v161_handle=iCustom(NULL,0,"LeroyMТ5");                            
   if(v161_handle<0)
     {
      Alert("Ошибка при создании индикаторов: ",GetLastError());
      return(-1);
     }
   return(0);
  }


void OnTick()
{  
   ArraySetAsSeries(Sp1Buffer,true);
   ArraySetAsSeries(Sp2Buffer,true);
   ArraySetAsSeries(Sp3Buffer,true);
   if(CopyBuffer(v161_handle,1,0,1,Sp1Buffer)<0 || CopyBuffer(v161_handle,2,0,1,Sp2Buffer)<0 || CopyBuffer(v161_handle,4,0,1,Sp3Buffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      return;
      }    
   bool SellSpr1 =( Sp1Buffer[0]> Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(SellSpr1  && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =( Sp1Buffer[0]< Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(BuySpr1 && !PositionSelect(_Symbol));   
      {
        PositionOpenBuy1();
      }
}