Come posso cambiare la struttura della variabile globale nell'indicatore quando mi sposto in un altro timeframe? - pagina 6

 
Nikolai Semko:

nessuno vi impedisce di fare i vostri aggiustamenti.

È solo che l'esempio non riguarda affatto il casting.

 
fxsaber:

È solo che l'esempio non riguarda affatto il casting.

Va bene, è chiaro.
Bygones
 
fxsaber:

Era questa versione che dava l'errore.

No, avete qualcos'altro, perché alla linea 144, la posizione 55 non è un indice.

 
Nikolai Semko:
Va bene, siamo a posto.
Viaggiato

Hanno comunque perso entrambi il loro tempo.

#include "Convert.mqh" // https://c.mql5.com/3/360/Convert.mqh

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template <typename T>
CStructArr::CStructArr(const string name,T &var[]) {
   //ulong tt=GetMicrosecondCount();
   
   int sizeT = sizeof(T)/4;
   size = ArraySize(var);
   w=1+size*sizeT;
   ArrayResize(Var,w);
   h=1;
   
   Name="::"+name+ IntegerToString(ChartGetInteger(0,CHART_WINDOW_HANDLE));
   if(ResourceReadImage(Name,Var,w,h)) {
      uint_to_t = GetMicrosecondCount();
      CONVERT::ArrayToArray(Var, var);
      uint_to_t = GetMicrosecondCount()-uint_to_t;
   } else {
      for (int j=0; j<size; j++) {
         su.st=var[j];
         //for(int i=0; i<sizeof(T)/4; i++) Var[j*sizeof(T)/4+i]=su.u[i];
         ArrayCopy(Var, su.u,j*sizeT,0,sizeT);
         value[j]=var[j];
      }
      if(!ResourceCreate(Name,Var,w,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) printf("Error create Resource: "+DoubleToString(GetLastError(),0));
   }
}

template <typename T>
bool CStructArr::Set(T &var[]) {
   t_to_uint = GetMicrosecondCount();
   CONVERT::ArrayToArray(var, Var);  
   t_to_uint = GetMicrosecondCount() - t_to_uint;
   if(!ResourceCreate(Name,Var,w,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA)) {
      printf("Error create Resource: "+DoubleToString(GetLastError(),0));
      return(false);
   } else return(true);
}
 
Nikolai Semko:
No, avete qualcos'altro, perché nella linea 144 la posizione 55 non è un indice.

Linea 114.


 
fxsaber:

Hanno comunque sprecato entrambi il loro tempo.

L'originale (SIZE = 1000).

        Сохранение данных - 71 микросекунд
        Время T[] -> uint[] - 49 микросекунд
        Востановление данных - 252 микросекунд
        Время uint[] -> T[] - 52 микросекунд
        Востановление данных - 258 микросекунд
        Время uint[] -> T[] - 51 микросекунд
        Востановление данных - 262 микросекунд
        Время uint[] -> T[] - 52 микросекунд

Modificato.

        Сохранение данных - 55 микросекунд
        Время T[] -> uint[] - 47 микросекунд
        Сохранение данных - 30 микросекунд
        Время T[] -> uint[] - 25 микросекунд
        Сохранение данных - 54 микросекунд
        Время T[] -> uint[] - 45 микросекунд
        Сохранение данных - 31 микросекунд
        Время T[] -> uint[] - 25 микросекунд
Il recupero dei dati non funziona. Non c'è tempo per capirlo. Molto probabilmente, quando si scambiano i TF, la vecchia copia viene eliminata più tardi di quella nuova.
 
fxsaber:

Linea 114.



Sì, ho sbagliato 144, ma stavo guardando 114.
no, i miracoli non accadono. Non può esserci un errore di overflow in questa posizione.
Controlla il percorso in linea e la posizione dei tuoi file.
Quindi hai due iCanvas nelle tue cartelle e stai eseguendo una vecchia versione.

 
fxsaber:

Originale (SIZE = 1000).

Modificato.

Il recupero dei dati non funziona. Non c'è tempo per capirlo. Molto probabilmente, quando si scambiano i TF, la vecchia copia viene eliminata più tardi di quella nuova.

Sì, anch'io non ho potuto eseguire la tua versione. Non c'è nessuna registrazione in corso.

 
Nikolai Semko:

Controllate il percorso dell'inluder e la posizione dei vostri file.

Quindi hai due iCanvas nelle tue cartelle e stai usando una versione più vecchia.

C'è solo un iCanvas in tutta la cartella MQL5. Io uso ALT+G per saltarci sopra. Un errore è stato escluso.

 
fxsaber:

È solo che l'esempio non riguarda affatto il casting.

È un tale metro di misura.

#include "Convert.mqh"                     // https://c.mql5.com/3/360/Convert.mqh
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart()
{
  int Array[];
  MqlTick Ticks1[];
  
  ArrayResize(Ticks1, 10000);
  
  _B(CONVERT::ArrayToArray(Ticks1, Array), 1);
  
  MqlTick Ticks2[];
  
  _B(CONVERT::ArrayToArray(Array, Ticks2), 1);
  
  Print(ArrayCompare(Ticks1, Ticks2)); // Должен быть ноль.
}