如何将指标代码添加到 expertadvisor 代码中? - 页 3

 
我希望在我的EA上添加一些过滤器,我应该怎么做?
 

嗨,我有一些问题......。~~

我希望用RVI指标做一个新的EA。

但似乎我有很大的错误。

甚至我还看了看这个页面https://www.mql5.com/en/articles/1456。

但还是有问题。

下面是我的代码。

有谁能帮我做这个简单的EA吗?

//+------------------------------------------------------------------+
//|                                                       RVI EA.mq4 |
//|                                             Copyright 2012, Abu. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Abu."
#property link      "http://www.metaquotes.net"

//--- input parameters
extern double    TakeProfit=100.0;
extern double    StopLoss=100.0;
extern int       TotalOrder=10;
extern double    FixedLotSize=0.1;
extern double    FlexibleLotSize=0.1;
extern double    RVIPeriod=5;
//---- indicator buffers
double     ExtRVIBuffer[];
double     ExtRVISignalBuffer[];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if(AccountFreeMargin()<200)        //----
   {
   Print("Margin is lesser than 200");   //----
   return(0);
   for (int i=100; i<TotalOrder(); i++) {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
   if (OrderSymbol()==Symbol()) {
   return(True);
   }
   } 
   } 
   return(false);
   }

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   int i,j,nLimit,CountedBars;
   double dValueUp,dValueDown,dNum,dDeNum;
//----
   if(Bars<=RVIPeriod+8) return(0);
//----
   CountedBars=IndicatorCounted();
//---- check for possible errors
   if(CountedBars<0) return(-1);
//---- last counted bar will be recounted
   Limit=Bars-RVIPeriod-4;
   if(CountedBars>RVIPeriod+4)
      Limit=Bars-CountedBars;
//---- RVI counted in the 1-st buffer
   for(int i = limit); i >= 1; i--
     {
      dNum=0.0; 
      dDeNum=0.0;
   for(int j=i; j<i+RVIPeriod; j++)
        {
         dValueUp=((Close[j]-Open[j])+2*(Close[j+1]-Open[j+1])+2*(Close[j+2]-Open[j+2])+(Close[j+3]-Open[j+3]))/6;
         dValueDown=((High[j]-Low[j])+2*(High[j+1]-Low[j+1])+2*(High[j+2]-Low[j+2])+(High[j+3]-Low[j+3]))/6;
         dNum+=dValueUp;
         dDeNum+=dValueDown;
        }
      if(dDeNum!=0.0)
         ExtRVIBuffer[i]=dNum/dDeNum;
      else
         ExtRVIBuffer[i]=dNum;   
     }

//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
   int start()
    {
      if ((i<j));
      {
         OpenSell();
         return(0);
      }
      else 
      
      if ((j<i));
      {
         OpenBuy();
         return(0);
      }
      else  
 //----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

不能 在EA中使用指标缓冲区或其他指标函数,如IndicatorCounted()。 创建一个指标,使用iCustom从你的EA访问指标缓冲区。 你也可以简单地使用mql4提供的iRVI 函数 . .

init()是你想在EA启动时运行一次的代码,deinit()是你想在EA关闭时运行一次的代码 . . . start()是你想在每个tick运行的代码 . .

 

如何知道任何时间的最高和最低的蜡烛......。

 
如何定义最低栏或最高栏?
 
如何在EA上定义ExtDepth和shift?
 
   int a, b;
   double zag, zig; b=0; while(a<2) {
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, b);
   if(zig>0) a+=1;
   b++;
   ZigZagHigh=iCustom(NULL,0,"ZigZag",MODE_HIGH,0);
   ZigZagLow=iCustom(NULL,0,"ZigZag",MODE_LOW,0);    
   double LowestBar=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
   double HighestBar=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];

如上所述,我希望定义a=蜡烛的最高价格

和b=蜡烛的最低价格

试图在我的EA中加入Zigzag指标

但仍然没有定义变量。

如何解决这些错误?

 
阅读一下这个主题 https://www.mql5.com/en/forum/139051/page2#623895,原则是相同的。
 
albert_lim83:

如上所述,我希望定义a=蜡烛的最高价格

和b=蜡烛的最低价格

试图在我的EA中加入Zigzag指标。

但仍然没有定义变量。

如何解决这些错误?

你是否声明了ZigZagHigh、ZigZagLow和ExtDepth?

iHighest和iLowest返回的是最高/最低价的条形图的编号 ......他们看的是以shift开始的条形图,通过看ExDepth条形图 ......

 

终于解决了变量问题。

现在只有

( -函数 定义出乎意料

) - 不平衡的右括号...

是不是在我的代码上放了(和)?