Fora de alcance em Necessidade de ajuda

 

Saudações a todos! Obrigado a todos com antecedência!

Bug deste tipo:

Há uma linha de nível_baixo_D1_baixo em relação à qual estamos procurando na matriz Bar_data_D1 [][6]; novo nível Min_D_Nível_baixo

//--- variáveis globais

duplo_D1_Nível;

barra_dados_D1 dupla [][6]; //copias dados da barra do gráfico especificado na matriz e retorna o número de barras D1 copiadas

A primeira dimensão da matriz contém o número de barras. A segunda dimensão tem 6 elementos com os valores:

0 - tempo,
1 - preço aberto,
2 - preço mais baixo (baixo),
3 - preço mais alto (alto),
4 - preço fechado (fechamento),
5 - volume.

//+------------------------------------------------------------------+
//|                        Функция 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; 0 <= Bar_data_D1 [i][2] ;i++)
    {
     Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);
     if( Bar_data_D1 [i][2] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
    } 
//---

Imprimir

2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 998 Bar_data_D1 [i][2] = 1.3364
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 999 Bar_data_D1 [i][2] = 1.33562
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 1000 Bar_data_D1 [i][2] = 1.33532
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1:  i = 1001 Bar_data_D1 [i][2] = 1.33705
2020.12.09 15:19:29.109 2016.12.16 00:00:00  _Test EURUSD,H1: array out of range in '_Test.mq4' (451,34)
2020.12.09 15:19:29.110 2016.12.16 00:00:00  Testing pass stopped due to a critical error in the EA
2020.12.09 15:19:29.110 EURUSD,H1: 136637 tick events (25 bars, 63904705 bar states) processed in 0:00:17.844 (total time 0:00:24.547)

Документация по MQL5: Доступ к таймсериям и индикаторам / iLow
Документация по MQL5: Доступ к таймсериям и индикаторам / iLow
  • www.mql5.com
Значение минимальной цены бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Функция всегда возвращает актуальные данные, для этого она при каждом вызове делает запрос к таймсерии по указанным символу/периоду. Это...
 
array out of range in '_Test.mq4' (451,34)


Na linha 451,34, há uma saída fora da matriz.

Veja em , o que está por trás <=

 for(int i = 1; 0 <= Bar_data_D1 [i][2] ;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] < Low_D1_Level)
       {
        Min_D_Level = Bar_data_D1 [i][2];break;
       }
    } 
//---
изначально было так 

 

você pode pensar em uma opção melhor? como implementá-la?

 

no momento em que o conselheiro pára

as linhas são redesenhadas uma vez por dia


Gráfico EURUSD, H1, 2020.12.09 10:21 UTC, Gerchik and Co Limited, MetaTrader 4, Real

 

2020

quis testar 5 anos e encontrou oArray fora de alcance

 

para o mínimo próximo de 3500 bar +- , mas congela a 1000.1001.1002

por que não vai mais longe na matriz?

 

CÓDIGO DEVOLUÇÃO: Nenhum erro, nenhuma outra matriz e nenhuma linha redesenhada neste dia.


//--- Min_D_Leve  
 for(int i = 1; i<ArrayRange(Bar_data_D1,0) ;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;
          }
       }   
    } 
    



Imprimir

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1: i = 996 Bar_data_D1 [i][2] = 1.33147

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1: i = 997 Bar_data_D1 [i][2] = 1.3426

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1: i = 998 Bar_data_D1 [i][2] = 1.3364

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1: i = 999 Bar_data_D1 [i][2] = 1.33562

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1: i = 1000 Bar_data_D1 [i][2] = 1.33532

2020.12.09 17:03:30.363 2016.12.16 00:00:00 _Test EURUSD,H1: i = 1001 Bar_data_D1 [i][2] = 1.33705






 
Dark Kchlyzov:


o erro pode não estar aqui. Sem o código é difícil de entender

 
MakarFX:

o erro pode não estar aqui. Sem o código é difícil de entender


//--глобальные переменные


double   Low_D1_Level;

double   Bar_data_D1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1

//--- тело void On_Timer() { if(Day()!= Time_Day) { Level(); Time_Day = Day(); } } //+------------------------------------------------------------------+
//|                        Функция 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; 0 <= Bar_data_D1 [i][2] ;i++)     {      Print(" i = ",i," Bar_data_D1 [i][2] = ",Bar_data_D1 [i][2]);      if( Bar_data_D1 [i][2] < Low_D1_Level)        {         Min_D_Level = Bar_data_D1 [i][2];break;        }     } //---

O que mais você precisa?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Declare array Bar_data_D1 com tipo MqlRates. Como resultado, ele se tornará unidimensional. Ou, declare sua própria estrutura ao invés de MqlRates, se você acha que campos espalhados e de volume_real são desnecessários.
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Структура исторических данных - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5