Erros, bugs, perguntas - página 465

 
uncleVic:
Escreva também para o CD sobre isto. Como "nem tudo na revisão pode ser escolhido no testador".
Não, sem recuos. Tenho dois terminais abertos - Alpari, e MK, e mudei para trás e para a frente, mas neste último esqueci-me de acrescentar o EURGBP à visão geral do mercado.
 
marketeer:
Não, ressalto. Tenho dois terminais abertos - Alpari, e MK, e mudei para trás e para a frente, mas neste último esqueci-me de acrescentar o EURGBP à visão geral do mercado.
Acontece.
 

Estou a tentar criar uma matriz no guião que se comporte como uma série de indicadores. Nomeadamente, quando uma nova entrada aparece, todo o conjunto é deslocado para trás e a nova entrada é feita para uma posição nula.

void OnStart()
  {
   int a[];
   int size=5;               // размер массива
   bool flag=true;           // флаг направления индексации
   ArraySetAsSeries(a,flag);  // зададим направление индексации
   ArrayResize(a,size);      // зададим размер массива
//---
   for(int i=0;i<size;i++)  // задаём значения и распечатываем массив
      a[i]=size-i;         // 54321
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
//---
   ArrayResize(a,size-1);     // уменьшаем размер 5432
   ArraySetAsSeries(a,!flag);  // меняем направление индексации 2345
   ArrayResize(a,size);       // возвращаем в исходный размер  2345х
   ArraySetAsSeries(a,flag);   // возвращаем в исходную индексацию х5432   
   a[0]=6;                   // задаём "пустому" нулевому данному значение
//---
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
   // в результате получаем 64321 вместо нужного 65432
  }

Como se costuma dizer, porquê?

Talvez me tenha enganado, mas é a primeira coisa que me vem à cabeça - outro erro na optimização da linguagem.

HZZY Também peço às pessoas que querem deslocar dados usando loops que não se incomodem. Isto funciona bem para matrizes de 5...100...1000..., mas não funcionará para matrizes maiores.

 
Urain:

Estou a tentar criar uma matriz no guião que se comporte como uma série de indicadores. Nomeadamente, quando uma nova entrada aparece, todo o conjunto é deslocado para trás e a nova entrada é feita para uma posição nula.

Como dizem porquê?


E se pegarmos na classe CArrayInt e usarmos um insert para enfiar dados nela?
 
uncleVic:
E se tomarmos a classe CArrayInt, e inserirmos aí dados?

Gostaria de poder passar a matriz através de parâmetros, enquanto a própria matriz é privada na classe.

Mais uma vez, tanto quanto me lembro, este método está empenhado em deslocar os dados no laço, e é bastante lento.

 
Urain:

Estou a tentar criar uma matriz no guião que se comporte como uma série de indicadores. Nomeadamente, quando uma nova entrada aparece, todo o conjunto é deslocado para trás e a nova entrada é feita para uma posição nula.

Como se costuma dizer, porquê?

Talvez me tenha enganado, mas é a primeira coisa que me vem à cabeça - outro erro na optimização da linguagem.

HZZY Também peço às pessoas que querem deslocar dados usando loops que não se incomodem. Isto funciona bem para matrizes de 5...100...1000..., mas não funcionará para matrizes maiores.


Sobre o tema "ZZZY": os seus redimensionamentos não irão desgastar a sua memória?
 
uncleVic:
Quanto a "ZZI": os seus redimensionamentos não lhe fragmentam a memória?

Não conheço nenhuma outra função (que atribui memória) em mql5.

HH E tanto quanto percebi a direcção da matriz é também uma coisa puramente virtual.

ZZY Aparentemente tem de trabalhar não com a memória, mas com a virtualização do espaço de endereçamento. E isto também atrasa o trabalho, afinal o acesso directo é mais rápido.

 
Urain:

Gostaria de poder passar a matriz através de parâmetros, enquanto a própria matriz é privada na classe.

Mais uma vez, tanto quanto me lembro, este método é apenas para deslocar dados em loop e isso é bastante lento.

Terei de pensar em melhorar as classes de matriz (para mim).
 
uncleVic:
Teria de pensar em melhorar as classes de matriz (para mim).

Sim, uma inserção virtual numa posição zero seria agradável. Mas não mover realmente os dados, caso contrário seria longo e ineficiente.

De qualquer modo, é mau que não se possa trabalhar com memória directamente, tem uma boa aceleração de virtualização, mesmo a velocidade C++ é 1,5 vezes mais rápida se se dirigir a um endereço de célula em vez de a uma matriz.

 
Urain:

Estou a tentar criar uma matriz no guião que se comporte como uma série de indicadores. Ou seja, quando uma nova entrada aparece, todo o conjunto é deslocado para trás, e a nova entrada é feita na posição zero.

ZZZY Peço aos camaradas que queiram aconselhar a mover os dados pelo ciclo que não se preocupem, esta opção funciona bem para matrizes de 5...100...1000..., mas na matriz de maior dimensão é inaceitável.


Mas posso sugerir que não se mova todo o conjunto? :)

Matriz dinâmica, novos dados são escritos até ao fim, o tamanho é alterado/memorizado, e a bandeira AsSeries muda apenas a indexação.

Para ordem normal, é N elemento de matriz, para "série" Size-N-1.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5