Limitar abertura de ordem na vela atual e próximas 10

 
Olá. Tudo bem?
Estou com dificuldade em controlar o número de abertura de ordem do meu robô. A ordem é executada no local determinado. Mas como é scalp de poucos pontos, são feitas outras aberturas na mesma vela após o fechamento rápido da ordem anterior. 
Gostaria de abrir apenas uma ordem quando for dado o sinal e não abrir nenhuma ordem nos próximos 15 candles de 1 minuto. 

Fico muito grato se me ajudarem. 
 
Basta colocar  uma variável com o conteúdo do ultimo numero de barras, e só abrir outra ordem se a diferença for  maior que 15.
static int tradeok; // Variável local estática, começando com zero.
if(Bars(Symbol(),PERIOD_CURRENT)>trade)
{

sendordercode(); // sua rotina de abertura de ordem

tradeok = 15 + Bars(Symbol(),PERIOD_CURRENT);
}
 




Olá. Muito obrigado por responder. 
Parece simples mas não consegui fazer o que me indicou. Teria como me mostrar como você faria? Por favor!


//+------------------------------------------------------------------+
//|                                                    ROBÔ MACD.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|Codigo de leitura da biblioteca metatrader                        |
//+------------------------------------------------------------------+

#include <trade\trade.mqh>
CTrade trade;



//+------------------------------------------------------------------+
//|Parametros de entrada                                             |
//+------------------------------------------------------------------+

input group "Dados de operação"
input double contrato =20;                                             //Contratos 



input double takeProfit=0;                                //Stop Gain
input double stopLoss=0;                                //Stop Loss


input group "Dados de horários"
input int hAbertura=9;                                  //Hora de abertura
input int hFechamento=17;                               //Hora de fechamento
input int mAbertura=15;                                 //Minuto de abertura 
input int mFechamento=45 ;                              //Minuto de fechamento

//+------------------------------------------------------------------+
//|            Handles                                               |
//+------------------------------------------------------------------+
int ind_c;                                              //Validação de indicador 

int handle;


double linha_macd[];
double linha_sinal[];
double nAbrir[];


MqlRates  rates [];






int OnInit(){

ArraySetAsSeries(rates, true);
ArraySetAsSeries(linha_macd, true);
ArraySetAsSeries(linha_sinal, true);
ArraySetAsSeries(nAbrir, true);





handle = iMACD(_Symbol,_Period, 12, 26, 9, PRICE_CLOSE);
return (INIT_SUCCEEDED);
}
datetime HoraCdePosicao;
 

void OnTick()


 {

     
         
       CopyRates(Symbol(),0,0,3, rates);                                                 // Leitura do buffer das setas criadas 
       CopyBuffer(handle,0,0,3,linha_macd);                                              // leitura do buffer das barras cinzas do MACD
       CopyBuffer(handle,1,0,3,linha_sinal);                                             // Leitura do buffer da linha vermelha do MACD                                             
       
       bool sinalcompra=false;
       bool sinalvenda=false;
//+------------------------------------------------------------------+
//|INdicador criado com indicação de compra e venda                  |
//+------------------------------------------------------------------+
       
       if (linha_sinal[1] < -150 )                                                        // se a linha vermelha passar para baixo de -150 
         {
         ObjectCreate(0, rates[1].time,OBJ_ARROW_BUY,0, rates[1].time, rates[1].high );   //  criar objeto com seta pra cima indicando compra
         
         }
         
         if (linha_sinal[1] > 150 )                                                       // se a linha vermelha passar para baixo de -150 
         {
         ObjectCreate(0, rates[1].time,OBJ_ARROW_SELL,0, rates[1].time, rates[1].high );  //  criar objeto com seta pra baixo indicando venda              

         }
//+------------------------------------------------------------------+
//| VERIFICAR SE ESTOU POSICIONADO                                   |
//+------------------------------------------------------------------+
         
             bool comprado = false;
             bool vendido = false;   
     
    
          if (PositionSelect(_Symbol))      // verificando a posição de compra ou venda no gráfico
           
    
        
         //--- se a posição for comprada
          if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY )
           {
            comprado = true;
          
           }
         //--- se a posição for vendida
         if( PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL )
           {
            vendido = true;
           }
         



       
//+------------------------------------------------------------------+
//| Ordens de compra e venda                                         |
//+------------------------------------------------------------------+         
         
          if( !comprado && !vendido )
          
               {
         
                   if (linha_sinal[1] < -150  )      // Se a linha vermelha passar para baixo de -150 
                    {sinalcompra= true;}             // Sinal de compra se torna verdadeiro
                   if (linha_sinal[1] > 150   )      // Se a linha vermelha passar para cima de 150 
                    {sinalvenda=true;}               // Sinal de venda se torna verdadeiro
                    
                    
                    
                    
                    
                  if( sinalcompra)                                                                   // Se o sinal de compra é verdadeiro 
           {
            double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);               
           trade.Buy(contrato,_Symbol,ask,ask -500 *_Point, ask+150*_Point,"[Compra a mercado]");    // execução de  compra 
           //trade.Buy(contrato,_Symbol,0,0,0,"[Compra a mercado]");
           }
         //--- sinal de venda
         if( sinalvenda)                                                                              // Se o sinal de venda  é verdadeiro 
           {
           double bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
            trade.Sell(contrato,_Symbol,bid,bid+500*_Point, bid-150*_Point,"[Venda a mercado]");      // execução de  compra
           //trade.Sell(contrato,_Symbol,0,0,0,"[venda a mercado]");
           }
                     
//+------------------------------------------------------------------+
//| Evitar trader na mesma barra                                     |
//+------------------------------------------------------------------+        



             
              
              
  }      
                     
}

desde ja agradeço

 
//+------------------------------------------------------------------+
//| Ordens de compra e venda                                         |
//+------------------------------------------------------------------+         
         
          if( !comprado && !vendido )
          
               {
         
                   if (linha_sinal[1] < -150  )      // Se a linha vermelha passar para baixo de -150 
                    {sinalcompra= true;}             // Sinal de compra se torna verdadeiro
                   if (linha_sinal[1] > 150   )      // Se a linha vermelha passar para cima de 150 
                    {sinalvenda=true;}               // Sinal de venda se torna verdadeiro
                    
                    
                    static int tradeok; // Variável local estática, começando com zero.
                        if(Bars(Symbol(),PERIOD_CURRENT)>trade)
        {
         if( sinalcompra)                                                                   // Se o sinal de compra é verdadeiro 
           {
            double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);               
           trade.Buy(contrato,_Symbol,ask,ask -500 *_Point, ask+150*_Point,"[Compra a mercado]");    // execução de  compra 
           //trade.Buy(contrato,_Symbol,0,0,0,"[Compra a mercado]");
           tradeok = 15 + Bars(Symbol(),PERIOD_CURRENT);
           }
         //--- sinal de venda
         if( sinalvenda)                                                                              // Se o sinal de venda  é verdadeiro 
           {
           double bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
            trade.Sell(contrato,_Symbol,bid,bid+500*_Point, bid-150*_Point,"[Venda a mercado]");      // execução de  compra
           //trade.Sell(contrato,_Symbol,0,0,0,"[venda a mercado]");
           tradeok = 15 + Bars(Symbol(),PERIOD_CURRENT);
           }
        }

Só fazer essa mudança e ser feliz.

Razão: