#property description "El Asesor Experto muestra cómo se crea una serie de screenshots del gráfico actual" #property description "utilizando la función ChartScreenShot(). Para que sea más cómodo, el nombre del archivo también" #property description "se visualiza en el gráfico. Las macros determinan el alto y el ancho de las imágenes." #define WIDTH 800 // ancho de la imagen para llamar a ChartScreenShot() #define HEIGHT 600 // alto de la imagen para llamar a ChartScreenShot() //--- input parameters input int pictures=5; // número de imágenes en la serie int mode=-1; // -1 significa el desplazamiento hacia el lado derecho del gráfico, 1 - hacia el lado izquierdo int bars_shift=300;// número de barras durante el desplazamiento del gráfico con la función ChartNavigate() //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- desactivamos el desplazamiento automático del gráfico ChartSetInteger(0,CHART_AUTOSCROLL,false); //--- establecemos la sangría del borde derecho del gráfico ChartSetInteger(0,CHART_SHIFT,true); //--- mostramos el gráfico como una secuencia de velas japonesas ChartSetInteger(0,CHART_MODE,CHART_CANDLES); //--- Print("La preparación del EA para el trabajo está finalizada"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- mostrar el nombre de la función, hora de la llamada y el identificador del evento Print(__FUNCTION__,TimeCurrent()," id=",id," mode=",mode); //--- procesamiento del evento CHARTEVENT_CLICK ("Clic del ratón en el gráfico") if(id==CHARTEVENT_CLICK) { //--- desplazamiento inicial del borde del gráfico int pos=0; //--- modo de trabajo con el borde izquierdo del gráfico if(mode>0) { //--- desplazamos el gráfico hacia el borde izquierdo ChartNavigate(0,CHART_BEGIN,pos); for(int i=0;i<pictures;i++) { //--- preparamos el texto a mostrar en el gráfico y el nombre para el archivo string name="ChartScreenShot"+"CHART_BEGIN"+string(pos)+".gif"; //--- mostramos el nombre en el gráfico en forma del comentario Comment(name); //--- guardamos el screenshot del gráfico en la carpeta directorio_del_terminal\MQL5\Files\ if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_LEFT)) Print("Hemos guardado el screenshot ",name); //--- pos+=bars_shift; //--- dejamos al usuario tiempo para que mire una nueva área del gráfico Sleep(3000); //--- desplazamos el gráfico a bars_shift a la derecha de su posición actual ChartNavigate(0,CHART_CURRENT_POS,bars_shift); } //--- cambio del modo al opuesto mode*=-1; } else // modo de trabajo con el borde derecho del gráfico { //--- desplazamos el gráfico hacia el borde derecho ChartNavigate(0,CHART_END,pos); for(int i=0;i<pictures;i++) { //--- preparamos el texto a mostrar en el gráfico y el nombre para el archivo string name="ChartScreenShot"+"CHART_END"+string(pos)+".gif"; //--- mostramos el nombre en el gráfico en forma del comentario Comment(name); //--- guardamos el screenshot del gráfico en la carpeta directorio_del_terminal\MQL5\Files\ if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_RIGHT)) Print("Hemos guardado el screenshot ",name); //--- pos+=bars_shift; //--- dejamos al usuario tiempo para que mire una nueva área del gráfico Sleep(3000); //--- desplazamos el gráfico a bars_shift a la derecha de su posición actual ChartNavigate(0,CHART_CURRENT_POS,-bars_shift); } //--- cambio del modo al opuesto mode*=-1; } } // fin del procesamiento del evento CHARTEVENT_CLICK //--- fin del manejador OnChartEvent() } |