오류, 버그, 질문 - 페이지 735

 
joo :

"오해"를 찾았습니다.

컴파일러가 두 번째 변수 b 의 정의를 좋아하지 않는 이유는 무엇입니까?

그리고 일반적으로 그러한 상황을 해결하는 방법은 무엇입니까?

그는 정의를 좋아하지 않습니다.

그는 또한 또 다른 오류를 씁니다 . 배열의 차원에 대한 잘못된 유형의 변수입니다.

차원에는 상수만 지정할 수 있습니다.

 
sergeev :

그는 정의를 좋아하지 않습니다.

그는 또한 또 다른 오류를 씁니다 . 배열의 차원에 대한 잘못된 유형의 변수입니다.

차원에는 상수만 지정할 수 있습니다.

상수도 롤링되지 않으면 오류가 발생합니다.

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

액세스 지정자

액세스 지정자는 컴파일러에게 변수, 구조체의 멤버 또는 클래스에 액세스하는 방법을 알려줍니다.

const 지정 자는 변수를 상수로 선언하고 변수의 값이 프로그램 실행 중에 변경되는 것을 허용하지 않습니다. 변수가 선언되면 한 번만 초기화할 수 있습니다.

 

나는 두 가지 옵션만을 의미했습니다

정수형[100]

또는

#정의 r 100
정수 [r]


나머지 ArrayResize 의 경우

 
papaklass :
이해하지 못했습니다. 차트에 전문가를 걸고 이 메시지가 "전문가" 탭에 나타납니다. 전문가는 여전히 일을 계속하고 있습니다. 이것은 오류가 아니라 경고입니다. 무엇에 대한 경고?
이것은 런타임 오류입니다. 메모리 누수를 의미합니다. 문자열이 점유한 메모리가 해제되지 않는 곳이 있습니다. 대부분의 경우 구조나 클래스에서 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-ke에서는 그런 문제가 없습니다. 초기 보증금 수준에서 테스트를 시작 하는 방법은 무엇입니까?
 
PDF로 된 교과서를 다운로드할 수 있는 직접 링크를 제공하십시오. 그렇지 않으면 전화의 브라우저가 사이트의 모든 것을 볼 수 없습니다
 
Zeleniy :
PDF로 된 교과서를 다운로드할 수 있는 직접 링크를 제공하십시오. 그렇지 않으면 전화의 브라우저가 사이트의 모든 것을 볼 수 없습니다
교과서가 없습니다. 도움만.