mql5言語の特徴、微妙なニュアンスとテクニック - ページ 139

 
fxsaber:

このオプションは機能しません

コードを修正し、今はOKです。
 
Alexey Navoykov:
コードを修正し、すべてOKになりました。

なんか、全然コンパイルされないので、エラーで投稿されましたね。

 
fxsaber:

なんか、全然コンパイルされないので、エラーで投稿されましたね。

はい、タイプミスです、訂正しました。
 
Alexey Navoykov:
はい、タイプミスです、訂正しました。

ありがとうございます、うまくいきました。パフォーマンスへの影響は未知数です。

 
動的なリソース(Kanvasなど)を使用する場合は、この方法で配列のポピュレーションを高速化することをお勧めします。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2019.07.09 18:36

void FillArray1( int &Array[] )
{
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size; i++)
    Array[i] = i;
}

#define  ARRAY_SIZE 10000

void FillArray2( int &Array[] )
{
  int ArrayStatic[ARRAY_SIZE];
  
  const int Size = ArraySize(Array);
  
  for (int i = 0; i < Size;)
  {
    const int Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
    
    for (int j = 0; j < Size2; j++)
      ArrayStatic[j] = i++;
      
    if (Size2)
      ArrayCopy(Array, ArrayStatic, i - Size2, 0, Size2);
  }
}

#define  BENCH(A)                                                               \
{                                                                              \
  const ulong _StartTime = GetMicrosecondCount();                              \
  A;                                                                           \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - _StartTime)); \
}

void OnStart()
{
  int Array1[];
  ArrayResize(Array1, 1 e7);

  int Array2[];
  ArrayResize(Array2, 1 e7);
  
  BENCH(FillArray1(Array1));
  BENCH(FillArray2(Array2));
}
数十パーセントの加速度。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber, 2019.07.09 19:40

Time[FillArray1(Array1)] = 39501
Time[FillArray2(Array2)] = 30304

リリース版実行中。最適化を有効にした。


経験的に最適な静的配列サイズを発見

#define  ARRAY_SIZE 256
 
fxsaber:
動的なリソース(Kanvasなど)を使用する場合は、次の方法で配列への充填を高速化することをお勧めします。
数十パーセントの加速度。


実験を通して、最適なスタティックアレイの大きさを見つけたのです。

また、mql5のArrayFillと 比較した場合、速度向上があるのかないのか?

 

私はトピック全体を読んでいない、多分この質問への答えがあります、MT5はグラフィカルオブジェクトで理解できるように動作しません、ターミナルがしばらく閉じられ、オブジェクトはいくつかの不明瞭なポイントに取り付けられたままです。 どのようにそれに対処するのでしょうか?チャートウィンドウが開いていれば、そのような場合でも難しくはありません。個人的にはOnInit()内のOnDeinitに遷移を追加していますが、ウィンドウがブックマークされている場合は解決しません。MT5の制作者に提案を "表明 "できる場所を誰かが教えてくれるかもしれません。

.

 
Alexander Lasygin:

私はトピック全体を読んでいない、多分この質問への答えがあります、MT5はグラフィカルオブジェクトで理解できるように動作しません、ターミナルがしばらく閉じられ、オブジェクトはいくつかの不明瞭なポイントに取り付けられたままです。 どのようにこれに対処するのでしょうか?チャートウィンドウが開いていれば、そのような場合でも難しくはありません。個人的にはOnInit()内のOnDeinitに遷移を追加していますが、ウィンドウがブックマークされている場合は解決しません。MT5の制作者に提案を "表明 "できる場所を誰かが教えてくれるかもしれません。

.

再現するための正確なデータを提供する:例えば、オブジェクトを含むチャートのテンプレート。

オブジェクトはインジケータによって描画され、prev_calculatedを不正に追跡するのはインジケータであると思われます。

 
Konstantin:

また、mql5のArrayFillと 比較した場合、速度が向上するのかしないのか?

ないと思います。

 
fxsaber:

それはないと思います。

では、すでに生産性の高い機能があるにもかかわらず、なぜ独自のリスパッドを作り直したのでしょうか?

理由: