Помогите! Не могу понять почему сумма равна нулю!!!!

 
Помогите! Не могу понять почему сумма равна нулю!!!!

Вот код....
//+------------------------------------------------------------------+
//|                                                           25.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
#property show_inputs
 
extern datetime BeginDate = D'2006.03.11';
extern datetime EndDate   = D'2006.04.21';
#property indicator_buffers 2
 
double ExtMapBuffer1[];
double ExtMapBuffer2[];
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start()
{
  int    i, b=0, bb=0, eb;
  string comm, st;
  double cc8, cc14, cc80, cc140, Del, Del0, Sum;
  int M, N;  ///переменные могут принимать только целые значения
  cc8=0; 
  cc14=0;
  cc80=0;
  cc140=0;
  Del=0;
  Del0=0;
  Sum=0;
 
  string fn="Verojatnost"+Symbol()+Period()+" "+
         TimeToStr(BeginDate, TIME_DATE)+"-"+
         TimeToStr(EndDate, TIME_DATE)+".csv";
 for (i=Bars; i>0; i--) {				/// При копировании забыл поставить
   if (Time[i]>=BeginDate && Time[i]<=EndDate) 
   {
   if(GetLastError()==0) Print("Гляди ка, считает чего-то все таки !?"); 
      else Print("Какая то фигня на баре ",i);
      
      if (bb==0) bb=i; // фиксируем номер первого бара
         cc8=iMA(NULL,0,8,0,MODE_SMMA,PRICE_CLOSE,i);
         cc14=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i);
         cc80=iMA(NULL,0,8,-5,MODE_SMMA,PRICE_CLOSE,i);
         cc140=iMA(NULL,0,14,-5,MODE_SMMA,PRICE_CLOSE,i);  
         Del=cc8-cc14;
         Del0=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i-5)-cc140;
      
         if(Del==0 && Del0>0) {
           if(Open[i+1]-Close[i+1]<Open[i]-Close[i]) M++;
             else N++;
           }
      b++;
      eb=i;        // фиксируем номер последнего бара
    }
  
      Sum=M+N;
      if (Sum==0) Print("Косяк сумма равна нулю!!!");
         else st=M/Sum;
      
  
  comm="Начало: "+TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Конец: "+TimeToStr(Time[eb], TIME_DATE|TIME_MINUTES)+"\n";
  comm=comm+"Выгружено баров: "+DoubleToStr(b, 0);
 
  Comment(comm);
}
 
//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
int handle;
  handle=FileOpen("fn", FILE_CSV|FILE_WRITE, '\t');
  if(handle>0)
    {
     FileWrite(handle, st);
     FileClose(handle);
    }
 
//+------------------------------------------------------------------+
 
Вот до чего доводит пренебрежение нормальным форматированием и структурным выравниванем кода.
В трех соснах заблудились....
 

Если б знать что это такое.... Используется переменная i цикла не наблюдаю, но это ладно - равна нулю.

Если знаешь для чего этот скрипт и как работает, вставляй в разные места Print() или Alert() и наблюдай что происходит. Кроме того, что с датой должна быть стыковка, Del вряд ли когда будет равен нулю. Две переменные double имеют очень много нулей посл запятой, поэтому их равенство маловероятно (если не сказать, что вообще невероятно).

 
Вам смешно, :-) это мои первые шаги в программировании, и я в этом ни капли не смыслю
 
Всю голову сломал над этой прогой...
Вот пояснение кода:
По идеи программа считает значение скользящих средних, ищет точку пересечения, потом считает эти же скользящие но со смещением опять ищет точку пересечение, если точка пересечение скользящих находится ниже скользящих без смещение, то значит 8-ми дневная пересекла 14-ти дневную снизу вверх, далее проверяется следующая свеча после пересечения скользящих без смещения бела или черная, если белая, то суммируется один счетчик, если черная, то другой. Потом находится вероятность, значение которой и должно выводится в файл!
 
Если привести код в нормальное состояние, то получится вот так:
//+------------------------------------------------------------------+
//|                                                           25.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
extern datetime BeginDate = D'2006.03.11';
extern datetime EndDate   = D'2006.04.21';
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start()
  {
   int    i, b=0, bb=0, eb=0;
   string comm, st;
   double cc8=0, cc14=0, cc80=0, cc140=0, Del=0, Del0=0, Sum=0;
   int    M=0, N=0;  ///переменные могут принимать только целые значения
//---- подготовим имя файла
   string fn="Verojatnost"+Symbol()+Period()+" "+
             TimeToStr(BeginDate, TIME_DATE)+"-"+
             TimeToStr(EndDate, TIME_DATE)+".csv";
//---- идем с самого начала графика до его конца
   for(i=Bars; i>0; i--) 
     {
      // используем только выставленный промежуток 
      if(Time[i]>=BeginDate && Time[i]<=EndDate) 
        {
         if(bb==0) bb=i; // фиксируем номер первого бара
         //---- расчитаем значения скользящих
         cc8=iMA(NULL,0,8,0,MODE_SMMA,PRICE_CLOSE,i);
         cc14=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i);
         cc80=iMA(NULL,0,8,-5,MODE_SMMA,PRICE_CLOSE,i);
         cc140=iMA(NULL,0,14,-5,MODE_SMMA,PRICE_CLOSE,i);  
         //----
         Del=cc8-cc14;
         Del0=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,i-5)-cc140;
         //---- а вот и проблемное место, куда управление не заходит
         //---- и M с N не изменяются
         if(Del==0 && Del0>0) // непонятное условие
           {
            if((Open[i+1]-Close[i+1]) < (Open[i]-Close[i])) M++;
            else                                            N++;
           }
         //---- счетчики
         b++;
         eb=i;        // фиксируем номер последнего бара
        }
     }
//---- подсчет и проверки?
   Sum=M+N;
   if(Sum==0) Print("Косяк сумма равна нулю!!!");
   else       st=M/Sum;
//---- выдадим коммент
   comm="Начало: "+TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES)+"\n";
   comm=comm+"Конец: "+TimeToStr(Time[eb], TIME_DATE|TIME_MINUTES)+"\n";
   comm=comm+"Выгружено баров: "+DoubleToStr(b, 0);
   Comment(comm);
//---- запись строки в файл
   int handle=FileOpen("fn", FILE_CSV|FILE_WRITE, '\t');
   if(handle>0)
     {
      FileWrite(handle, st);
      FileClose(handle);
     }
//---- конец
  }
//+------------------------------------------------------------------+

Проблема в условии из-за которого управление не передается внутрь.
if(Del==0 && Del0>0)
К сожалению, у меня нет времени углубляться в логику кода. Но я специально продемонстрировал важный момент:

Грамотно и структурно оформляйте код - это уменьшает количество ошибок и позволяет другим легче читать его.
 
Renat:
Если привести код в нормальное состояние, то получится вот так:
------------------
Проблема в условии из-за которого управление не передается внутрь.
if(Del==0 && Del0>0)
К сожалению, у меня нет времени углубляться в логику кода. Но я специально продемонстрировал важный момент:

Грамотно и структурно оформляйте код - это уменьшает количество ошибок и позволяет другим легче читать его.
Спасибо, что обьяснили как оформлять программы, так как сам я не информатик а экономист...
Воспользовался советом Integer напихал после каждого условия Print, чтоб посмотреть после какого куска кода не происходит дальнейшее развитие программы... .

Огромное спасибо ....
Причина обращения: