Errori, bug, domande - pagina 465

 
uncleVic:
Scrivete al CD anche di questo. Come "non tutto quello che c'è nella recensione può essere scelto nel tester".
No, non ci si tira indietro. Ho due terminali aperti - Alpari, e MK, e sono passato avanti e indietro, ma in quest'ultimo ho dimenticato di aggiungere EURGBP alla panoramica del mercato.
 
marketeer:
No, rimbalzo. Ho due terminali aperti - Alpari, e MK, e sono passato avanti e indietro, ma in quest'ultimo ho dimenticato di aggiungere EURGBP alla panoramica del mercato.
Succede.
 

Sto cercando di creare un array nello script che si comporta come una serie di indicatori. Vale a dire, quando appare una nuova voce, l'intera matrice viene spostata indietro e la nuova voce viene fatta in una posizione nulla.

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
  }

Come si dice, perché?

Forse ho sbagliato, ma è la prima cosa che mi viene in mente: un altro bug nell'ottimizzazione del linguaggio.

HZZY Chiedo anche a quelle persone che vogliono spostare i dati usando i loop di non preoccuparsi. Questo funziona bene per array di 5...100...1000..., ma non funzionerà per array più grandi.

 
Urain:

Sto cercando di creare un array nello script che si comporta come una serie di indicatori. Vale a dire, quando appare una nuova voce, l'intera matrice viene spostata indietro e la nuova voce viene fatta in una posizione nulla.

Come si dice perché?


Cosa succede se prendiamo la classe CArrayInt e usiamo un insert per infilarci i dati?
 
uncleVic:
E se prendiamo la classe CArrayInt, e vi inseriamo i dati?

Vorrei essere in grado di passare l'array tramite parametri, mentre l'array stesso è privato nella classe.

Di nuovo, per quanto mi ricordo, questo metodo è impegnato nello spostamento dei dati nel ciclo, ed è piuttosto lento.

 
Urain:

Sto cercando di creare un array nello script che si comporta come una serie di indicatori. Vale a dire, quando appare una nuova voce, l'intera matrice viene spostata indietro e la nuova voce viene fatta in una posizione nulla.

Come si dice, perché?

Forse ho sbagliato, ma è la prima cosa che mi viene in mente: un altro bug nell'ottimizzazione del linguaggio.

HZZY Chiedo anche a quelle persone che vogliono spostare i dati usando i loop di non preoccuparsi. Questo funziona bene per array di 5...100...1000..., ma non funzionerà per array più grandi.


A proposito di "ZZZY": i vostri ridimensionamenti non vi sfrangeranno la memoria?
 
uncleVic:
Per quanto riguarda "ZZI": i vostri ridimensionamenti non vi frammentano la memoria?

Non conosco nessun'altra funzione (che alloca la memoria) in mql5.

HH E per quanto ho capito la direzione della matrice è anche una cosa puramente virtuale.

ZZY A quanto pare non si deve lavorare con la memoria, ma con la virtualizzazione dello spazio degli indirizzi. E questo rallenta anche il lavoro, l'accesso diretto è più veloce dopo tutto.

 
Urain:

Mi piacerebbe essere in grado di passare l'array tramite parametri, mentre l'array stesso è privato nella classe.

Di nuovo, per quanto mi ricordo, questo metodo è solo per spostare i dati in un ciclo e questo è piuttosto lento.

Dovrò pensare a migliorare le classi di array (per me).
 
uncleVic:
Dovrei pensare a migliorare le classi di array (per me).

Sì, un inserto virtuale su una posizione zero sarebbe bello. Ma non per spostare veramente i dati, altrimenti sarebbe lungo e inefficiente.

Comunque, è brutto che non si possa lavorare con la memoria direttamente, ha una buona accelerazione di virtualizzazione, anche la velocità del C++ è 1,5 volte più veloce se si indirizza un indirizzo di cella invece di un array.

 
Urain:

Sto cercando di creare un array nello script che si comporta come una serie di indicatori. Cioè, quando appare una nuova voce, l'intera matrice viene spostata indietro, e la nuova voce viene fatta nella posizione zero.

ZZZY Chiedo ai compagni che vogliono consigliare di spostare i dati per il ciclo di non preoccuparsi, questa opzione funziona bene per gli array di 5...100...1000..., ma all'array di dimensioni maggiori è inaccettabile.


Ma posso suggerire di non spostare l'intero array? :)

Array dinamico, i nuovi dati vengono scritti alla fine, la dimensione viene cambiata/memorizzata, e il flag AsSeries cambia solo l'indicizzazione.

Per l'ordine normale, è N elemento dell'array, per "seriale" Size-N-1.

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