[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 414

 
inoy:

El asesor no cerrará una orden a tiempo si hay otra orden en el símbolo abierta a una hora anterior a la propia orden del asesor.
orden. Si la orden de otra persona está abierta más tarde o si no hay otras órdenes, la función OrderClose funciona correctamente. Por favor, indique dónde está el error


El error es que sólo se toma la orden con índice 0 y no se busca entre las órdenes abiertas.
 
Roger:

el error es que simplemente se toma una orden con índice 0 en lugar de buscarla entre las órdenes abiertas.

Le pido perdón, pero la situación es similar en esa variante.
//---- закрытие позиции
if(OrdersTotal() > 0)
for(int i=OrdersTotal();i>=0;i--)
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber)
if ( iTime(Symbol(),0,0) >= OrderOpenTime()+SecondsClose )
if (OrderType() == OP_BUY)
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);
¿Sería tan amable de proporcionar la solución correcta al problema?
 
Avelox:

Cómo emitir un pitido en un indicador a partir de la siguiente expresión:

si (num1 == 9) {
ObjectCreate(""+i, OBJ_TEXT, 0, Time[i+1],High[i+1]+10*Point );
ObjectSetText(""+i, ""+DoubleToStr(num1,0), 16, "Arial", RoyalBlue);

}

Si puedes ser más detallado que "Puedes usar OBJ_SICICOCI y mirar los detalles en la documentación de MQL4, ¡lo tiene todo!"

Yo mismo he conseguido resolver este problema:


ObjectCreate(""+i, OBJ_TEXT, 0, Time[i+1],High[i+1]+10*Point );
ObjectSetText(""+i, ""+DoubleToStr(num1,0), 18, "Arial", RoyalBlue);
PlaySound("havecall.wav"); }
 
inoy:

Le ruego que me disculpe, pero en ESTE escenario la situación es similar. ¿Sería tan amable de dar una solución adecuada al problema?

//---- закрытие позиции
if(OrdersTotal() > 0) 
{
  for(int i=OrdersTotal();i>=0;i--) 
  {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol()==Symbol()&& OrderMagicNumber() == MagicNumber) 
    {
      if ( iTime(Symbol(),0,0) >= OrderOpenTime()+SecondsClose ) 
      {
         if (OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);
         }
      }
   }
}
 

Bueno, también, reemplazar

for(int i=OrdersTotal();i>=0;i--) 

a

for(int i=OrdersTotal()-1;i>=0;i--) 


И еще, не понял, что за элемент в функции (подчеркнуто красным)?

OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),NormalizeDouble((Ask - Bid) * Point,Digits), DodgerBlue);

 
 for ( Expresión_1; ; Expresión_2) // Sin condición { // Corchete de apertura Bloque de operadores, // El cuerpo del bucle puede estar formado por ... que componen el cuerpo del bucle //... de varios operadores } // Corchete de cierre

¿Puedes decirme cuál es la condición para salir de un bucle como éste? O un bucle como este

 For ( ; ; ) // Ausente. Expresión y condición { // Corchete de apertura Un bloque de operadores, // Un cuerpo de bucle puede consistir en // ... varios operadores que conforman el cuerpo del bucle } // Corchete de cierre
 
VladimirR:

¿Puede decirme cuál es la condición para salir de dicho ciclo? O uno de estos


romper
 

Vinin, Roger - gracias, me ha ayudado.

NormalizeDouble((Ask - Bid) * Point,Digits) es el deslizamiento para símbolos con grandes spreads, por ejemplo, XAUUSD.

 
inoy:

Vinin, Roger - gracias, me ha ayudado.

NormalizeDouble((Ask - Bid) * Point,Digits) es el deslizamiento para símbolos con grandes spreads, por ejemplo, XAUUSD.


Entonces, ¿te imaginas que es 0? En primer lugar, el deslizamiento debe ser un número entero positivo; en segundo lugar, la diferencia debe dividirse por Punto, no multiplicarse.
 
Señores, ¿cómo "entrenar" a un EA para que no opere de noche? Es decir, la hora del terminal entre las 23 y las 02 horas (GMT)... Hour()>=2&Hour()<=23 no ayudó...
Razón de la queja: