Fehler, Irrtümer, Fragen - Seite 2324

 

1. Warum die Rubrik "Anwendungen"? Kurz gesagt: Ich verstehe es nicht.

2. Wo ist der Servicebereich? Ich möchte, dass sie jemanden zu diesem Thema schicken:

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

danke

 
Das Diagramm beginnt sich wieder zu verschieben, wie wenn die "Home"-Taste gedrückt wird - kein Muster erkannt, kein Problem für etwa ein halbes Jahr und jetzt ist es wieder da... Baujahr 1940.
 
Ein Zeigerfehler
class A {};

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

Ist dies ein normales Funktionsverhalten? Wenn ja, wie kann die Zeit verkürzt werden? Der Verlauf wurde vorgeladen

Ergebnis :

ARSA-Symbol 16 544 647

AVAN 16 506 592

AVAZ-Zeichen 16 553 408

AVAZP-Zeichen 16 511 019

Symbol ASSB 16 521 310


Dieses Verhalten zeigt sich im CFD


Das Verhalten erscheint auf allen

Hier ist das Skript, es dauert 16 Sekunden, um den Preis anzufordern, an diesem Punkt bleibt das Programm auf der Stelle stehen...

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_));

        }
  }

Hier ist ein Teil des Protokolls

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) Kopie N 71 Name ABRD Zeit = 16503669

KL 0 12:19:06.836 TestCopy (EURUSD,H1) Kopie N 72 Name AESL Zeit = 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) Kopie N 75 Name AKRN Zeit = 16502943

CG 0 12:19:39.929 TestCopy (EURUSD,H1) Kopie N 76 Name ALBK Zeit = 16499755

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

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

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

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

GF 0 12:20:29.541 TestCopy (EURUSD,H1) Kopie N 81 Name ARMD Zeit = 16506946

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

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

GK 0 12:21:19.083 TestCopy (EURUSD,H1) Kopie N 84 Name AVAN Zeit = 16529765

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

HK 0 12:21:52.085 TestCopy (EURUSD,H1) Kopie N 86 Name AVAZP Zeit = 16499796

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


Vollständiges Protokoll am Ende.

Dateien:
20181120.log  196 kb
 
fxsaber:
Ein Zeigerfehler

Was ist der Unterschied?

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2018.09.17 14:17

Ist es ein Fehler?
class A {};

A* a = NULL;

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

 
A100:

Was ist der Unterschied dazu?

Ich habe ein sehr schlechtes Gedächtnis. Manche "Fahrräder" erfinde ich mehrmals neu.

 
Ich denke, es gibt einen Grund für diesen Fehler, weil (wenn es eine freie implizite Zeigerumwandlung in bool) es nicht klar ist, wie zu interpretieren
class A {
public:
        bool operator&&( bool a ) { return a; }
};
void OnStart()
{
        A *a, *b;
        if (a && b);
}

ob oder ob nicht

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

oder als

        if ((*a).operator&&((bool)b));//(2)
 
A100:
Ich denke, dieser Fehler ist dort aus einem Grund, weil (wenn es freie implizite Zeigerumwandlung in bool) es nicht klar ist, wie zu interpretieren

Ja, in Ihrem Fall liegt eine Unklarheit vor. Eigentlich sollte es zumindest eine Compilerwarnung für diese Art von Dingen geben.

In meinem Fall, der viel einfacher ist, ist alles klar. Ich denke, C++ ist ebenfalls dieser Meinung.

 

fxsaber:
Это баг?

class A {};

A* a = NULL;

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

Als Übergangslösung können Sie den Operator '!' verwenden. (logisch nicht)

class A {};

A* a = NULL;

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


Wir werden über die Lösung nachdenken (können wir das Verhalten jetzt ändern, wo es eine Menge Code gibt?)
Es ist möglich, dass für einen Zeiger eine bool-Konvertierung eine Operation auf den Zeiger und nicht auf das Objekt, auf das er zeigt, sein würde.

In diesem Fall müssen wir den Code wie folgt schreiben, um die Operation am Objekt durchzuführen

class A {};

A* a = NULL;

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

Auch die Konvertierungsoperatoren wollen wir hinzufügen, aber diese Aufgabe hat (sehr) geringe Priorität
 
Ilyas:

Als Übergangslösung können Sie den Operator '!' verwenden. (logisch nicht)

Optimiert der Compiler die doppelte Negation?