CustomTicksDelete

Exclui todos os ticks no histórico de preço do instrumento personalizado, no intervalo de tempo selecionado.

int  CustomTicksDelete(
   const string     symbol,            // nome do símbolo
   long             from_msc,          // a partir de qual data
   long             to_msc             // até qual data
   );

Parâmetros

symbol

[in]  Nome do instrumento personalizado.

from_msc

[in]  Tempo do primeiro tick no histórico de preço, na faixa definida a ser removida. Tempo em milissegundos desde 01.01.1970.

to_msc

[in]  Tempo do último tick no histórico de preço, na faixa definida a ser removida. Tempo em milissegundos desde 01.01.1970.

Valor de retorno

Número de ticks removidos ou -1 em caso de erro.

 

Exemplo:

//+------------------------------------------------------------------+
//|                                            CustomTicksDelete.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C"     // nome do símbolo personalizado
#define   CUSTOM_SYMBOL_PATH     "Forex"           // nome do grupo onde o símbolo será criado
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()          // nome do símbolo usado como base para a criação do símbolo personalizado
 
#define   DATATICKS_TO_COPY      UINT_MAX          // quantidade de ticks copiados
#define DATATICKS_TO_DELETE 10 // quantidade de ticks a serem deletados
#define   DATATICKS_TO_PRINT     20                // quantidade de ticks exibidos no log
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- obtemos o código de erro ao criar o símbolo personalizado
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- se o código de erro não for 0 (criação bem-sucedida do símbolo) e não for 5304 (símbolo já criado), saímos.
   if(create!=0 && create!=5304)
      return;
 
//--- obtemos no array MqlTick os dados de ticks do símbolo padrão
   MqlTick array[]={};
   if(!GetTicksToArray(CUSTOM_SYMBOL_ORIGINDATATICKS_TO_COPYarray))
      return;
   
//--- imprimimos o horário do primeiro e último tick obtido do símbolo padrão
   int total=(int)array.Size();
   PrintFormat("First tick time: %s.%03u, Last tick time: %s.%03u",
               TimeToString(array[0].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS), array[0].time_msc%1000,
               TimeToString(array[total-1].timeTIME_DATE|TIME_MINUTES|TIME_SECONDS), array[total-1].time_msc%1000);
               
//--- imprimimos no log os últimos DATATICKS_TO_PRINT ticks do símbolo padrão
   PrintFormat("\nThe last %d ticks for the standard symbol '%s':"DATATICKS_TO_PRINTCUSTOM_SYMBOL_ORIGIN);
   for(int i=total-DATATICKS_TO_PRINTi<totali++)
     {
      if(i<0)
         continue;
      PrintFormat("  %dth Tick: %s"iGetTickDescription(array[i]));
     }
   
//--- adicionamos o símbolo personalizado na janela MarketWatch (observação do mercado)
   ResetLastError();
   if(!SymbolSelect(CUSTOM_SYMBOL_NAMEtrue))
     {
      Print("SymbolSelect() failed. Error "GetLastError());
      return;
     }
     
//--- adicionamos à história de preços do símbolo personalizado os dados do array de ticks
   Print("...");
   uint start=GetTickCount();
   PrintFormat("Start of adding %u ticks to the history of the custom symbol '%s'"array.Size(), CUSTOM_SYMBOL_NAME);
   int added=CustomTicksAdd(CUSTOM_SYMBOL_NAMEarray);
   PrintFormat("Added %u ticks to the history of the custom symbol '%s' in %u ms"addedCUSTOM_SYMBOL_NAMEGetTickCount()-start);
   
//--- obtemos no array MqlTick os dados de ticks recém-adicionados do símbolo personalizado
   Print("...");
   if(!GetTicksToArray(CUSTOM_SYMBOL_NAMEarray.Size(), array))
      return;
   
//--- imprimimos o horário do primeiro e último tick obtido do símbolo personalizado
   total=(int)array.Size();
   PrintFormat("First tick time: %s.%03u, Last tick time: %s.%03u",
               TimeToString(array[0].timeTIME_DATE|TIME_MINUTES|TIME_SECONDS), array[0].time_msc%1000,
               TimeToString(array[total-1].timeTIME_DATE|TIME_MINUTES|TIME_SECONDS), array[total-1].time_msc%1000);
               
