Fora de alcance em Necessidade de ajuda - página 4

 
Dark Kchlyzov:

Não parece haver um erro, mas ele está no registro.


Você estava certo originalmente, devido à falta de um mínimo quase

correu desde 2002 e em 2016 tudo está bem.

 
MakarFX:

Você estava certo inicialmente, por falta de um mínimo quase

correu desde 2002 e em 2016 tudo está bem.

AUDUSD 2020 a mesma coisa. Remover do ciclo para 2 expressões há um erro , se o deixarmos não há erro , apenas nesse dia não redesenhamos a linha

Você tem o mesmo cheque?

estranho que o laço quase sempre quebre a 1001 barras (talvez o limite da matriz ?)


2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level AUDUSD,H1: matriz fora do alcance em 'Test_Level.mq4' (51,59)

2020.12.10 09:56:40.177 2020.03.02 00:01:00 Test_Level 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_Level 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_Level 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_Level 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_Level 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:

Há uma pergunta. Por que você inicia o loop a partir do primeiro elemento, e não a partir do zero?

Se o Nível_Baixo_D1_Nível é o nível do dia anterior, então o Nível_Mín_D1_Nível deve ser procurado a partir doNível_Baixo_D1_Nível e é igual a i=1 , ou estou enganado?

 
Dark Kchlyzov:


é estranho que o loop quase sempre quebre a 1001 barras (talvez o limite da matriz?)


nem sempre

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 não é assim para mim

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:

Não tenho certeza, mas acho que você precisa inserir algo como

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

Não tenho certeza, mas acho que você precisa colocar algo como


Como para um indicador ?

VAZIO_VALOR

Valor vazio no buffer indicador

 
Dark Kchlyzov:


Como para um indicador ?

VAZIO_VALOR

Valor vazio no buffer indicador

Agora é hora de estudar as estruturas

como e onde declarar corretamente os MqlRates

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

você pode se tiver algum tempo e não for muito incômodo ( exemplo no código )

O código C++ está cheio de informações, mas a MQL4 não dá uma explicação clara do que é o quê.

 

Dark Kchlyzov:

Posso se tiver algum tempo e não for muito incômodo (exemplo no código).


Desculpe, eu não sou um programador, estou apenas curioso.

Em vez de VAZIO_VALOR você pode usarNULL


 
Dark Kchlyzov:

Agora é hora de estudar as estruturas

como e onde declarar MqlRates corretamente

Se você tiver algum tempo e não for muito incômodo ( exemplo no código )

Tenho muitas informações em C++, mas a MQL4, quanto a mim, não explica corretamente como e o que fazer.

Eu nem sei mais o que acrescentar. Em princípio, eu dei os principais exemplos. Este é o código. É por isso que recomendo que você me diga o que não está claro.