Para abrir una posición hay que utilizar la función OrderSend(); La estructura de la función OrderSend() es la siguiente:
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
)
Vamos a explicar cada parte de la función OrderSend();
int OrderSend: Lo primero que vemos de esta función, es que devuelve un numero entero cuando se ejecuta. Si la orden se ejecuta exitosamente, devuelve el número de la orden. Viene a ser como el identificador único de esa orden con el que más adelante podremos modificar o cerrar esta orden. Si la orden es rechazada, la función devolverá -1. Para saber por qué se dio el error hay que utilizar la función GetLastError();.
Parámetros de OrderSend();
symbol: En este parámetro hay que colocar la divisa en la que queremos operar y tiene que ser un string. Por ejemplo, “EURUSD” “EURJPY” “USDJPY”. Pero es más fácil utilizar la función Symbol() que nos devuelve automáticamente la divisa donde está funcionando el EA.
cmd: Acá colocamos el tipo de operación que queremos efectuar. Hay unas constantes que simplifican eso, aunque también se pueden colocar los números directamente. Lo mejor es ver la tabla siguiente. Ver este link para que los conceptos queden mas claros.
Constante |
Valor |
Tipo de operacion |
OP_BUY |
0 |
Buy o compra |
OP_SELL |
1 |
Sell o venta |
OP_BUYLIMIT |
2 |
Orden pendiente BUY LIMIT |
OP_SELLLIMIT |
3 |
Orden pendiente SELL LIMIT |
OP_BUYSTOP |
4 |
Orden pendiente BUY STOP |
OP_SELLSTOP |
5 |
Orden pendiente SELL STOP |
volume: Es la cantidad de lotes con los que queremos operar.
price: Es el precio en el que vamos a comprar o vender o colocar una orden pendiente. Puede darse el caso que el precio cambio desde que se hace la petición hasta que se es aceptada. Si esto pasa la orden se rechaza. Pero para solucionar este problema hay una opción que es dar un rango de desviación del precio permitido.
slippage: slippage o desvió. Siguiendo con el parámetro anterior, “price”, uno tiene la opción de dar un rango de desviación del precio. Por ejemplo si el precio está en 1.561 y cambia un pip a 1.562 o a 1.560, uno puede dar un slippage de 1 pip para que acepte este rango de precios.
stoploss: Acá uno coloca el stop loss, ósea el precio donde uno quiere para la perdida y la posición entra en perdidas.
takeprofit: Acá uno coloca el limite o takeprofit. Ósea el precio donde uno quiere cerrar la posición en ganancia si la posición está dando beneficios.
comment: Esta no la entiendo bien. Creo que uno tiene la opción de colocar un comentario en la orden. Sea como sea, si no se coloca nada en esta opción no pasa nada, pues tiene parámetro predeterminado nulo.
magic: Decíamos que la función OrderSend() si es aceptada por el servidor, devuelve como una especie de numeró de identificación. Con el parámetro magic, pasa algo parecido. Uno puede colocar un número propio para identificar la orden. La idea es que sea mas fácil encontrar la identificación de una orden.
expiration: Acá uno puede colocar una fecha para que se cierre la posición automáticamente. Algunos broker no permiten esto. Si se coloca 0 o se deja en blanco que es lo mismo, no pasa nada y la posición solo se cierra cuando nosotros le indiquemos.
arrow_color: Acá indicamos el color de la flecha que indica donde se abrió la posición. Si no se coloca nada o se coloca CLR_NONE que es lo mismo, no se muestra la flecha. Eso entiendo de la traducción pero nunca lo he probado.
Veamos un Ejemplo:
int start()
{
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, Bid-15*Point, Bid+15*Point);
return; // Exit start()
}
- En el primer parámetro nos pide la divisa en la que vamos a operar. Para hacerlo más fácil colocamos la función Symbol() que nos devuelve la divisa donde está funcionando el EA.
- Luego nos pide el tipo de operación, y le decimos que queremos comprar.
- En el tercer parámetro nos dice los lotes que queremos utilizar. Colocamos 0.1.
- En el cuarto parámetro nos pregunta el precio a que queremos comprar. Para esto le colocamos la variable estándar Ask, que nos indica el precio a que se está vendiendo.
- En el quinto parámetro nos pregunta el rango de pips en el que es aceptable desviarse para hacer la compra. Le colocamos 3 pips.
- Sexto parámetro nos pregunta el StopLoss. Cuando le decimos Bid-15*Point le estamos diciendo que coloque el StopLoss 15 pips por debajo del precio de venta actual.
- Séptimo parámetro nos pide el Takeprofit. Diciendo Bid+15*Point colocamos el TakeProfit o limite 15 pips por arriba del precio de venta actual.
Cómo los últimos 4 parámetros ya tienen valores predefinidos, y son parámetros de menor importancia, podemos omitirlos.
Para ver mas info en ingles http://book.mql4.com/trading/ordersend