En Forex hay 2 maneras de programar órdenes. Una es programarlas en el PC del usuario. Por ejemplo yo programo un EA para que abra una orden cuando llegue a cierto precio. Pero todo dentro de mi PC. La otra manera es programar las órdenes desde el servidor del bróker. Por ejemplo yo creo una orden pendiente para que abra una orden cuando llegue a cierto precio. Los dos ejemplos hacen lo mismo pero se ejecutan en diferentes lados.
La programación local tiene muchísimas más opciones como por ejemplo crear órdenes según un indicador, pero es más complicado programarlas. Programar órdenes en el servidor es muy muy sencillo, pero tiene muchísimas menos opciones. Básicamente lo único que uno puede hacer en el servidor es crear ordenes pendientes. No es que una sea mejor que otra, cada opción se debe utilizar según las circunstancias.
Para entender cómo se programan las operaciones lo primero es tener los conceptos bien claros.
- Orden de mercado: Es cuando se abre una posición de venta o compra. Esta se muestra en la grafica hasta que se cierra. Las órdenes de mercado se pueden abrir y cerrar manual y automáticamente.
- Orden pendiente: Es cuando se programa una orden de mercado cuando el precio llega a un nivel que nosotros indicamos.
- Solicitud de orden: Es un comando hecho por una persona o un programa para hacer alguna operación.
- Trade. Es cuando se modifica, abre o cierra una orden.
Las siguientes son las funciones que se utilizan para manejar operaciones comerciales.
- OrderSend () Para abrir ordenes de mercado y ordenes pendientes.
- OrderClose () y OrderCloseBy () Para cerrar órdenes de mercado;
- OrderDelete () Para eliminar ordenes pendientes.
- OrderModify () Para modificar ordenes hechas (stop lost y take profit) y ordenes pendientes.
El proceso de un trade.
Cuando un EA hace una petición, este se la pasa a MetaTrader para que la procese. MetaTrader analiza la petición y toma dos decisiones según su análisis. Envía la petición al servidor si todo está bien, o la rechaza si algo está mal. Si el EA hace una petición para abrir una posición en un precio que no existe, MetaTrader no envía la petición al servidor.
Si hay varios EA operando en diferentes graficas y un EA hace una operación, los otros EA no podrán realizar sus operaciones hasta que este EA termina la suya.
Con esta gráfica queda mas claro como es el proceso para hacer un trade.

Evento 0. El EA inicio.
Evento 1. El EA hace una petición comercial. Esta solicitud de ha pasado a MetaTrader. En este momento la pelota la tiene MetaTrader y el EA pausa su operación esperando recibir una respuesta.
Evento 2. Metatrader ha recibido el control, y tiene la información de la petición. Ahora la va analizar entre t2 y t3 para tomar una decisión.
Evento 3. Para ver los dos casos posibles, vamos a ver dos alternativas. Una petición aceptada y una petición rechazada. En t3 MetaTrader a tomado la decisión.
Alternativa 1. Si la petición ha sido rechazada, MetaTrader le devuelve el control al EA y le manda la información del error.
Evento 4. El EA ha recibido el control y reanuda su funcionamiento. Al mismo tiempo recibe el error de su solicitud. En este caso MetaTrader no se comunica nunca con el servidor.
Alternativa 2. Aca la solicitud es correcta y MetaTrader la envía al servidor. El transcurso del tiempo entre t3 y t5 depende de la velocidad en que se comuniquen MetaTrader y el Servidor. Entre mejor la conexión, menos tiempo entre este intervalo.
Evento 5. El servidor recibe la petición. MetaTrader y el EA se quedan a la espera de que el servidor envié una respuesta. La decisión que tome el servidor seria en t6. El intervalo de t5 y t6 depende del servidor. Si hay mucha actividad el en servidor esto se puede demorar un poco más de tiempo.
Evento 6. Si no han pasado grandes cambios en el mercado entre t1 y t6 la petición será ejecutada. Si el precio ha cambiado o la orden supera el margen de la cuanta, o pasa algún problema, el servidor rechaza la petición.
El rechazo por parte del servidor aunque MetaTrader haya permitido la operación es común. La mayoría de las peticiones son aceptadas. Sin embargo, en algunos casos la petición puede ser rechazada. Por esta razón es vital tener esto en cuenta cuando se programe el EA. Para que este pueda gestionar este tipo de errores y no cause un error grave a MetaTrader.
Sea cualquiera la decisión que tome el servidor, este enviara la información sobre la decisión a MetaTrader.
Evento 7. MetaTrader ha recibido la respuesta del servidor. Según la operación que se haya efectuado en el servidor, MetaTrader reflejara esos cambios. Si el servidor ha rechazado la operación, no se verá ningún cambio en MetaTrader.
Evento 8. MetaTrader ha terminado de reflejar los cambios y procede a pasarle el control al EA.
Evento 9. El EA reanuda su funcionamiento y sigue operando.
Hay que tener en cuenta que todo esto pasa en milésimas de segundo y casi parece inmediato, pero en el fondo están pasando todas estas cosas.
Mas info en ingles http://book.mql4.com/trading/common
