EA counts how many signals there were previously each new signal then...

 

Hi guys, I swear I'm trying to train my coding and trying a simple hilo EA that with each new bar close signal above or below the indicator it checks how many signals (be above or below) there were in the last X previous bars (only bars independing the time) and if this number of signals/toggle is greater than Y in the range of X bars make the trade, else not, and check it again each new signal.

I'm new to this but I SWEAR I've been trying for DAYS, I've tried all the searches and even chatGPT (useless I think lol). I know it must be something simple to do, but I feel like when I get it right on one side I get it wrong on the other haha. I will attach part of the code below with the function that I call for this "check".

Any help would be welcome. Thank you very much in advance!! And sorry for the rusty English...


//+------------------------------------------------------------------+
//|                                                     Canais01.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade trade;
CSymbolInfo simbolo; // Classe responsãvel pelos dados do ativo



input int      Periodo   = 20;       // Período Média
//input int      PeriodoCurto   = 20;       // Período Média Curta
input double   SL             = 0.0;      // Stop Loss
input double   TP             = 0.0;      // Take Profit
input double   lotes  = 1;        // Volume Inicial
input string   inicio         = "09:00";  // Horário de Início (entradas)
input string   termino        = "17:00";  // Horário de Término (entradas)
input string   fechamento     = "17:30";  // Horário de Fechamento (posições)
input int      intervaloBarras = 10; // Intervalo de Barras
input int      alternanciaMinima = 1; // Alternancia Minima

bool HabilitarVenda = true;
bool HabilitarCompra = true;
int count_above_ma = 0;
int contadorTrocas = 0;

int handleHilo; // Manipuladores dos dois indicadores de média móvel
      double hilo[];

// Estruturas de tempo para manipulação de horários
MqlDateTime horario_inicio, horario_termino, horario_fechamento, horario_atual;
MqlRates rates[];


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

   if(!simbolo.Name(_Symbol))
   {
      printf("Ativo Inválido!");
      return INIT_FAILED;
   }

      // Criação dos manipuladores com Períodos curto e longo
      


   
      // Criação das structs de tempo
   TimeToStruct(StringToTime(inicio), horario_inicio);
   TimeToStruct(StringToTime(termino), horario_termino);
   TimeToStruct(StringToTime(fechamento), horario_fechamento);
   
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      handleHilo = iCustom(Symbol(), Period(), "GannHilo", Periodo);
           // Cópia dos buffers dos indicadores de média móvel com períodos curto e longo

      ArraySetAsSeries(hilo, true);
      ArraySetAsSeries(rates, true);

       
    CopyBuffer(handleHilo, 0, 0, 50, hilo);
    CopyRates(Symbol(), Period(), 0, 50, rates);
  
//---
      if(HorarioEntrada())
   {
      // Compra em caso de cruzamento da média curta para cima da média longa
   if(rates[1].close > hilo[1] && rates[2].close < hilo[2] && HabilitarCompra == true){
      

                  bool alternador = VerificarPrecoAcimaDoHiLo();
               if (alternador) {
                 // Prossiga com a ordem de compra
                 CloseAllSellPositions();
                 Compra();
                 Print("#############SINAIS TROCADOS NAS ULTIMAS BARRAS###################: ", contadorTrocas);
                 HabilitarCompra = false;
                 HabilitarVenda = true;
                 contadorTrocas = 0;
             }
         }
   
                     // Venda em caso de cruzamento da média curta para baixo da média longa
        if(rates[1].close < hilo[1] && rates[2].close > hilo[2] && HabilitarVenda == true){
                  

                  bool alternador = VerificarPrecoAcimaDoHiLo();
               if (alternador)   {
                 // Prossiga com a ordem de venda
                     CloseAllBuyPositions();
                     Venda();
                     Print("#############SINAIS TROCADOS NAS ULTIMAS BARRAS###################: ", contadorTrocas);
                     HabilitarVenda = false;
                     HabilitarCompra = true;
                     contadorTrocas = 0;
                     }
               }
         }

bool VerificarPrecoAcimaDoHiLo() {
    for (int i = 0; i < intervaloBarras; i++) {
        // Verifica se o preço de fechamento de cada barra está acima do valor HiLo correspondente
        if (rates[i].close > hilo[i] && rates[i+1].close < hilo[i+1]) {
            contadorTrocas++; // Pelo menos uma barra fechou abaixo do HiLo
        }
        else if(rates[i].close < hilo[i] && rates[i+1].close > hilo[i+1]){
            contadorTrocas++;
      }
   }
            if(contadorTrocas > alternanciaMinima){
               return true;
               }
                  else{
                     contadorTrocas = 0;
                     return false;
                  }
               
}

I don't know if I should make an ARRAY or if just doing a correctly FOR would be enough... Thanks again!