ChartSaveTemplate

Speichert die aktuelle Chart-Einstellungen in der Schablone mit dem angegebenen Namen.

bool  ChartSaveTemplate(
   long          chart_id,     // Chart ID
   const string  filename      // Dateiname für die Schablone
   );

Parameter

chart_id

[in]  Die ID des Charts. 0 bedeutet den aktuellen Chart.

filename

[in]  Dateiname um die Schablone zu speichern. Die Erweiterung ".tpl" wird an den Dateinamen automatisch hinzugefügt, so müssen Sie nicht es angeben. Die Schablone ist im Ordner Terminal_Ordner\Profiles\Templates\ gespeichert und kann auch für manuelle Anwendung im Terminal verwendet werden. Wenn eine Schablone mit diesem Namen bereits existiert, wird ihr Inhalt überschrieben werden.

Rückgabewert

Bei der erfolgreichen Anwendung der Schablone gibt die Funktion true zurück, anderenfalls gibt sie false zurück. Um die Information über Fehler zu erhalten, muss man die Funktion GetLastError() aufrufen.

Hinweis

In einer Schablone können Sie die Einstellungen des Charts mit allen darauf aufgesetzten Indikatoren und Grafiken speichern, damit sie auf ein anderer Chart zu anwenden.

Beispiel:

//+------------------------------------------------------------------+
//|                                       Test_ChartSaveTemplate.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//--- input parameters
input string               symbol="GBPUSD";  // Symbol des neuen Charts
input ENUM_TIMEFRAMES      period=PERIOD_H3// Timeframe des neuen Charts
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Zuerst Indikatoren auf den Chart aufsetzen
   int handle;
//--- Den Indikator zu nutzen vorbereiten
   if(!PrepareZigzag(NULL,0,handle)) return// Es hat nicht geklappt
//--- Den Indikator auf den aktuellen Chart aber einem separaten Fenster aufsetzen
   if(!ChartIndicatorAdd(0,1,handle))
     {
      PrintFormat("Fehler beim Aufsetzung von Indikator mit Handle=%d auf Chart %s/%s. Fehlercode ist %d",
                  _Symbol,
                  EnumToString(_Period),
                  handle,
                  GetLastError());
      //--- Das Programm vorzeitig beenden
      return;
     }
//--- Den Chart aktualisieren, im den Indikator zu sehen
   ChartRedraw();
//--- Hier finden wir zwei letzten Zick-Zack-Frakturen
   double two_values[];
   datetime two_times[];
   if(!GetLastTwoFractures(two_values,two_times,handle))
     {
      PrintFormat("Fehler beim Such der zwei letzten Zick-Zack-Frakturen im Indikator Zigzag!");
      //--- Das Programm vorzeitig beenden
      return;
     }
//--- Jetzt Standardabweichung Kanal aufsetzen
   string channel="StdDeviation Channel";
   if(!ObjectCreate(0,channel,OBJ_STDDEVCHANNEL,0,two_times[1],0))
     {
      PrintFormat("Objekt %s konnte nicht erstellt werden. Fehlercode %d",
                  EnumToString(OBJ_STDDEVCHANNEL),GetLastError());
      return;
     }
   else
     {
      //--- Der Kanal erstellt wurde, definieren wir den zweiten Punkt
      ObjectSetInteger(0,channel,OBJPROP_TIME,1,two_times[0]);
      //--- Tooltip für Kanal definieren
      ObjectSetString(0,channel,OBJPROP_TOOLTIP,"Demo from MQL5 Help");
      //--- Chart aktualisieren
      ChartRedraw();
     }
//--- Dies in einer Schablone speichern
   ChartSaveTemplate(0,"StdDevChannelOnZigzag");
//--- Ein neuer Chart öffnen und die Schablone darauf aufsetzen
   long new_chart=ChartOpen(symbol,period);
   //--- Tooltips für graphische Objekten entscheiden
   ChartSetInteger(new_chart,CHART_SHOW_OBJECT_DESCR,true);
   if(new_chart!=0)
     {
      //--- Die neue Schablone auf den Chart aufsetzen
      ChartApplyTemplate(new_chart,"StdDevChannelOnZigzag");
     }
   Sleep(10000);
  }
//+------------------------------------------------------------------+
//| Erzeugt Handle auf Zick-Zack, sorgt für Bereitschaft seinen Daten|
//+------------------------------------------------------------------+
bool PrepareZigzag(string sym,ENUM_TIMEFRAMES tf,int &h)
  {
   ResetLastError();
//--- Indikator Zigzag muss in Terminal_Angaben_Ordner\MQL5\Examples sein
   h=iCustom(sym,tf,"Examples\\Zigzag");
   if(h==INVALID_HANDLE)
     {
      PrintFormat("%s: Handle von Zigzag konnte nicht erstellt werden. Fehlercode %d",
                  __FUNCTION__,GetLastError());
      return false;
     }
//--- Bei der Erstellung eines Indokatorhandles, benötigt es Zeit um Werte zu berechnen
   int k=0; // Die Anzahl der Versuche für Warten der Berechnung des Indikators
//--- Auf die Berechnung in Zyklus warten, eine Pause von 50 Millisekunden machen, wenn die Berechnung noch nicht fertig ist
   while(BarsCalculated(h)<=0)
     {
      k++;
      //--- Die Anzahl der Versuche anzeigen
      PrintFormat("%s: k=%d",__FUNCTION__,k);
      //--- 50 Millisekunden warten, während der Indikator berechnet wird
      Sleep(50);
      //--- Wenn mehr als 100 Versuche gemacht worden, dann ist etwas falsch
      if(k>100)
        {
         //--- Problem melden
         PrintFormat("Indikator konnte nicht in %d Versuche berechnet werden!");
         //--- Problem melden
         return false;
        }
     }
//--- Alles ist fertig, der Indikator ist erstellt und die Werde sind berechnet
   return true;
 ;}
//+------------------------------------------------------------------+
//| Sucht für die letzten 2 Zick-Zack-Frakturen und setzt in Arrays  |
//+------------------------------------------------------------------+
bool GetLastTwoFractures(double &get_values[],datetime &get_times[],int handle)
  {
   double values[];         // Array für die Werte der Zick-Zack
   datetime times[];        // Array, um Zeit zu bekommen
   int size=100;            // Größe der Arrays
   ResetLastError();
//--- Letzten 100 Werte kopieren
   int copied=CopyBuffer(handle,0,0,size,values);
//--- Die Anzahl der kopierten Werte überprüfen
   if(copied<100)
     {
      PrintFormat("%s: %d Werte des Indikators mit Handle =%d konnte nicht kopiert werden. Fehlercode %d",
                  __FUNCTION__,size,handle,GetLastError());
      return false;
     }
//--- Reihenfolge der Zugriff auf das Array als in einer Zeitreihe definieren
   ArraySetAsSeries(values,true);
//--- Die Nummer der Bars mit Frakturen hier schreiben
   int positions[];
//--- Dimensionen der Arrays definieren
   ArrayResize(get_values,3); ArrayResize(get_times,3); ArrayResize(positions,3);
//--- Zähler
   int i=0,k=0;
//--- Start der Suche nach Frakturen
   while(i<100)
     {
      double v=values[i];
      //--- NULL-Werte interessieren uns hier nicht
      if(v!=0.0)
        {
         //--- Merken wir uns die Nummer des Bars
         positions[k]=i;
         //--- Merken wir uns den Wert des Zick-Zacks auf die Fraktur
         get_values[k]=values[i];
         PrintFormat("%s: Zigzag[%d]=%G",__FUNCTION__,i,values[i]);
         //--- Erhöhung des Zählers
         k++;
         //--- Wenn zwei Frakturen sind gefunden, brechen den Zyklus
         if(k>2) break;
        }
      i++;
     }
//--- Reihenfolge der Zugriff auf das Array als in einer Zeitreihe definieren
   ArraySetAsSeries(times,true);   ArraySetAsSeries(get_times,true);
   if(CopyTime(_Symbol,_Period,0,size,times)<=0)
     {
      PrintFormat("%s: %d Werte aus CopyTime() konnten nicht kopiert werden. Fehlercode %d",
                  __FUNCTION__,size,GetLastError());
      return false;
     }
//--- Finden die Öffnungzeit von Bars, an denen die 2 Frakturen sind
   get_times[0]=times[positions[1]];// Der vorletzte Wert ist als erster Fraktur geschrieben
   get_times[1]=times[positions[2]];// Dritter von Ende Wert ist als zweiter Fraktur geschrieben
   PrintFormat("%s: Erst=%s,  Zweit=%s",__FUNCTION__,TimeToString(get_times[1]),TimeToString(get_times[0]));
//--- Fertig
   return true;
  }

Sehen Sie auch

ChartApplyTemplate(), Ressourcen