エキスパートアドバイザーのコードにインジケータのコードを追加する方法は? - ページ 3

 
私のEAにあるフィルターを追加したいのですが、どうすればいいですか?
 

ハイ、ちょっとトラブルがありまして...。~~

Rviインジケータを使った新しいEAを作りたいと思っています。

しかし、私は大きな間違いをしているようです。

Even I looked at this page 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でIndicatorバッファやIndicatorCounted()などのIndicator関数を使用することはできません。 インディケータを作成し、iCustomを使用してEAからインディケータバッファにアクセスします。 また、mql4が提供するiRVI 関数を使用することもできます ... ...

init()はEA起動時に一度だけ実行したいコード、deinit()はEA終了時に一度だけ実行したいコード ... start()は各ティックで実行したいコード ... ....

 

ろうそくの最高値と最安値を知る方法。

 
最も低いバーや最も高いバーを定義する方法は?
 
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に追加しようとしています。

しかし、まだ変数が定義されていません。

このエラーはどうすれば直るのでしょうか?

 
このスレッドを読んでみてください: https://www.mql5.com/en/forum/139051/page2#623895 原則は同じです。
 
albert_lim83:

上記のように、私はa=ローソクの最高値と定義したい。

b=ローソク足の最安値

私のEAにZigzagインジケータを追加しようとしています。

しかし、まだ変数は定義されていません。

どのようにこれらのエラーを修正するには?

ZigZagHigh、ZigZagLow、ExtDepthを 宣言しましたか?

iHighestとiLowestは最高値/最安値であるバーの番号を返す ... 彼らはシフトから始まるバーを見て、ExDepthのバーを見て ...

 

ようやく変数問題を解決しました。

今は

( -関数 定義が予想外

) - アンバランスな右括弧....

それは私のコードに(と)を置く左ですか?