CustomTicksDelete

Löscht alle Ticks im angegebenen Zeitintervall aus der Preishistorie des nutzerdefinierten Symbols.

int  CustomTicksDelete(
   const string     symbol,            // Symbolname
   long             from_msc,          // von welchem Tag
   long             to_msc             // bis zu welchem Tag
   );

Parameter

symbol

[in]  Name des nutzerdefinierten Symbols.

from_msc

[in]  Zeit des ersten Ticks in der Preishistorie aus dem angegebenen Intervall, der gelöscht werden muss. Zeit in Millisekunden ab dem 01.01.1970.

to_msc

[in]  Zeit des letzten Ticks in der Preishistorie aus dem angegebenen Intervall, der gelöscht werden muss. Zeit in Millisekunden ab dem 01.01.1970.

Rückgabewert

Anzahl der gelöschten Balken oder -1 im Fehlerfall.

 

Beispiel:

//+------------------------------------------------------------------+
//|                                            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"     // Name des nutzerdefinierten Symbols
#define   CUSTOM_SYMBOL_PATH     "Forex"           // Name der Gruppe, in der das Symbol erstellt werden soll
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()          // Name des Symbols, das als Basis des nutzerdefinierten Symbols dienen soll
 
#define   DATATICKS_TO_COPY      UINT_MAX          // Anzahl der kopierten Ticks
#define   DATATICKS_TO_DELETE    10                // Anzahl der gelöschten Ticks
#defineDATATICKS_TO_PRINT     20                // Anzahl der an das Log gesendeten Ticks
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Abrufen des Fehlercodes beim Erstellen eines nutzerdefinierten Symbols
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- wenn der Fehlercode nicht 0 (erfolgreiche Symbolerstellung) und nicht 5304 (Symbol wurde bereits erstellt) ist - verlasse das Skript
   if(create!=0 && create!=5304)
      return;
 
//--- Abrufen der Tick-Daten des Standardsymbols in einem MqlTick-Array
   MqlTick array[]={};
   if(!GetTicksToArray(CUSTOM_SYMBOL_ORIGINDATATICKS_TO_COPYarray))
      return;
   
//--- Ausdruck der Zeit des ersten und des letzten empfangenen Ticks des Standardsymbols
   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);
               
//--- Ausdruck von DATATICKS_TO_PRINT letzten Ticks des Standardsymbols in das Log
   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]));
     }
   
//--- ein nutzerdefiniertes Symbol zum Fenster der Marktübersicht hinzufügen
   ResetLastError();
   if(!SymbolSelect(CUSTOM_SYMBOL_NAMEtrue))
     {
      Print("SymbolSelect() failed. Error "GetLastError());
      return;
     }
     
//--- Hinzufügen der Daten des Tick-Arrays zur Preishistorie des nutzerdefinierten Symbols
   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);
   
//--- Abrufen der neu hinzugefügten Tick-Daten des nutzerdefinierten Symbols in das MqlTick-Array
   Print("...");
   if(!GetTicksToArray(CUSTOM_SYMBOL_NAMEarray.Size(), array))
      return;
   
//--- Ausdruck der Zeit des ersten und letzten empfangenen Ticks des nutzerdefinierten Symbols
   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);
               
//--- Ausdruck von DATATICKS_TO_PRINT letzten Ticks des nutzerdefinierten Symbols in das Log
   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]));
     }
 
//--- Abrufen der Tick-Zeit in Millisekunden, ab der wir den Bereich der Ticks aus dem Verlauf löschen werden
   long time_from=array[total-DATATICKS_TO_DELETE-1].time_msc;
     
//--- Löschen von DATATICKS_TO_DELETE, den Bereich der letzten Ticks des nutzerdefinierten Symbols im 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);
   
//--- die neu geänderten nutzerdefinierten Symbol-Tick-Daten dem MqlTick-Array zuweisen
   Print("...");
   if(!GetTicksToArray(CUSTOM_SYMBOL_NAMEarray.Size(), array))
      return;
   
//--- Ausdruck der Zeit des ersten und letzten Ticks eines nutzerdefinierten Symbols des gelöschten Bereichs der Tick-Daten
   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);
               
//--- Ausdruck von DATATICKS_TO_PRINT letzten Ticks des nutzerdefinierten Symbols in das Log
   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]));
     }
 
