도움이 필요한 배열이 범위를 벗어났습니다. - 페이지 14

 
Dark Kchlyzov :

공식에서 MT4를 설치하고 테스트를 해보고 싶었습니다.

안녕하세요. 에 문제가 생겼습니다   터미널 설치   MT4. 저는 사이트에서 버전 4를 다운받아 설치를 시작하는데, 그 결과 설치가 끝난 후 MT5 터미널이 나옵니다. 정확히 MT4를 설치하는 방법은 무엇입니까?

답변: 아니요. 이전 버전에 대한 지원이 중단되었습니다. MT5에서 일하세요.

할 수 있다


 

사용 가능한 전체 기간 동안 테스트됨

2016.01.01부터 AUDUSD

EURUSD 2011.01.01 이후

GBPUSD 2011.01.01 이후

사용하고

 for ( int i = 1 ;  ;i++)

그리고

 for ( int i = 1 ; i< ArrayRange (Bar_data_D1, 0 ) ;i++)
오류 로그가 첨부되지 않았습니다.
파일:
AUDUSD.log  305 kb
EURUSD.log  612 kb
GBPUSD.log  612 kb
 

결정

 for ( int i = 1 ; i< ArrayRange (Bar_data_D1, 0 ) ;i++)
   {
   if (Bar_data_D1 [i][ 2 ]!=Bar_data_D1 [i+ 1 ][ 2 ]&&Bar_data_D1 [i][ 2 ] < Low_D1_Level)
      {Min_D_Level = Bar_data_D1 [i][ 2 ];
       break ;}
      
   if (Bar_data_D1 [i][ 2 ]==Bar_data_D1 [i+ 1 ][ 2 ])
      {Min_D_Level = Low_D1_Level;
       break ;}
    } 
 

나는 칠면조를 만들었습니다. 모든 것이 올바르게 그려지는 것 같습니다.


 
MakarFX :

결정

게시물의 첫 페이지로 돌아갑니다!

2020.12.14 14:23:44.222 전문가 테스트_레벨 AUDUSD,H1: 제거됨

2020.12.14 14:23:44.234 Expert Test_Level AUDUSD,H1: 성공적으로 로드됨

2020.12.14 14:23:44.365 TestGenerator: 현재 스프레드 20 사용됨

2020.12.14 14:23:45.263 2020.01.24 00:00:00 Test_Level 테스트 시작

2020.12.14 14:24:29.044 2020.02.10 00:05:00 Test_Level AUDUSD,H1: 'Test_Level.mq4'의 범위를 벗어난 배열(39,40)

2020.12.14 14:24:29.044 2020.02.10 00:05:00 EA의 치명적인 오류로 인해 테스트 통과가 중지되었습니다.

2020.12.14 14:24:29.044 AUDUSD,H1: 0:00:43.781(총 시간 0:00:44.766)에 처리된 245717개의 틱 이벤트(265개 막대, 9638212개 막대 상태)

불필요한 것을 모두 제거하고 함수를 본문으로 이동하고 솔루션을 추가 하고 'Test_Level.mq4'(39,40) -:) 범위를 벗어난 배열을 다시 추가했습니다.

괜찮은

그리고 실제로 범위를 벗어난 배열


 //+------------------------------------------------------------------+
//|                                                   Test_Level.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "3.0"
#property strict
double     Bar_data_D1 [][ 6 ]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1
double     Low_D1_Level;       // Возвращает значение минимальной цены бара  D1
double     Min_D_Level ;       // ближайшей минимальный  D уровень
int        A_C_R;             // возвращает количество скопированных баров D1
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   DestroyObject();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
 A_C_R = ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
 Low_D1_Level   = iLow ( _Symbol , PERIOD_D1 , 1 );           // Возвращает значение минимальной цены бара  D1
 
 //--- Min_D_Leve V 1.2
 for ( int i = 1 ; i< ArrayRange (Bar_data_D1, 0 ) ;i++)
    {
     if (Bar_data_D1 [i][ 2 ] != Bar_data_D1 [i+ 1 ][ 2 ] && Bar_data_D1 [i][ 2 ] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][ 2 ]; break ;
       }
      
     if (Bar_data_D1 [i][ 2 ] == Bar_data_D1 [i+ 1 ][ 2 ])
       {
        Min_D_Level = Low_D1_Level; break ;
       }
    }
