[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 579

 
lottamer:

eh... por qué no se podría escribir así la condición para comprobar las órdenes abiertas:

si OrdersTotal() > 0

todo es claro y comprensible... sería...

Llevo una hora intentando averiguar cómo escribir esta condición...


¿Por qué no? Puede, pero se activará si hay órdenes abiertas o pendientes en cualquier símbolo.
 
rigonich:

¿Por qué no? Se puede, pero se activará si hay órdenes abiertas o pendientes en cualquier instrumento.


Me gustaría que funcionara: tengo una posición y una herramienta.

¡Pero no funciona!

Dice que hay un error en el código.

a este

---------------------------

int inicio()

{

//----

si OrdersTotal()>0

PlaySound ("alert.wav");

//----

return(0);

}

-----------------------------

¡¡¡da 8 errores!!!

 

//---------------------------

int start()

  {

//----

   if (OrdersTotal()>0)

PlaySound ("alert.wav");

//----

  }

 return(0);

 
//-----------------------------

¿Qué te parece esto?
 
BeerGod:

¿Qué te parece esto?


:)))))))))))))))))))

¡Una maravilla! Gracias

 
Desead:


Así que se llama a deinit cuando elimino un robot de un gráfico - no puedo seguir esta condición de ninguna otra manera..... probablemente sea más fácil escribir un script separado que elimine todos los robots pendientes restantes, no hay otra manera.

Por cierto, otra reflexión sobre el asunto:

Creo que he resuelto el problema de la eliminación de los pedidos pendientes. Determino la cantidad de órdenes "necesarias" (a eliminar) en una función separada, llamo a esta función y luego al while con la condición (Total>0), luego el ciclo de eliminación for(int i=Total-1;i<=0l; i--), nuevamente calculando lo"necesario" y el contador de intentos de eliminación con salida delwhile cuando se alcanza el nivel dado. De esta manera se borra todo.

Aquí puede producirse un bucle infinito en caso de que una de las órdenes desaparezca después del momento del recuento por cualquier motivo


¿Por qué no se puede hacer? Por ejemplo, crear una variable global a nivel de terminal, asignarle un valor y comprobar el inicio y cambiar el valor de esta variable a través de servicio -->variables globales antes de que se apague.
 
BeerGod:

Y así...


Y puedo preguntar, ¿qué pretenden con esto?

for(int i=0; i<TotalPedidos(); i++)

parece que están tratando de contar las posiciones abiertas usando el método de fuerza bruta...

 

¡¡¡Buenos días!!! No puedo encontrar una solución agradable a la situación. Esta es una configuración de orden típica. Pero si le doy cero a mi robot en los parámetros, es decir, sin stops ni takeprofits, nada funcionará.

 if(!srabotka){
           OrderSend (Symbol( ), OP_BUY, lot ,NormalizeDouble(Ask, Digits), 5, NormalizeDouble( Ask- (stop*Point),Digits),   NormalizeDouble( Ask+( 45*Point),Digits), NULL, 450, 0, CLR_NONE);
           int Error=GetLastError();if (Error==0){  
           Sleep(2000); RefreshRates(); 
           OrderSend (Symbol( ), OP_SELL,  lot ,NormalizeDouble(Bid, Digits), 5, NormalizeDouble( Bid+ (stop*Point),Digits), NormalizeDouble( Bid-( 45*Point),Digits), NULL, 450, 0, CLR_NONE); 
           Error=GetLastError();
           if (Error==0){  profit = NormalizeDouble( Ask+( 45*Point),Digits); //tsena=Ask; perenos = false;  
           srabotka= true; }}}
           
           if (Error!=0){ string errorcomment = "Ошибка открытия  ордера OP_BUY"  + " " + Symbol() +  " " + ErrorDescript(Error); 
            Print (errorcomment);}
 

También podemos poner un if e introducir una orden con ceros por segunda vez, pero es un poco engorroso.

 
lottamer:


¿Y puedo preguntar qué es lo que intentan hacer aquí?

for(int i=0; i<TotalPedidos(); i++)

parece que está tratando de contar las posiciones abiertas...


Pues bien, selecciona los pedidos según los parámetros especificados.

Por ejemplo, https://www.mql5.com/ru/forum/131859/page3#434221

Función NúmeroDePosiciones().

Esta función devuelve el número de posiciones abiertas en este momento. Una selección más precisa de las posiciones contadas se especifica mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. El valor por defecto "" significa cualquier instrumento de mercado. NULL significa el instrumento actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - identificador de posición, MagicNumber. El valor por defecto de -1 significa cualquier identificador.
  • //+----------------------------------------------------------------------------+
    //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
    //+----------------------------------------------------------------------------+
    //|  Версия   : 19.02.2008                                                     |
    //|  Описание : Возвращает количество позиций.                                 |
    //+----------------------------------------------------------------------------+
    //|  Параметры:                                                                |
    //|    sy - наименование инструмента   (""   - любой символ,                   |
    //|                                     NULL - текущий символ)                 |
    //|    op - операция                   (-1   - любая позиция)                  |
    //|    mn - MagicNumber                (-1   - любой магик)                    |
    //+----------------------------------------------------------------------------+
    int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
      int i, k=OrdersTotal(), kp=0;
    
      if (sy=="0") sy=Symbol();
      for (i=0; i<k; i++) {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
          if (OrderSymbol()==sy || sy=="") {
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
              if (op<0 || OrderType()==op) {
                if (mn<0 || OrderMagicNumber()==mn) kp++;
              }
            }
          }
        }
      }
      return(kp);
    }

 
lottamer:


¿Y puedo preguntar qué intentan hacer con esto?

for(int i=0; i<TotalPedidos(); i++)

parece que están tratando de contar las posiciones abiertas...

...Pero no te dejes llevar por tus sentimientos, sino remítete a las reglas. En este caso, el bucle está probando parámetros (en la "lista" de pedidos) que implican una variable entera i, y su valor se incrementa en 1 con cada iteración. Se está probando el número de pedido. :)))
 
BeerGod:

De esta manera, selecciona los pedidos según los parámetros dados.

Por ejemplo, https://www.mql5.com/ru/forum/131859/page3#434221

Función NúmeroDePosiciones().

Esta función devuelve el número de posiciones abiertas en este momento. Una selección más precisa de las posiciones a contar se especifica mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si se establece este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. El valor por defecto "" significa cualquier instrumento de mercado. NULL significa el instrumento actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - Identificador de posición, MagicNumber. El valor por defecto -1 significa cualquier identificador.


gracias... añadiré ese hilo del foro a mis marcadores. :))