Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1426

 
Aleksei Stepanenko:
Você quer ordenar os valores em ambas as linhas ou apenas na primeira linha?

Somente no primeiro. Há um erro no código.

Sinto muito... Eu não sei como apagar o código. Portanto, vou apenas dizer que no bloco 2 ao invés de LoY[S2][0]=Bid; você precisa de LoY[0][52]=Bid;

 

Por que não posso trocar fileiras e colunas de uma só vez?

double LoY[31][2];
 

Se você fizer a ordem certa de uma vez, você pode citar os números das células que deseja preencher com o valor 0,5555?


 
Aleksei Stepanenko:

Por que não posso trocar fileiras e colunas de uma só vez?

Então ArrayFill(LoY,0,10,0.5555); não vai funcionar. Mas ele precisa de elementos de matriz nos quais ele muda os valores para ir *em seqüência*. Mas se eu o alimentar LoY[31][2]
, então os elementos do array onde eu quero mudar o valor passarão por 1. Neste caso, ele "resumirá" as 31 linhas do array em uma linha primeiro.

 
Aleksei Stepanenko:

Se você quiser fazê-lo na ordem certa, você pode me dizer os números das células que você quer preencher com 0,5555?


A primeira fileira contém células de um a dez. Mas depois de preenchê-los com 0,5555, toda a primeira fila tem de ser classificada. digamos em ordem ascendente. ArrayFill(LoY,0,10,0.5555) ao invés de ArrayFill(LoY,0,10,0.5555) não me convém.

Eu corrigi os erros no código

 

aqui está o roteiro:

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, 

é ou não é?

 
Aleksei Stepanenko:

aqui está o roteiro:

resultado:

É ou não é?

Muito obrigado. Isto se parece com o que eu preciso. Mas eu apreciaria se você pudesse colocar este código não como um script, mas em meu código. Desta forma, vou entender e assimilar novas informações mais rapidamente. Somente eu tenho valores de preço na matriz em vez de números inteiros.

Mais uma vez obrigado por sua ajuda.

 
se você precisa preencher de forma diferente, então em vez de
ArrayFill()

uso

for(int i=0; i<10; i++) arr[i,0]=555;
 
Aleksei Stepanenko:
Se precisar ser preenchido de forma diferente, então em vez de

uso

Ok. Hoje espero absorver algumas novas informações para mim. E lhe informarei os resultados amanhã.

Mais uma vez, obrigado.

 
ANDREY:

código não como um script, mas cole-o em meu código.

Eu não escrevi mais nada, apenas repeti seu código.

Visualmente, os números não estão dispostos corretamente (em duas linhas, em vez de 31), e você pensou que era isso que precisava.

O mais provável é que você tenha precisado atribuir 0,5555 ao laço em vez de ArrayFill. Experimente.

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