/* 
 //--- Min_D_Leve V 1.0 
 //for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;i++) // так ошибки нет и линия не перерисовывается 
   for(int i = 1; ;i++)                             // а так выход за массив 
    {
     Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);
     if(Bar_data_D1 [i][2]>=0)
       {
        if( Bar_data_D1 [i][2] < Low_D1_Level)
          {
           Min_D_Level = Bar_data_D1 [i][2];break;
          }
       }   
    } 
*/
 //+-------------------------Low_D1_Level----------------------------+ 
 if ( ObjectFind ( "Low_D1" )!=Low_D1_Level) 
   {
     ObjectDelete ( "Low_D1" );
     if ( ObjectFind ( "Low_D1" )!= 0 )
      {
       ObjectCreate ( "Low_D1" , OBJ_HLINE , 0 , Time[ 0 ],Low_D1_Level);
       ObjectSet( "Low_D1" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Low_D1" , OBJPROP_WIDTH , 1 );
      }
   } 
   
 if ( ObjectFind ( "Low_D1_label" )!=Low_D1_Level)
   {
     ObjectDelete ( "Low_D1_label" ); 
     if ( ObjectFind ( "Low_D1_label" ) != 0 )
      {
       ObjectCreate ( "Low_D1_label" , OBJ_TEXT , 0 , Time[ 13 ], Low_D1_Level);
       ObjectSetText( "Low_D1_label" , "Low_D1: " + DoubleToStr(Low_D1_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   } 
   
 //+-------------------------Min_D_Level----------------------------+ 
 if ( ObjectFind ( "Min_D" )!= Min_D_Level) 
   {
     ObjectDelete ( "Min_D" );
     if ( ObjectFind ( "Min_D" )!= 0 )
      {
       ObjectCreate ( "Min_D" , OBJ_HLINE , 0 , Time[ 0 ],Min_D_Level);
       ObjectSet( "Min_D" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Min_D" , OBJPROP_WIDTH , 1 );
      }
   } 
   
 if ( ObjectFind ( "Min_D_label" )!=Min_D_Level)
   {
     ObjectDelete ( "Min_D_label" ); 
     if ( ObjectFind ( "Min_D_label" ) != 0 )
      {
       ObjectCreate ( "Min_D_label" , OBJ_TEXT , 0 , Time[ 30 ], Min_D_Level);
       ObjectSetText( "Min_D_label" , "Min_D: " + DoubleToStr(Min_D_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   } 
   Comment ( " A_C_R возвращает количество скопированных баров D1 = " ,A_C_R); 
}
//+------------------------------------------------------------------+
//|        функция удаление всех объектов созданных советником
//+------------------------------------------------------------------+
void DestroyObject()
{
 int tot= ObjectsTotal ();
 for ( int i=tot; i>= 0 ; i--)
    {
     
     if ( ObjectName (i)== "Low_MN1" ){ ObjectDelete ( 0 , "Low_MN1" ); Print ( "<< Объект Low_MN удалён >>" );}
     if ( ObjectName (i)== "Low_MN1_label" ){ ObjectDelete ( 0 , "Low_MN1_label" ); Print ( "<< Объект Low_MN1_label удалён >>" );}
     

     if ( ObjectName (i)== "Min_D" ){ ObjectDelete ( 0 , "Min_D" ); Print ( "<< Объект Min_D удалён >>" );}
     if ( ObjectName (i)== "Min_D_label" ){ ObjectDelete ( 0 , "Min_D_label" ); Print ( "<< Объект Min_D_label удалён >>" );}


   }
}

 
Dark Kchlyzov :

포스트의 첫 페이지에서 돌아왔습니다!


불필요한 것을 모두 제거하고 함수를 본문으로 이동하고 솔루션을 추가 하고 'Test_Level.mq4'(39,40) -:) 범위를 벗어난 배열을 다시 추가했습니다.

터미널 오류

위의 게시물에서 코드를 복사하고 테스트를 실행했습니다.

여기 로그가 있습니다

파일:
AUDUSD.log  7368 kb
 
이제 다른 브로커, 즉. 다른 터미널
 
10년의 알파리, 실수는 없다
파일:
Alpari_AUDUSD.log  15491 kb
 
MakarFX :

터미널 오류

위의 게시물에서 코드를 복사하고 테스트를 실행했습니다.

여기 로그가 있습니다

여기 그 소식이 있습니다.

그리고 시각화와 함께 1.01.2020 AUDUSD부터 실행

아마도 차이가 없을지라도.

 

당신의 중개인은 누구입니까?

어떤 터미널을 사용하고 있습니까?