Fehler, Irrtümer, Fragen - Seite 2414

 
Andrey Pogoreltsev:

Wenn Sie CSymbolInfo in einer Mehrfachwährung verwenden, wird die Methode Name zum Zeitpunkt der Initialisierung aufgerufen:

Während des Tests treten Fehler für das USDCAD-Symbol auf:

Was ist die Einzahlungswährung während der Tests?

 
Slava:

Auf welche Währung lautet die Kaution bei der Prüfung?

USD. EURUSD M1 Testpaar. Ich werde versuchen, es in einem nackten EA zu reproduzieren. Dies ist bisher nicht gelungen. Aber es waren diese Methoden, die zu Fehlern in den Protokollen und genau einem Paar führten.

 
Slava:

Auf welche Währung lautet die Kaution bei der Prüfung?

Generell reproduziert und eine Funktion gefunden. Anbei die Testeinstellungen.

Bare Expert Advisor Code selbst:

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


Jetzt das "Feature", wie versprochen) Wenn Sie Name() wie folgt verwenden:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

dann wird ein Fehler auftreten. Aber auf diese Weise verschwindet der Fehler:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);


PS. Ich habe Paare mit dem Präfix ".m" auf meinem Cent. Das Beispiel funktioniert auch bei normalen Paaren.

Dateien:
test.png  11 kb
 
Andrey Pogoreltsev:

Wie auch immer, ich habe es reproduziert und eine Funktion gefunden. Ich habe die Testeinstellungen beigefügt.


Ich danke Ihnen. Herausfinden

 

Fehler MT5 Build 2007. Im Optimierungsmodus wird die Eingabe auf 63 Zeichen gekürzt.

Code für den Test:

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


Einzellauf alles ok: ! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Stellen wir die Optimierung mit dem Parameter fortestopt ein, gehen wir zum Log des Agenten: ! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

 

Möchte jemand wissen...

Ich kann den Newsfeed auf meiner Seite nicht sehen... Früher konnte ich sehen, wer was gepostet hat, jetzt ist es eine leere Seite... Ich habe nichts an den Einstellungen geändert...

 

Compilerfehler. Er erzeugt einen Mehrdeutigkeitsfehler, obwohl hier alles eindeutig ist.Die erste Methode sollte als die am besten geeignete aufgerufen werden. Getestet in C++.

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

Fehler MT5 Build 2007. Im Optimierungsmodus wird die Eingabe auf 63 Zeichen gekürzt.

Code für den Test:


Einzellauf alles ok: ! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Stellen wir die Optimierung mit dem Parameter fortestopt ein, gehen wir zum Log des Agenten: ! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

Die Tatsache, dass es in einem einzigen Test nicht auf 63 Zeichen kommt, ist ebenfalls nur ein Zufall.

Die Länge der Zeichenkette für den Eingabeparameter darf 63 Zeichen nicht überschreiten (64 Zeichen zusammen mit dem Null-Terminator).

 
Slava:

Die Tatsache, dass sie auch im Einzeltest nicht auf 63 Zeichen reduziert wird, ist nur ein Zufall.

Die Länge eines Eingabeparameters vom Typ String sollte 63 Zeichen nicht überschreiten (64 zusammen mit dem Null-Terminator).

Dies ist eine Art drakonische Einschränkung. Wie ist das in der heutigen Zeit zu begründen? Und wie ist es praktisch, Cluster aus einer Reihe von Zeichen anzugeben? Ein Dutzend verschiedene Parameter aufzeichnen? Ist es bequem?

 
Slava:

Die Tatsache, dass der Einzeltest nicht auf 63 Zeichen gekürzt wird, ist nur ein Zufall.

Die Länge eines Eingabeparameters vom Typ String darf 63 Zeichen nicht überschreiten (64 zusammen mit dem Null-Terminator)

Diese Einschränkung ist unangebracht, denn wir schreiben nicht den Preis für ein Kilogramm Kartoffeln in den String.