Comment modifier la structure de la variable globale de l'indicateur lors du passage à une autre période ? - page 6

 
Nikolai Semko:

personne ne vous empêche de faire vos propres ajustements.

C'est juste que l'exemple ne concerne pas du tout le casting.

 
fxsaber:

C'est juste que l'exemple ne concerne pas du tout le casting.

Très bien, c'est tout.
Bygones
 
fxsaber:

C'est cette version qui a donné l'erreur.

Non, vous avez autre chose, car à la ligne 144, la position 55 n'est pas un index.

 
Nikolai Semko:
D'accord, c'est clair.
A voyagé sur

Ça leur a quand même fait perdre du temps à tous les deux.

#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:
Non, vous avez autre chose, parce que dans la ligne 144 la position 55 n'est pas un index.

Ligne 114.


 
fxsaber:

Ça leur a quand même fait perdre du temps à tous les deux.

L'original (SIZE = 1000).

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

Modifié.

        Сохранение данных - 55 микросекунд
        Время T[] -> uint[] - 47 микросекунд
        Сохранение данных - 30 микросекунд
        Время T[] -> uint[] - 25 микросекунд
        Сохранение данных - 54 микросекунд
        Время T[] -> uint[] - 45 микросекунд
        Сохранение данных - 31 микросекунд
        Время T[] -> uint[] - 25 микросекунд
La récupération des données ne fonctionne pas. Pas le temps d'y penser. Il est fort probable que lors du changement de TF, l'ancienne copie soit éliminée plus tard que la nouvelle.
 
fxsaber:

Ligne 114.



Oui, je me suis trompé avec le 144, mais je regardais le 114.
non, les miracles n'arrivent pas. Il ne peut pas y avoir d'erreur de débordement à cet endroit.
Vérifiez le chemin d'accès et l'emplacement de vos fichiers.
Vous avez donc deux iCanvas dans vos dossiers et vous utilisez une ancienne version.

 
fxsaber:

Original (TAILLE = 1000).

Modifié.

La récupération des données ne fonctionne pas. Pas le temps d'y penser. Il est fort probable que lors du changement de TF, l'ancienne copie soit éliminée plus tard que la nouvelle.

Oui, je n'ai pas pu non plus exécuter votre version. Il n'y a pas d'enregistrement en cours.

 
Nikolai Semko:

Vérifiez le chemin d'accès de l'inluder et l'emplacement de vos fichiers.

Vous avez donc deux iCanvas dans vos dossiers et vous utilisez une ancienne version.

Il n'y a qu'un seul iCanvas dans tout le dossier MQL5. J'utilise ALT+G pour y accéder. Une erreur a été exclue.

 
fxsaber:

C'est juste que l'exemple ne concerne pas du tout le casting.

C'est un tel instrument de mesure.

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