Como posso mudar a estrutura global de variáveis no indicador ao passar para outro período de tempo? - página 6

 
Nikolai Semko:

ninguém está impedindo você de fazer seus próprios ajustes.

É que o exemplo não tem nada a ver com fundição.

 
fxsaber:

É que o exemplo não tem nada a ver com fundição.

Pronto, já chega.
Bygones
 
fxsaber:

Foi esta versão que deu o erro.

Não, você tem outra coisa, porque na linha 144, a posição 55 não é um índice.

 
Nikolai Semko:
Tudo bem, estamos entendidos.
Viajado

Ainda desperdiçaram o tempo de ambos.

#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:
Não, você tem outra coisa, porque na linha 144 a posição 55 não é um índice.

Linha 114.


 
fxsaber:

Ainda assim, ambos perderam seu tempo.

O original (SIZE = 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 микросекунд
A recuperação de dados não está funcionando. Não há tempo para descobrir. O mais provável é que, ao trocar o TFs, a cópia antiga seja eliminada mais tarde do que a nova.
 
fxsaber:

Linha 114.



Sim, eu estava errado com 144, mas eu estava olhando para 114.
não, os milagres não acontecem. Não pode haver um erro de transbordo nesta posição.
Verifique o caminho em linha e a localização de seus arquivos.
Então você tem duas iCanvas em suas pastas e está executando uma versão mais antiga.

 
fxsaber:

Original (TAMANHO = 1000).

Modificado.

A recuperação de dados não está funcionando. Não há tempo para descobrir. O mais provável é que, ao trocar o TFs, a cópia antiga seja eliminada mais tarde do que a nova.

Sim, também não foi possível executar sua versão. Não há nenhuma gravação ocorrendo.

 
Nikolai Semko:

Verifique o caminho do inluder e a localização de seus arquivos.

Portanto, você tem duas iCanvas em suas pastas e está executando uma versão mais antiga.

Há apenas um iCanvas em toda a pasta MQL5. Eu uso ALT+G para saltar para ele. Um erro foi excluído.

 
fxsaber:

É que o exemplo não tem nada a ver com fundição.

É uma vareta de medição tão grande.

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