Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 137

 

Y luego también tendrá que hacer la salida de mensajes no por comentarios, sino por objetos, y de una manera más grande...

Una persona nunca aprenderá a pensar así por sí misma.

 
artmedia70:
Sólo hay que tener en cuenta que la variable se reinicializa al reiniciar. Así que este enfoque es aceptable para un probador, pero no para el comercio real.


Gracias por la información, ¿qué hacer entonces? ¿Debo escribir el valor en GV? O hay alguna otra opción para el comercio real...

 
ALXIMIKS:

Gracias por la información, ¿qué debo hacer entonces? Puntúa el valor en GV ??? ¿O hay alguna otra opción para...
Olvídate de las banderas globales. No sé por qué se necesitan banderas y qué indican. Por eso es difícil aconsejar en relación con su situación.
 
Zolotai:
Amigos, ¿podrían sugerir un indicador? Se basa en dos diapositivas. Y cuando se cruza da la dirección en forma de flechas. No lo encuentro, gracias.
i-PSI@MA_Signal desde aquí.
 
ALXIMIKS:

Buenos días, si no es muy difícil, por favor aconsejar a un novato:

1) ¿Cómo declarar un array de tamaño igual al valor de alguna variable? (si i=7 declarar array double Muss[7] y así sucesivamente);

ya contestado

2) ¿Por qué se considera que una matriz en una función de usuario se declara y utiliza adecuadamente si la condición es siempre falsa?

while (false){

Alerta("aaaaaaaaaaa" );

static double Buf_max [9000000];

static double Buf_min [9000000];}

porque fue declarado como estático. En MQL, todas las variables estáticas se inicializan antes de llamar a la función init()

3) ¿Hay alguna diferencia en una función de usuario y en general entre un array simple y un array estático?

un simple array se inicializará la primera vez que entre en la función donde se declara. Sin embargo, al salir, si se ha redimensionado antes, el nuevo valor no se restablecerá, y la próxima vez que se llame a la función, la matriz tendrá el mismo tamaño que la dejamos la última vez.

Es decir, en general, la diferencia entre lo simple y lo estático está sólo en el momento de la inicialización.

 
¿Qué se puede hacer con el error "1"-->(sin error, pero con resultado desconocido)?
 

He estado escribiendo una función aquí para eliminar los pedidos pendientes. Pero por alguna razón no los borra. Aquí está el código:

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
      
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

¿Por qué no funciona bien? Entiendo que se puede reescribir de otra manera, pero quiero entender por qué este código no realiza su propósito.

 
hoz:

He estado escribiendo una función aquí para eliminar los pedidos pendientes. Pero por alguna razón no los borra. Aquí está el código:

¿Por qué no funciona bien? Entiendo que se puede reescribir de otra manera, pero quiero entender por qué este código no funciona como se pretende.

Yo insertaría una línea, para no cambiar el código en particular:

            while (!IsTradeAllowed()) Sleep(5000);
            err=0;
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
 
Sepulca:

Yo habría insertado una línea para no cambiar el código en particular:


¿Y qué nos dará esto? Todavía no se ha cerrado ningún pedido y no hay errores.

El código ha sido modificado:

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
                err = 0;
              Print("IsTradeAllowed() = ", IsTradeAllowed());
              Print("err = ", err);

            if (OrderDelete(ticket, Red))
            {
                NumberOfTry = 3;
                Print("NumberOfTry", NumberOfTry);
            }
            else
            {
                err = GetLastError();
                Print("err = ", err);
            }
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

La parte derecha del cuaderno de bitácora:

2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: modify #10 sell stop 0.01 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: open #10 sell stop 0.01 EURUSD at 1.29279 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ DeletePendingOrders çàâåðøåíà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: NumberOfTry3
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: delete #9 sell stop 0.64 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: err = 0
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: IsTradeAllowed() = 1
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ ClosePosBySortLots çàêðûëà âñå ðûíî÷íûå îðäåðà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #3 sell 0.01 EURUSD at 1.29303 tp: 1.29203 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #4 buy 0.02 EURUSD at 1.29403 tp: 1.29503 at price 1.29480
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #5 sell 0.04 EURUSD at 1.29286 tp: 1.29186 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #6 buy 0.08 EURUSD at 1.29386 tp: 1.29486 at price 1.29480
Resulta que la orden se borra. Pero uno. Había otro, otro más. Pero no se borró. Pero el ciclo es para todos los pedidos.
 

Vigila tu variable NumberOfTry

debe ponerse a cero para cada billete, de lo contrario se pondrá a 3 o más y no se aplicarán otras condiciones para todos los billetes.

sólo uno cumplirá la condición