El Magic Number de un Expert Advisor

IndicatoriNosu febrero 27, 2012 0 Comentarios
Compártelo: Facebook GoogleTwitterEmail

En versiones anteriores de Metatrader, cómo Metatrader 3, el manejo de posiciones era algo que estaba bastante limitado ya que existía el problema de distinguir posiciones abiertas por uno u otro Expert Advisor, incluso para distinguir las posiciones abiertas por un EA de las abiertas de forma manual por el trader. Este problema se fue solucionado en los programas escritos en MQL3 de maneras más o menos complicadas. Con la llegada de Metatrader 4 y su correspondiente versión de MQL (Metaquotes Language), MQL4, esta situación cambió radicalmente ya que la nueva plataforma contaba con una variedad de herramientas lo suficientemente flexibles como para permitir el manejo de todas las operaciones abiertas y órdenes pendientes de forma sencilla. Esta situación en Metatrader 5 se ha mantenido, cómo cabía esperar.

Entre las herramientas introducidas en MQL4 para el control de las posiciones y órdenes destaca el Magic Number, parámetro asociado a las órdenes del que voy a hablar hoy. Veamos que es el Magic Number.

¿Qué es el Magic Number?

El Magic Number es un número asociado a una orden que se especifica en el momento de su envío al broker o dealer y cuyo fin principal es identificar una determinada orden o posición respecto a otras presentes en la misma cuenta. Si miramos la documentación de MQL4 y vamos a la sección de la función OrderSend, podemos ver que el Magic Number es uno de los parámetros de la función (int magic):

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

En la documentación dice que el parámetro int magic es un número que se puede utilizar para identificar la orden.

¿Cómo funciona el MagicNumber?

Cómo hemos visto en su definición, el MagicNumber es un número que podemos asociar a una orden en el momento de su envío, por tanto, podemos dar un número único a una determinada orden, o a un grupo de ellas, de modo que podamos diferenciarlas.

Ejemplo de implementación de Magic Number en un Expert Advisor

En la vida real, un trader puede encontrarse con diferentes situaciones, todas ellas tienen como solución más fácil el uso del Magic Number. Por ejemplo, el trader combina en su cuenta su propia operatoria manual con uno o varios Expert Advisors. El o los EAs deberían manejar sus propias operaciones sin interferir en las operaciones que el trader realiza de forma manual ni con las operaciones que realiza otro EA activo en la cuenta. Una solución sencilla puede ser asignar un número único y diferente a todas las órdenes que abra un mismo Expert Advisor. El Magic Number debe ser diferente a cero, pues cero es el valor por defecto para todas las órdenes, lo que es lo mismo decir que si el Magic Number es cero, una orden no tiene Magic Number. De esta forma, las operaciones abiertas manualmente no tendrán MagicNumber y el grupo de operaciones abiertas por un mismo EA compartirán un mismo número identificador de modo que cada EA puede saber cuáles son las órdenes que debe manejar y cuáles no, este identificador es el MagicNumber.

Otra situación que se nos puede presentar es que tengamos varios Expert Advisors, con algoritmos diferentes, trabajando en Metatrader en la misma cuenta. Cada EA tiene que manejar sólo sus operaciones y no interferir con las operaciones que haya abierto otro EA ni con las que se hayan abierto de forma manual. La solución pasa también por el MagicNumber. Cada EA tendrá su propio Magic Number, diferente de un EA a otro. De este modo, cada EA puede reconocer sus propias operaciones.

La última situación en la que el Magic Number nos salva el trasero de forma fácil y sencilla es aquella en la que un mismo EA está operando en la misma cuenta, en diferentes timeframes del mismo o de distinto par de divisas. En esta situación se puede asociar un MagicNumber diferente a cada instancia del ExpertAdvisor. Por ejemplo, poner un Magic Number al EA en el timeframe 15 minutos del par EUR/USD y otro Magic Number diferente para el mismo EA operando en el par EUR/USD pero en timeframe 30 minutos. Incluso, con esta implementación del Magic Number se podrá tener el mismo EA trabajando en dos gráficos diferentes del mismo par de divisas y mismo timeframe pero con diferente configuración en cada gráfico. Por ejemplo, podríamos tener un EA basado en medias móviles operando en EUR/USD M15 con medias móviles exponenciales, y el mismo EA funcionando en otro gráfico de EUR/USD M15 con medias móviles simples.

//Declaramos e inicializamos la variable MagicNumber con el número que queramos
//lo ponemos como variable externa para se pueda cambiar desde las propiedades del EA
//sin tocar el codigo fuente
extern int MagicNumber = 95486254;
int start() {
    ......
    //si se verifican las condiciones para abrir una operacion de compra, la abrimos
    if( condicones_compra ) {
        OrderSend( Symbol(), OP_BUY, 1, ask,3,0,0, NULL, MagicNumber ,0, Blue );
    }

    //si se cumplen las condiciones de cierre de compra, procedemos
    if( condiciones_cierre_compra ){
        for ( int i = 0; i < OrdersTotal(); i++ ){
            if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) {

                //Si hay alguna operacion abierta, comprobamos el par de divisas, el tipo de operacion
                //y, para diferenciar las operaciones del EA de las demas, comprobamos tambien el MagicNumber
                //si todo se cumple, procedemos al cierre
               if( OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber ) {
                   OrderClose( OrderTicket(), 1, Bid, 3, Red );

               }
           }
       }
 
    ......
}

En el ejemplo anterior, al declarar la variable Magic Number, la variable que vamos a usar que contenga el Magic Number de las órdenes, como variable externa, podremos cambiarlo de forma manual al ejecutar un EA en la ventana de propiedades del mismo. Basta con poner un número, el que queramos, que sea diferente al que pongamos en otros EA y diferente al que pongamos en otras instancias del mismo EA que estemos utilizando en la misma cuenta.

Cómo ves, el MagicNumber es una solución sencilla para que cada instancia de un Expert Advisor reconozca y maneja únicamente sus propias operaciones. Nota como he dicho cada instancia de un Expert Advisor, y es que el Magic Number no sólo sirve para diferenciar las operaciones de un Expert Advisor a otro sino también de un mismo Expert Advisor trabajando en diferentes gráficos de la misma cuenta.

Mostrar Mas