Number Bulls and Bears by Time

Author: Copyright © 2020, Vladimir Karputov
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Number Bulls and Bears by Time
ÿþ//+------------------------------------------------------------------+

//|                               Number Bulls and Bears by Time.mq5 |

//|                              Copyright © 2020, Vladimir Karputov |

//|                     https://www.mql5.com/ru/market/product/43516 |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2020, Vladimir Karputov"

#property link      "https://www.mql5.com/ru/market/product/43516"

#property version   "1.000"

#property script_show_inputs

//--- input parameters

input int         InpCountBars      = 1000;     // Count of bars

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

   if(Period()>=PERIOD_D1)

     {

      string err_text=(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")?

                      "5@8>4 3@0D8:0 =5 <>65B 1KBL @025= 8;8 1>;LH5 'D1'!":

                      "The chart period cannot be equal to or greater than 'D1'!";

      Alert(__FILE__," ",__FUNCTION__,", ERROR: ",err_text);

      return;

     }

//---

   datetime time_dropped=ChartTimeOnDropped();

   int bars_shift=iBarShift(Symbol(),Period(),time_dropped,false);

   datetime bars_shift_time=iTime(Symbol(),Period(),bars_shift);



   Print("Dropped to: ",time_dropped,", nearest bar time: ",bars_shift_time);

   MqlDateTime SBars_shift_time,STime_i;

   TimeToStruct(bars_shift_time,SBars_shift_time);



   MqlRates rates[];

   ResetLastError();

   int copied=CopyRates(Symbol(),Period(),0,InpCountBars,rates);



   if(copied==-1)

     {

      Alert("Count of bars ",InpCountBars,", copied -1, ERROR ",GetLastError());

      return;

     }

   if(copied<InpCountBars)

      Alert("Count of bars ",InpCountBars,", copied ",copied);



   long bullish=0,bearish=0;

   for(int i=0; i<copied; i++)

     {

      TimeToStruct(rates[i].time,STime_i);

      if(!CompareTime(SBars_shift_time,STime_i))

         continue;

      if(rates[i].open<rates[i].close)

         bullish++;

      else

         if(rates[i].open>rates[i].close)

            bearish++;



     }

   Print("bullish ",bullish,", bearish ",bearish);

   Print("");

  }

//+------------------------------------------------------------------+

//| Compare time                                                     |

//+------------------------------------------------------------------+

bool CompareTime(MqlDateTime &first_struct,MqlDateTime &second_struct)

  {

   if(Period()>=PERIOD_H1)

      return(first_struct.hour==second_struct.hour);

   else

      return((first_struct.hour==second_struct.hour) && first_struct.min==second_struct.min);

  }

//+------------------------------------------------------------------+

Comments