//--- imprimimos no log os últimos DATATICKS_TO_PRINT ticks do símbolo personalizado
   PrintFormat("\nThe last %d ticks for the custom symbol '%s':"DATATICKS_TO_PRINTCUSTOM_SYMBOL_NAME);
   for(int i=total-DATATICKS_TO_PRINTi<totali++)
     {
      if(i<0)
         continue;
      PrintFormat("  %dth Tick: %s"iGetTickDescription(array[i]));
     }
 
//--- obtemos da história o horário do tick em milissegundos, a partir do qual iremos deletar o intervalo de ticks
   long time_from=array[total-DATATICKS_TO_DELETE-1].time_msc;
     
//--- deletamos o intervalo de DATATICKS_TO_DELETE últimos ticks do símbolo personalizado no array
   Print("...");
   start=GetTickCount();
   PrintFormat("Start deleting %u ticks in the history of the custom symbol '%s'"DATATICKS_TO_DELETECUSTOM_SYMBOL_NAME);
   int deleted=CustomTicksDelete(CUSTOM_SYMBOL_NAMEtime_fromarray[total-2].time_msc);
   PrintFormat("Deleted %u ticks in the history of the custom symbol '%s' in %u ms"deletedCUSTOM_SYMBOL_NAMEGetTickCount()-start);
   
//--- obtemos no array MqlTick os dados de ticks recém-alterados do símbolo personalizado
   Print("...");
   if(!GetTicksToArray(CUSTOM_SYMBOL_NAMEarray.Size(), array))
      return;
   
//--- imprimimos o horário do primeiro e último tick do símbolo personalizado com o intervalo de ticks excluído
   total=(int)array.Size();
   PrintFormat("Time of the first tick from the changed history: %s.%03u, Time of the last tick from the changed history: %s.%03u",
               TimeToString(array[0].timeTIME_DATE|TIME_MINUTES|TIME_SECONDS), array[0].time_msc%1000,
               TimeToString(array[total-1].timeTIME_DATE|TIME_MINUTES|TIME_SECONDS), array[total-1].time_msc%1000);
               
//--- imprimimos no log os últimos DATATICKS_TO_PRINT ticks do símbolo personalizado
   PrintFormat("\nThe last %d ticks of custom symbol '%s' with modified history:"DATATICKS_TO_PRINTCUSTOM_SYMBOL_NAME);
   for(int i=total-DATATICKS_TO_PRINTi<totali++)
     {
      if(i<0)
         continue;
      PrintFormat("  %dth Tick: %s"iGetTickDescription(array[i]));
     }
 
