エラー、バグ、質問 - ページ 2677

 
fxsaber:

もちろん、発売する。端末自体がキャッシュに刻みを記憶しているので、運用中は必要ないんですけどね。

このダニを後で冷静に育て直した方がいいんです。端末を「冷やす」仕組みが必要。

気がつかなかった。

void OnStart()
  {
   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,100000000);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   ArrayFree(items);
   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
  }


SZY 悲しいことに、メモリ上では1ティックあたり60バイトでアンパックして保存されています。簡単に5回パックすることができます(1ティックあたり〜12バイト)。

 
Stanislav Korotky:

CopyRatesのように自動ダウンロードを行うのがよいでしょう。

この場合、時間軸は不明です。ダウンロードは、ピリオド記号の要求により開始される。

何ができるかを考える

 
Nikolai Semko:

は気づかない。

端末が何を消費しているのかを見なければならない。

void OnStart()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   ArrayFree(items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
  }


その結果が、長い間稼働してきた「ターミナル」に出ているのです。EA/インジケータが動作していない。2つのチャート、M1バーは当年度のみ。

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb

60Mbは未発売です。空のターミナルは1ギガバイト以上消費します。消費量を減らすには、端末の再読み込みしかありません。

 
Sergey Dzyublik:

こんにちは、ありがとうございました。
今までnew演算 子を使ったことがないのは、論理的に予約メモリでArrayResizeより遅いはずだからです。
しかし、得られた結果には感動しました。逆も然りで、new演算子を介したネイティブ配列の方が高速であることが判明したのです。

MT5 (ビルド 2363)です。

ベータ版2364でリリース(残念ながらテンプレート内のnew T()でコンパイラーエラーが発生します。)

スクリプトのログはこちらです。

2020.03.19 10:39:45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.19 10:39:46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:39:48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=969
2020.03.19 10:39:52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1484
2020.03.19 10:39:54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=985
2020.03.19 10:39:56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:40:00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:40:02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
オブジェクトに対するArrayResizeがより速く動作するようになったことがわかります。

再び、ArrayResize関数の1部分の複雑さが対数からゼロになりました
 
Ilyas:
オブジェクトに対するArrayResizeが高速化されたことがわかります。
今回も、ArrayResize関数の一部分の複雑さを対数からゼロにすることに成功したのです。

実際のプロジェクトでArrayResizeReserveとArrayOnNewの速度を比較したところ、データ型は intフィールドを1つ持つクラスで、レコード数は20Mでした。

MT5(ビルド2363)では、1つを除くすべてのパラメータで、ArrayOnNewはArrayResizeReserveよりも悪い結果となりました。

読み書きアクセス (std::fill_n, std::copy, std::vector::clear): 2-2.5 倍遅い
"cold" / "hot" メモリですべての要素を一度に作成 (std::vector::resize) - 1.1-1.2 倍遅い
"hot" メモリで要素を一つずつ作成 (std::vector::push_back) - 1.2 倍速い

 

ヘルプ(エディタ)にあるこれらのリンクは、ページが見つかりません。


 
MT5 バグ (build 2363) MQL のテンプレート関数と C++ のテンプレート関数の実行優先順位が不一致(online: https://onlinegdb.com/HkNqBDZ88)
問題は
、最初の「test」関数の引数に、完全に特殊化された テンプレート基底クラスが含まれている場合に発生します。
で、2番目の「test」関数は1番目の関数をオーバーロードしたもので、テンプレート関数であり、引数として非特異化 テンプレート基底クラスを含んでいます。

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   A<B<int>>::test(bb);         //'test' - ambiguous call to overloaded function        
}
 
みなさん、こんにちは!!!質問:私はコピー機で2つのプラットフォームMT4とMT5を使用しています。 MT4は問題なくシグナルに接続されています。しかし、MT5から別のシグナルに接続することができません。口座を持っていて資金の動きが表示されるのですが、口座に口座番号がなく、端末のダッシュボードにシグナルボタンがないのです。サーバー、vpsを借りて、移行が必要と書いたのですが、移行ボタンが動きません。その理由を教えてください。
 
Anna:
皆さん、こんにちは。私の質問ですが、私はコピー機でMT4とMT5の2つのプラットフォームを使用しています。 MT4からの信号には問題なく接続できました。しかし、MT5から別のシグナルに接続することができません。口座を持っていて資金の動きが表示されるのですが、口座に口座番号がなく、端末のダッシュボードにシグナルボタンがないのです。サーバー、vpsを借りて、移行が必要と書いたのですが、移行ボタンが動きません。その理由を教えてください。

MetaTrader 5(ターミナル内蔵のバーチャルホスティングレンタル用)には、64ビットのオペレーティングシステムが必要です。

 

Win10で、ローカルエージェントを接続する人はいますか?

2台のPCを接続してみましたが、リモートエージェントは常に接続準備中、接続準備中、接続準備中...の状態です。仕事もない。

ファイアウォールを見てみると、メタトレーダー・エージェント、エクスポート、インポートエージェントの チェックマークがあり、ポートやPCの名前も見ることができます。

他の場所にポートを転送する必要があるのでは?