当转移到另一个时间框架时,我如何改变指标中的全局变量结构? - 页 6

 
Nikolai Semko:

没有人阻止你做出自己的调整。

只是这个例子根本就不是关于铸造的。

 
fxsaber:

只是这个例子根本就不是关于铸造的。

好了,很清楚了。
逝者如斯夫
 
fxsaber:

正是这个版本出现了错误。

不,你有别的东西,因为在第144行,第55位不是一个索引。

 
Nikolai Semko:
好了,我们清楚了。
旅行的人

还是浪费了他们俩的时间。

#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:
不,你有别的东西,因为在第144 行第55位不是一个索引。

第114行


 
fxsaber:

还是浪费了他们俩的时间。

原始的(SIZE=1000)。

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

经修改。

        Сохранение данных - 55 микросекунд
        Время T[] -> uint[] - 47 микросекунд
        Сохранение данных - 30 микросекунд
        Время T[] -> uint[] - 25 микросекунд
        Сохранение данных - 54 микросекунд
        Время T[] -> uint[] - 45 микросекунд
        Сохранение данных - 31 микросекунд
        Время T[] -> uint[] - 25 микросекунд
数据恢复不起作用。没有时间去弄清楚。最有可能的是,当切换TFs时,旧的副本比新的副本晚被淘汰。
 
fxsaber:

第114行



是的,我弄错了144,但我看的是114。
不,奇迹不会发生。这个位置不可能有溢出错误。
检查你的文件的内联路径和位置。
所以你的文件夹里有两个iCanvas,你运行的是旧版本。

 
fxsaber:

原始(SIZE = 1000)。

经修改。

数据恢复不起作用。没有时间去弄清楚。最有可能的是,当切换TFs时,旧的副本比新的副本晚被淘汰。

是的,也无法运行你的版本。没有录音发生。

 
Nikolai Semko:

检查inluder路径和你的文件位置。

因此,你的文件夹中有两个iCanvas,而且你正在运行一个旧版本。

整个MQL5文件夹中只有一个iCanvas。我使用ALT+G来跳转到它。已排除一个错误。

 
fxsaber:

只是这个例子根本就不是关于铸造的。

它是这样一个衡量标准。

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