OnStart

Se llama solo en los scripts y servicios al suceder el evento Start. La función ha sido pensada para ejecutar una sola vez las acciones implementadas en el programa. Existen dos variantes de la función.

Versión con retorno del resultado

int  OnStart(void);

Valor retornado

Valor del tipo int mostrado en la pestaña "Diario de registro".

Después de finalizar el script en el diario de registro se creará una entrada del tipo "script nombre_del_script removed (result code N)", donde N es precisamente el valor que ha retornado la función OnStart().

Después de finalizar el servicio en el diario de registro del terminal se creará una entrada del tipo "service nombre_del_servicio stopped (result code N)", donde N es precisamente el valor que ha retornado la función OnStart().

Es prioritario el uso de la llamada de OnStart() con retorno del resultado de ejecución, ya que este método permite no solo ejecutar un script o servicio, sino también retornar el código de error u otra información útil para analizar el resultado de la ejecución del programa.

La versión sin retorno de resultado se ha dejado solo por compatibilidad con los códigos antiguos. No se recomienda su uso

void  OnStart(void);

Observación

OnStart() es la única función para procesar los eventos en los scripts y servicios, a estos programas no se envían otros eventos. A su vez, el evento Start no se envía a los expertos e indicadores personalizados.

Ejemplo de script:

//--- macros para trabajar con el color
#define XRGB(r,g,b)    (0xFF000000|(uchar(r)<<16)|(uchar(g)<<8)|uchar(b))
#define GETRGB(clr)    ((clr)&0xFFFFFF)
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- establecemos el color de la vela descendente
   Comment("Establecemos el color de la vela descendente"); 
   ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,GetRandomColor());
   ChartRedraw(); // actualizamos rápidamente el gráfico, sin esperar un nuevo tick
   Sleep(1000);   // hacemos una pausa de 1 segundo, para que podamos ver los cambios
//--- establecemos el color de la vela ascendente
   Comment("Establecemos el color de la vela ascendente"); 
   ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color del fondo
   Comment("Establecemos el color del fondo"); 
   ChartSetInteger(0,CHART_COLOR_BACKGROUND,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de la línea Ask
   Comment("Establecemos el color de la línea Ask"); 
   ChartSetInteger(0,CHART_COLOR_ASK,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de la línea Bid
   Comment("Establecemos el color de la línea Bid"); 
   ChartSetInteger(0,CHART_COLOR_BID,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);    
//--- establecemos el color de la barra descendente y los cantos de la vela descendente
   Comment("Establecemos el color de la barra descendente y los cantos de la vela descendente"); 
   ChartSetInteger(0,CHART_COLOR_CHART_DOWN,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color del gráfico y las velas del tipo "Doji"
   Comment("Establecemos el color del gráfico y las velas del tipo "Doji"); 
   ChartSetInteger(0,CHART_COLOR_CHART_LINE,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de la barra ascendente y los cantos de la vela ascendente  
   Comment("Establecemos el color de la barra ascendente y los cantos de la vela ascendente); 
   ChartSetInteger(0,CHART_COLOR_CHART_UP,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de los ejes, las escalas y la línea OHLC
   Comment("Establecemos el color de los ejes, las escalas y la línea OHLC); 
   ChartSetInteger(0,CHART_COLOR_FOREGROUND,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de la cuadrícula
   Comment("Establecemos el color de la cuadrícula"); 
   ChartSetInteger(0,CHART_COLOR_GRID,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color del precio Last
   Comment("Establecemos el color del precio Last"); 
   ChartSetInteger(0,CHART_COLOR_LAST,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de los niveles de Stop Loss y Take Profit
   Comment("Establecemos el color de los niveles de Stop Loss y Take Profit"); 
   ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,GetRandomColor());
   ChartRedraw(); 
   Sleep(1000);   
//--- establecemos el color de los volúmenes y los niveles de apertura de posiciones
   Comment("Establecemos el color de los volúmenes y los niveles de apertura de posiciones"); 
   ChartSetInteger(0,CHART_COLOR_VOLUME,GetRandomColor());
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| Retorna un color generado de forma aleatoria                     |
//+------------------------------------------------------------------+
color GetRandomColor()
  {
   color clr=(color)GETRGB(XRGB(rand()%255,rand()%255,rand()%255));
   return clr;
  }

Ver también

Funciones de procesamiento de eventos, Ejecución de programas, Eventos del terminal de cliente