Array fuera de rango en Necesidad de ayuda - página 5

 
Ihor Herasko:

Ni siquiera sé qué más añadir... Básicamente he dado los ejemplos básicos. Este es el código. Por eso se puede preguntar qué es lo que no está claro.

Saludos !!! Igor un claro ejemplo de como obtener un valor . Tengo una línea Low_D1_Level encontrar la barra más cercana en la historia cuyo valor será inferior a Low_D1_Level

Si trabajo con Structure sin array, obtengo el mismo resultado que en el último código.

Escribe un ejemplo , y si no te importa una descripción .

//+------------------------------------------------------------------+
//|                                                   Dark_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 Low_D1_Level;

struct BarData
{ 
   datetime time;         // время начала периода 
   double   open;         // цена открытия 
   double   high;         // наивысшая цена за период 
   double   low;          // наименьшая цена за период 
   double   close;        // цена закрытия 
   long     tick_volume;  // тиковый объем 
};
BarData Bar_data_D1[]; // обьявляем массив структуры в памяти 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{

 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
 Low_D1_Level   = iLow (_Symbol,PERIOD_D1,1);   // Возвращает значение минимальной цены бара  D1
 
// Bar_data_D1.low [i]; //Минимум свечи
// Bar_data_D1.low [i]= iLow (_Symbol,PERIOD_D1,1);
}
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
Dark Kchlyzov:

Si Nivel_bajo_D1 es el nivel del día anterior, entonces Nivel_mínimo_D se busca a partir deNivel_bajo_D1 y es igual a i=1 , ¿o me equivoco?

Lo siento, no me he metido en el código, he preguntado para asegurarme de que lo hacías conscientemente.

¿Puede decirme qué quiere obtener como resultado? ¿Algún nivel diario o qué? Mirando la primera línea, copiar constantemente un array en ArrayCopyRates y luego hacer un bucle a través de él no es la opción más económica. Podrías encontrar una solución más elegante.

 
Aleksei Stepanenko :

Pido disculpas, no profundicé en el código, pedí que me asegurara de que lo está haciendo conscientemente.

Puedes decir lo que quieres obtener al final. ¿Algún nivel diario o qué? Mirando la primera línea, copiar constantemente la matriz a ArrayCopyRates y luego recorrerla no es la opción más económica. Puedes encontrar una solución más elegante.

Llevo más de 5 años en la bolsa de valores, y en este momento vivo completamente ( esto lo haces conscientemente ). Hace un año, cuando la comprensión de la negociación en bolsa ya estaba más o menos fortalecida,

Se decidió automatizar sus conocimientos en el oficio, quiere hacer un buen bricolaje.

Así es como me llegó conscientemente MQL4, en este momento el EA tiene más de 6000 filas.

aquí hay un código de ejemplo al calcular el lote hace 1 año.

 // Примитивно но работало 
//+-------------------------------------------------------------------------+
//                       Функция расчета лота от прибыли                    +                                                   +
//+-------------------------------------------------------------------------+
// double Lots;    
//string lots;      
double FloatingLots()
  {
   double Lots1= 1200 ,Lots2= 2200 ,Lots3= 3200 ,Lots4= 4200 ,Lots5= 5200 ,Lots6= 6200 ,Lots7= 7200 ,Lots8= 8200 ,Lots9= 9200 ,Lots10= 10200 ;
   if (AccountBalance()<=Lots1){Lots= 0.1 ;}
   if (AccountBalance()>=Lots1 && AccountBalance()<=Lots2){Lots= 0.2 ;}
   if (AccountBalance()>=Lots2 && AccountBalance()<=Lots3){Lots= 0.3 ;}
   if (AccountBalance()>=Lots3 && AccountBalance()<=Lots4){Lots= 0.4 ;}
   if (AccountBalance()>=Lots4 && AccountBalance()<=Lots5){Lots= 0.5 ;}
   if (AccountBalance()>=Lots5 && AccountBalance()<=Lots6){Lots= 0.6 ;}
   if (AccountBalance()>=Lots6 && AccountBalance()<=Lots7){Lots= 0.7 ;}
   if (AccountBalance()>=Lots7 && AccountBalance()<=Lots8){Lots= 0.8 ;}
   if (AccountBalance()>=Lots8 && AccountBalance()<=Lots9){Lots= 0.9 ;}
   if (AccountBalance()>=Lots9){Lots= 1 ;}
   return (Lots);
  } 

Y aquí está la misma función después de medio año.

 //+-------------------------------------------------------------------------+
//                  Функция расчета лота от прибыли  V 1.1                                                        +
//+-------------------------------------------------------------------------+
//double Lots; // переменная для расчёта лота и вывода в кнопке   
double FloatingLots()
{
 double S_lots = 0.1 ;
 double i;
 for ( i = 1000 ; i <= AccountBalance();i+= 1000 )
    {
     if (i > (AccountBalance())- 1000 )
       {
        Lots = S_lots; break ;
       }
     else S_lots+= 0.1 ;
    }
 return (S_lots);

Aquí está la razón para crear este hilo.

Me di cuenta puramente por casualidad y visualmente cuando comencé a ejecutar el asesor en períodos prolongados, si la segunda condición se eliminó en el ciclo, ocurrió un error (fuera de la matriz) y la segunda condición simplemente enmascaró el error real.

Aquí está la Función que necesita ser depurada, y es hora de estudiar Estructuras, Clases.

No juzgues estrictamente por escribir código - :)

 глоб. переменные
//+------------------------------------------------------------------+
//|                        Функция Level 
//+------------------------------------------------------------------+
double   Bar_data_D1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1
double   Bar_data_W1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров W1
double   Bar_data_MN [][6];
double   High_D1_Level;     // Возвращает значение максимальной цены бара D1
double   Low_D1_Level;      // Возвращает значение минимальной цены бара  D1
double   High_W1_Level;     // Возвращает значение максимальной цены бара W1
double   Low_W1_Level ;     // Возвращает значение минимальной цены бара  W1
double   High_MN1_Level;    // Возвращает значение максимальной цены бара MN1
double   Low_MN1_Level;     // Возвращает значение минимальной цены бара  MN1
double   Max_D_Level;       // ближайшей максимальный D уровень
double   Min_D_Level ;      // ближайшей минимальный  D уровень
double   Max_W_Level ;      // ближайшей максимальный W уровень
double   Min_W_Level ;      // ближайшей минимальный  W уровень
double   Max_MN_Level ;     // ближайшей максимальный MN уровень
double   Min_MN_Level ;     // ближайшей минимальный  MN уровень

int      Max_D_Num ;        // ближайшей максимальный день (номер бара)  
int      Min_D_Num ;        // ближайшей минимальный  день (номер бара)
int      Max_D_Volume ;     // ближайшей максимальный день (Объём)  
int      Min_D_Volume ;     // ближайшей минимальный  день (Объём)
datetime Max_D_Time;        // 
datetime Min_D_Time;        //
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                        Функция Level v 1.0
//+------------------------------------------------------------------+
void Level()
{
 ArrayCopyRates(Bar_data_D1, _Symbol , PERIOD_D1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
 ArrayCopyRates(Bar_data_W1, _Symbol , PERIOD_W1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
 ArrayCopyRates(Bar_data_MN, _Symbol , PERIOD_MN1 ); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров
 
 High_D1_Level  = iHigh ( _Symbol , PERIOD_D1 , 1 );   // Возвращает значение максимальной цены бара D1
 Low_D1_Level   = iLow ( _Symbol , PERIOD_D1 , 1 );   // Возвращает значение минимальной цены бара  D1
 High_W1_Level  = iHigh ( _Symbol , PERIOD_W1 , 1 );   // Возвращает значение максимальной цены бара W1
 Low_W1_Level   = iLow ( _Symbol , PERIOD_W1 , 1 );   // Возвращает значение минимальной цены бара  W1 
 High_MN1_Level = iHigh ( _Symbol , PERIOD_MN1 , 1 );   // Возвращает значение максимальной цены бара MN1
 Low_MN1_Level  = iLow ( _Symbol , PERIOD_MN1 , 1 );   // Возвращает значение минимальной цены бара  MN1
 
//--- Max_D_Level
 for ( int i = 1 ; i< ArrayRange (Bar_data_D1, 0 ) ;i++)
    {
     //Print(" i = ",i);
     if (Bar_data_D1 [i][ 3 ]>= 0 )
       {
         if (Bar_data_D1 [i][ 3 ] > High_D1_Level)  
          {
           Max_D_Level = Bar_data_D1 [i][ 3 ]; break ;
          }
       }
    } 
    
//--- 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 ;
          }
       }   
    } 
    
    
//--- Max_W_Level
 for ( int i = 1 ; i< ArrayRange (Bar_data_D1, 0 ) ;i++)
    {
     //Print(" i = ",i);
     if (Bar_data_D1 [i][ 3 ]>= 0 )
       {
         if (Bar_data_W1 [i][ 3 ] > High_W1_Level)    
          {
           Max_W_Level = Bar_data_W1 [i][ 3 ]; break ;
          }
       }  
    } 
    
//--- Min_W_Level 
 for ( int i = 1 ; i< ArrayRange (Bar_data_D1, 0 ) ;i++)
    {
     // Print(" i = ",i);
     if (Bar_data_D1 [i][ 2 ]>= 0 )
       {
         if (Bar_data_W1 [i][ 2 ] < Low_W1_Level)
          {
           Min_W_Level = Bar_data_W1 [i][ 2 ]; break ;
          }
       }  
    } 

 //+-----------------------High_D1_Level-----------------------------+  
 if ( ObjectFind ( "High_D1" )!=High_D1_Level) 
   {
     ObjectDelete ( "High_D1" );
     if ( ObjectFind ( "High_D1" )!= 0 )
      {
       ObjectCreate ( "High_D1" , OBJ_HLINE , 0 , Time[ 0 ],High_D1_Level);
       ObjectSet( "High_D1" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "High_D1" , OBJPROP_WIDTH , 1 );
      }
   } 
 if ( ObjectFind ( "High_D1_label" )!=High_D1_Level)
   {
     ObjectDelete ( "High_D1_label" ); 
     if ( ObjectFind ( "High_D1_label" ) != 0 )
      {
       ObjectCreate ( "High_D1_label" , OBJ_TEXT , 0 , Time[ 13 ], High_D1_Level);
       ObjectSetText( "High_D1_label" , "High_D1: " + DoubleToStr(High_D1_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   } 
 //+-------------------------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);
      }
   } 
   
     //+-----------------------Max_D_Level-----------------------------+  
 if ( ObjectFind ( "Max_D" )!=Max_D_Level) 
   {
     ObjectDelete ( "Max_D" );
     if ( ObjectFind ( "Max_D" )!= 0 )
      {
       ObjectCreate ( "Max_D" , OBJ_HLINE , 0 , Time[ 0 ],Max_D_Level);
       ObjectSet( "Max_D" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Max_D" , OBJPROP_WIDTH , 1 );
      }
   } 
 if ( ObjectFind ( "Max_D_label" )!=Max_D_Level)
   {
     ObjectDelete ( "Max_D_label" ); 
     if ( ObjectFind ( "Max_D_label" ) != 0 )
      {
       ObjectCreate ( "Max_D_label" , OBJ_TEXT , 0 , Time[ 30 ], Max_D_Level);
       ObjectSetText( "Max_D_label" , "Max_D: " + DoubleToStr(Max_D_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);
      }
   }  
 //+-----------------------High_W1_Level-----------------------------+         
 if ( ObjectFind ( "High_W1" )!=High_W1_Level) 
   {
     ObjectDelete ( "High_W1" );
     if ( ObjectFind ( "High_W1" )!= 0 )
      {
       ObjectCreate ( "High_W1" , OBJ_HLINE , 0 , Time[ 0 ],High_W1_Level);
       ObjectSet( "High_W1" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "High_W1" , OBJPROP_WIDTH , 1 );
      }
   } 
 if ( ObjectFind ( "High_W1_label" )!=High_W1_Level)
   {
     ObjectDelete ( "High_W1_label" ); 
     if ( ObjectFind ( "High_W1_label" ) != 0 )
      {
       ObjectCreate ( "High_W1_label" , OBJ_TEXT , 0 , Time[ 47 ], High_W1_Level);
       ObjectSetText( "High_W1_label" , "High_W1: " + DoubleToStr(High_W1_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   } 
 //+-------------------------Low_W1_Level----------------------------+       
 if ( ObjectFind ( "Low_W1" )!=Low_W1_Level) 
   {
     ObjectDelete ( "Low_W1" );
     if ( ObjectFind ( "Low_W1" )!= 0 )
      {
       ObjectCreate ( "Low_W1" , OBJ_HLINE , 0 , Time[ 0 ],Low_W1_Level);
       ObjectSet( "Low_W1" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Low_W1" , OBJPROP_WIDTH , 1 );
      }
   } 
   
 if ( ObjectFind ( "Low_W1_label" )!=Low_W1_Level)
   {
     ObjectDelete ( "Low_W1_label" ); 
     if ( ObjectFind ( "Low_W1_label" ) != 0 )
      {
       ObjectCreate ( "Low_W1_label" , OBJ_TEXT , 0 , Time[ 47 ], Low_W1_Level);
       ObjectSetText( "Low_W1_label" , "Low_W1: " + DoubleToStr(Low_W1_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   }  
   
   
 //+-----------------------Max_W_Level-----------------------------+         
 if ( ObjectFind ( "Max_W" )!=Max_W_Level) 
   {
     ObjectDelete ( "Max_W" );
     if ( ObjectFind ( "Max_W" )!= 0 )
      {
       ObjectCreate ( "Max_W" , OBJ_HLINE , 0 , Time[ 0 ],Max_W_Level);
       ObjectSet( "Max_W" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Max_W" , OBJPROP_WIDTH , 1 );
      }
   } 
 if ( ObjectFind ( "Max_W_label" )!= Max_W_Level)
   {
     ObjectDelete ( "Max_W_label" ); 
     if ( ObjectFind ( "Max_W_label" ) != 0 )
      {
       ObjectCreate ( "Max_W_label" , OBJ_TEXT , 0 , Time[ 64 ], Max_W_Level);
       ObjectSetText( "Max_W_label" , "Max_W: " + DoubleToStr(Max_W_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   } 
 //+-------------------------Min_W_Level----------------------------+       
 if ( ObjectFind ( "Min_W" )!=Min_W_Level) 
   {
     ObjectDelete ( "Min_W" );
     if ( ObjectFind ( "Min_W" )!= 0 )
      {
       ObjectCreate ( "Min_W" , OBJ_HLINE , 0 , Time[ 0 ],Min_W_Level);
       ObjectSet( "Min_W" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Min_W" , OBJPROP_WIDTH , 1 );
      }
   } 
   
 if ( ObjectFind ( "Min_W_label" )!= Min_W_Level)
   {
     ObjectDelete ( "Min_W_label" ); 
     if ( ObjectFind ( "Min_W_label" ) != 0 )
      {
       ObjectCreate ( "Min_W_label" , OBJ_TEXT , 0 , Time[ 64 ], Min_W_Level);
       ObjectSetText( "Min_W_label" , "Min_W: " + DoubleToStr(Min_W_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   }
 //+-----------------------High_MN1_Level-----------------------------+         
 if ( ObjectFind ( "High_MN1" )!=High_MN1_Level) 
   {
     ObjectDelete ( "High_MN1" );
     if ( ObjectFind ( "High_MN1" )!= 0 )
      {
       ObjectCreate ( "High_MN1" , OBJ_HLINE , 0 , Time[ 0 ],High_MN1_Level);
       ObjectSet( "High_MN1" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "High_MN1" , OBJPROP_WIDTH , 1 );
      }
   } 
 if ( ObjectFind ( "High_MN1_label" )!=High_MN1_Level)
   {
     ObjectDelete ( "High_MN1_label" ); 
     if ( ObjectFind ( "High_MN1_label" ) != 0 )
      {
       ObjectCreate ( "High_MN1_label" , OBJ_TEXT , 0 , Time[ 81 ], High_MN1_Level);
       ObjectSetText( "High_MN1_label" , "High_MN1: " + DoubleToStr(High_MN1_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   } 
 //+-------------------------Low_MN1_Level----------------------------+       
 if ( ObjectFind ( "Low_MN1" )!=Low_MN1_Level) 
   {
     ObjectDelete ( "Low_MN1" );
     if ( ObjectFind ( "Low_MN1" )!= 0 )
      {
       ObjectCreate ( "Low_MN1" , OBJ_HLINE , 0 , Time[ 0 ],Low_MN1_Level);
       ObjectSet( "Low_MN1" , OBJPROP_COLOR , clrMaroon );
       ObjectSet( "Low_MN1" , OBJPROP_WIDTH , 1 );
      }
   } 
   
 if ( ObjectFind ( "Low_MN1_label" )!=Low_MN1_Level)
   {
     ObjectDelete ( "Low_MN1_label" ); 
     if ( ObjectFind ( "Low_MN1_label" ) != 0 )
      {
       ObjectCreate ( "Low_MN1_label" , OBJ_TEXT , 0 , Time[ 81 ], Low_MN1_Level);
       ObjectSetText( "Low_MN1_label" , "Low_MN1: " + DoubleToStr(Low_MN1_Level, _Digits ), 8 , "Verdana" , Brown);
      }
   }       
}
 
Dark Kchlyzov:

Esta es la función a depurar.

Bien, ¿y puedes decirme con qué quieres terminar?

 
Aleksei Stepanenko:

Vale, ¿puedes decirme con qué quieres acabar?

Aquí está la versión abreviada ejecutada en AUDUSD 2020

¿Por qué no va más allá en la matriz?



//+------------------------------------------------------------------+
//|                                                   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();
   }
}
 

Me preguntas por qué no funciona, y estoy tratando de entender lo esencial en palabras, porque podría haber una solución mejor para tu problema, que es lo que estoy tratando de averiguar.

Explique lo que pretende conseguir.
 
Aleksei Stepanenko:

Me preguntas por qué no funciona, y trato de entender lo esencial en palabras, porque puede haber una solución mejor para tu problema, que es lo que estoy tratando de averiguar.

Explica lo que quieres conseguir.

Hasta ahora veo _so_

 
Vitaly Muzichenko:

Hasta ahora veo _eso_.

Sí, así es como funciona la percepción humana. Yo también, cuando estoy realmente apasionado por una idea, apenas puedo escuchar los argumentos de la otra persona. Oh, bueno...

 
Vitaly Muzichenko:

Hasta ahora veo _ así_.

Hay un nivelBajo_D1_Nivel , entonces necesitamos obtener el valor del siguiente nivel Mín_D_Nivel, que será el siguiente más bajo del historial y será inferior a Bajo_D1_Nivel.

No sé cómo explicar más. Si se ejecuta el código en el probador con la visualización en mi opinión todo es visible.

Y en general, si llegas al post, ten la amabilidad de leer al menos la esencia.

Eso no viene al caso:

¿Cuál es el "problema XY"?

Es un error que a menudo hace perder el tiempo tanto a la persona que pide ayuda como a las personas que intentan responderla. También se le llama el "problema del martillo". En resumen, la gente tiende a preguntar sobre sus intentos fallidos de resolver el problema, más que sobre el problema en sí. Acaba siendo algo así:

  • Una persona quiere hacer X.
  • No sabe cómo hacer X, pero adivina que haciendo Y podría tener éxito.
  • Sin embargo, la persona tampoco sabe cómo hacer Y.
  • En ese momento decide pedir ayuda a otras personas.
  • Todo el mundo intenta ayudar a la persona con el problema Y, preguntándose porque no está claro por qué alguien necesitaría algo así.
  • Después de muchas preguntas y mucha pérdida de tiempo, finalmente queda claro que la persona realmente quería resolver X, y que Y no puede ayudarle en absoluto.
 
Vitaly Muzichenko:

Hasta ahora veo _así_.

¡¡¡Así que supongo que todavía no has encontrado tu X e Y !!!

Razón de la queja: