Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1242

 
Sayberix:

Ich lese es gerade. Ich bin wohl einfach noch nicht so weit gekommen. Ich glaube nicht, dass es einfach ist, eine 28 MB große pdf-Referenz zu lesen. Oder anders gesagt: Nicht alle Gemeindemitglieder kennen die ganze Bibel, auch wenn sie gläubig sind.

Ich habe noch eine weitere Frage, die Sie mir bitte beantworten, wenn es nicht zu schwierig ist:

beim Ausführen von Code in der Strategievisualisierung:

1. das Programm geht in eine Endlosschleife;

2. die Ergebnisse der Ausführung sind unterschiedlich:

ohne Haltepunkte:

Mit Haltepunkt auf Drucken:


All dies geschieht auf der Grundlage von Debugging historischer Daten.

Sie erhöhen die Variable ständig. Was meinen Sie: Wann wird die Größe der Variablen ihre Grenzen überschreiten?

 
Vladimir Karputov:

Sie erhöhen ständig die Größe der Variablen. Was meinen Sie: Wann wird die Größe der Variablen ihre Grenzen überschreiten?

Ich denke, dass 10 Iterationen des ulong ausreichen sollten. Die Frage ist also:

1. warum wird die Schleife nicht unterbrochen? und

2. Warum werden die Ergebnisse des Iterationszeitzählers selbst nicht angezeigt?


Liegt es daran, dass die Fehlersuche mit historischen Daten durchgeführt wurde?

 
Sayberix:

Ich denke, dass für 10 Iterationen der Ulong ausreichen sollte. Die Frage ist also:

1. warum wird die Schleife nicht unterbrochen? und

2. Warum werden die Ergebnisse des Iterationszeitzählers selbst nicht angezeigt?


Liegt es an der Fehlersuche bei historischen Daten?

Sie haben eine Variable, die auf globaler Programmebene deklariert ist - Sie erhöhen sie ständig.

 
Oh, ich verstehe... Die Iteration dauert weniger als eine Millisekunde...
 
Vladimir Karputov:

Sie haben eine Variable, die auf der globalen Programmebene deklariert ist - Sie erhöhen sie ständig.

Ich verstehe immer noch nicht, was die globale Variable damit zu tun hat. Das Programm selbst ist auf eine Schleife beschränkt: "for(int i=1; i<=10; i++)" ?

Oder vielleicht verstehe ich etwas nicht, bitte erklären Sie es mir.

 
Sayberix:

Ich verstehe immer noch nicht, was die globale Variable damit zu tun hat. Das Programm selbst ist auf eine Schleife beschränkt: "for(int i=1; i<=10; i++)" ?

Oder vielleicht verstehe ich etwas nicht, bitte erklären Sie es mir.

Variablen entfernen

ulong count, raschet = 1;

außerhalb des globalen Geltungsbereichs.


Bei jedem Tick wird die Variable raschet wiederholt inkrementiert. Und beim nächsten Ticken erhöhen Sie die Zahl mehrmals weiter. Ein paar Ticks und dieRaschet-Variable ist außerhalb des Bereichs. Schließlich drucken Sie die Werte der Variablen aus, sehen sich den Ausdruck aber aus irgendeinem Grund nicht an.

 
Vladimir Karputov:

Entfernen Sie die Variablen

aus dem globalen Bereich.


Bei jedem Tick wird die Variable raschet wiederholt inkrementiert. Und beim nächsten Ticken erhöhen Sie den Wert immer weiter. Ein paar Ticks und dieRaschet-Variable ist außerhalb des Bereichs. Schließlich drucken Sie die Werte der Variablen aus, sehen sich den Ausdruck aber aus irgendeinem Grund nicht an.

Danke, ich verstehe schon. Ich war nur verwirrt, weil ich dachte, dass return das Programm überhaupt anhält, während es seine Ausführung nur für den aktuellen Tick unterbricht. Anstelle von "return;" habe ich"ExpertRemove();" eingegeben.

 

Können Sie mir das in diesem Code sagen:

//+------------------------------------------------------------------+
//|                                                          env.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property indicator_buffers 2

int envHandle;
double upperEnv[], lowerEnv[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   envHandle = iCustom(_Symbol,_Period,"Examples\\Envelopes",3,0,MODE_LWMA,PRICE_OPEN,0.03);
   if(envHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(INIT_FAILED);
     }
   SetIndexBuffer(0,upperEnv,INDICATOR_DATA);
   SetIndexBuffer(1,lowerEnv,INDICATOR_DATA);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(envHandle);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {

   ArraySetAsSeries(upperEnv, true);
   ArraySetAsSeries(lowerEnv, true);

   if((CopyBuffer(envHandle,0,0,3,upperEnv)<0) || CopyBuffer(envHandle,1,0,3,lowerEnv)<0)
      Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");

   double   upEnv = upperEnv[0];
   double   lowEnv = lowerEnv[0];
  }
//+------------------------------------------------------------------+

Wie kann ich in den Variablen upEnv und lowEnv ständig aktualisierte Preiswerte von Envelopes-Zeilen erhalten? Der Indikator wird gezeichnet, aber die Indikatorwerte in den Variablen werden 2 Mal aktualisiert und das war's.

 
Sayberix:

Können Sie mir das in diesem Code sagen:

Wie kann ich in den Variablen upEnv und lowEnv ständig aktualisierte Preiswerte von Envelopes-Zeilen erhalten? Es zeichnet den Indikator, aber die Indikatorwerte in den Variablen werden 2 Mal aktualisiert und das war's.

Entscheiden Sie zunächst: Wollen Sie einen Expert Advisor oder einen Indikator schreiben? (Sie haben jetzt einen gemischten Code - Indikator und Expert Advisor sind miteinander vermischt) - d.h. der Code wird nicht funktionieren.

Tipp: Verwenden Sie den MQL-Assistenten, um eine Vorlage zu erstellen.

 
Vladimir Karputov:

Entscheiden Sie sich zunächst: Wollen Sie einen EA oder einen Indikator schreiben? (Im Moment ist Ihr Code ein Durcheinander - sowohl Indikator und Expert Advisor sind miteinander vermischt) - das heißt, der Code ist nicht funktionsfähig.

Tipp: Verwenden Sie den MQL-Assistenten, um eine Vorlage zu erstellen.

Ich habe es bereits versucht. Aber es erzeugt Klassen im Wizard. Ich möchte zumindest den Code auf einfache Art und Weise verstehen - den Code verstehe ich zumindest ein wenig. Könnten Sie bitte beraten, wie der Code zu korrigieren, um Indikatorwerte in der EA zu erhalten?

Grund der Beschwerde: