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

 
Ihor Herasko :

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

Selamlar ! Igor, değerinin nasıl elde edileceğine iyi bir örnektir. Geçmişteki en yakın çubuğu bulmak için Low_D1_Level satırı var, değeri Low_D1_Level'den küçük olacak

Dizi olmadan, Yapı ile bir şeyler yapabilirsem, sonuç önceki koddakiyle aynıydı. dizi sınırların dışında .

Bir örnek yazın ve açıklamayı karmaşıklaştırmıyorsa.

 //+------------------------------------------------------------------+
//|                                                   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 :

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?

Özür dilerim, koda girmedim, bunu bilinçli olarak yaptığınızdan emin olmak için sordum.

Sonunda ne elde etmek istediğini söyleyebilirsin. Herhangi bir günlük seviye ya da ne? İlk satıra bakıldığında , diziyi sürekli olarak ArrayCopyRates'e kopyalayıp ardından döngüye sokmak en ekonomik seçenek değildir. Daha şık bir çözüm bulabilirsiniz.

 
Aleksei Stepanenko :

Özür dilerim, koda girmedim, bunu bilinçli olarak yaptığınızdan emin olmak için sordum.

Sonunda ne elde etmek istediğini söyleyebilirsin. Herhangi bir günlük seviye ya da ne? İlk satıra bakıldığında , diziyi sürekli olarak ArrayCopyRates'e kopyalayıp ardından döngüye sokmak en ekonomik seçenek değildir. Daha şık bir çözüm bulabilirsiniz.

5 yıldan fazladır borsadayım ve şu an tamamen yaşıyorum ( bunu bilinçli yapıyorsunuz ). Bir yıl önce, borsada işlem yapma anlayışı az çok güçlenmişken,

Ticaretteki bilgilerini otomatikleştirmeye, iyi bir DIY yapmak istemeye karar verildi.

MQL4 bilinçli olarak bana böyle geldi, şu anda EA'nın 6000+ satırı var.

1 yıl önceki lot hesaplanırken örnek kod burada.

 // Примитивно но работало 
//+-------------------------------------------------------------------------+
//                       Функция расчета лота от прибыли                    +                                                   +
//+-------------------------------------------------------------------------+
// 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);
  } 

Ve işte yarım yıl sonra aynı işlev

 //+-------------------------------------------------------------------------+
//                  Функция расчета лота от прибыли  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);

İşte bu başlığı oluşturma nedeni.

Danışmanı uzun periyotlarda çalıştırmaya başladığımda tamamen tesadüfen ve görsel olarak fark ettim, döngüde ikinci koşul kaldırılırsa bir hata oluştu (dizinin dışında) ve ikinci koşul gerçek hatayı basitçe maskeledi.

İşte hata ayıklanması gereken İşlev ve Yapıları, Sınıfları incelemenin zamanı geldi.

Kesinlikle kod yazmak için yargılamayın - :)

 глоб. переменные
//+------------------------------------------------------------------+
//|                        Функция 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 :

İşte hata ayıklanacak fonksiyon

Tamam, sonunda ne elde etmek istediğini söyler misin?

 
Aleksei Stepanenko :

Tamam, sonunda ne elde etmek istediğini söyler misin?

İşte AUDUSD 2020'de çalıştırılan kısaltılmış bir versiyon

Dizide neden daha ileri gitmiyor?



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

Bana neden işe yaramadığını soruyorsun ve ben de özü kelimelerle anlamaya çalışıyorum çünkü senin problemin için daha iyi bir çözüm olabilir ki onu bulmaya çalışıyorum.

Ne almak istediğinizi açıklayın.
 
Aleksei Stepanenko :

Bana neden işe yaramadığını soruyorsun ve ben de özü kelimelerle anlamaya çalışıyorum çünkü senin problemin için daha iyi bir çözüm olabilir ki onu bulmaya çalışıyorum.

Ne almak istediğinizi açıklayın.

gördüğüm sürece

 
Vitaly Muzichenko :

gördüğüm sürece

Evet, insan algısı böyle çalışır. Ben de bir fikre şiddetle kapıldığımda, pratikte diğerinin argümanlarını duymuyorum. selyavi..

 
Vitaly Muzichenko :

gördüğüm sürece

bir Low_D1_Level seviyesi var , o zaman tarihteki en yakın minimum olacak ve Low_D1_Level'den küçük olacak bir sonraki seviye Min_D_Level değerini almamız gerekiyor.

Daha fazla nasıl açıklayacağımı bilmiyorum. Kodu görselleştirme ile test cihazında çalıştırırsanız, bence her şey görünür.

Ve genel olarak, gönderiye gittiyseniz, lütfen en azından özü okuyun.

Bu tamamen konu dışı:

"Sorun XY" nedir?

Bu, hem yardım isteyen hem de ona cevap vermeye çalışanlar için çoğu zaman zaman kaybına yol açan bir hatadır. Çekiç Problemi olarak da adlandırılır. Kısacası, bunun özü, insanların, sorunun kendisi hakkında değil, sorunu çözmeye yönelik başarısız girişimleri hakkında soru sorma eğiliminde olmalarıdır. Sonuç olarak, şöyle bir şey çıkıyor:

  • Kişi X yapmak istiyor.
  • X'i nasıl yapacağını bilmiyor ama Y yapmanın başarıya yol açabileceğini biliyor.
  • Ancak kişi Y'yi nasıl yapacağını da bilmiyor.
  • Bu noktada diğer insanlardan yardım istemeye karar verir.
  • Herkes Y sorunu olan birine yardım etmeye çalışıyor, birinin neden böyle bir şeye ihtiyaç duyduğunun neden net olmadığını merak ediyor.
  • Uzun araştırmalardan sonra ve çok fazla zaman kaybı pahasına, sonunda kişinin X'i gerçekten çözmek istediği ve Y'nin ona hiç yardım edemeyeceği ortaya çıkıyor.
 
Vitaly Muzichenko :

gördüğüm sürece

Sanırım X ve Y'nizi asla bulamadınız !!!