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

 

No puedo resolver el problema, me estoy aburriendo, y la cerveza no ayuda.

Lo he hecho:

1 - hay 30 EAs trabajando en un gráfico o símbolo y todos tienen diferente número Medgic

2- Cada EA tiene 3-5 órdenes abiertas ...

La tarea consiste en imprimir todos los números en una barra en un gráfico y el total de ganancias/pérdidas en ellos ...

Estoy investigando pero no llego a ninguna parte:

  #define  MagicN 0
#define  MagProf 1
 ArrayResize(mags,100,1000);ArrayInitialize(mags,0);  
   for(int f=OrdersTotal()-1; f>=0; f--)
      if(OrderSelect(f,SELECT_BY_POS))
              {
               for(int z=100-1; z>=0; z--)
                 {
                  if(mags[z][MagicN]==OrderMagicNumber())
                  mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();

                  if(mags[z][MagicN]!=OrderMagicNumber())
                    {
                     mags[z][MagicN]=OrderMagicNumber();
                     mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
                    }
                 }
              }

¡¡¡La gente buena ayuda a quien puede!!! )))))))

 
VOLDEMAR:

No puedo resolver el problema, me estoy aburriendo, y la cerveza no ayuda.

Lo he hecho:

1 - hay 30 EAs trabajando en un gráfico o símbolo y todos tienen diferente número Medgic

2- Cada EA tiene 3-5 órdenes abiertas ...

La tarea consiste en imprimir todos los números en una barra en un gráfico y el total de ganancias/pérdidas en ellos ...

Estoy investigando pero no llego a ninguna parte:

¡¡¡La gente buena ayuda a quien puede!!! )))))))


Creamos un array bidimensional. En la primera dimensión almacenamos el beneficio acumulado, en la segunda el majik.

Al procesar los pedidos, buscamos un número mágico en la matriz. Si no lo encontramos, aumentamos la matriz, si lo encontramos, aumentamos el beneficio.

Una vez finalizado el procesamiento, mostramos el resultado en la pantalla

 
Vinin:


Crea un array bidimensional. En la primera dimensión, almacenamos el beneficio acumulado, y en la segunda, el mejic.

Al procesar las órdenes, buscamos las órdenes en el array, si no las encontramos, aumentamos el array, si las encontramos, aumentamos el beneficio.

Una vez finalizado el procesamiento, mostrar el resultado en la pantalla


¿No es eso lo que he escrito?
 
VOLDEMAR:

¿No es eso lo que dice?

No exactamente. Donde se define el tamaño del array y se busca un índice en Magik. No he visto eso.
 
for(int f=OrdersTotal()-1; f>=0; f--) // búsqueda de órdenes
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// segundo bucle sobre el número de elementos del array
{
if(mags[z][MagicN]==OrderMagicNumber()) // si ya existe un MagicNumber, añadamos el beneficio
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
si no /si no hay mag
{
ArrayResize(mags,z,1000); // expandir array
mags[z][MagicN]=OrderMagicNumber(); // almacenar el mag
}
}

}

Pero con esta construcción, el terminal no se prueba, dice error crítico

 
VOLDEMAR:
for(int f=OrdersTotal()-1; f>=0; f--) // búsqueda de órdenes
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// segundo bucle sobre el número de elementos del array
{
if(mags[z][MagicN]==OrderMagicNumber()) // si ya existe un MagicNumber, añadamos el beneficio
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
si no /si no hay mag
{
ArrayResize(mags,z,1000); // expandir array
mags[z][MagicN]=OrderMagicNumber(); // almacenar el mag
}
}

}

Pero con esta construcción, el terminal no se prueba, dice error crítico


¿Qué es la variable MagicN y dónde cambia?
 
en la definición tiene el parámetro 0 y MagProf en la definición tiene el valor 1
 
VOLDEMAR:
en la definición tiene un parámetro 0 y MagProf en la definición tiene un valor de 1


Prueba esto

#define MagicN 0
#define MagProf 1
double mags[10][2];
int CountMagic=0;

void CalcMagic()
  {
   for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
      if(OrderSelect(f,SELECT_BY_POS))
        {
         mags[FindMaic(OrderMagicNumber())][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
        }

  }
//+------------------------------------------------------------------+

int FindMaic(int Magic)
  {
   int Res=-1;
   for(int i=0;i<CountMagic;i++)
     {
      if(mags[i][MagicN]==Magic)
         Res=i;
      break;
     }
   if(Res==-1)
     {
      Res=CountMagic;
      CountMagic++;
      if(CountMagic>=ArrayRange(mags,0))
        {
         ArrayResize(mags,CountMagic+10);
        }

     }

   return(Res);
  }
//+------------------------------------------------------------------+

En las matrices multidimensionales, la dimensionalidad puede definirse mediante ArrayRange()

 
Hay un StopLetter y Freeswell que puedo conseguir a través de marketinfo, pero hay la misma restricción, pero que se refiere a la fecha mínima de vencimiento, normalmente es de 15 minutos. Es decir, si pongo una orden pendiente, el tiempo mínimo después del cual se auto-borrará, si no se activa, es de 15 minutos. Esa es la cuestión: ¿cómo puedo saber este límite de forma programada?
 
Desead:
Hay un stopplay y freezevel que puedo conseguir a través de marketinfo, y hay la misma restricción, pero que se refiere a la fecha mínima de vencimiento, normalmente es de 15 minutos. es decir, si pongo una orden pendiente, el tiempo mínimo tras el cual se auto-borrará, si no se activa, es de 15 minutos. Esa es la cuestión: ¿cómo puedo saber este límite de forma programada?

Pregunte a su agente. Algunos no ejecutan la caducidad.

No lo pongo en un pedido sino que lo quito en las condiciones.