Yardım Gerekiyor'da dizi aralık dışında - sayfa 4

 
Dark Kchlyzov :

hata yok ama günlükte var


En yakın minimumun olmaması nedeniyle başlangıçta haklıydınız.

2002'de başladı ve 2016'da her şey yolunda.

 
MakarFX :

En yakın minimumun olmaması nedeniyle başlangıçta haklıydınız.

2002'de başladı ve 2016'da her şey yolunda.

AUDUSD 2020 aynı maydanoz. İfade hatasını for 2 döngüsünden kaldırıyoruz, bırakırsak hata yok, sadece bu gün satırı yeniden çizmiyoruz

Siz de kontrol edin.

döngünün neredeyse her zaman 1001 barda kırılması gariptir (belki bir dizi şapeli?)


2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: 'Test_Level.mq4' içinde dizi aralık dışında (51.59)

2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Seviyesi AUDUSD,H1: i = 1001 Bar_data_D1[i][2] = 0.77324

2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Seviyesi AUDUSD,H1: i = 1000 Bar_data_D1[i][2] = 0.76934

2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Seviyesi AUDUSD,H1: i = 999 Bar_data_D1[i][2] = 0.76907

2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Seviyesi AUDUSD,H1: i = 998 Bar_data_D1[i][2] = 0.76963

2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Seviyesi AUDUSD,H1: i = 997 Bar_data_D1[i][2] = 0.7548



 //+------------------------------------------------------------------+
//|                                                   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    "1.00"
#property strict
double    Bar_data_D1 [][ 6 ]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1
double    Low_D1_Level;       // Возвращает значение минимальной цены бара  D1
double    Min_D_Level ;       // ближайшей минимальный  D уровень
datetime   Time_Day;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   Level();
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
  On_Timer();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                        Функция Level 
//+------------------------------------------------------------------+
void Level()
{
 ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

 Low_D1_Level   = iLow ( _Symbol , PERIOD_D1 , 1 );   // Возвращает значение минимальной цены бара  D1
    
//--- Min_D_Leve  
 //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);
      }
   }  
 
}
//+------------------------------------------------------------------+
//|        функция удаление всех объектов созданных советником
//+------------------------------------------------------------------+
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 удалён >>" );}


   }
}
//+-------------------------------------------------------------------------+   
//                         функция Timer                    
//+-------------------------------------------------------------------------+
void On_Timer()
{

     
 if (Day()!= Time_Day)
   {
    Level();
    Time_Day = Day();
   }
}

 
Aleksei Stepanenko :

Bir soru var. Ve neden döngüye sıfırdan değil de ilk elemandan başlıyorsunuz?

Burada açıkça görülüyor ki, Low_D1_Level bir önceki günün seviyesi ise, o zaman Low_D1_Level'den Min_D_Level aramaya başlıyoruz ve i=1'e eşit bu şekilde, yoksa yanılıyor muyum?

 
Dark Kchlyzov :


döngünün neredeyse her zaman 1001 barda kırılması gariptir (belki bir dizi şapeli?)


her zaman değil

 2020.12 . 10 08 : 16 : 47.604 EURUSD,H1: 265 tick events ( 265 bars, 13782 bar states) processed in 0 : 00 : 53.781 (total time 0 : 00 : 55.813 )
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Testing pass stopped due to a critical error in the EA
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1: array out of range in 'Array.mq4' ( 51 , 59 )
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1011 Bar_data_D1 [i][ 2 ] = 1.32667
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1010 Bar_data_D1 [i][ 2 ] = 1.32642
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1009 Bar_data_D1 [i][ 2 ] = 1.32857
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1008 Bar_data_D1 [i][ 2 ] = 1.335
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1007 Bar_data_D1 [i][ 2 ] = 1.34244
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1006 Bar_data_D1 [i][ 2 ] = 1.3414
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1005 Bar_data_D1 [i][ 2 ] = 1.34815
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1004 Bar_data_D1 [i][ 2 ] = 1.35409
2020.12 . 10 08 : 16 : 47.604 2016.12 . 16 00 : 00 : 00   Array EURUSD,H1:  i = 1003 Bar_data_D1 [i][ 2 ] = 1.35726
 

AUDUSD'm yok

 2020.12 . 10 08 : 22 : 28.794 AUDUSD,H1: 121 tick events ( 121 bars, 3166 bar states) processed in 0 : 00 : 00.000 (total time 0 : 00 : 02.016 )
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Testing pass stopped due to a critical error in the EA
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1: array out of range in 'Array.mq4' ( 51 , 59 )
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1049 Bar_data_D1 [i][ 2 ] = 0.71997
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1048 Bar_data_D1 [i][ 2 ] = 0.71453
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1047 Bar_data_D1 [i][ 2 ] = 0.71557
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1046 Bar_data_D1 [i][ 2 ] = 0.7117599999999999
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1045 Bar_data_D1 [i][ 2 ] = 0.7108
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1044 Bar_data_D1 [i][ 2 ] = 0.71086
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1043 Bar_data_D1 [i][ 2 ] = 0.7160300000000001
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1042 Bar_data_D1 [i][ 2 ] = 0.7281
2020.12 . 10 08 : 22 : 28.794 2020.03 . 10 00 : 00 : 00   Array AUDUSD,H1:  i = 1041 Bar_data_D1 [i][ 2 ] = 0.73392
 
Dark Kchlyzov :

Emin değilim, ama sanırım şöyle bir şey eklemeniz gerekiyor

 if (Bar_data_D1 [i][ 2 ]== EMPTY_VALUE )Bar_data_D1 [i][ 2 ]=Low_D1_Level;
 
MakarFX :

Emin değilim, ama sanırım şöyle bir şey eklemeniz gerekiyor


Bir gösterge gibi mi?

BOŞ_VALUE

Gösterge arabelleğinde boş değer

 
Dark Kchlyzov :


Bir gösterge gibi mi?

BOŞ_VALUE

Gösterge arabelleğinde boş değer

Şimdi yapıları inceleme zamanı

MqlRates tanıtıcısının nasıl ve nerede doğru bir şekilde bildirileceği

Bar_data_D1[i].high; Максимум свечи
Bar_data_D1[i].low; Минимум свечи

biraz zamanınız varsa yapabilirsiniz ve bu sizin için zor olmayacaktır (koddaki örnek)

C++ hakkında çok fazla bilgi var ama MQL4 Ne yazık ki nasıl ve ne olduğuna dair normal bir açıklama yok.

 

Dark Kchlyzov :

biraz zamanınız varsa yapabilirsiniz ve bu sizin için zor olmayacaktır (koddaki örnek)


Ne yazık ki, ben bir programcı değilim, şimdiye kadar sadece ilgileniyorum

EMPTY_VALUE yerine NULL


 
Dark Kchlyzov :

Şimdi yapıları inceleme zamanı

MqlRates tanıtıcısının nasıl ve nerede doğru bir şekilde bildirileceği

biraz zamanınız varsa yapabilirsiniz ve bu sizin için zor olmayacaktır (koddaki örnek)

C++ hakkında çok fazla bilgi var ama MQL4 Ne yazık ki nasıl ve ne olduğuna dair normal bir açıklama yok.

Başka ne ekleyeceğimi bile bilmiyorum ... Prensip olarak ana örnekleri verdim. Bu kod. Bu yüzden tam olarak neyin belirsiz olduğunu sorun.

Neden: