Skripte: Die Umschaltung der Charts

 

Die Umschaltung der Charts:

Der Skript schaltet alle offenen Charts durch ein bestimmtes Intervall um. Man kann auch nur die Charts der bestimmten Symbole ausführen.

Autor: Vladimir Karputov

 
Guten Abend, ist es möglich, das Skript in einer Schleife laufen zu lassen? So dass nach dem Ende der offenen Charts würde es wieder von vorne beginnen, anstatt die Arbeit zu beenden.
 
Skyline Real:
Guten Abend, ist es möglich, das Skript in einer Schleife laufen zu lassen? So dass es nach dem Ende der offenen Charts wieder von vorne beginnt, anstatt die Arbeit zu beenden.
Im Prinzip ist das möglich. Aber wie viele Zyklen sollten gemacht werden? Oder wie ein Kaleidoskop - den ganzen Tag lang?
 
Karputov Vladimir:
Im Prinzip können Sie das. Wie viele Zyklen müssen Sie machen? Oder wie ein Kaleidoskop - den ganzen Tag lang?
Nun, ein ganzer Tag wäre besser.....
 
Skyline Real:
Nun, ein ganzer Tag wäre besser.....

In diesem Fall brauchen Sie einen EA, in dem Sie das gesamte Karussell in OnTimer() aufrufen. Ich werde darüber nachdenken.

Hinzugefügt. Der Text wurde korrigiert.

 

Wie auch immer, hier ist der Expert Advisor. Denken Sie daran, dass es ein wenig problematisch ist, den Expert Advisor auszuschalten/zu entladen, wenn unendlich viele Charts angezeigt werden :) . Deshalb möchte ich Sie daran erinnern, dass dieser Expert Advisor im Fenster "Navigator" angezeigt wird:

Navigator"-Fenster mit funktionierendem Expert Advisor

Ah, hier ist der Expert Advisor selbst:

//+------------------------------------------------------------------+
//|Chart_bringing_to_top.mq5 |
//|Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property description "The indicator switches all open charts after a certain interval."
//--- Eingabeparameter
//--- Eingabeparameter
input uchar Seconds=3;              // Intervall // Intervall
//---
bool        IsCicle=false;          // true - in cicle // true - in cicle
//+------------------------------------------------------------------+
//| Experteninitialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Zeitschaltuhr erstellen
   if(Seconds<3)
     {
      MessageBox("Interval must be greater than 3 seconds");
      EventSetTimer(3);
     }
   else
      EventSetTimer(Seconds);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Zeitgeber zerstören
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer-Funktion|
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   if(IsCicle)
      return;
   IsCicle=true;
//---
   uchar temp_second;
   if(Seconds<3)
      temp_second=3;
// Variablen für Diagramm-ID
   long currChart,prevChart=ChartFirst();
//--- Das erste Diagramm anzeigen
//--- Das erste Diagramm anzeigen
   ChartBringToTop(prevChart);
   Sleep((int)MathAbs(temp_second*1000));
   int i=0,limit=100;
//Drucken("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart);
// Wir haben wahrscheinlich nicht mehr als 100 offene Graphen
// Wir haben sicherlich nicht mehr als 100 offene Karten
   while(i<limit)// 
     {
      // Auf der Grundlage des vorherigen Diagramms ergibt sich ein neues Diagramm
      // Abrufen der neuen Diagramm-ID unter Verwendung der vorherigen Diagramm-ID
      currChart=ChartNext(prevChart);
      if(currChart<0) break;  // Haben das Ende der Diagrammliste erreicht // Haben das Ende der Diagrammliste erreicht
                              //Drucken(i," ",ChartSymbol(currChart)," ID =",currChart);
      ChartBringToTop(currChart);
      Sleep((int)MathAbs(temp_second*1000));
      // Merken Sie sich die ID des aktuellen Diagramms für ChartNext()
      // Speichern wir die aktuelle Diagramm-ID für die Funktion ChartNext()
      prevChart=currChart;
      // Vergessen wir nicht, den Zähler zu erhöhen
      // Vergessen Sie nicht, den Zähler zu erhöhen
      i++;
     }
   IsCicle=false;
  }
//+------------------------------------------------------------------+
//| Senden Sie einen Befehl an das Terminal, um das Diagramm über allen anderen Diagrammen anzuzeigen.
//| Sendet den Befehl an das Terminal, um das Diagramm über allen anderen anzuzeigen.
//+------------------------------------------------------------------+
bool ChartBringToTop(const long chart_ID=0)
  {
//--- den Fehlerwert zurücksetzen
   ResetLastError();
//--- das Diagramm über allen anderen anzeigen
   if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true))
     {
      //--- Ausgabe der Fehlermeldung in das "Experten"-Protokoll.
      Print(__FUNCTION__+", Error Code = ",GetLastError());
      return(false);
     }
   ChartRedraw(chart_ID);
//--- erfolgreiche Ausführung
   return(true);
  }
//+------------------------------------------------------------------+
Dateien:
 
Ich danke Ihnen für Ihre Schnelligkeit. Aber der Expert Advisor funktioniert nicht richtig. Wenn mehr als zwei Charts geöffnet sind, springt der Expert Advisor vom ersten zum letzten Chart und überspringt den Rest dazwischen. Und es gibt keinen Übergang vom letzten zum 1. Chart, d.h. das Karussell funktioniert nicht.
 
Skyline Real:
Ich danke Ihnen für Ihre Schnelligkeit. Aber der Expert Advisor funktioniert nicht richtig. Wenn mehr als zwei Charts geöffnet sind, springt der Expert Advisor vom ersten zum letzten Chart und überspringt den Rest dazwischen. Und es gibt keinen Übergang vom letzten zum ersten Chart, d.h. das Karussell funktioniert nicht.
Das Terminal speichert intern die Reihenfolge der geöffneten Karten. Und wenn Sie während der Arbeit die Diagramme umstellen, ändert das nichts an der internen Buchhaltung. Führen Sie ein Experiment durch: Schließen Sie alle Charts, öffnen Sie fünf neue Charts und legen Sie den Expert Advisor auf Chart Nummer 3.
 
Karputov Vladimir:
Das Terminal führt eine eigene interne Buchhaltung über die Reihenfolge der geöffneten Diagramme. Wenn Sie die Charts während der Arbeit umstellen, wird die interne Buchhaltung nicht verändert. Machen Sie ein Experiment: Schließen Sie alle Charts, öffnen Sie fünf neue und legen Sie den Expert Advisor auf Chart Nummer 3.

Ich habe es überprüft, alles ist gleich geblieben. Er wechselt vom 3. zum letzten Chart und hält dann an. Er schaltet nicht vom letzten zum ersten um, es gibt kein Karussell.

Ich weiß nicht, ob es einen Einfluss hat - ich habe mt4. Ich habe die Datei in mt4 umbenannt und eine Kompilierung vorgenommen. Das frühere Skript schaltet korrekt....

 

EA Version 1.01. Ein Fehler wurde behoben und der Variablenname ersetzt. Anstelle von

Seconds

hat die Variable nun den Namen

Seconds_
da in MQL4 das Wort Seconds nicht als Variablenname verwendet werden kann. (Hilfe zu Seconds).


Der Expert Advisor kann sowohl in MetaTrader 5 als auch in MetaTrader 4 verwendet werden (für MT4 müssen Sie nur die Datei umbenennen).

Seconds - Документация на MQL4
  • docs.mql4.com
Seconds - Документация на MQL4
Dateien:
 

Ein Video, wie der EA funktioniert - ein Kaleidoskop, das alle verfügbaren Charts im Endlosmodus umschaltet: