#property description "Der Expert Advisor zeigt, wie eine Reihe von Screenshots des aktuellen Charts" #property description "mit der ChartScreenShot()-Funktion zu erstellen. Für die Bequemlichkeit wird der Dateiname auch" #property description "auf den Chart angezeigt. Die Höhe und Breite von Bildern wird durch Makros definiert. " #define WIDTH 800 // Breite des Bildes für Anruf von ChartScreenShot() #define HEIGHT 600 // Höhe des Bildes für Anruf von ChartScreenShot() //--- input parameters input int pictures=5; // Anzahl der Bilder in Serie int mode=-1; // -1 bedeutet Einrückung an den rechten Rand des Chart, 1 - an den linken Rand int bars_shift=300;// Anzahl der Balken beim Scroll des Charts mit ChartNavigate()-Funktion //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- Autoscroll des Charts deaktivieren ChartSetInteger(0,CHART_AUTOSCROLL,false); //--- Einrückung des rechten Rands des Charts angeben ChartSetInteger(0,CHART_SHIFT,true); //--- Darstellung des Charts in Form von Kerzendiagramm ChartSetInteger(0,CHART_MODE,CHART_CANDLES); //--- Print("Vorbereitung des Expert Advisors für die Arbeit ist abgeschlossen"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- Ausgabe der Name der Funktion, der Zeit des Aufrufs und Ereignis-ID Print(__FUNCTION__,TimeCurrent()," id=",id," mode=",mode); //--- Verarbeitung von Ereignissen CHARTEVENT_CLICK ("Klick mit der Maus auf dem Chart") if(id==CHARTEVENT_CLICK) { //--- Erste Einrückung vom Rand des Charts int pos=0; //--- Arbeit mit dem linken Rand des Charts if(mode>0) { //--- Den Chart nach den linken Rand scrollen ChartNavigate(0,CHART_BEGIN,pos); for(int i=0;i<pictures;i++) { //--- Die Beschriftung auf dem Chart und den Dateinamen vorbereiten string name="ChartScreenShot"+"CHART_BEGIN"+string(pos)+".gif"; //--- Ausgabe des Namen auf dem Chart als Kommentar Comment(name); //--- Den Screenschot in der Datei in Terminal_Verzeichnis\MQL5\Files\ speichern if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_LEFT)) Print("Gespeciherter Screenshot ",name); //--- pos+=bars_shift; //--- Gib dem Benutzer Zeit, um auf neuen Abschnitt des Chart zu sehen Sleep(3000); //--- Den Chart von der aktuellen Position um bars_shift nach rechts scrollen ChartNavigate(0,CHART_CURRENT_POS,bars_shift); } //--- Regimewechsel auf die gegenüberliegende mode*=-1; } else // Arbeit mit dem rechten Rand des Charts { //--- Den Chart nach den rechten Rand scrollen ChartNavigate(0,CHART_END,pos); for(int i=0;i<pictures;i++) { //--- Die Beschriftung auf dem Chart und den Dateinamen vorbereiten string name="ChartScreenShot"+"CHART_END"+string(pos)+".gif"; //--- Ausgabe des Namen auf dem Chart als Kommentar Comment(name); //--- Den Screenschot in der Datei in Terminal_Verzeichnis\MQL5\Files\ speichern if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_RIGHT)) Print("Gespeciherter Screenshot ",name); //--- pos+=bars_shift; //--- Gib dem Benutzer Zeit, um auf neuen Abschnitt des Chart zu sehen Sleep(3000); //--- Den Chart von der aktuellen Position um bars_shift nach rechts scrollen ChartNavigate(0,CHART_CURRENT_POS,-bars_shift); } //--- Regimewechsel auf die gegenüberliegende mode*=-1; } } // Ende der Erarbeitung von CHARTEVENT_CLICK //--- Ende von Handler OnChartEvent() } |