他のタイムフレームに移動する際、インジケーターのグローバル変数の構造を変更するにはどうすればよいですか? - ページ 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 микросекунд
データ復旧がうまくいかない。理解する時間がない。おそらく、TFが切り替わるときに、古いコピーが新しいコピーより遅れてノックアウトされるのでしょう。
 
fxsaber:

114行目



はい、144を間違えてしまいましたが、114を見ていました。
いいえ、奇跡は起きないのです。この位置でオーバーフローエラーはありえません。
インラインパスとファイルの場所を確認してください。
フォルダに2つのiCanvasがあり、古いバージョンを動かしているということですね。

 
fxsaber:

オリジナル(SIZE = 1000)です。

修正されました。

データ復旧がうまくいかない。理解する時間がない。おそらく、TFが切り替わるときに、古いコピーが新しいコピーより遅れてノックアウトされるのでしょう。

はい、あなたのバージョンも実行できませんでした。録音は行われていません。

 
Nikolai Semko:

インルーダーのパスとファイルの場所を確認してください。

つまり、フォルダ内に2つのiCanvasがあり、古いバージョンが動作しているということです。

MQL5フォルダ全体ではiCanvasは1つしかありません。私は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)); // Должен быть ноль.
}