//--- no comentário do gráfico exibimos a dica sobre as chaves de encerramento do script
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
//--- em um loop infinito, esperamos as teclas Esc ou Del para sair
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- ao pressionar Del, excluímos o símbolo personalizado criado e seus dados
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         //--- excluímos os dados das barras
         int deleted=CustomRatesDelete(CUSTOM_SYMBOL_NAME0LONG_MAX);
         if(deleted>0)
            PrintFormat("%d history bars of the custom symbol '%s' were successfully deleted"deletedCUSTOM_SYMBOL_NAME);
         
         //--- excluímos os dados de ticks
         deleted=CustomTicksDelete(CUSTOM_SYMBOL_NAME0LONG_MAX);
         if(deleted>0)
            PrintFormat("%d history ticks of the custom symbol '%s' were successfully deleted"deletedCUSTOM_SYMBOL_NAME);
         
         //--- excluímos o símbolo
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- antes de sair, limpamos o gráfico
   Comment("");
   /*
   resultado:
   Requested 4294967295 ticks to get tick history for the symbol 'EURUSD'
   The tick history for the 'EURUSDsymbol is received in the amount of 351199027 ticks in 55875 ms
   First tick time2011.12.19 00:00:08.000Last tick time2024.06.21 10:10:40.392
   
   The last 20 ticks for the standard symbol 'EURUSD':
     351199007th Tick2024.06.21 10:10:23.045 Bid=1.07032 (Info tick)
     351199008th Tick2024.06.21 10:10:24.045 Ask=1.07031 Bid=1.07031 (Info tick)
     351199009th Tick2024.06.21 10:10:24.545 Ask=1.07032 (Info tick)
     351199010th Tick2024.06.21 10:10:25.146 Bid=1.07032 (Info tick)
     351199011th Tick2024.06.21 10:10:25.649 Ask=1.07037 Bid=1.07037 (Info tick)
     351199012th Tick2024.06.21 10:10:27.050 Ask=1.07036 Bid=1.07036 (Info tick)
     351199013th Tick2024.06.21 10:10:28.153 Ask=1.07039 Bid=1.07039 (Info tick)
     351199014th Tick2024.06.21 10:10:29.157 Ask=1.07037 Bid=1.07037 (Info tick)
     351199015th Tick2024.06.21 10:10:29.658 Ask=1.07036 Bid=1.07036 (Info tick)
     351199016th Tick2024.06.21 10:10:30.258 Bid=1.07036 (Info tick)
     351199017th Tick2024.06.21 10:10:30.872 Ask=1.07035 Bid=1.07035 (Info tick)
     351199018th Tick2024.06.21 10:10:31.358 Ask=1.07036 (Info tick)
     351199019th Tick2024.06.21 10:10:31.859 Ask=1.07037 Bid=1.07037 (Info tick)
     351199020th Tick2024.06.21 10:10:32.377 Ask=1.07039 Bid=1.07039 (Info tick)
     351199021th Tick2024.06.21 10:10:32.962 Ask=1.0704 Bid=1.0704 (Info tick)
     351199022th Tick2024.06.21 10:10:33.961 Ask=1.07039 Bid=1.07039 (Info tick)
     351199023th Tick2024.06.21 10:10:34.667 Ask=1.0704 (Info tick)
     351199024th Tick2024.06.21 10:10:35.170 Bid=1.0704 (Info tick)
     351199025th Tick2024.06.21 10:10:38.266 Ask=1.07041 Bid=1.07041 (Info tick)
     351199026th Tick2024.06.21 10:10:40.392 Ask=1.07042 Bid=1.07042 (Info tick)
   ...
   Start of adding 351199027 ticks to the history of the custom symbol 'EURUSD.C'
   Added 351199027 ticks to the history of the custom symbol 'EURUSD.Cin 261594 ms
   ...
   Requested 351199027 ticks to get tick history for the symbol 'EURUSD.C'
   The tick history for the 'EURUSD.Csymbol is received in the amount of 351199027 ticks in 137156 ms
   First tick time2011.12.19 00:00:08.000Last tick time2024.06.21 10:10:40.392
   
   The last 20 ticks for the custom symbol 'EURUSD.C':
     351199007th Tick2024.06.21 10:10:23.045 Ask=1.07032 Bid=1.07032 (Info tick)
     351199008th Tick2024.06.21 10:10:24.045 Ask=1.07031 Bid=1.07031 (Info tick)
     351199009th Tick2024.06.21 10:10:24.545 Ask=1.07032 Bid=1.07032 (Info tick)
     351199010th Tick2024.06.21 10:10:25.146 Ask=1.07032 Bid=1.07032 (Info tick)
     351199011th Tick2024.06.21 10:10:25.649 Ask=1.07037 Bid=1.07037 (Info tick)
     351199012th Tick2024.06.21 10:10:27.050 Ask=1.07036 Bid=1.07036 (Info tick)
     351199013th Tick2024.06.21 10:10:28.153 Ask=1.07039 Bid=1.07039 (Info tick)
     351199014th Tick2024.06.21 10:10:29.157 Ask=1.07037 Bid=1.07037 (Info tick)
     351199015th Tick2024.06.21 10:10:29.658 Ask=1.07036 Bid=1.07036 (Info tick)
     351199016th Tick2024.06.21 10:10:30.258 Ask=1.07036 Bid=1.07036 (Info tick)
     351199017th Tick2024.06.21 10:10:30.872 Ask=1.07035 Bid=1.07035 (Info tick)
     351199018th Tick2024.06.21 10:10:31.358 Ask=1.07036 Bid=1.07036 (Info tick)
     351199019th Tick2024.06.21 10:10:31.859 Ask=1.07037 Bid=1.07037 (Info tick)
     351199020th Tick2024.06.21 10:10:32.377 Ask=1.07039 Bid=1.07039 (Info tick)
     351199021th Tick2024.06.21 10:10:32.962 Ask=1.0704 Bid=1.0704 (Info tick)
     351199022th Tick2024.06.21 10:10:33.961 Ask=1.07039 Bid=1.07039 (Info tick)
     351199023th Tick2024.06.21 10:10:34.667 Ask=1.0704 Bid=1.0704 (Info tick)
     351199024th Tick2024.06.21 10:10:35.170 Ask=1.0704 Bid=1.0704 (Info tick)
     351199025th Tick2024.06.21 10:10:38.266 Ask=1.07041 Bid=1.07041 (Info tick)
     351199026th Tick2024.06.21 10:10:40.392 Ask=1.07042 Bid=1.07042 (Info tick)
   ...
   Start deleting 10 ticks in the history of the custom symbol 'EURUSD.C'
   Deleted 10 ticks in the history of the custom symbol 'EURUSD.Cin 188 ms
   ...
   Requested 351199027 ticks to get tick history for the symbol 'EURUSD.C'
   The tick history for the 'EURUSD.Csymbol is received in the amount of 351199017 ticks in 138312 ms
   Time of the first tick from the changed history2011.12.19 00:00:08.000Time of the last tick from the changed history2024.06.21 10:10:40.392
   
   The last 20 ticks of custom symbol 'EURUSD.Cwith modified history:
     351198997th Tick2024.06.21 10:10:14.935 Ask=1.07036 Bid=1.07036 (Info tick)
     351198998th Tick2024.06.21 10:10:15.533 Ask=1.07035 Bid=1.07035 (Info tick)
     351198999th Tick2024.06.21 10:10:17.736 Ask=1.07036 Bid=1.07036 (Info tick)
     351199000th Tick2024.06.21 10:10:18.540 Ask=1.07037 Bid=1.07037 (Info tick)
     351199001th Tick2024.06.21 10:10:19.046 Ask=1.07038 Bid=1.07038 (Info tick)
     351199002th Tick2024.06.21 10:10:19.542 Ask=1.07036 Bid=1.07036 (Info tick)
     351199003th Tick2024.06.21 10:10:20.041 Ask=1.07035 Bid=1.07035 (Info tick)
     351199004th Tick2024.06.21 10:10:21.041 Ask=1.07035 Bid=1.07035 (Info tick)
     351199005th Tick2024.06.21 10:10:21.544 Ask=1.07032 Bid=1.07032 (Info tick)
     351199006th Tick2024.06.21 10:10:22.344 Ask=1.07032 Bid=1.07032 (Info tick)
     351199007th Tick2024.06.21 10:10:23.045 Ask=1.07032 Bid=1.07032 (Info tick)
     351199008th Tick2024.06.21 10:10:24.045 Ask=1.07031 Bid=1.07031 (Info tick)
     351199009th Tick2024.06.21 10:10:24.545 Ask=1.07032 Bid=1.07032 (Info tick)
     351199010th Tick2024.06.21 10:10:25.146 Ask=1.07032 Bid=1.07032 (Info tick)
     351199011th Tick2024.06.21 10:10:25.649 Ask=1.07037 Bid=1.07037 (Info tick)
     351199012th Tick2024.06.21 10:10:27.050 Ask=1.07036 Bid=1.07036 (Info tick)
     351199013th Tick2024.06.21 10:10:28.153 Ask=1.07039 Bid=1.07039 (Info tick)
     351199014th Tick2024.06.21 10:10:29.157 Ask=1.07037 Bid=1.07037 (Info tick)
     351199015th Tick2024.06.21 10:10:29.658 Ask=1.07036 Bid=1.07036 (Info tick)
     351199016th Tick2024.06.21 10:10:40.392 Ask=1.07042 Bid=1.07042 (Info tick)
   */
  }
