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

 

1.なぜ「アプリ」なのか、一言で言えば「わからない」です。

2.サービスデスク部門はどこですか? このスレッドに人を送って欲しい。

https://www.mql5.com/ru/forum/290284

しゃい

 
ホーム」ボタンを押したときのように、またチャートがずれ始める。パターンを検出せず、半年ほど問題なく過ごしていたが、また戻ってきた......。1940年製造。
 
ポインターのバグ
class A {};

void OnStart()
{
  A* a = NULL;
  
  if (true && a) // '&&' - illegal operation use
    ;
    
  if (a) // OK
    ;
}
 
Vladimir Pastushak:

これは正常な動作なのでしょうか?その場合、どうすれば時間を短縮できるのでしょうか?履歴がプリロードされている

結果:

ARSAシンボル 16 544 647

アバン 16 506 592

AVAZ シンボル 16 553 408

アバズパ16 511 019

記号 ASSB 16 521 310


この挙動はCFD上でも現れる


ビヘイビアは、すべての

このスクリプトは、価格を要求するのに16秒かかり、この時点でプログラムはその場でハングアップしてしまいます...。

void OnStart()
  {
   int     all_symbols = SymbolsTotal(false);
   string  sym_name    = "";
   MqlRates   mas[];
   Print("Symbols all ",all_symbols);
   ulong time_=GetMicrosecondCount();
   
   for(int i=0;i<all_symbols;i++)
      if((sym_name=SymbolName(i,false))!="")
        {
         SymbolSelect(sym_name,true);
         ArrayResize(mas,i+1,100000);

         time_=GetMicrosecondCount();

         CopyRates(sym_name,PERIOD_D1,0,1,mas);

         Print("Copy   N ",(i+1)," Name ",sym_name," time = ",(GetMicrosecondCount()-time_));

        }

   for(int i=0;i<all_symbols;i++)
      if((sym_name=SymbolName(i,false))!="")
        {
         SymbolSelect(sym_name,true);
         ArrayResize(mas,i+1,100000);

         time_=GetMicrosecondCount();

         double rez = iOpen(sym_name,PERIOD_D1,0);

         Print("iOpen   N ",(i+1)," Name ",sym_name," time = ",(GetMicrosecondCount()-time_));

        }
  }

以下はログの一部です。

DJ 0 12:18:33.507 TestCopy (EURUSD,H1) Copy N 63 Name SGDJPY time = 46076

OP 0 12:18:33.552 TestCopy (EURUSD,H1) Copy N 64 Name USDEUR_BASKET time = 44995

IG 0 12:18:33.597 TestCopy (EURUSD,H1) Copy N 65 Name EURRUB_TOD time = 44863

LI 0 12:18:33.642 TestCopy (EURUSD,H1) Copy N 66 Name EURRUB_TOM time = 45040

GS 0 12:18:33.698 TestCopy (EURUSD,H1) Copy N 67 Name USDRUB_TOD time = 56006

CF 0 12:18:33.743 TestCopy (EURUSD,H1) Copy N 68 Name USDRUB_TOM time = 44925

CI 0 12:18:33.787 TestCopy (EURUSD,H1) Copy N 69 Name CNYRUB_TOD time = 44820

ES 0 12:18:33.833 TestCopy (EURUSD,H1) Copy N 70 Name CNYRUB_TOM time = 45086

CF 0 12:18:50.336 TestCopy (EURUSD,H1) Copy N 71 Name ABRD time = 16503669

KL 0 12:19:06.836 TestCopy (EURUSD,H1) Copy N 72 Name AESL time = 16499892

FF 0 12:19:06.881 TestCopy (EURUSD,H1) Copy N 73 Name AFKS time = 44842

CH 0 12:19:06.926 TestCopy (EURUSD,H1) Copy N 74 Name AFLT time = 44963

DP 0 12:19:23.429 TestCopy (EURUSD,H1) Copy N 75 Name AKRN time = 16502943

CG 0 12:19:39.929 TestCopy (EURUSD,H1) コピー N 76 名前 ALBK 時間 = 16499755

RL 0 12:19:56.433 TestCopy (EURUSD,H1) Copy N 77 Name ALNU time = 16503651

EG 0 12:19:56.478 TestCopy (EURUSD,H1) Copy N 78 Name ALRS time = 44989

OK 0 12:20:12.978 TestCopy (EURUSD,H1) Copy N 79 Name AMEZ time = 16500788

QS 0 12:20:13.034 TestCopy (EURUSD,H1) Copy N 80 Name APTK time = 55954

GF 0 12:20:29.541 TestCopy (EURUSD,H1) コピー N 81 名前 ARMD time = 16506946

HM 0 12:20:46.051 TestCopy (EURUSD,H1) Copy N 82 Name ARSA time = 16509620

DD 0 12:21:02.553 TestCopy (EURUSD,H1) Copy N 83 Name ASSB time = 16501809

GK 0 12:21:19.083 TestCopy (EURUSD,H1) コピーN 84 名前 AVAN 時間 = 16529765

HP 0 12:21:35.586 TestCopy (EURUSD,H1) Copy N 85 Name AVAZ time = 16502812

HK 0 12:21:52.085 TestCopy (EURUSD,H1) コピーN 86 名前 AVAZP 時間 = 16499796

NO 0 12:21:52.130 TestCopy (EURUSD,H1) Copy N 87 Name BANE time = 44973


最下部にフルログを掲載。

ファイル:
20181120.log  196 kb
 
fxsaber:
ポインターのバグ

何が違うの?

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

バグ、バグ、質問

fxsaber さん 2018.09.17 14:17

バグでしょうか?
class A {};

A* a = NULL;

bool b1 = a && true; // OK
bool b2 = true && a; // '&&' - illegal operation use

 
A100:

それと何が違うのでしょうか?

私は記憶力がとても悪いのです。何度も作り直す「自転車」もあります。

 
このエラーの原因は、(仮にboolへの自由な暗黙のポインタ変換があったとして)どのように解釈するかが不明なためだと思います。
class A {
public:
        bool operator&&( bool a ) { return a; }
};
void OnStart()
{
        A *a, *b;
        if (a && b);
}

か否か

        if ((bool)a &&(bool)b);       //(1)

または

        if ((*a).operator&&((bool)b));//(2)
 
A100:
このエラーは、(もしboolへの自由な暗黙のポインタ変換があったとして)どのように解釈すればよいのかが明確でないからだと思うのです。

はい、あなたの場合、曖昧さがありますね。いい意味で、こういうのはコンパイラの警告くらいあっても いいんじゃないでしょうか。

私の場合は、もっとシンプルで、すべてがクリアーです。C++もそれに同意していると思います。

 

fxsaber:
Это баг?

class A {};

A* a = NULL;

bool b1 = a && true; // OK
bool b2 = true && a; // '&&' - illegal operation use

一時的な解決策として、演算子「!」を使用します。(ではない)

class A {};

A* a = NULL;

bool b1 = !!a && true;
bool b2 = true && !!a;


解決策を考える(コードがたくさんある今、動作を変えてもいいのか?)
ポインタの場合、bool変換操作はポインタに対する操作であって、ポインタが指すオブジェクトに対する操作ではない可能性があるのです。

この場合、オブジェクトに対して操作を行うには、次のようなコードを記述する必要があります。

class A {};

A* a = NULL;

bool b1 = *a && true;
bool b2 = true && *a;

変換演算子も追加したいが、このタスクは(非常に)優先順位が低い。
 
Ilyas:

一時的な解決策として、演算子「!」を使用します。(ではない)

コンパイラは二重否定を最適化するのか?