エラー、バグ、質問 - ページ 735

 
joo:

混乱」を発見。

なぜコンパイラは2番目のb 変数の定義を好まないのでしょうか?

また、一般的に、このような場合、どのように対処すればよいのでしょうか?

ディファインが好きではないのです。

配列の次元 の変数の型が違うというエラーが表示されるだけです。

次元の定数のみ指定可能です。

 
sergeev:

彼が嫌いなのは定義ではないのです。

また、「配列の次元 の変数の型が間違っている」というエラーも発生します。

次元で指定できるのは定数のみ

定数もうまくいかず、エラーになります。

const int AA =11;
ArrWe m[AA];

アクセス指定子

アクセス指定子は、変数や構造体、クラスのメンバへのアクセス方法をコンパイラに指示します。

const指定 子は、 変数を定数とすることを宣言し、この変数の値がプログラムの実行過程で変更されることを許さない ものです。 変数の初期化は、宣言時に一度だけ行うことができます。

 

選択肢は2つだけという意味です。

int Arr[100]

または

#define r 100
int Arr[r].


残りはArrayResize

 
papaklass:
理解できない。チャート上にEAを置いたところ、「Experts」タブにこのメッセージが表示されました。Expert Advisorはとにかく作業を続けます。これはエラーではなく、警告です。何についての警告ですか?
実行 時のエラーであり、メモリリークを意味する。文字列が占有しているどこかのメモリが解放されていない。ほとんどの場合、new後も削除されない構造体やクラスであることが考えられます。具体的には、コードに目を通す必要があります。
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
joo:

定数も動作せず、エラーになります。

アクセス指定子

アクセス指定子は、変数や構造体、クラスのメンバへのアクセス方法をコンパイラに指示します。

const指定 子は、 変数を定数とすることを宣言し、この変数の値がプログラムの実行過程で変更されることを許さない ものである。 変数の初期化は、宣言時に一度だけ行うことができます。

定数変数は定数ではない!一度だけ初期化が許される、つまり、メモリが確保される変数である。

定数のタスクは、実行時にメモリを占有することなく、計算されてコードに挿入されることである。

定数はconst AA=11となる。

したがって、コンパイラは悪態をつくことになる。const AA=11 ならば、文句は言われない。

 

何が問題なのか、教えてください。

ChannelPeriod = 100の最後のインターバルで、インジケータの測定値に急激な上方へのシフトが見られますが、最後の100本を超えるとすべて正常に表示されます。

どなたか修理方法をご存じないでしょうか?

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
  //--- variables of indicator
  int i;
    
  CopyClose(Symbol1_Name,PERIOD_M30,0,rates_total,close_1);
  CopyClose(Symbol2_Name,PERIOD_M30,0,rates_total,close_2);
  
  //--- main cycle
  for(i=prev_calculated; i<rates_total; i++)
  {
    Last[i] = (Symbol1_Vol*Symbol1_K*close_1[i] -  Symbol2_Vol*Symbol2_K*close_2[i]);
  }
  
    // Считаем положение эквити относительно канала удвоенного среднеквадратичного отклонения
  double StdDev;
  for(i=prev_calculated; i<rates_total; i++) 
  {
    StdDev=MyStdDev(Last,ChannelPeriod,i);
    if(StdDev>0.00001) // Защита от отсутствия данных
      ExtStdDevBuffer[i]=(Last[i]+2*StdDev-iMAOnArrayMQL4(Last,0,ChannelPeriod,0,MODE_SMA,i))/(4*StdDev);
  }
  
  return(rates_total);
}

//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
// Calculation StdDev -----------------------------------------------| 
// StdDev = SQRT (SUM [(S(i) - SMA(i))^2, N] / N)                    | 
double MyStdDev(double &array[], int BandsPeriod, int Index) 
{ 
  double ds, sum, center; 
    
  sum = 0; 
  center = iMAOnArrayMQL4(array,0,BandsPeriod,0,MODE_SMA,Index); 
  for(int i = 0; i < BandsPeriod; i++) 
  { 
    ds = array[Index+i] - center; 
    sum += ds * ds; 
  } 
  sum = MathSqrt (sum / BandsPeriod); 
  return (sum); 
}
//-----------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------
double iMAOnArrayMQL4(double &array[], int total, int period, int ma_shift, int ma_method, int shift)
{
  double buf[],arr[];
  if(total==0) total=ArraySize(array);
  if(total>0 && total<=period) return(0);
  if(shift>total-period-ma_shift) return(0);
  switch(ma_method)
  {
    case MODE_SMA :
    {
      total=ArrayCopy(arr,array,0,shift+ma_shift,period);
      if(ArrayResize(buf,total)<0) return(0);
      double sum=0;
      int    i,pos=total-1;
      for(i=1;i<period;i++,pos--)
      sum+=arr[pos];
      while(pos>=0)
      {
        sum+=arr[pos];
        buf[pos]=sum/period;
        sum-=arr[pos+period-1];
        pos--;
      }
      return(buf[0]);
    }
    case MODE_EMA :
    {
      if(ArrayResize(buf,total)<0) return(0);
      double pr=2.0/(period+1);
      int    pos=total-2;
      while(pos>=0)
      {
        if(pos==total-2) buf[pos+1]=array[pos+1];
        buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr);
        pos--;
      }
      return(buf[shift+ma_shift]);
    }
    case MODE_SMMA :
    {
      if(ArrayResize(buf,total)<0) return(0);
      double sum=0;
      int    i,k,pos;
      pos=total-period;
      while(pos>=0)
      {
        if(pos==total-period)
        {
          for(i=0,k=pos;i<period;i++,k++)
          {
            sum+=array[k];
            buf[k]=0;
          }
        }
        else sum=buf[pos+1]*(period-1)+array[pos];
        buf[pos]=sum/period;
        pos--;
      }
      return(buf[shift+ma_shift]);
    }
    case MODE_LWMA :
    {
      if(ArrayResize(buf,total)<0) return(0);
      double sum=0.0,lsum=0.0;
      double price;
      int    i,weight=0,pos=total-1;
      for(i=1;i<=period;i++,pos--)
      {
        price=array[pos];
        sum+=price*i;
        lsum+=price;
        weight+=i;
      }
      pos++;
      i=pos+period;
      while(pos>=0)
      {
        buf[pos]=sum/weight;
        if(pos==0) break;
        pos--;
        i--;
        price=array[pos];
        sum=sum-lsum+price*period;
        lsum-=array[i];
        lsum+=price;
      }
      return(buf[shift+ma_shift]);
    }
    default: return(0);
  }
  return(0);
}
//-----------------------------------------------------------------------------------------

 
インジケーター
ファイル:
Spread_O.mq5  7 kb
削除済み  
なぜか、「開始」ボタンを押すと、最初の入金レベルからではなく、前回のテストが終了したレベルからテストが行われる。4ではそのような問題はありません。初回入金額からテストを始めるには
 
私の携帯電話のブラウザでは、ウェブサイト上のすべてを見ることができないので、PDF形式のテキストをダウンロードするための直接のリンクを教えてください。
 
Zeleniy:
私のスマホのブラウザではホームページの全てを見ることができないので、PDFで教科書をダウンロードできる直リンクを教えてください。
教科書はなく、ヘルプがあるだけです。