//+------------------------------------------------------------------+
//|                                                                  |
//| Indicador Média Móvel de 9 Períodos com Sinais de Entrada e Saída|
//|                                                                  |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

// Buffers para as setas de compra e venda
double BuySignalBuffer[];
double SellSignalBuffer[];

// Média móvel de 9 períodos
input int maPeriod = 9;
input ENUM_MA_METHOD maMethod = MODE_EMA; // Tipo de média móvel (exponencial por padrão)

// Variável para armazenar o handle da média móvel
int maHandle;

//+------------------------------------------------------------------+
//| Inicialização do indicador                                       |
//+------------------------------------------------------------------+
int OnInit()
{
   // Configura os buffers de dados
   SetIndexBuffer(0, BuySignalBuffer);
   PlotIndexSetInteger(0, PLOT_ARROW, 233); // Código ASCII da seta para cima
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrGreen);
   PlotIndexSetString(0, PLOT_LABEL, "Sinal de Compra");

   SetIndexBuffer(1, SellSignalBuffer);
   PlotIndexSetInteger(1, PLOT_ARROW, 234); // Código ASCII da seta para baixo
   PlotIndexSetInteger(1, PLOT_LINE_COLOR, clrRed);
   PlotIndexSetString(1, PLOT_LABEL, "Sinal de Venda");

   // Inicializando a média móvel
   maHandle = iMA(_Symbol, _Period, maPeriod, 0, maMethod, PRICE_CLOSE);

   if (maHandle == INVALID_HANDLE)
   {
      Print("Erro ao criar o handle da média móvel.");
      return (INIT_FAILED);
   }

   return (INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Cálculo dos sinais                                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[],
                const double &high[], const double &low[], const double &close[], const long &tick_volume[],
                const long &volume[], const int &spread[])
{
   // Variável para armazenar o valor da média móvel
   double maValue[];

   // Copiando valores da média móvel
   if (CopyBuffer(maHandle, 0, 0, rates_total, maValue) <= 0)
   {
      Print("Erro ao copiar o valor da média móvel.");
      return (0);
   }

   for (int i = prev_calculated; i < rates_total; i++)
   {
      // Limpa os buffers de sinal
      BuySignalBuffer[i] = 0;
      SellSignalBuffer[i] = 0;

      // Sinal de Compra: Preço cruzando para cima da média móvel
      if (close[i] > maValue[i] && close[i - 1] <= maValue[i - 1])
      {
         BuySignalBuffer[i] = low[i] - (Point * 10.0); // Exibe a seta de compra abaixo da vela
         Comment("Sinal de Compra");
      }
      // Sinal de Venda: Preço cruzando para baixo da média móvel
      else if (close[i] < maValue[i] && close[i - 1] >= maValue[i - 1])
      {
         SellSignalBuffer[i] = high[i] + (Point * 10.0); // Exibe a seta de venda acima da vela
         Comment("Sinal de Venda");
      }
   }

   return (rates_total);
}

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


erros:

'LarryWilliams_001.mq5'			1
'*' - open parenthesis expected	LarryWilliams_001.mq5	76	47
'*' - open parenthesis expected	LarryWilliams_001.mq5	82	49
2 errors, 0 warnings		3	1