Wie verschiebe ich die Struktur der globalen Variablen im Indikator, wenn ich zu einem anderen Zeitrahmen wechsle? - Seite 6

 
Nikolai Semko:

Niemand hindert Sie daran, Ihre eigenen Anpassungen vorzunehmen.

In dem Beispiel geht es aber überhaupt nicht um das Gießen.

 
fxsaber:

Nur geht es in dem Beispiel überhaupt nicht um das Gießen.

Gut, das war's.
Schwamm drüber
 
fxsaber:

Bei dieser Version trat der Fehler auf.

Nein, Sie haben etwas anderes, denn in Zeile 144 ist die Position 55 kein Index.

 
Nikolai Semko:
Alles klar, wir sind bereit.
Bereist

Trotzdem haben sie beide ihre Zeit verschwendet.

#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:
Nein, Sie haben etwas anderes, denn in Zeile 144 ist Position 55 kein Index.

Zeile 114.


 
fxsaber:

Trotzdem haben sie beide ihre Zeit verschwendet.

Das Original (SIZE = 1000).

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

Geändert.

        Сохранение данных - 55 микросекунд
        Время T[] -> uint[] - 47 микросекунд
        Сохранение данных - 30 микросекунд
        Время T[] -> uint[] - 25 микросекунд
        Сохранение данных - 54 микросекунд
        Время T[] -> uint[] - 45 микросекунд
        Сохранение данных - 31 микросекунд
        Время T[] -> uint[] - 25 микросекунд
Die Datenwiederherstellung funktioniert nicht. Keine Zeit, das herauszufinden. Höchstwahrscheinlich wird beim Wechsel der TFs die alte Kopie später als die neue ausgeschieden.
 
fxsaber:

Zeile 114.



Ja, ich habe mich mit 144 geirrt, aber ich hatte 114 im Blick.
Nein, Wunder gibt es nicht. An dieser Stelle kann es keinen Überlauffehler geben.
Überprüfen Sie den Inline-Pfad und den Speicherort Ihrer Dateien.
Sie haben also zwei iCanvas in Ihren Ordnern und verwenden eine ältere Version.

 
fxsaber:

Original (SIZE = 1000).

Geändert.

Die Datenwiederherstellung funktioniert nicht. Keine Zeit, das herauszufinden. Höchstwahrscheinlich wird beim Wechsel der TFs die alte Kopie später als die neue ausgeschieden.

Ja, auch Ihre Version konnte nicht ausgeführt werden. Es findet keine Aufzeichnung statt.

 
Nikolai Semko:

Überprüfen Sie den Einführungspfad und den Speicherort Ihrer Dateien.

Sie haben also zwei iCanvas in Ihren Ordnern, und Sie verwenden eine ältere Version.

Es gibt nur ein iCanvas im gesamten MQL5-Ordner. Ich benutze ALT+G, um dorthin zu springen. Es wurde ein Fehler ausgeschlossen.

 
fxsaber:

Nur geht es in dem Beispiel überhaupt nicht um das Gießen.

Das ist so eine Messlatte.

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