Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 804

 
Andrey Sokolov:

Können Sie mir sagen, was mit dem folgenden Eintrag gemeint ist

int i,limit=prev_calculated==0 ? rates_total-1 : rates_total-prev_calculated;

"==" , "?" , ": "

?

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Es ist einfach furchtbar! Wenn ich die Logik in den Expert Advisors noch nachvollziehen kann, einige Dinge korrigieren, einige weitere hinzufügen... Ich verstehe den Code der Indikatoren überhaupt nicht(
 
prom18:

Vielen Dank, Igor. Ich habe es nicht richtig ausgedrückt. Der Indikator wird für eine bestimmte Anzahl von Balken (in diesem Fall 50) und in einem separaten Fenster berechnet und gezeichnet. Er benötigt nicht den Eröffnungskurs, sondern den ersten Balken des Tages, um den MA anzuzeigen. Aber trotzdem, danke.

read SetIndexDrawBegin() - dies ist eine Einschränkung für das Zeichnen des Indikatorpuffers, wird nie verwendet

oder in meinem Beispiel können Sie es so machen:

input int BarCount = 50;
....

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
   static double dayopen=0.0;
   static int lastday=0;
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      dayopen=0.0;
      lastday=0;
     }
   else limit=rates_total-prev_calculated;
   limit = fmin(BarCount,limit);
   for(i=limit; i>=0; i--)
     {
      if(TimeDay(time[i])!=lastday)
        {
         dayopen=open[i];
         lastday= TimeDay(time[i]);
        }
      Label1Buffer[i]=dayopen;
     }
   return(rates_total);
  }

d.h. die Berechnung von Indikatorpuffern auf dieBarCount-Einstellung beschränken

 
Andrey Sokolov:

Können Sie mir sagen, was mit dem folgenden Eintrag gemeint ist

int i,limit=prev_calculated==0 ? rates_total-1 : rates_total-prev_calculated;

"==" , "?" , ": "

?

https://docs.mql4.com/ru/basis/operators/ternary


Ich habe mein Beispiel umgeschrieben, in der ersten Version funktionierte es nicht richtig, wenn man die TFs wechselt, man muss dayopen und lastday zurücksetzen, sie sind mit dem Modifikator static beschrieben

Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
Условный оператор ?: - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void...
 
Artyom Trishkin:

Rückgabe des Indexes in dem als Referenz übergebenen Funktionsparameter

Zurückgeschickt:

double GetPatt5barsDN()
{
double low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
wenn
((Close[i] > Open[i]) &&
(Schließen[i+1] > Öffnen[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] wird für diese Kerze benötigt
(Schließen[i+3] < Öffnen[i+3]) &&
(Schließen[i+4] < Öffnen[i+4])

low3 = Low[i+2];
index = i+2;
}

zurück(low3);
return(index);
}


Was soll ich als nächstes tun?

 
Sfinks35:

Zurückgeschickt:

double GetPatt5barsDN()
{
double low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
wenn
((Close[i] > Open[i]) &&
(Schließen[i+1] > Öffnen[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] wird für diese Kerze benötigt
(Schließen[i+3] < Öffnen[i+3]) &&
(Schließen[i+4] < Öffnen[i+4])

low3 = Low[i+2];
index = i+2;
}

zurück(low3);
return(index);
}


Was soll ich als nächstes tun?

Das ist kein Weg, es zurückzubekommen.


Zum Beispiel so.

int GetPatt5barsDN()
      {
       double low3 = 0;
       int index = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          } 
           
          return(index);
      }


Weitere

double min = Low[GetPatt5barsDN()];
 
Sfinks35:

Zurückgeschickt:

double GetPatt5barsDN()
{
double low3 = 0;
int index = 0;
for(int i=1; i<20; i++)
{
wenn
((Close[i] > Open[i]) &&
(Schließen[i+1] > Öffnen[i+1]) &&
(Close[i+2] > Open[i+2]) && //Low[i+2] wird für diese Kerze benötigt
(Schließen[i+3] < Öffnen[i+3]) &&
(Schließen[i+4] < Öffnen[i+4])

low3 = Low[i+2];
index = i+2;
}

zurück(low3);
return(index);
}


Was soll ich als nächstes tun?

Wo ist die Indexrückgabe über einen Parameter per Referenz?

Und bitte fügen Sie den Code korrekt ein:


 
Gibt es eine Funktion in MQL4, die erkennen kann, ob ein Zitat ist ein 5 oder 4 Dezimalstellen, wie viele Dezimalstellen ein Vermögenswert hat zum Beispiel EURJPY hat 2 Dezimalstellen, EURUSD hat 4 Dezimalstellen?
 
Seric29:
Gibt es eine Funktion in MQL4, die Anführungszeichen von einem Kontotyp, wie 5 oder 4 Dezimalstellen identifizieren kann, was sind die Möglichkeiten zu identifizieren, wie viele Nullen ein Vermögenswert hat nach dem Komma zum Beispiel EURJPY hat 2 Dezimalstellen, EURUSD hat 4 Dezimalstellen?

https://docs.mql4.com/ru/predefined/digitsvar

Digits - Предопределенные переменные - Справочник MQL4
Digits - Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Digits - Предопределенные переменные - Справочник MQL4
 
Artyom Trishkin:

Wo ist die Indexrückgabe über einen Parameter per Referenz?

Und bitte fügen Sie den Code korrekt ein:


Guten Tag!
Ich scheine es jetzt richtig verstanden zu haben:
double GetPatt5barsDN(int &index)
      {
       double low3 = 0;
       for(int i=1; i<20; i++)
          {
            if
            ((Close[i] > Open[i]) &&  
            (Close[i+1] > Open[i+1]) &&
            (Close[i+2] > Open[i+2]) && //На этой свече нужен Low[i+2]
            (Close[i+3] < Open[i+3]) &&  
            (Close[i+4] < Open[i+4]))
             
            low3 = Low[i+2];
            index = i+2;
          }           
     return(low3);
     }

Bei der Kompilierung wird jedoch eine Warnung ausgegeben: möglicher Datenverlust aufgrund der Typkonvertierung in der Zeile:
index = GetPatt5barsDN(index);

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index);
   index = GetPatt5barsDN(index);
   Print("low3= ", low3);
   Print("index= ", index);

Bei der Kompilierung sind keine Fehler im Funktionskopf (oder in der Funktion selbst) aufgetreten.