¿Cómo puedo cambiar la estructura de la variable global en el indicador al pasar a otro marco temporal? - página 6

 
Nikolai Semko:

Nadie te impide hacer tus propios ajustes.

Es que el ejemplo no tiene nada que ver con el reparto.

 
fxsaber:

Es que el ejemplo no tiene nada que ver con el reparto.

Muy bien, está claro.
Bygones
 
fxsaber:

Fue esta versión la que dio el error.

No, tienes algo más, porque en la línea 144, la posición 55 no es un índice.

 
Nikolai Semko:
Muy bien, está claro.
Viajado

Aun así, ambos perdieron el tiempo.

#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, tienes algo más, porque en la línea 144 la posición 55 no es un índice.

Línea 114.


 
fxsaber:

Aun así, ambos perdieron el tiempo.

El original (TAMAÑO = 1000).

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

Modificado.

        Сохранение данных - 55 микросекунд
        Время T[] -> uint[] - 47 микросекунд
        Сохранение данных - 30 микросекунд
        Время T[] -> uint[] - 25 микросекунд
        Сохранение данных - 54 микросекунд
        Время T[] -> uint[] - 45 микросекунд
        Сохранение данных - 31 микросекунд
        Время T[] -> uint[] - 25 микросекунд
La recuperación de datos no funciona. No hay tiempo para resolverlo. Lo más probable es que, al cambiar de TF, la copia antigua sea eliminada más tarde que la nueva.
 
fxsaber:

Línea 114.



Sí, me equivoqué en el 144, pero estaba mirando el 114.
no, los milagros no ocurren. No puede haber un error de desbordamiento en esta posición.
Comprueba la ruta de acceso y la ubicación de tus archivos.
Así que tienes dos iCanvas en tus carpetas y estás ejecutando una versión antigua.

 
fxsaber:

Original (TAMAÑO = 1000).

Modificado.

La recuperación de datos no funciona. No hay tiempo para resolverlo. Lo más probable es que, al cambiar de TF, la copia antigua sea eliminada más tarde que la nueva.

Sí, también no se pudo ejecutar su versión. No se está grabando.

 
Nikolai Semko:

Comprueba la ruta de inlusión y la ubicación de tus archivos.

Así que tienes dos iCanvas en tus carpetas y estás ejecutando una versión antigua.

Sólo hay un iCanvas en toda la carpeta MQL5. Uso ALT+G para saltar a ella. Se ha excluido un error.

 
fxsaber:

Es que el ejemplo no tiene nada que ver con el reparto.

Es una vara de medir.

#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)); // Должен быть ноль.
}