Başka bir zaman dilimine geçerken göstergedeki global bir değişken, yapı nasıl aktarılır? - sayfa 6

 
Nikolai Semko :

kimse kendi ayarlamalarını yapmaya zahmet etmez.

Sadece dökümle ilgili olmayan bir örnek.

 
fxsaber :

Sadece dökümle ilgili olmayan bir örnek.

Tamam, her şey açık.
sürdük
 
fxsaber :

Hatayı veren bu sürümdü.

Hayır, başka bir şey var çünkü. 144. satırda, 55. konum bir dizin değildir.

 
Nikolai Semko :
Tamam, her şey açık.
biz sürdük

Yine de ikisi de zaman geçirdi.

 #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 :
Hayır, başka bir şey var çünkü. 144 satırında, konum 55 bir dizin değildir.

114. satır .


 
fxsaber :

Yine de ikisi de zaman geçirdi.

Başlangıç (BOYUT = 1000).

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

Değiştirilmiş.

        Сохранение данных - 55 микросекунд
        Время T[] -> uint [] - 47 микросекунд
        Сохранение данных - 30 микросекунд
        Время T[] -> uint [] - 25 микросекунд
        Сохранение данных - 54 микросекунд
        Время T[] -> uint [] - 45 микросекунд
        Сохранение данных - 31 микросекунд
        Время T[] -> uint [] - 25 микросекунд
Veri kurtarma çalışmıyor. Anlamak için zaman yok. Büyük olasılıkla, TF'yi değiştirirken, eski kopya yenisinden daha sonra kesilir.
 
fxsaber :

114. satır .



Evet 144 ile hata yaptım ama 114'e baktım.
Hayır, mucizeler yok. Böyle bir pozisyonda taşma hatası olamaz.
Dahil etme yolunu ve dosyalarınızın konumunu kontrol edin.
Yani iki iCanvas klasörünüz var ve eski sürümü çalıştırıyorsunuz.

 
fxsaber :

Başlangıç (BOYUT = 1000).

Değiştirilmiş.

Veri kurtarma çalışmıyor. Anlamak için zaman yok. Büyük olasılıkla, TF'yi değiştirirken, eski kopya yenisinden daha sonra kesilir.

Evet, sürümünüzü de çalıştıramadı. Kayıt gerçekleşmez.

 
Nikolai Semko :

Dahil etme yolunu ve dosyalarınızın konumunu kontrol edin.

Yani iki iCanvas klasörünüz var ve eski sürümü çalıştırıyorsunuz.

MQL5 klasörünün tamamında yalnızca bir iCanvas vardır. ALT + G ile ona geçiyorum. Hata hariç tutuldu.

 
fxsaber :

Sadece dökümle ilgili olmayan bir örnek.

Böyle bir ölçü.

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