//+------------------------------------------------------------------+
//| Cria um símbolo personalizado, retorna o código de erro         |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- definimos o nome do símbolo usado como base para criar o símbolo personalizado
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- se não for possível criar o símbolo personalizado, e isso não for um erro 5304, informamos no log
   ResetLastError();
   int error=0;
   if(!CustomSymbolCreate(symbol_namesymbol_pathorigin))
     {
      error=GetLastError();
      if(error!=5304)
         PrintFormat("CustomSymbolCreate(%s, %s, %s) failed. Error %d"symbol_namesymbol_pathoriginerror);
     }
//--- sucesso
   return(error);
  }
//+------------------------------------------------------------------+
//| Exclui o símbolo personalizado                                   |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- ocultamos o símbolo da janela Observação do Mercado
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- se não for possível excluir o símbolo personalizado, informamos no log e retornamos false
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- sucesso
   return(true);
  }
//+------------------------------------------------------------------+
//| Obtém a quantidade especificada de ticks no array               |
//+------------------------------------------------------------------+
bool GetTicksToArray(const string symbolconst uint countMqlTick &array[])
  {
//--- informamos sobre o início do carregamento dos dados históricos
   PrintFormat("Requested %u ticks to get tick history for the symbol '%s'"countsymbol);
   
//--- fazemos 3 tentativas de obter ticks
   int attempts=0;
   while(attempts<3)
     {
 //--- medimos o tempo de início antes de obter ticks
      uint start=GetTickCount();
      
 //--- solicitamos a história de ticks desde 1970.01.01 00:00.001 (parâmetro from=1 ms)
      int received=CopyTicks(symbolarrayCOPY_TICKS_ALL1count);
      if(received!=-1)
        {
 //--- informamos sobre a quantidade de ticks e o tempo gasto
         PrintFormat("The tick history for the '%s' symbol is received in the amount of %u ticks in %d ms"symbolreceivedGetTickCount()-start);
         
 //--- se a história de ticks estiver sincronizada, o código de erro é zero - retornamos true
         if(GetLastError()==0)
            return(true);
 
         PrintFormat("%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d"
                     symbolreceivedGetTickCount()-startGetLastError());
        }
 //--- contamos as tentativas
      attempts++; 
 //--- pausa de 1 segundo aguardando a conclusão da sincronização da base de ticks
      Sleep(1000);
     }
//--- não foi possível copiar ticks em 3 tentativas
   return(false);
  }
//+------------------------------------------------------------------+ 
//| retorna a descrição do tick em formato string                    |
//+------------------------------------------------------------------+ 
string GetTickDescription(MqlTick &tick
  { 
   string desc=StringFormat("%s.%03u "TimeToString(tick.timeTIME_DATE|TIME_MINUTES|TIME_SECONDS),tick.time_msc%1000);
   
//--- verificamos os flags do tick
   bool buy_tick   = ((tick.flags &TICK_FLAG_BUY)   == TICK_FLAG_BUY); 
   bool sell_tick  = ((tick.flags &TICK_FLAG_SELL)  == TICK_FLAG_SELL); 
   bool ask_tick   = ((tick.flags &TICK_FLAG_ASK)   == TICK_FLAG_ASK); 
   bool bid_tick   = ((tick.flags &TICK_FLAG_BID)   == TICK_FLAG_BID); 
   bool last_tick  = ((tick.flags &TICK_FLAG_LAST)  == TICK_FLAG_LAST); 
   bool volume_tick= ((tick.flags &TICK_FLAG_VOLUME)== TICK_FLAG_VOLUME); 
   
//--- verificamos primeiro os flags de negociação do tick (para CustomTicksAdd() não há)
   if(buy_tick || sell_tick
     { 
      //--- formatamos a saída para um tick de negociação
      desc += (buy_tick ? StringFormat("Buy Tick: Last=%G Volume=%d "tick.lasttick.volume)  : ""); 
      desc += (sell_tickStringFormat("Sell Tick: Last=%G Volume=%d ",tick.lasttick.volume) : ""); 
      desc += (ask_tick ? StringFormat("Ask=%G "tick.ask) : ""); 
      desc += (bid_tick ? StringFormat("Bid=%G "tick.ask) : ""); 
      desc += "(Trade tick)"
     } 
   else 
     { 
      //--- para um tick de informação, formatamos a saída de forma um pouco diferente
      desc += (ask_tick   ? StringFormat("Ask=%G ",  tick.ask)    : ""); 
      desc += (bid_tick   ? StringFormat("Bid=%G ",  tick.ask)    : ""); 
      desc += (last_tick  ? StringFormat("Last=%G "tick.last)   : ""); 
      desc += (volume_tickStringFormat("Volume=%d ",tick.volume): ""); 
      desc += "(Info tick)"
     } 
//--- retornamos a descrição do tick
   return(desc); 
  } 

 

Veja também

CustomRatesDelete, CustomRatesUpdate, CustomTicksReplace, CopyTicks, CopyTicksRange