//--- einen Hinweis zu den Tasten zur Beendigung des Skripts im Kommentar des Charts anzeigen
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
//--- warten, bis die Tasten „Esc“ oder „Entf“ gedrückt werden, um die Endlosschleife zu verlassen
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- beim Drücken von Entf das erstellte nutzerdefinierte Symbol und seine Daten löschen
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         //--- Balkendaten löschen
         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);
         
         //--- Tickdaten löschen
         deleted=CustomTicksDelete(CUSTOM_SYMBOL_NAME0LONG_MAX);
         if(deleted>0)
            PrintFormat("%d history ticks of the custom symbol '%s' were successfully deleted"deletedCUSTOM_SYMBOL_NAME);
         
         //--- Symbol löschen
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- Chart vor dem Ende löschen
   Comment("");
   /*
   Ergebnis:
   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)
   */
  }
//+------------------------------------------------------------------+
//| Nutzerdefiniertes Symbol erstellen, Fehlercode zurückgeben       |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- Definition des Namens eines Symbols, auf dem ein nutzerdefiniertes Symbol basieren soll.
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- Wenn das Erstellen eines nutzerdefinierten Symbols fehlgeschlagen ist und nicht der Fehler 5304 aufgetreten ist, wird es im Log gemeldet.
   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);
     }
//--- Erfolg
   return(error);
  }
//+------------------------------------------------------------------+
//| Nutzerdefiniertes Symbol entfernen                               |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- das Symbol aus dem Fenster der Marktübersicht ausblenden
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- Wenn das Löschen eines nutzerdefinierten Symbols fehlgeschlagen ist, wird das im Log gemeldet und „false“ zurückgegeben.
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- Erfolg
   return(true);
  }
//+------------------------------------------------------------------+
//| Abrufen der angegebenen Anzahl von Ticks im Array                |
//+------------------------------------------------------------------+
bool GetTicksToArray(const string symbolconst uint countMqlTick &array[])
  {
//--- Benachrichtigung über den Beginn des Ladens historischer Daten
   PrintFormat("Requested %u ticks to get tick history for the symbol '%s'"countsymbol);
   
//--- 3 Versuche, Ticks abzurufen
   int attempts=0;
   while(attempts<3)
     {
      //--- Startzeit vor Empfang der Ticks messen
      uint start=GetTickCount();
      
      //--- Anforderung der Tick-Historie seit 1970.01.01 00:00.001 (Parameter von=1 ms)
      int received=CopyTicks(symbolarrayCOPY_TICKS_ALL1count);
      if(received!=-1)
        {
         //--- Informationen über die Anzahl der Ticks und die verwendete Zeit anzeigen 
         PrintFormat("The tick history for the '%s' symbol is received in the amount of %u ticks in %d ms"symbolreceivedGetTickCount()-start);
         
         //--- Wenn die Tick-Historie synchronisiert ist, ist der Fehlercode gleich Null - return 'true'
         if(GetLastError()==0)
            return(true);
 
         PrintFormat("%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d"
                     symbolreceivedGetTickCount()-startGetLastError());
        }
      //--- Versuche zählen 
      attempts++; 
      //--- eine Pause von einer Sekunde, um auf das Ende der Synchronisierung der Tick-Datenbank zu warten 
      Sleep(1000);
     }
//--- Konnten die Ticks nach 3 Versuchen nicht kopiert werden:
   return(false);
  }
//+------------------------------------------------------------------+ 
//| gibt die String-Beschreibung eines Ticks zurück                  |
//+------------------------------------------------------------------+ 
string GetTickDescription(MqlTick &tick
  { 
   string desc=StringFormat("%s.%03u "TimeToString(tick.timeTIME_DATE|TIME_MINUTES|TIME_SECONDS),tick.time_msc%1000);
   
//--- Prüfen der Flags
   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); 
   
//--- zuerst den Tick auf die Handelsflags prüfen (es gibt keine für CustomTicksAdd())
   if(buy_tick || sell_tick
     { 
      //--- eine Ausgabe für einen Handelstick bilden 
      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 
     { 
      //--- die Ausgabe für einen Info-Tick etwas anders gestalten 
      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)"
     } 
//--- Tick-Beschreibung zurückgeben
   return(desc); 
  } 

 

Siehe auch

CustomRatesDelete, CustomRatesUpdate, CustomTicksReplace, CopyTicks, CopyTicksRange