Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1426

 
Aleksei Stepanenko:
¿Quiere ordenar los valores en ambas líneas o sólo en la primera?

Sólo en la primera. Hay un error en el código.

Lo siento... No sé cómo borrar el código. Así que sólo diré que en el bloque 2 en lugar de LoY[S2][0]=Bid; se necesita LoY[0][52]=Bid;

 

¿Por qué no puedo intercambiar filas y columnas a la vez?

double LoY[31][2];
 

Si haces la orden correcta a la vez, ¿puedes nombrar los números de las celdas que quieres rellenar con el valor 0,5555?


 
Aleksei Stepanenko:

¿Por qué no puedo intercambiar filas y columnas a la vez?

Entonces ArrayFill(LoY,0,10,0.5555); no funcionará. Pero necesita que los elementos del array en los que cambia los valores vayan *en secuencia*. Pero si lo introduzco en LoY[31][2]
, entonces los elementos del array donde quiero cambiar el valor pasarán por 1. En este caso, "resumirá" las 31 líneas del array en una sola línea primero.

 
Aleksei Stepanenko:

Si quieres hacerlo en el orden correcto, ¿puedes decirme los números de las celdas que quieres rellenar con 0,5555?


La primera fila contiene las celdas del uno al diez. Pero una vez que los has llenado con 0,5555, toda la primera fila tiene que ser ordenada... digamos que en orden ascendente. ArrayFill(LoY,0,10,0.5555) en lugar de ArrayFill(LoY,0,10,0.5555) no me sirve.

He corregido los errores en el código

 

Aquí está el guión:

void OnStart()
   {
   int arr[31,2]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
                  31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61};
   //до заполнения              
   string str="";
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   //после заполнения
   str="";
   ArrayFill(arr, 0, 10, 555); 
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   }

resultado:

2021.03.20 19:42:26.602 primer AUDUSD,H1: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

2021.03.20 19:42:26.602 primer AUDUSD,H1: 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

¿es o no es?

 
Aleksei Stepanenko:

Aquí está el guión:

resultado:

¿Es o no es?

Muchas gracias. Esto parece lo que necesito. Pero te agradecería que pusieras este código no como un script, sino en mi código. Así entenderé y asimilaré más rápido la nueva información. Sólo que tengo valores de precios en el array en lugar de enteros.

Gracias de nuevo por su ayuda.

 
si necesita rellenar de forma diferente, entonces en lugar de
ArrayFill()

utilice

for(int i=0; i<10; i++) arr[i,0]=555;
 
Aleksei Stepanenko:
Si hay que rellenarla de otra manera, en lugar de

utilice

Bien. Hoy espero absorber alguna información nueva para mí. Y mañana les haré saber los resultados.

Gracias de nuevo.

 
ANDREY:

código no como un script, sino pegarlo en mi código.

No he escrito nada más, sólo he repetido tu código.

Visualmente los números no están dispuestos correctamente (en dos líneas, en lugar de 31), y usted pensó que eso era lo que necesitaba.

Lo más probable es que haya tenido que asignar 0,5555 al bucle en lugar de ArrayFill. Pruébalo.

double LoY[31][2],LoU,LoU1;
int S,S1,S2;

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
for(int i=0; i<10; i++) LoY[i,0]=0.555;
S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[S2][0]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[1][0]-- В ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[1][0],"  [2] ",   LoY[2][0],"  [3] ",   LoY[3][0],"  [4] ",   LoY[4][0],"  [26] ",   LoY[26][0],"  [27] ",   LoY[27][0],"  [28] ",   LoY[28][0],"  [30] ",   LoY[30][0],"  [60] ",   LoY[60][0]);
S2++;
if (S2==62)
{
S2=0;
}
S=Minute();
}
}