Fehler, Irrtümer, Fragen - Seite 98

 

Ich verstehe nicht, "wo der Hund begraben ist", der Code funktioniert, alles ist OK, aber die Compiler-Warnungen möglichen Verlust von Daten aufgrund der Typkonvertierung Indi.mqh 125 45 machen mich stutzig.


//+------------------------------------------------------------------+
//|Получение значений позиций в средe BB цены AppPrice,Fast/Slow TEMA|
//+------------------------------------------------------------------+

void CIndi::SetPricePositions(ushort SymbolPosition,ushort Index,uchar AppPrice)
  {
   int handle=GetHandle(SymbolPosition,BANDS);
   double Upper =Upper_Band(handle,Index);
   double Base  =Base_Band(handle,Index);
   double Lower =Lower_Band(handle,Index);
   double FTema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_FAST),0,Index);
   double STema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_SLOW),0,Index);
   
   Bollinger[SymbolPosition][PRICE_POSITION]=(double)GetPricePos(handle,Index,AppPrice); ???
   Bollinger[SymbolPosition][FAST_POSITION] =(double)Custom.Position(Lower,Upper,FTema); ???
   Bollinger[SymbolPosition][SLOW_POSITION] =(double)Custom.Position(Lower,Upper,STema); ???
   Bollinger[SymbolPosition][UPPER]         =(double)Upper; ???
   Bollinger[SymbolPosition][BASE]          =(double)Base;  ???
   Bollinger[SymbolPosition][LOWER]         =(double)Lower; ???
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора - Документация по MQL5
 

An die Entwickler.

Soweit ich weiß, ist das Problem der Vertauschung gelöst worden? Oder es ist nicht klar, warum das Thema aus dem Service verschwunden ist: .....

 

Beim Testen eines EA

void OnTick(){
   Print(iTest());
}
//+------------------------------------------------------------------+
int iTest(){
   double i;
   int j;
   for(int x=3; x>0; x--) { 
      i=i+0.00001;
   }//Next x
   j=int(i/_Point);
   return(j);
}//iTest()

Das Protokoll zeigt eine ständig steigende Zahl! Ist das so gewollt?

In MQL4 hätten Sie schreiben müssen

static double i;

 
EvgeTrofi:

Beim Testen eines EA

Das Protokoll zeigt eine ständig steigende Zahl! Soll das so sein?

Ja, das sollte es sein.

Sie haben die lokale Variable i nicht initialisiert, die bei nachfolgenden Aufrufen an der gleichen Stelle auf dem Stack wie bei den vorherigen Aufrufen zugewiesen wurde.

Документация по MQL5: Основы языка / Переменные / Локальные переменные
Документация по MQL5: Основы языка / Переменные / Локальные переменные
  • www.mql5.com
Основы языка / Переменные / Локальные переменные - Документация по MQL5
 
Renat:

Ja, so sollte es sein.

Sie haben die lokale Variable i nicht initialisiert, die bei den nächsten Aufrufen an derselben Stelle des Stapels zugewiesen wird wie bei den vorherigen Aufrufen.

In welchem Fall sollte die statische Speicherklasse verwendet werden?

Unverständlicher Satz in der Hilfe: "Lokale Variablen, die alsstatisch deklariert sind, haben den Geltungsbereich eines Blocks, obwohl sie von Beginn der Programmausführung an existieren", bitte erklären. Es scheint ein syntaktischer oder grammatikalischer Fehler in diesem Satz zu sein :)

Beachten Sie das Beispiel in der Hilfe:https://www.mql5.com/ru/docs/basis/variables/static

Wenn Sie das Wort static aus dem Code entfernen, wird sich nichts ändern:

int Counter()
  {
   int count;
   count++;
   if(count%100==0) Print("Функция Counter была вызвана уже ",count," раз");
   return count;
  }
void OnStart()
  {
//---
   int c=345;
   for(int i=0;i<1000;i++)
     {
      int c=Counter();
     }
   Print("c = ",c);
  }

Frage: Warum brauchen wir überhaupt Statik, wenn es ohne sie genauso ist?

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
ALozovoy:
Hallo. Sie vermissen den Parameter ExpertParameters in der [Tester]-Beschreibung. Weitere Informationen dazu finden Sie in der Hilfe.

Danke, es funktioniert.

 


Sagen Sie mir bitte, warum die Möglichkeit, Variablen innerhalb von Blöcken zu deklarieren, überhaupt hinzugefügt wurde? Früher war das in einem Fall wie diesem der Fall:

  
int c;    for(int i=0;i<1000;i++)      {        int  c=Counter(); }

Früher erschien eine Meldung, dass eine direkte Variable zweimal deklariert wurde, und es war klar, dass man sich einen anderen Namen für die Variable ausdenken oder denselben verwenden musste, aber ohne das int. Aber jetzt kann es verwirrend werden. Ist es in C++ dasselbe?

(Bevor ich MQL gelernt habe, habe ich in Visual Basic programmiert. Dort gab es kein solches Durcheinander).

 
EvgeTrofi:

In welchem Fall sollte dann die statische Speicherklasse verwendet werden?


Nein.

Wenn Sie eine Variable int i; erstellt haben, warum haben Sie sie nicht initialisiert? Sie selbst haben gesagt: "Es ist mir egal, was in dieser Variablen steht", und am Ende stand Müll drin.

Der richtige Weg ist int i=0;

Ist das in C++ auch so?

Ja, das ist richtig - Sie können solche Variablen innerhalb eines Blocks erstellen.
 

Ich habe ein Problem auf Windows 7 64 bit auf 306 Bild des Terminals (Windows 7 32 bit alles funktioniert gut).

Dateien:
mql64.png  52 kb
 
VanHelsing:

Ich habe ein Problem auf Windows 7 64 bit auf 306 Bild des Terminals (Windows 7 32 bit alles funktioniert gut).

Bitte posten Sie in servicedesk ein Stück Code, bei dem diese Situation auftritt.