Estimado qjol,
No entiendo muy bien lo que quieres decir, ¿podrías explicarlo? Gracias
en su código
if (bar3>1) OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);
está utilizando OrderTicket() y OrderLots() y 4 de estas funciones debe utilizar OrderSelect()
Como puede ver en la documentación:
Nota
El parámetro pool se ignora si el pedido se selecciona por el número de ticket. El número de ticket es un identificador único del pedido.
Para saber de qué lista se ha seleccionado la orden, hay que analizar su hora de cierre. Si la hora de cierre de la orden es igual a 0, la orden está abierta o pendiente y se toma de la lista de posiciones abiertas de la terminal.
Se puede distinguir una posición abierta de una orden pendiente por el tipo de orden. Si la hora de cierre de la orden no es igual a 0, la orden es una orden cerrada o una orden pendiente eliminada y fue seleccionada del historial del terminal. También se diferencian por el tipo de orden.
La función OrderSelect() copia los datos de la orden en el entorno del programa y todas las llamadas posteriores de OrderClosePrice(), OrderCloseTime(), OrderComment(), OrderCommission(), OrderExpiration(), OrderLots(), OrderMagicNumber() OrderOpenPrice(), OrderOpenTime(), OrderPrint(), OrderProfit(), OrderStopLoss(), OrderSwap(), OrderSymbol(), OrderTakeProfit(), OrderTicket(), OrderType() devuelven los datos, copiados anteriormente. Esto significa que en algunos casos los detalles de la orden (precio de apertura, niveles SL/TP o fecha de vencimiento) pueden cambiar y los datos se vuelven no reales. Se recomienda encarecidamente llamar a la función OrderSelect() antes de solicitar los datos de la orden.
Si utilizo el número de ticket y los lotes, no es necesario utilizar OrderSelect, ¿verdad? Sólo abro una orden a la vez, ¿puedo saber cómo obtener el número de ticket de la orden abierta?
Gracias de nuevo
Si utilizo el número de ticket y los lotes, no es necesario utilizar OrderSelect, ¿verdad? Sólo abro una orden a la vez, ¿puedo saber cómo obtener el número de ticket de la orden abierta?
Gracias de nuevo
La función OrderSend() devuelve el número de ticket si tiene éxito. Te sugiero que leas la sección de Libros de este sitio de principio a fin para entender mejor cómo usar MQL, así como consultar la documentación de referencia de cada función que uses para entender mejor qué parámetros usar y cuáles son los valores de retorno.
Queridos todos,
He insertado OrderSelect(), pero el OrderClose sigue sin funcionar, por favor, ayuda.
//+------------------------------------------------------------------+ //| chuale.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.abc.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=500; extern double Lots=0.1; extern double StopLoss=300; double bar1; double bar2; double bar3; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; int total=OrdersTotal(); int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; { bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100; bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100; bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100; if (bar2>1) { if(total<1) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green); OrderSelect(1,SELECT_BY_POS); if (bar3 <-1) OrderClose(OrderTicket(),Lots,Bid,3,Green); } if (bar2<-1) { if(total<1) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red); if ( bar3>1) OrderClose(OrderTicket(), Lots,Ask,3,Red); } } return(0); //--- return(0); } //+------------------------------------------------------------------+
Hola a todos,
Ahora inserto el ticket y los lotes en el OrderClose sin usar OrderTicket() y OrderLots() pero tampoco cierra la orden. Por favor, ayuda.
//+------------------------------------------------------------------+ //| chuale.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.abc.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=500; extern double Lots=0.1; extern double StopLoss=300; double bar1; double bar2; double bar3; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; int total=OrdersTotal(); int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; { bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100; bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100; bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100; if (bar2>1) { if(total<1) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green); if (bar3 <-1) OrderClose(ticket,Lots,Bid,3,Green); } if (bar2<-1) { if(total<1) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red); if ( bar3>1) OrderClose(ticket, Lots,Ask,3,Red); } } return(0); //--- return(0); } //+------------------------------------------------------------------+
Hola a todos,
Ahora inserto el ticket y los lotes en el OrderClose sin usar OrderTicket() y OrderLots() pero tampoco cierra la orden. Por favor, ayuda.
ticket es una variable local, por lo que en el próximo tick no tendrá el mismo valor
Poner fuera de las funciones para que sea Globalscope
double bar1; double bar2; double bar3; int ticket;
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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,
Tengo la siguiente codificación para mi EA, por favor ayúdeme por qué el OrderClose no es triggerred? ¿Necesito usar Order Select()? ¿Cuál es el propósito de OrderSelect()? Gracias.