Chart ID

 

Hallo Leute,


mal eine Frage zur Chart ID. Das aktuelle Fenster hat ja in MQL5 immer die Chart ID 0, das ist eigentlich nur eine Vereinfachung, damit sich MQ nicht die Arbeit machen muss, die Chart ID zu suchen.

Wenn man die ChartId wissen will

ChartID();

bekommt man ja eine 10 Stellige Zahl zurück.

in der Doku bezieht sich ja alles auf die ChartID = 0. auch vernünftig, weil 99% der sachen will ich auf den Chart machen.


Gibts auch eine Möglichkeit die Chart ID eines anderen Charts auszulesen?

Also ein Beispiel:

Ich habe den Chart EURUSD offen. der hat die ChartID = 0 für das arbeiten mit MQL5

jetzt stehe ich in diesen Chart und will z.B einen Chart schliessen, das geht ja ganz einfach über

ChartClose(#);

wenn ich Chart ID 0 eingebe, ganz einfach, ich schliesse den aktuellen chart.


aber wie finde ich die ChartID von einem anderen offenen Chart?


danke

 

Amando,

ganz einfach: Nimm die Documentation (von oben) und klick drauf, dann klickst Du unten links auf "MQL5 Funktionenliste" und dann kannst Du mit Ctrl+F (Windows suche) nach "Chart" suchen (eventuell wiederholen bis Du zu einer Funktion landest). Bei mir ist die erste "ChartApplyTemplate" wenn Du draufklickst siehst Du links alle Funktionen die mit Chart anfangen.

Das ist (auch für mich!) der schnellste Weg, Funktionen zu finden, die etwas Bestimmtes tun sollen und deren Namen ich nicht kenne, oder mit dem ich nach Schlagworten suche, die in den Kurzbeschreibungen stehen.

Leider hat ist diese Doku noch nicht auf den neusten Stand - aber kommt sicherlich, wenn sich die Update-Flut gelegt hat!

Dokumentation zu MQL5: MQL5 Funktionenliste
Dokumentation zu MQL5: MQL5 Funktionenliste
  • www.mql5.com
Fügt Daten aus einem Array vom Typ MqlTick in die Preishistorie eines benutzerdefinierten Symbols hinzu. Das benutzerdefinierte Symbol muss im Fenster MarketWatch (Marktübersicht) ausgewählt werden Liest aus der Datei des Typs CSV die Zeile eines der Formate: "YYYY.MM.DD HH:MI:SS", "YYYY.MM.DD" oder "HH:MI:SS" - und wandelt sie...
 
Carl Schreiber:

Amando,

ganz einfach: Nimm die Documentation (von oben) und klick drauf, dann klickst Du unten links auf "MQL5 Funktionenliste" und dann kannst Du mit Ctrl+F (Windows suche) nach "Chart" suchen (eventuell wiederholen bis Du zu einer Funktion landest). Bei mir ist die erste "ChartApplyTemplate" wenn Du draufklickst siehst Du links alle Funktionen die mit Chart anfangen.

Das ist (auch für mich!) der schnellste Weg, Funktionen zu finden, die etwas Bestimmtes tun sollen und deren Namen ich nicht kenne, oder mit dem ich nach Schlagworten suche, die in den Kurzbeschreibungen stehen.

Leider hat ist diese Doku noch nicht auf den neusten Stand - aber kommt sicherlich, wenn sich die Update-Flut gelegt hat!

Danke Carl, das kenn ich, schau ich täglich nach dort, gerne in englisch weil die deutsche übersetzung grauenhaft ist.

aber dort gibts keine Lösung für das, weil alle funktionen wollen die chart id

 
amando:

Danke Carl, das kenn ich, schau ich täglich nach dort, gerne in englisch weil die deutsche übersetzung grauenhaft ist.

aber dort gibts keine Lösung für das, weil alle funktionen wollen die chart id

Probier mal diese Funktion. Du öffnest einen Chart über eine Funktion.

Rückgabewert ist die ID des neuen Charts

long  ChartOpen(
   string           symbol,     // Symbolname
   ENUM_TIMEFRAMES  period      // Periode
   );
 
//+------------------------------------------------------------------+
//|                                                    ChartOpen.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long newChartID = ChartOpen("EURUSD", PERIOD_H1);
   Print(newChartID);
  }
//+------------------------------------------------------------------+


 

Schau dir dieses Script an und iteriere durch alle Charts. Hier wird zv SILVER ausgegrenzt.

#property description "Aktuelles Template wird unter dem Namen 'LastApplied.tpl' gespeichert"
#property description "und auf alle offenen Charts angewendet"

string ProgName = MQLInfoString(MQL_PROGRAM_NAME);    // Name des Scripts (für MessageBox)
string TmplName = "LastApplied";                      // unter diesem Namen wird die aktuelle Einstellung gespeichert, wird immer kommentarlos überschrieben

void OnStart()
{
   //ENUM_TIMEFRAMES initPeriod  = _Period;                                  // Timeframe des aktuellen Charts merken
   long            initScale   = ChartGetInteger(ChartID(),CHART_SCALE);   // scale des aktuellen Charts merken
   long            initChartID = ChartID();                                // aktueller Chart
   long            currChartID = ChartFirst();                             // Schleifenvariable über alle Charts

   ObjectsDeleteAll(initChartID);                                          // delete all useless objects

   if(!ChartSaveTemplate(initChartID,TmplName))                            // hier wird die aktuelle Einstellung in Datei geschrieben
      {
         PlaySound("alert");
         MessageBox("*ERROR* ChartSaveTemplate: "+TmplName,ProgName,MB_ICONERROR);
         return;                                                           // exit here
      }
      
   while(currChartID>=0)                                                   // Schleife über alle Charts
      {
         if(currChartID!=initChartID)                                      // nicht für Chart in dem das Script gestartet wurde
            if(ChartSymbol(currChartID)!="SILVER")                         // nicht für Chart "SILVER". Diese Zeile kann enfernt werden, ist nur für meine Anwendung
               if(!ChartApplyTemplate(currChartID, TmplName))              // Template anwenden
                  {
                     MessageBox("*ERROR* ChartApplyTemplate: "+TmplName,ProgName,MB_ICONERROR);
                     return;                                               // exit here
                  }
      currChartID=ChartNext(currChartID);
      }

//   currChartID = ChartFirst();                                             // reset auf ersten Chart
//   while(currChartID>=0)                                                   // nochmal Schleife über alle Charts
//      {
//         if(currChartID!=initChartID)                                      // nicht für Chart in dem das Script gestartet wurde
//            {
//               if(ChartPeriod(currChartID)!=initPeriod)                    // Timeframe einstellen
//                  ChartSetSymbolPeriod(currChartID,ChartSymbol(currChartID),initPeriod);  
//
//               if(ChartGetInteger(currChartID,CHART_SCALE)!=initScale)     // Scale einstellen
//                  ChartSetInteger(currChartID,CHART_SCALE,  initScale);
//            }
//         currChartID=ChartNext(currChartID);
//      }
   
   PlaySound("ok");                                                        // akustisch bemerkbar machen
}
 
Danke christian und Otto, so gehts 
Grund der Beschwerde: