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

 
Nikolai Semko:

は、スピード漫遊編を確認することにしました。

正規化前の double の比較でも、εを使った場合と int に変換した場合では、平均してさらに 遅くなります。

その結果

プロセッサの新規性やアーキテクチャに依存するものが多く、プログラマーによっては異なる結果を得る可能性があることは排除しない。

意外なことに、整数への丸め関数は整数ではなく実数を返すので、型も整数に丸めなければならない。言葉の論理はどこにあるのか?
 
Nikolai Semko:

2つの倍数を比較する演算の性能は、変数の値そのものに依存するのでしょうか?そうでしょうか。

そうみたいですね。むしろ不思議なくらいです。
上の例の行を置き換えると

double test = 1.11;

まで

double test = NormalizeDouble(1.11,2);

2つのダブルを比較するだけで、他の選択肢よりも早く作業を開始することができます。ダブル、ダブルのどちらにも対応可能ですが。どのような違いがあるのでしょうか?しかし、結果として性能は2倍速くなったのです。まるで奇跡のようです。

2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   простое сравнение предварительно нормализированых double 1 - 552 микросекунд, всего совпадений = 507
2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   простое сравнение предварительно нормализированых double 2 - 954 микросекунд, всего совпадений = 507
2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   сравнение double через эпсилон                             - 778 микросекунд, всего совпадений = 507
2020.08.10 17:40:13.583 TestCompareDouble (USDCAD,H4)   сравнение double через преобразование в int                - 854 микросекунд, всего совпадений = 507
ファイル:
 
Alexey Navoykov:

テストが正しくありません。 なぜ最後に一度だけ100000. 0で割るのですか? 反復ごとに実行し、合計すべきです。 これは公平な比較です。 しかし、これは全く正規化ではありません。あなたはテストアルゴリズムを最適化しただけ です。もちろん、より速く、より正確になります(累積誤差が減るので)。

はい、その通りです。反復毎に分割すれば、NormalizeDoubleと 同じ精度になります。しかし、それでもNormalizeDoubleを使用した場合よりも速度は高くなります。

2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4)   простая сумма                            - 1394 микросекунд, сумма = -3604329.1567609389312565
2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4)   сумма с NormalizeDouble                  - 5861 микросекунд, сумма = -3604329.1543100476264954
2020.08.10 21:38:48.652 TestCompareDouble (USDCAD,H4)   сумма, нормализированная через int       - 2179 микросекунд, сумма = -3604329.1543100476264954

ありがとうございます。

 

一般に、四捨五入して整数にした後、整数でない数値を返すのは良くないと言われています。これまでのプリンターでは、小数点以下がゼロ、末尾が1のほぼ整数や、小数点以下が9の数字を見たことがあります。バグかと思った。開発者の立場が不明確であることが判明。さて、整数に丸める場合、2進数の小数点以下の余りを取り除く必要がありますが、どうも仮数をゼロにするのは難しい/不可能なようです。正規化についてはさらに複雑で、カンマを5桁にして2進数で整数化しても、逆丸めして2進数にすると整数型と 差が出る。

悲しいかな、一見簡単そうに見える比較演算に頼らざるを得ないのです。

pythonではありません)))

 
Valeriy Yastremskiy:

一般に、四捨五入して整数にした後、整数でない数値を返すのは良くないと言われています。これまでのプリンターでは、小数点以下がゼロ、末尾が1のほぼ整数や、小数点以下が9の数字を見たことがあります。バグかと思った。開発者の立場が不明確であることが判明。さて、整数に丸める場合、2進数の小数点以下の余りを取り除く必要がありますが、どうも仮数をゼロにするのは難しい/不可能なようです。正規化についてはさらに複雑で、カンマを5桁にして2進数で整数化しても、逆丸めして2進数にすると整数型と 差が出る。

悲しいかな、一見単純に見える比較演算でも、カリカリしなければならないのです。

丸め後の式は、結果のデータに対して他の演算を含む場合があり、必ずしも整数である必要はない。そうすると、intからdoubleに変換し直さなければならず、その場でオーバーヘッドが発生します。

必要な型を返す独自の関数RoundIntやRoundLongを作成することを妨げるものはありません。

 

市販のテスターに不具合がある。

多通貨のEAを テストすると、テスターがハングアップしてしまいます。

理由:金融商品の分析中に、Expert Advisorが履歴のない金融商品につまずくか、金融商品が適切に設計されていないためです。

標準のターミナルでは29秒間ハングアップします、それは確かで、確認済みです。

マーケットにいるテスターは、テスト時間が長すぎると報告しています。

Expert Advisorは、そのような壊れた金融商品に何度も遭遇することを想定しています。

この問題は何度か、1年前にも書かれているのですが、まだ残っているんですよね...。

 
Vladimir Pastushak:

この問題は何度か、1年前にも書かれているのですが、まだ残っているんですよね...。

私には効きません。ソースコードを添付してください。

 

なぜ機能が動作しないのか、コメントをお願いします。0chに切り替わらない。

ChartSetInteger(0,CHART_BRING_TO_TOP,0,true);

このパターンの2回目以降の適用では、ウィンドウが複製されます

ChartApplyTemplate(0,"Template.tpl");

これらの機能は、アップデート前も動作していました。

 
fxsaber:

私には再生されません。ソースコードを添付してください。

Metakvotesのデモサーバでのテスト

void OnStart()
  {
   int m_all_symbols = SymbolsTotal(false);
   string m_sym_name = "";
   for(int i = 0; i < m_all_symbols; i++)
     {
      // ======================================================================
      // === Получили имя символа
      if((m_sym_name = SymbolName(i, false)) != NULL)
        {
         // ======================================================================
         // === Если символ не выбран в окне маркет ватч
         if(!SymbolInfoInteger(m_sym_name, SYMBOL_SELECT))
            if(!SymbolSelect(m_sym_name, true))
               Print(" SymbolSelect " + m_sym_name);
         ulong get = GetMicrosecondCount();
         MqlRates rateM1[1440];
         if(CopyRates(m_sym_name, PERIOD_M1, 0, 1440, rateM1) > 0)
           {
            Print(m_sym_name, "  ", (GetMicrosecondCount() - get));
           }
         else
            Print("Error  ",m_sym_name, "  ", (GetMicrosecondCount() - get));
        }
     }
  }


2020.08.11 20:20:55.657 test (EURUSD,M15) MXNJPY 1998

2020.08.11 20:20:55.659 test (EURUSD,M15) NZDMXN 1979

2020.08.11 20:20:55.661 test (EURUSD,M15) USDCOP 1973

2020.08.11 20:20:55.663 test (EURUSD,M15) USDARS 2093

2020.08.11 20:20:55.665 test (EURUSD,M15) USDCLP 1929

2020.08.11 20:21:25.259 test (EURUSD,M15) Error AUS200 29593673

2020.08.11 20:21:54.837 test (EURUSD,M15) Error FCHI40 29578404

2020.08.11 20:22:24.336 test (EURUSD,M15) Error GDAXIm 29498485

2020.08.11 20:22:53.949 test (EURUSD,M15) Error HSI50 29612968

2020.08.11 20:23:23.458 test (EURUSD,M15) Error Jap225 29509059

2020.08.11 20:23:52.919 test (EURUSD,M15) Error ND100m 29461316

2020.08.11 20:24:22.425 test (EURUSD,M15) Error SP500m 29505571

2020.08.11 20:24:51.860 test (EURUSD,M15) Error SPN35 29435460

2020.08.11 20:25:21.273 test (EURUSD,M15) Error STOX50 29412578

2020.08.11 20:25:50.663 test (EURUSD,M15) Error UK100 29389644

2020.08.11 20:26:20.205 test (EURUSD,M15) Error Brent 29542597

2020.08.11 20:26:49.667 test (EURUSD,M15) Error Crude 29462066

2020.08.11 20:27:19.194 test (EURUSD,M15) Error NatGas 29526780




 
Vladimir Pastushak:

Demo Metacvots サーバーでのテスト

失礼しました、今掛けています...。

このスクリプトは、私のマシンではターミナルがハングアップする原因にはなりませんでした。