Load History Data

Author: Copyright � 2005 Bagadul
Load History Data
Price Data Components
Series array that contains open time of each bar
Miscellaneous
It opens Message Boxes to the userUses files from the file systemIt writes information to file
1 Views
0 Downloads
0 Favorites
Load History Data
//+------------------------------------------------------------------+
//|                                        holes_history_data_v2.mq4 |
//|                                         Copyright © 2005 Bagadul |
//|                                             bagbagadul@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005 Bagadul"
#property link      "bagbagadul@yandex.ru"
#property show_inputs
/* 
Äàííûé êîä âûÿâëÿåò â äàííûõ èñòîðèè îòñóòñòâóþùèå áàðû (äàëåå "äûðû") è ðàçðûâû (áîëüøèå äûðû), îïðåäåëÿåò 
èõ ðàçìåð, äëèòåëüíîñòü è ãýï, ðàáîòàåò íà âñåõ èíñòðóìåíòàõ è ïðåäíàçíà÷åí äëÿ âíóòðåäíåâíûõ ãðàôèêîâ, 
ïîýòîìó òàéìôðåéì îãðàíè÷åí ïåðèîäîì - H4, ïðè àíàëèçå ó÷èòûâàþòÿ òîëüêî âûõîäíûå äíè (ñóááîòà è âîñêðåñåíèå - 48 ÷àñîâ), 
îñòàëüíûå ìîìåíòû êîä ñ÷èòàåò äûðàìè èëè ðàçðûâàìè. Äëÿ óäîáñòâà ðàáîòû íà ãðàôèêå, â êîäå ïðåäóñìîòðåí 
ôèëüòð, ãäå ìîæíî çàäàòü: (äàííûå îïöèè ìîæíî îòìåíèòü â ñâîéñòâàõ ñêðèïòà)
1. êîëè÷åñòâî îòñóòñòâóþùèõ áàðîâ íà òàéìôðåéìàõ (M1,5,15,30), êîòîðûå êîä áóäåò 
   èãíîðèðîâàòü êàê äûðû 
2. êîëè÷åñòâî îòñóòñòâóþùèõ áàðîâ (ìèíèìàëüíîå çíà÷åíèå), êîòîðîå êîä ñ÷èòàë áû 
   ðàçðûâîì  (ïî óìîë÷àíèþ 20 áàðîâ); 
Ïðè ðàâíîñòè ýòèõ çíà÷åíèé 1 è 2, âñå íàéäåííûå äûðû êîä áóäåò ñ÷èòàòü ðàçðûâàìè. 
3. êîëè÷åñòâî îòñóòñòâóþùèõ ïèïñîâ, êîòîðûå êîä áóäåò èãíîðèðîâàòü êàê ãýï

Äàëåå çàïóñêàòü êàê ñêðèïò. 
Äëÿ óïðîùåíèÿ, â êîäå ãäå âîçìîæíî èìåþòñÿ êîììåíòàðèè, ðåçóëüòàòû âûâîäÿòñÿ â *.txt ôàéë.
Êîä ñîçäàí íà MT4 build 182.

!!! Åñëè äàííûå èñòîðèè "ñêëååíû" èëè ïîñòàâëÿëèñü áîëüøå ÷åì îäíèì áðîêåðîì, òî ðåçóëüòàò îò÷åòà 
    ìîæåò ñîäåðæàòü íåòî÷íîñòè â ÷àñòè, îòìå÷åííîé ïðèìå÷àíèåì (***âêëþ÷àÿ âûõîäíûå äíè).  

*/
//+-------------------------------------------------------------------+ 
// êîëè÷åñòâî îòñóòñòâóþùèõ áàðîâ íà ðàçíûõ òàéìôðåéìàõ, êîòîðûå êîä áóäåò èãíîðèðîâàòü
extern string Filter = "Ìèíèìàëüíûå çíà÷åíèÿ";
extern bool bars_ignore     = true; // àêòèâàòîð 
extern int  bars_ignore_M1  = 3;    // (ïî óìîë÷àíèþ)
extern int  bars_ignore_M5  = 3;
extern int  bars_ignore_M15 = 2;
extern int  bars_ignore_M30 = 2;
//+------------------- 
// êîëè÷åñòâî îòñóòñòâóþùèõ áàðîâ, êîòîðûå êîä ñ÷èòàë áû ðàçðûâîì
extern int breakup_min = 20; // ìèíèìàëüíîå çíà÷åíèå (äîëæíî áûòü > 0 è >= bars_min)
// êîëè÷åñòâî îòñóòñòâóþùèõ ïèïñîâ íà ðàçíûõ òàéìôðåéìàõ, êîòîðûå êîä áóäåò èãíîðèðîâàòü
extern bool gap_ignore      = true; // àêòèâàòîð
extern int  gap_min         = 5;    // (ïî óìîë÷àíèþ)
//+-------------------------------------------------------------------+ 
string begin_week_sessions = "00:00"; // âðåìÿ íà÷àëà íåäåëüíîé ñåññèè (÷÷:ìì) (ïî óìîë÷àíèþ)
bool   new_file = true;
int    handle;
//+-------------------
#include <WinUser32.mqh>
//+-------------------
int start()
   {

//+------------------------------
string time_frame;   // òàéìôðåéì
int    duration_bar; // äëèòåëüíîñòü áàðà â ñåê.
int    hole_min;     // êîëè÷åñòâî îòñóòñòâóþùèõ áàðîâ, êîòîðûå êîä áóäåò èãíîðèðîâàòü 

switch ( Period() )
        {
         case 1:     time_frame = "M1";  duration_bar = 60;    hole_min = bars_ignore_M1;  break;
         case 5:     time_frame = "M5";  duration_bar = 300;   hole_min = bars_ignore_M5;  break;
         case 15:    time_frame = "M15"; duration_bar = 900;   hole_min = bars_ignore_M15; break;
         case 30:    time_frame = "M30"; duration_bar = 1800;  hole_min = bars_ignore_M30; break;
         case 60:    time_frame = "H1";  duration_bar = 3600;  hole_min = 1;               break;
         case 240:   time_frame = "H4";  duration_bar = 14400; hole_min = 1;               break;
         default: MessageBox("Òàéìôðåéì äîëæåí íàõîäèòüñÿ â ïðåäåëàõ M1-H4.\n\nÂûáèðåòå äðóãîé òàéìôðåéì.", 
                             "Íåïðàâèëüíî âûáðàí òàéìôðåéì (ãðàôèê)", MB_OK | MB_ICONWARNING | MB_DEFBUTTON1); 
         return(0);
         }
if (hole_min < 1) hole_min = 1; 
if (bars_ignore == false) hole_min = 1;

if (gap_min < 0) gap_min = 0;
if (gap_ignore == false) gap_min = 0;

//+------------------------------
// äàííûé áëîê ñîçäàåò èìÿ ôàéëà
datetime  bar_day   = TimeDay   (Time[Bars - 1]);
datetime  bar_month = TimeMonth (Time[Bars - 1]);
datetime  bar_year  = TimeYear  (Time[Bars - 1]);
string zero_day_begin, zero_month_begin;

if (bar_day < 10) zero_day_begin = "0"; else zero_day_begin = "";
if (bar_month < 10) zero_month_begin = "0"; else zero_month_begin = "";
string date_start = zero_day_begin + bar_day + "." + zero_month_begin + bar_month + "." + bar_year; // íà÷àëüíàÿ äàòà
 
bar_day   = TimeDay   (Time[0]);
bar_month = TimeMonth (Time[0]);
bar_year  = TimeYear  (Time[0]);
string zero_day_end, zero_month_end;

if (bar_day < 10) zero_day_end = "0"; else zero_day_end = "";
if (bar_month < 10) zero_month_end = "0"; else zero_month_end = "";
string date_end = zero_day_end + bar_day + "." + zero_month_end + bar_month + "." + bar_year; // êîíå÷íàÿ äàòà

string file_name = Symbol() + "_" + time_frame + "_holes_" + date_start + "-" + date_end + ".txt";

//+------------------------------    
if (breakup_min < hole_min)
    { 
     int warning_1 = MessageBox("Çíà÷åíèÿ êîëè÷åñòâà îòñóòñòâóþùèõ áàðîâ äîëæíû ñîñòàâëÿòü:\n\nhole_min <= breakup_min\n\n" + 
                                "Çíà÷åíèå  - breakup_min, áóäåò óâåëè÷åíî äî  - hole_min.", "Íåïðàâèëüíî âûáðàíû çíà÷åíèÿ: " + 
                                "hole_min, breakup_min", MB_OKCANCEL | MB_ICONWARNING | MB_DEFBUTTON1); 
     if (warning_1 == 1) breakup_min = hole_min;  else return(0);
     }
     
//+------------------------------
// îïðåäåëåíèå âðåìåíè îòêðûòèÿ ïîñëåäíåãî áàðà îêîí÷àíèÿ íåäåëüíîé ñåññèè (÷÷:ìì)
datetime ews;
string   end_week_sessions; // âðåìÿ îêîí÷àíèÿ íåäåëüíîé ñåññèè
 
for (int i = 0; i < Bars; i++ )
     {
      datetime time  = iTime(NULL, 0, Bars - i );
      int day_week = TimeDayOfWeek(time);
      
      if (day_week == 5)
          {
           datetime initial_time = StrToTime(TimeToStr(time,TIME_DATE|TIME_MINUTES));
     
           if (initial_time > ews) ews = initial_time;
           }
      end_week_sessions = TimeToStr(ews,TIME_MINUTES);     
      }
//+------------------------------
// àíàëèç äàííûõ èñòîðèè 
int    week_seconds = 604800; // êîëè÷åñòâî ñåêóíä â íåäåëå
double weeks;                 // îòíîøåíèå äèàïàçîíà äûðû ê êîëè÷åñòâó ñåêóíä â íåäåëå

//+-------------------
// âûõîäíûå äíè â ñåê.
datetime holiday = StrToTime(begin_week_sessions) - StrToTime(end_week_sessions) + (24*3600*3) - duration_bar;

//+-------------------
int hole_range; // äèàïàçîí äûðû
int bars_hole;  // áàðîâ â äûðå
   
int holes_total_amount;   // îáùåå êîëè÷åñòâî äûð
int breakup_total_amount; // îáùåå êîëè÷åñòâî ðàçðûâîâ
int bars_hole_amount;     // îáùåå êîëè÷åñòâî áàðîâ â äûðàõ
int bars_breakup_amount;  // îáùåå êîëè÷åñòâî áàðîâ â ðàçðûâàõ

int gap_total_amount;     // îáùåå êîëè÷åñòâî ãýïîâ
int gap_holes;            // îáùèé ãýï â äûðàõ
int gap_breakups;         // îáùèé ãýï â ðàçðûâàõ

int hole_max;             // çíà÷åíèå ìàêñèìàëüíîé äûðû
int breakup_max;          // çíà÷åíèå ìàêñèìàëüíîãî ðàçðûâà
int gap_max;              // çíà÷åíèå ìàêñèìàëüíîãî ãýïà
bool note_ = false;
double months, days, hours, minutes, seconds;
int n = 1;
string line_2   = "-----------------------------------------------------------------------------------------------------------" +
                  "-----------------------------------------------------------------------------------------------------------\n";
string perenos  = "\n";
//+-------------------
for (int h = 0; h < Bars; h++ )
    {
//+-------------------
// âðåìÿ òåêóùåãî è ïðåäûäóùåãî áàðîâ â èñòîðèè  
datetime bar_time_current  = iTime(NULL, 0, Bars - h - 2);
datetime bar_time_previous = iTime(NULL, 0, Bars - h - 1);

// öåíà îòêðûòèÿ òåêóùåãî è öåíà çàêðûòèÿ ïðåäûäóùåãî áàðîâ â èñòîðèè  
double open_price_current   = NormalizeDouble(Open[Bars - h - 2],4);
double close_price_previous = NormalizeDouble(Close[Bars - h - 1],4);

// ãýï â pipsàõ
double pips_gap = NormalizeDouble(MathAbs(open_price_current - close_price_previous)/Point,0);  

//+-------------------
// ôàêòè÷åñêèé äèàïàçîí òàéìôðåéìà ñ ó÷åòîì íåòî÷íîñòè
int time_frame_range = bar_time_current - bar_time_previous; 

//+-------------------
if (time_frame_range > duration_bar) // êîëè÷åñòâî ñåêóíä â áàðå ïðåâûøàåò òàéìôðåéì
    {
     string note_1, note_8; // ïðèìå÷àíèÿ
     
     if (time_frame_range > week_seconds) // êîëè÷åñòâî ñåêóíä â áàðå ïðåâûøàåò êîëè÷åñòâî ñåêóíä â íåäåëå
         {
          weeks = MathFloor(time_frame_range / week_seconds); // çíà÷åíèå äûðû â íåäåëüíîì âûðàæåíèè
                   
          if (TimeDayOfWeek(bar_time_previous) > TimeDayOfWeek(bar_time_current) )
              hole_range      = time_frame_range - holiday * (1 + weeks) - duration_bar;
              else hole_range = time_frame_range - (holiday * weeks) - duration_bar;
        
          note_1 = "(***âêëþ÷àÿ âûõîäíûå äíè)";
          } 
           else
               {
                weeks = 0;
                
                if (TimeDayOfWeek(bar_time_previous) > TimeDayOfWeek(bar_time_current) )
                    {
                     hole_range = time_frame_range - holiday - duration_bar;
                     note_1 = "(***âêëþ÷àÿ âûõîäíûå äíè)";
                     } 
                      else 
                          {
                           hole_range = time_frame_range - duration_bar;
                           note_1 = "";
                           }
                }
          bars_hole = hole_range / duration_bar;

          if (bars_hole >= hole_min && pips_gap >= gap_min)
              { 
               holes_total_amount++;          // îáùåå êîëè÷åñòâî äûð (óâåëè÷èâàåì)
               bars_hole_amount += bars_hole; // îáùåå êîëè÷åñòâî áàðîâ â äûðàõ (óâåëè÷èâàåì)
               
               string gap;
               if (pips_gap >= gap_min) 
                   {
                    gap_holes += pips_gap; // îáùèé ãýï â äûðàõ 
                    gap = DoubleToStr(pips_gap,0);
                    
                    if (pips_gap == 0) n = 0; 
                    }
                    else gap = "-";
                               
               string _gap_;
              
               if (holes_total_amount < 10) _gap_ = "     ";
               else if (holes_total_amount >= 10 && holes_total_amount < 100) _gap_ = "   ";
               else if (holes_total_amount >= 100 && holes_total_amount < 1000) _gap_ = " ";
               else _gap_ = "";

               seconds   = bars_hole * duration_bar;
               hours = MathFloor(seconds / 3600);
               minutes = seconds / 3600 - hours;
               string duration_hole;
               string zero_h4 = "", zero_m4 = ""; 
     
               if (hours < 10) zero_h4 = "0"; 
               if (minutes * 60 < 10) zero_m4 = "0"; 
     
               duration_hole = zero_h4 + DoubleToStr(hours,0) + ":" + zero_m4 + DoubleToStr(minutes * 60,0);  
               
               if (hours > 24)  
                   {
                    days = MathFloor(hours / 24); hours = hours - days * 24;
                    if (hours < 10) zero_h4 = "0";
                    duration_hole = DoubleToStr(days,0) + " day(s)  " + zero_h4 + DoubleToStr(hours,0) + ":" + zero_m4 + DoubleToStr(minutes * 60,0);  

                    if (days > 30)   
                        {
                         months = MathFloor(days / 30); days = days - months * 30;
                         duration_hole = DoubleToStr(months,0) + " month(s)  " + DoubleToStr(days,0) + " day(s)  " + zero_h4 + DoubleToStr(hours,0) + ":" + zero_m4 + DoubleToStr(minutes * 60,0);  
                         }
                    }   
               //+-------------------
               // âðåìÿ íà÷àëà äèàïàçîíà äûðû 
               datetime hole_day_begin_;
               string   hole_time_begin_;
               int      ny_month_begin;
                              
               if (StrToTime(TimeToStr(bar_time_previous + duration_bar,TIME_MINUTES)) == StrToTime(end_week_sessions) + duration_bar && 
                   TimeDayOfWeek(bar_time_previous + duration_bar) == 5)
                   {
                    hole_day_begin_  = TimeDay(bar_time_previous + duration_bar + holiday); 
                    hole_time_begin_ = TimeToStr(bar_time_previous + duration_bar + holiday, TIME_MINUTES );
                    ny_month_begin   = TimeMonth(bar_time_previous + duration_bar + holiday);
                    note_1           = "";
                    }
                     else 
                         {
                          hole_day_begin_  = TimeDay(bar_time_previous + duration_bar);
                          hole_time_begin_ = TimeToStr(bar_time_previous + duration_bar, TIME_MINUTES );
                          ny_month_begin   = TimeMonth(bar_time_previous + duration_bar);
                          } 
     
               datetime hole_day_begin   = hole_day_begin_;
               datetime hole_month_begin = TimeMonth(bar_time_previous + duration_bar);
               datetime hole_year_begin  = TimeYear(bar_time_previous + duration_bar);
               string   hole_time_begin  = hole_time_begin_;
               
               if (hole_day_begin < 10) zero_day_begin = "0"; else zero_day_begin = "";
               if (hole_month_begin < 10) zero_month_begin = "0"; else zero_month_begin = "";
               //+------------------- 
               // âðåìÿ îêîí÷àíèÿ äèàïàçîíà äûðû 
               datetime hole_day_end   = TimeDay(bar_time_current);
               datetime hole_month_end = TimeMonth(bar_time_current);
               datetime hole_year_end  = TimeYear(bar_time_current);
               string   hole_time_end  = TimeToStr(bar_time_current, TIME_MINUTES );
               
               if (hole_day_end < 10) zero_day_end = "0"; else zero_day_end = "";
               if (hole_month_end < 10) zero_month_end = "0"; else zero_month_end = "";
               
               //+------------------- 
               if (ny_month_begin == 12 && TimeMonth(bar_time_current) == 1) note_8 = "NewYear  "; 
               else note_8 = ""; 
               
               //+-------------------
               if (bars_hole >= breakup_min)
                   {
                    breakup_total_amount++;           // îáùåå êîëè÷åñòâî ðàçðûâîâ (óâåëè÷èâàåì)
                    bars_breakup_amount += bars_hole; // îáùåå êîëè÷åñòâî áàðîâ â ðàçðûâàõ (óâåëè÷èâàåì)
                    gap_breakups += pips_gap;         // îáùèé ãýï â ðàçðûâàõ 
                    }
               if (hole_max < bars_hole && bars_hole < breakup_min)
                   {
                    hole_max = bars_hole;                 // ìàêñèìàëüíàÿ äûðà
                    int number_hole = holes_total_amount; // ï/ï íîìåð 
                    } 
               if (breakup_max <= bars_hole && bars_hole >= breakup_min)
                   {
                    breakup_max = bars_hole;                 // ìàêñèìàëüíûé ðàçðûâ
                    int number_breakup = holes_total_amount; // ï/ï íîìåð 
                    }     
               if (gap_max <= pips_gap)
                   {
                    gap_max = pips_gap;                  // ìàêñèìàëüíûé ãýï
                    int number_gap = holes_total_amount; // ï/ï íîìåð 
                    }     

//+------------------------------
// ñîçäàíèå òàáëèöû *.txt ôàéëà
if (new_file)
    {
string line_1   = "__________________________________________________________________________________________________________________________" + "\n";
string headline = "ï/ï  ¹\t|  *Äèàïàçîí  (äàòà / âðåìÿ)\t\t\t|  Ðàçìåð  (bars)\t|  Äëèòåëüíîñòü  (÷÷:ìì)\t|  **Gap  (pips)\t|  Ïðèìå÷àíèÿ" + "\n";
                
FileDelete(file_name);// óäàëåíèå ðàííåå çàïèñàííîãî ôàéëà ñ òàêèì æå èìåíåì  
handle = FileOpen(file_name, FILE_WRITE | FILE_READ, " ");
FileSeek (handle, 2400, SEEK_END);
FileWrite(handle, perenos, line_1, headline, line_2);
new_file = false;
     }
if (note_1 != "") note_ = true;
//+-------------------
string hole = "   " + holes_total_amount + _gap_ + "\t  " + zero_day_begin + hole_day_begin + "." + 
              zero_month_begin + hole_month_begin + "." + hole_year_begin + " [" + hole_time_begin + 
              "]\t       -\t" + zero_day_end + hole_day_end + "." + zero_month_end + hole_month_end + "." + hole_year_end + 
              " [" + hole_time_end + "]\t  " +  bars_hole + "\t\t   " + duration_hole + "\t\t\t   " + gap + "\t\t   " + note_8 + note_1 + "\n"; 

FileWrite(handle, hole );

//+-------------------
// ìàêñèìàëüíàÿ äûðà è ðàçðûâ
string hole_range_max    = "ï/ï  ¹  - " + number_hole + "\n";
string breakup_range_max = "ï/ï  ¹  - " + number_breakup + "\n";
string gap_range_max = "ï/ï  ¹  - " + number_gap + "\n";

              }
     }
}
//+------------------------------ 
// ñîçäàíèå îò÷åòà *.txt ôàéëà 
if (hole_min > 1) string note_2 = "\t( äûðû ðàçìåðîì < " + hole_min + " bars - èãíîðèðóþòñÿ çàäàííûìè ïîëüçîâàòåëåì óñëîâèÿìè )";
    
string note_3;
if (hole_min == breakup_min) note_3 = "ñìîòðåòü <Ðàçðûâû>, ñîãëàñíî çàäàííûì ïîëüçîâàòåëåì óñëîâèÿì )";
else note_3 = hole_min + " - " + breakup_min + " bars )\t" + note_2; 

double bars_hole_amount_     = bars_hole_amount;     
double bars_breakup_amount_  = bars_breakup_amount;  
double holes_total_amount_   = holes_total_amount;   
double breakup_total_amount_ = breakup_total_amount; 
double gap_holes_            = gap_holes;
double gap_total_amount_     = gap_total_amount;
double bars_                 = Bars;

string hole_average_size_; 
string info_10, info_11, info_12, info_13, info_21, info_22, info_23;

string grade_hole_chart_ = DoubleToStr( (bars_hole_amount_ - bars_breakup_amount_)/ bars_ * 100, 2);
string quality_chart__   = DoubleToStr( (bars_ - bars_hole_amount_ + bars_breakup_amount_ ) / bars_ * 100, 2);

if (holes_total_amount != breakup_total_amount)
    {
     seconds = (bars_hole_amount - bars_breakup_amount) * duration_bar;
     hours   = MathFloor(seconds / 3600);
     minutes = seconds / 3600 - hours;
     
     string duration_holes;
     string zero_h1 = "", zero_m1 = ""; 
     
     if (hours < 10) zero_h1 = "0"; 
     if (minutes * 60 < 10) zero_m1 = "0"; 
      
     duration_holes = zero_h1 + DoubleToStr(hours,0) + ":" + zero_m1 + DoubleToStr(minutes * 60,0);  
     
     if (hours > 24)  
         {
          days = MathFloor(hours / 24); hours = hours - days * 24;
          if (hours < 10) zero_h1 = "0";
          duration_holes = DoubleToStr(days,0) + " day(s)  " + zero_h1 + DoubleToStr(hours,0) + ":" + zero_m1 + DoubleToStr(minutes * 60,0);  

          if (days > 30)   
              {
               months = MathFloor(days / 30); days = days - months * 30;
               duration_holes = DoubleToStr(months,0) + " month(s)  " + DoubleToStr(days,0) + " day(s)  " + zero_h1 + DoubleToStr(hours,0) + ":" + zero_m1 + DoubleToStr(minutes * 60,0);  
               }
          }      
     hole_average_size_ = DoubleToStr( (bars_hole_amount_ - bars_breakup_amount_)/(holes_total_amount_ - breakup_total_amount_), 2);
     info_10 = "Êîëè÷åñòâî   -\t\t\t" + (holes_total_amount - breakup_total_amount) + "\n";
     info_11 = "Ðàçìåð   -\t\t\t" + (bars_hole_amount - bars_breakup_amount) + " bars\n";
     info_23 = "Äëèòåëüíîñòü   -\t\t\t" + duration_holes + " ÷÷:ìì\n";
     info_12 = "Ìàêñèìàëüíûé ðàçìåð   -\t\t" + hole_max + " bars\t\t" + hole_range_max;
     info_13 = "Ñðåäíèé ðàçìåð   -\t\t\t" + hole_average_size_ + " bars\n";
     info_21 = "Ñòåïåíü äûðÿâîñòè ãðàôèêà    -\t" + grade_hole_chart_ + " %\n";
     info_22 = "Êà÷åñòâî ãðàôèêà    -\t\t" + quality_chart__  + " %\n";
     }
      else 
          {
           info_10 = "Êîëè÷åñòâî   -\t\t\t-\n";
           info_11 = "Ðàçìåð   -\t\t\t-\n";
           info_23 = "Äëèòåëüíîñòü   -\t\t\t-\n";
           info_12 = "Ìàêñèìàëüíûé ðàçìåð   -\t\t-\n";
           info_13 = "Ñðåäíèé ðàçìåð   -\t\t\t-\n";
           info_21 = "Ñòåïåíü äûðÿâîñòè ãðàôèêà    -\t-\n";
           info_22 = "Êà÷åñòâî ãðàôèêà    -\t\t-\n";
           }

string grade_hole_chart     = DoubleToStr(bars_hole_amount_ / bars_ * 100, 2);
string grade_breakup_chart  = DoubleToStr(bars_breakup_amount_ / bars_ * 100, 2);
string quality_chart        = DoubleToStr( (bars_ - bars_hole_amount_) / bars_ * 100, 2);
string quality_chart_       = DoubleToStr( (bars_ - bars_breakup_amount_) / bars_ * 100, 2);

//+-------------------
string line_3 = " -----------------------------------------------------------------------------------------------------------" +
                "-----------------------------------------------------------------------------------------------------------" + "\n";
string shapka = "Îò÷åò ïî îòñóòñòâóþùèì áàðàì â äàííûõ èñòîðèè. Èíñòðóìåíò - " + Symbol() + ". Òàéìôðåéì [" + time_frame + "].\n";
string info_1 = "Ïåðèîä    -\t\t\t" + date_start + " ã.  -  " + date_end + " ã.\n";
string info_2 = "Áàðîâ â èñòîðèè   -\t\t\t" + Bars + " bars\n";

seconds = Time[0] - Time[Bars - 1];
hours   = MathFloor(seconds / 3600);
minutes = seconds / 3600 - hours;

double years;      
string duration_period;
string zero_h5 = "", zero_m5 = ""; 
     
if (hours < 10) zero_h5 = "0"; 
if (minutes * 60 < 10) zero_m5 = "0"; 
      
duration_period = zero_h4 + DoubleToStr(hours,0) + ":" + zero_m5 + DoubleToStr(minutes * 60,0);  
  
if (hours > 24)  
    {
     days = MathFloor(hours / 24); hours = hours - days * 24; 
     if (hours < 10) zero_h5 = "0";
     duration_period = DoubleToStr(days,0) + " day(s)  " + zero_h5 + DoubleToStr(hours,0) + ":" + zero_m5 + DoubleToStr(minutes * 60,0);  

     if (days > 30)   
         {
          months = MathFloor(days / 30); days = days - months * 30;
          duration_period = DoubleToStr(months,0) + " month(s)  " + DoubleToStr(days,0) + " day(s)  " + zero_h5 + DoubleToStr(hours,0) + ":" + zero_m5 + DoubleToStr(minutes * 60,0);  

          if (months > 12) 
              {
               years  = MathFloor(months / 12); months = months - years * 12;
               duration_period = DoubleToStr(years,0) + " year(s)  " + DoubleToStr(months,0) + " month(s)  " + DoubleToStr(days,0) + " day(s)  " + zero_h5 + DoubleToStr(hours,0) + ":" + zero_m5 + DoubleToStr(minutes * 60,0);  
               }
          }
     }     

string info_26 = "Äëèòåëüíîñòü   -\t\t\t" + duration_period + " ÷÷:ìì\n";
string line_4 = "_____________________________________________________";
string info_3 = "ÎÁÙÈÉ ÀÍÀËÈÇ äûð è ðàçðûâîâ \n";
string info_4;

//+-------------------
if (holes_total_amount != 0)
    {
 //+------------------------------
seconds = bars_hole_amount * duration_bar;
hours   = MathFloor(seconds / 3600);
minutes = seconds / 3600 - hours;
string duration_holes_; 
string zero_h2 = "", zero_m2 = "";
 
if (hours < 10) zero_h2 = "0"; 
if (minutes * 60 < 10) zero_m2 = "0"; 

duration_holes_ = zero_h2 + DoubleToStr(hours,0) + ":" + zero_m2 + DoubleToStr(minutes * 60,0);  

if (hours > 24)  
    {
     days = MathFloor(hours / 24); hours = hours - days * 24;
     if (hours < 10) zero_h2 = "0";
     duration_holes_ = DoubleToStr(days,0) + " day(s)  " + zero_h2 + DoubleToStr(hours,0) + ":" + zero_m2 + DoubleToStr(minutes * 60,0);  

     if (days > 30)   
         {
          months = MathFloor(days / 30); days = days - months * 30;
          duration_holes_ = DoubleToStr(months,0) + " month(s)  " + DoubleToStr(days,0) + " day(s)  " + zero_h2 + DoubleToStr(hours,0) + ":" + zero_m2 + DoubleToStr(minutes * 60,0);  
          }
     }   

string hole_average_size = DoubleToStr(bars_hole_amount_ / holes_total_amount_, 2);
string gap_average_size  = DoubleToStr(gap_holes_ / holes_total_amount_, 2);

FileSeek (handle, 0, SEEK_END);
FileWrite(handle, line_1);
FileSeek (handle, 0, SEEK_SET);
info_4 = "Êîëè÷åñòâî  -\t\t\t" + holes_total_amount + "\n";
string info_5 = "Ðàçìåð   -\t\t\t" + bars_hole_amount + " bars\n";
string info_24 = "Äëèòåëüíîñòü   -\t\t\t" + duration_holes_ + " ÷÷:ìì\n";
string info_6 = "Ñðåäíèé ðàçìåð   -\t\t\t" + hole_average_size + " bars\n";

string note_7;
if (gap_min != 0) note_7 = "**"; else note_7 = " ";
string info_27 = "Gap" + note_7 + "   -\t\t\t\t" + gap_holes + " pips\n";
string info_28 = "Ìàêñèìàëüíûé Gap   -\t\t" + gap_max + " pips\t\t" + gap_range_max;
string info_31 = "Ñðåäíèé Gap   -\t\t\t" + gap_average_size + " pips" + "   \t( Gap / êîëè÷åñòâî )\n";

string info_7 = "Ñòåïåíü îáùåé äûðÿâîñòè ãðàôèêà    -\t" + grade_hole_chart + " %\n";
string info_8 = "Êà÷åñòâî ãðàôèêà    -\t\t" + quality_chart + " %\n";


string info_9 = "ÄÛÐÛ  ( " + note_3 + "\n";

//+-------------------
string info_14 = "ÐÀÇÐÛÂÛ ( " + breakup_min + " bars è âûøå)\n";
string info_15, info_16, info_17, info_18, info_19, info_20, info_25;
     
if (breakup_total_amount != 0)          
    {
     seconds = bars_breakup_amount * duration_bar;
     hours   = MathFloor(seconds / 3600);
     minutes = seconds / 3600 - hours;
     string duration_breakups;
     string zero_h3 = "", zero_m3 = ""; 
     
     if (hours < 10) zero_h3 = "0"; 
     if (minutes * 60 < 10) zero_m3 = "0";
          
     duration_breakups = zero_h3 + DoubleToStr(hours,0) + ":" + zero_m3 + DoubleToStr(minutes * 60,0);  

     if (hours > 24)  
         {
          days = MathFloor(hours / 24); hours = hours - days * 24;
          if (hours < 10) zero_h3 = "0";
          duration_breakups = DoubleToStr(days,0) + " day(s)  " + zero_h3 + DoubleToStr(hours,0) + ":" + zero_m3 + DoubleToStr(minutes * 60,0);  

          if (days > 30)   
              {
               months = MathFloor(days / 30); days = days - months * 30;
               duration_breakups = DoubleToStr(months,0) + " month(s)  " + DoubleToStr(days,0) + " day(s)  " + zero_h3 + DoubleToStr(hours,0) + ":" + zero_m3 + DoubleToStr(minutes * 60,0);  
               }
          }   
          string breakup_average_size = DoubleToStr(bars_breakup_amount_ / breakup_total_amount_, 2);
          info_15 = "Êîëè÷åñòâî   -\t\t\t" + breakup_total_amount + "\n";
          info_16 = "Ðàçìåð   -\t\t\t" + bars_breakup_amount + " bars\n";
          info_25 = "Äëèòåëüíîñòü   -\t\t\t" + duration_breakups + " ÷÷:ìì\n";
          info_17 = "Ìàêñèìàëüíûé ðàçìåð   -\t\t" + breakup_max + " bars\t\t" + breakup_range_max;
          info_18 = "Ñðåäíèé ðàçìåð   -\t\t\t" + breakup_average_size + " bars\n";
          info_19 = "Ñòåïåíü ðàçðûâíîñòè ãðàôèêà    -\t" + grade_breakup_chart + " %\t\t( áåç ó÷åòà äûð )\n";
          info_20 = "Êà÷åñòâî ãðàôèêà    -\t\t" + quality_chart_ + " %\t\t( áåç ó÷åòà äûð )\n";
          }
          else
               {
                info_15 = "Êîëè÷åñòâî   -\t\t\t-\n";
                info_16 = "Ðàçìåð   -\t\t\t-\n";
                info_25 = "Äëèòåëüíîñòü   -\t\t\t-\n";
                info_17 = "Ìàêñèìàëüíûé ðàçìåð   -\t\t-\n";
                info_18 = "Ñðåäíèé ðàçìåð   -\t\t\t-\n";
                info_19 = "Ñòåïåíü ðàçðûâíîñòè ãðàôèêà    -\t-\n";
                info_20 = "Êà÷åñòâî ãðàôèêà    -\t\t-\n";
                }
//+-------------------
string note_4  = "     *Äèàïàçîí íà÷èíàåòñÿ âðåìåíåì îòêðûòèÿ ïåðâîãî îòñóòñòâóþùåãî áàðà, à çàêàí÷èâàåòñÿ âðåìåíåì îòêðûòèÿ áàðà,\n        ñëåäóþùåãî çà ïîñëåäíèì îòñóòñòâóþùèì áàðîì.\n";
string note_9 = "       =Gap â äûðàõ= ÍÅ ÌÎÆÅÒ áûòü òî÷íûì, â ñèëó îòñóòñòâèÿ ñàìèõ áàðîâ, à ëèøü îïðåäåëÿåò ÐÀÇÍÈÖÓ â óðîâíÿõ öåí äî è ïîñëå ãýïà.\n";

string note_10;
if (n != 0) note_10 = "  **";
else note_10 = "  **Gap = 0  pips - íå îçíà÷àåò ïîëíîå îòñóòñòâèå êîòèðîâîê, à ëèøü óêàçûâàåò, ÷òî öåíà âîçâðàòèëàñü íà ïðåæíèé óðîâåíü (äî ãýïà).\n";

string note_5;
if (gap_ignore == true && gap_min >= 1) note_5 = "  **Äûðû ñ Gap < " + gap_min + "  pips - èãíîðèðóþòñÿ çàäàííûìè ïîëüçîâàòåëåì óñëîâèÿìè.\n" + note_9; 
else note_5 = note_10 + note_9;

string note_6 = "";
if (note_ == true) note_6 = "***Êîíåö íåäåëüíîé ñåññèè    -\t" + TimeToStr(StrToTime(end_week_sessions) + duration_bar,TIME_MINUTES) + " ÷÷:ìì";

FileWrite(handle, line_3, shapka, line_2, info_1, info_2, info_26, line_4, perenos, info_3, info_4, info_5, info_24, info_6, info_27, 
          info_28, info_31, info_7, info_8, line_4, perenos, info_9,  info_10, info_11, info_23, info_12, info_13, info_21, info_22, 
          line_4, perenos, info_14, info_15, info_16, info_25, info_17, info_18, info_19, info_20, line_4, perenos, note_4, perenos, note_5, perenos, note_6);
}
 else 
     {
      FileDelete(file_name);
      handle = FileOpen(file_name, FILE_WRITE | FILE_READ, " ");
      info_4 = "Êîëè÷åñòâî  -\t\t\tÍà äàííîì ãðàôèêå äûð è ðàçðûâîâ ÍÅ ÎÁÍÀÐÓÆÅÍÎ\n";
      FileWrite(handle, line_3, shapka, line_2, info_1, info_2, line_4, perenos, info_3, info_4, line_4);
      }
FileClose(handle);

MessageBox(" ïàïêå òåðìèíàëà MT4: \Experts\files\ ñîçäàí ôàéë îò÷åòà:\n\n" + file_name, 
           "Àíàëèç äàííûõ èñòîðèè óñïåøíî çàâåðøåí", MB_OK | MB_DEFBUTTON1);
return(0);
}
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---