Por qué este código no hace lo que quiero (ArraySort)

Responder
josemarialozano
Mensajes: 2
Registrado: 02 Jul 2018 16:57

Por qué este código no hace lo que quiero (ArraySort)

Mensaje por josemarialozano »

Hola, gracias por adelantado por echarme una mano; no soy un experto ni en programación en general ni en MQL4.

Estoy escribiendo un pequeño código que lee nombres de instrumentos a partir de un fichero y obtiene el spread de cada uno de ellos. A continuación los ordena (los que tienen menos spread aparecen primero asociados a ids numéricos, ya los asociaré después a los nombres de instrumento).

Le he dado muchas vueltas pero no consigo ver por qué el código se limita a repetir la visualización de los valores sin ordenar. Alguien me podría ayudar?





int fichero,pasada,espred[99],espred_id[99,3],veces,veces2;
string instrumento[99];

int init()
{
fichero=FileOpen("listadeinstrumentos.csv",FILE_READ);
pasada=0;
while(!FileIsEnding(fichero))
{
pasada++;
instrumento[pasada]=FileReadString(fichero);
espred[pasada]=MarketInfo(instrumento[pasada],MODE_SPREAD);
Print("Instrumento ",pasada,": ",instrumento[pasada]," - su spread es ",espred[pasada]);
espred_id[pasada,1]=espred[pasada];
espred_id[pasada,2]=pasada;
}
FileClose(fichero);
ArraySort(espred_id,WHOLE_ARRAY,0,MODE_ASCEND);
for(veces=1; veces<=pasada; veces++)
{
for(veces2=1; veces2<3; veces2++)
{
Print(espred_id[veces,veces2]);
}
}
}
Broricos
Mensajes: 61
Registrado: 20 Abr 2013 17:35

Re: Por qué este código no hace lo que quiero (ArraySort)

Mensaje por Broricos »

Varias cosas veo ahí:
1. Estas definiendo el array: spread_Id con tres dimensiones y solo utilizas dos dimensiones (debes definirlo solo con dos dimensiones 0 y 1)

2. Recuerde que la función ArraySort () ordena siempre por la primera dimensión y en spread_ID nunca la usas por tanto siempre sacara el mismo orden.

3. En realidad no necesitas usar dos arrays para guardar el spread y el id del símbolo, simplemente con el solo array spread_ID tienes.
Saludos,

Pd: código de ayuda.

Código: Seleccionar todo

string   Simbolo;
int aSpread[29][2];
 
 for(int s=0; s <ArraySize(SymbolsArray); s++)  // lee el array de los simbolos
     {
      Simbolo=SymbolsArray[s];
      int spread= MarketInfo(Simbolo,MODE_SPREAD); // toma el spread del simbolo
      aSpread[s,0]=spread; // guarda el spread del simbolo en la primera dimensión
      aSpread[s,1]=s;  // guarda el ID del simbolo en lasegunda dimensión
    }
   
  ArraySort(aSpread,WHOLE_ARRAY,0,MODE_ASCEND); // ordena el array
   for(int i=0; i <ArraySize(aSpread)/2; i++)  // lee el array con la información del spread
     {
      Print(i," ","SymbolIndex: ",aSpread[i,1]," Spread: ", aSpread[i,0]);

     }
josemarialozano
Mensajes: 2
Registrado: 02 Jul 2018 16:57

Re: Por qué este código no hace lo que quiero (ArraySort)

Mensaje por josemarialozano »

Muchísimas gracias Broricos!
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Expert Advisors”