Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1426

 
Aleksei Stepanenko:
Vuoi ordinare i valori in entrambe le linee o solo nella prima?

Solo nel primo. C'è un errore nel codice.

Mi dispiace... Non so come cancellare il codice. Quindi dirò solo che nel blocco 2 invece di LoY[S2][0]=Bid; avete bisogno di LoY[0][52]=Bid;

 

Perché non posso scambiare righe e colonne contemporaneamente?

double LoY[31][2];
 

Se fai l'ordine giusto in una volta sola, puoi nominare i numeri delle celle che vuoi riempire con il valore 0,5555?


 
Aleksei Stepanenko:

Perché non posso scambiare righe e colonne contemporaneamente?

Allora ArrayFill(LoY,0,10,0.5555); non funzionerà. Ma ha bisogno di elementi dell'array in cui cambia i valori per andare *in sequenza*. Ma se gli do in pasto LoY[31][2]
, allora gli elementi dell'array dove voglio cambiare il valore passeranno per 1. In questo caso, "riassumerà" prima le 31 righe dell'array in una riga.

 
Aleksei Stepanenko:

Se vuoi farlo nell'ordine giusto, puoi dirmi i numeri delle celle che vuoi riempire con 0,5555?


La prima riga contiene le celle da uno a dieci. Ma una volta che li hai riempiti con 0,5555, l'intera prima fila deve essere ordinata... diciamo in ordine crescente. ArrayFill(LoY,0,10,0.5555) invece di ArrayFill(LoY,0,10,0.5555) non mi piace.

Ho corretto gli errori nel codice

 

Ecco il copione:

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);
   }

risultato:

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, 

è così o no?

 
Aleksei Stepanenko:

Ecco il copione:

risultato:

Lo è o non lo è?

Grazie mille. Questo sembra quello di cui ho bisogno. Ma vi sarei grato se poteste mettere questo codice non come script, ma nel mio codice. In questo modo capirò e assimilerò più velocemente le nuove informazioni. Solo che ho valori di prezzo nell'array invece di interi.

Grazie ancora per il vostro aiuto.

 
se avete bisogno di compilare in modo diverso, allora invece di
ArrayFill()

utilizzare

for(int i=0; i<10; i++) arr[i,0]=555;
 
Aleksei Stepanenko:
Se deve essere compilato in modo diverso, allora invece di

utilizzare

Ok. Oggi spero di assorbire alcune nuove informazioni per me. E domani vi farò sapere i risultati.

Grazie ancora.

 
ANDREY:

non come uno script, ma incollarlo nel mio codice.

Non ho scritto altro, ho solo ripetuto il tuo codice.

Visivamente i numeri non sono disposti correttamente (in due righe, invece di 31), e tu hai pensato che è quello che ti serve.

Molto probabilmente, potresti aver bisogno di assegnare 0,5555 al ciclo invece di ArrayFill. Provate.

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();
}
}
Motivazione: