//+------------------------------------------------------------------+
//|                                                bull or bears.mq4 |
//|                                                         AriusKis |
//|                                             https://www.mql5.com |
//| Выводит информацию о вероятностях появления бычьих и медвежьих св|
//|ечей после рассматриваемого интервала свечей, при условии, что Х% |
//|свечей из интервала были бычьи или медвежьи                       |
//+------------------------------------------------------------------+
#property copyright "AriusKis"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property show_inputs

extern int AllCandles   = 200;                                       //Баров на истории
extern int ObsPeriod    = 10;                                        //Оцениваемый период, баров
extern int ProcentLevel = 70;                                        //Процентный пороговый уровень (>=50)
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
    if (AllCandles<ObsPeriod)
       Alert("Неверно указаны входные параметры, \nбаров на истории должно быть больше, чем оцениваемый период!");
    if ((AllCandles+ObsPeriod+1)>Bars)
       Alert("Недостаточно баров на истории для указанных параметров!");
    
    double ObsPeriodx    = ObsPeriod;
    double ProcentLevelx = ProcentLevel;
    double allbull1   = 0;
    double allbear1   = 0;
    double allcandle1 = 0;
    double allbear2   = 0;
    double allbull2   = 0;
    double allcandle2 = 0;
    int bull;
    int bear;
    double result = 0;
    string screen;
    double up1, up2, down1, down2;
    bool MassWhichCandle[];
    
    ArrayResize(MassWhichCandle, AllCandles+ObsPeriod+1, 1);
 
    for (int i=AllCandles+ObsPeriod; i>=1; i--)
    {
       result = Open[i]-Close[i];
       if (result>0)
          MassWhichCandle[i] = false;
       if (result<0)
          MassWhichCandle[i] = true;
    }
    
    for (int k=AllCandles; k>=2; k--)
    {
       bull = 0;
       bear = 0;
       for (int j=k; j<k+ObsPeriod; j++)
       {
           if (MassWhichCandle[j] == true)
              bull++;
           if (MassWhichCandle[j] == false)
              bear++;
       }
       if (bull>bear)
       {
           if ((bull/ObsPeriodx)>=(ProcentLevelx/100))
           {
               if (MassWhichCandle[k-1] == true)
               {
                  allbull1++;
                  allcandle1++;
               }
               if (MassWhichCandle[k-1] == false)
               {
                  allbear1++;
                  allcandle1++;
               }
           }
           else continue;
       }
       if (bull<bear)
       {
           if ((bear/ObsPeriodx)>=(ProcentLevelx/100))
           {
               if (MassWhichCandle[k-1] == true)
               {
                  allbull2++;
                  allcandle2++;
               }
               if (MassWhichCandle[k-1] == false)
               {
                  allbear2++;
                  allcandle2++;
               }
           }
           else continue;
       }
       if (bull==bear && ProcentLevelx == 50)
       {
           if (MassWhichCandle[k-1] == true)
           {
               allbull1++;
               allbull2++;
               allcandle1++;
               allcandle2++;
           }
           if (MassWhichCandle[k-1] == false)
           {
               allbear1++;
               allbear2++;
               allcandle1++;
               allcandle2++;
           }
       }
    }
    up1   = (allbull1/allcandle1)*100;
    up2   = (allbull2/allcandle2)*100;
    down1 = (allbear1/allcandle1)*100;
    down2 = (allbear2/allcandle2)*100;
    
    screen  = "При заданном уровне повторения бычьих свечей в " + IntegerToString(ProcentLevel, 0) + "%  на заданном интервале" + "\n";
    screen += "вероятность появления бычьей свечи = " + DoubleToString(up1, 2) + ", медвежей свечи = " + DoubleToString(down1, 2) + "\n" + "\n";
    screen += "При заданном уровне повторения медвежьих свечей в " + IntegerToString(ProcentLevel, 0) + "%  на заданном интервале" + "\n";
    screen += "вероятность появления бычьей свечи = " + DoubleToString(up2, 2) + ", медвежей свечи = " + DoubleToString(down2, 2);
    
    Comment (screen);
  }
//+------------------------------------------------------------------+
