Hola Miguel Ángel, gracias por tu respuesta, he estado intentado hacer la función pero de momento no me sale, te dejo el código que llevo escrito para ver si puedes decirme donde estoy fallando. Gracias
int TicketPrueba() { int numero=0; int numOrden=0; //Recorremos todas las ordenes for(int i=OrdersTotal()-1; i>=0; i--) { //Chequear si es una orden de venta if(numOrden==OrderSelect(i)) { // llamada para MQL5 if(numOrden==ORDER_TYPE_SELL_LIMIT) { numero++; } else trade.SellLimit(Lotes,1.09000); } } return (numero); }
- OrderSelect devuelve un booleano (true o false) indicando si la selección de la orden fue exitosa. Compararlo con numOrden no tiene sentido.
- No usas OrderType() para verificar el tipo de la orden seleccionada, lo cual es fundamental para comprobar si es una orden SELL_LIMIT.
- Es ambiguo si el objetivo es contar órdenes SELL_LIMIT o ejecutar una nueva orden SellLimit. Ambos están mezclados en el bucle.
Hola Miguel Ángel, gracias por tu respuesta, he estado intentado hacer la función pero de momento no me sale, te dejo el código que llevo escrito para ver si puedes decirme donde estoy fallando. Gracias
int BuyOrders=0,SellOrders=0; for(int o=0;o<OrdersTotal();o++){ ulong Ticket=OrderGetTicket(i); if(OrderGetString(ORDER_SYMBOL)==_Symbol){ if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT){BuyOrders++;} if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_LIMIT){SellOrders++;} } }
Esto debería funcionar.
Efectivamente, funciona a la perfeccion. Bueno, he tenido que sustituir las "oes" del bucle por "ies" pero el resto del codigo hace lo que quería. Un millon de gracias Pedro.
Gracias a ti también @Miguel Angel Vico Alba .
Obtener precio de entrada de una posición concreta
Hola de nuevo chicos, tengo otro lío monumental en la cabeza.
Pongo el caso, hay 12 operaciones abiertas, todas son de venta. Y lógicamente cada una esta con un precio de entrada distinto. De esas 12 posiciones quiero obtener y guardar en una variable (double) el precio de apertura de una de esas operaciones. Concretamente la que tiene el quinto precio de apertura más alto. Y como dije antes guardar ese precio en una variable.
Le he dado vueltas a una función, modificandola mil veces, y probando mil cosas, dentro de mis escasos conocimientos, pero no lo consigo. Os pongo el codigo que me ha quedado por ultimo, a ver si por favor me pueden ayudar.
Muchas gracias.
double Precio12Pos() { double precios[11]; if (PositionsTotal() == 12) // Asegurar que hay 12 posiciones { for(int i=0;i<12;i++) { ulong Ticket=OrderGetTicket(i); if(OrderGetString(ORDER_SYMBOL)==_Symbol) { precios[i]=PositionGetDouble(POSITION_PRICE_OPEN,i); } } } return precios[4]; }
Un saludo
double Precio12Pos() { double precios[11]; if(PositionsTotal() == 12) { for(int i = 0; i < PositionsTotal(); i++) { if(PositionSelect(_Symbol)) { precios[i] = PositionGetDouble(POSITION_PRICE_OPEN); } } } ArraySort(precios); ArrayReverse(precios); return precios[4]; }
Si intentas usar directamente PositionGetDouble(POSITION_PRICE_OPEN, i), obtendrás un error porque no es la forma correcta en MQL5.
- Seleccionar la posición con PositionSelect().
- Obtener el valor de POSITION_PRICE_OPEN de la posición seleccionada, sin el índice ",i".
Utiliza la función ArraySort, que ordena la array en orden ascendente (menor a mayor), y luego inviertela con ArrayReverse para que de ese modo quede finalmente de mayor a menor.
Luego, accede al índice 4 para obtener el quinto precio más alto.
Si intentas usar directamente PositionGetDouble(POSITION_PRICE_OPEN, i), obtendrás un error porque no es la forma correcta en MQL5.
- Seleccionar la posición con PositionSelect().
- Obtener el valor de POSITION_PRICE_OPEN de la posición seleccionada, sin el índice ",i".
Utiliza la función ArraySort, que ordena la array en orden ascendente (menor a mayor), y luego inviertela con ArrayReverse para que de ese modo quede finalmente de mayor a menor.
Luego, accede al índice 4 para obtener el quinto precio más alto.
Es difícil saber qué pasa sin tener el código delante, pero te doy unos consejos:
- Mira siempre la pestaña Diario o Expertos para ver qué está ocurriendo (como mensajes de error o Prints).
- Coloca Prints en puntos clave del código para comprobar qué está pasando en cada parte. Esto ayuda mucho a depurar.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola chic@s.
Soy muy nuevo en esto de programar, y aunque en mql4 hacía algunas cositas, quiero empezar a realizarlas poco a poco en mql5, y ha cambiado mucho la forma de programar de uno a otro. Y como novato en esto, estoy atascado en lo que seguramente será una tontería, pero despues de leer varios articulos y ver videos no consigo encontrar la manera de hacerlo. El caso es que stoy intentando crear un codigo para que mire si tengo una orden sell limit, si la hay que no haga nada, pero si no la hay pues que ejecute una, segun condiciones. Pero no doy con la tecla. Pueden ayudarme por favor? Mil gracias