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

 

Gutes Internet und gute Gesundheit für alle.


Frage: Was mache ich falsch? Die Arrays (STATIC) sind ausgefüllt, aber die Berechnung ergibt 0 (Null). Können Sie mir sagen, was ich in meinem Code nicht habe? Warum werden die Array-Elemente nicht verglichen und addiert...? Danke


 double Open[60],High[60],Lo[60,Close[60]; int to_copy=60;
if(CopyOpen(NULL,PERIOD_H4,1,to_copy,Open)<to_copy)return(0);
   if(CopyHigh(NULL,PERIOD_H4,1,to_copy,High)<to_copy)return(0);
   if(CopyLow(NULL,PERIOD_H4,1,to_copy,Low)<to_copy)return(0);
   if(CopyClose(NULL,PERIOD_H4,1,to_copy,Close)<to_copy)return(0);
//----   
   //int start=to_copy*PeriodSeconds(PERIOD_H4)/PeriodSeconds(_Period);
   int start=to_copy;
   
   if(Tf==true)
     {
      if(prev_calculated==0)
         for(int j=1; j<=start; j++)
           {
            if(Open[j]>Close[j])
               candle+=Open[j]-Close[j];
            if(Close[j]>Open[j])
               candle+=Close[j]-Open[j];
            candleHL+=High[j]-Low[j];
            br+=1;
           } //for 
Comment(High[10],". ",candle);
candle дает результат 0 ноль
 
kopeyka2:

Gutes Internet und gute Gesundheit für alle.


Frage: Was mache ich falsch? Die Arrays (STATIC) sind ausgefüllt, aber die Berechnung ergibt 0 (Null). Können Sie mir sagen, was ich in meinem Code nicht habe? Warum werden die Array-Elemente nicht verglichen und addiert...? Danke


1) Die Schleife geht über das Array hinaus - wenn die Puffergröße 60 beträgt, ist der letzte Index 59, weil der erste Index 0 ist

2) Der Code ist nicht vollständig - z.B. wie ist Tf definiert und mit was wurde die Kerze initialisiert?


* Beim Kopieren von Preisen wird die Indizierung um eins verschoben, da 60 Elemente ab dem ersten Index kopiert werden, d.h. die Preise des ersten geschlossenen Balkens befinden sich bereits unter Index 0

 

Wie die Funktion funktioniert

IsStopped();

... und welche Liste von Aufgaben erfüllt sie?


In der Hilfe heißt es - "Überprüft die erzwungene Beendigung des mql5-Programms". Das heißt, er "schaut" sich eine bestimmte Anzahl von Codezeilen an und prüft, ob etwas korrekt ist? Wie ist ihr Zuständigkeitsbereich festgelegt (z. B. pro Zeile oder 10 Zeilen)?


Ich dachte, es verhindert nur, dass die Schleife über das Array hinausgeht, aber ich habe es schon im FAMA-Code gesehen, bevor ich die Höchst- und Tiefstpreise kopiert habe

 
Alexandr Sokolov:

Wie die Funktion funktioniert

... und welche Liste von Aufgaben erfüllt sie?


In der Hilfe heißt es - "Überprüft die erzwungene Beendigung des mql5-Programms". Das heißt, er "schaut" sich eine bestimmte Anzahl von Codezeilen an und prüft, ob etwas korrekt ist? Wie ist ihr Zuständigkeitsbereich festgelegt (z. B. pro Zeile oder 10 Zeilen)?


Ich dachte, es verhindert nur, dass die Schleife über das Array hinausgeht, aber ich sah es noch im FAMA-Code vor dem Kopieren der Preise High und Low

Es sieht nicht so aus... Das steht dort deutlich geschrieben. Sie prüft die Flagge... Lesen Sie es noch einmal.

Документация по MQL5: Проверка состояния / IsStopped
Документация по MQL5: Проверка состояния / IsStopped
  • www.mql5.com
Возвращает true, если в системной переменной _StopFlag содержится значение, отличное от 0. Ненулевое значение записывается в переменную _StopFlag, если поступила команда завершить...
 
Alexandr Sokolov:

Wie die Funktion funktioniert

... und welche Liste von Aufgaben erfüllt sie?


In der Hilfe heißt es - "Überprüft die erzwungene Beendigung des mql5-Programms". Das heißt, er "schaut" sich eine bestimmte Anzahl von Codezeilen an und prüft, ob etwas korrekt ist? Wie ist ihr Zuständigkeitsbereich festgelegt (z. B. pro Zeile oder 10 Zeilen)?


Ich dachte, es verhindert nur, dass die Schleife über das Array hinausgeht, aber ich habe es im FAMA-Code gesehen, bevor ich die Höchst- und Tiefstpreise kopiert habe

Wenn ein MQL-Programm gestoppt wird, wird das _StopFlag gesetzt, und es kann entweder mit einer vordefinierten Variablen oder der Funktion IsStopped() überprüft werden - was auch immer bequem ist, verwenden Sie es auf diese Weise.

nach dem Setzen von _StopFlag hat das MQL-Programm ein wenig Zeit, um anzuhalten, und dann wird es vom Terminal zwangsweise entladen

die am weitesten verbreitete Verwendung - Skripte in Schleifen, sollten Sie nicht

while(true)
{
...
}

ist es besser, es so zu schreiben:

while(!IsStopped())
{
...
}

Nun, manchmal werden bei Kostenkalkulationen oder in großen Zyklen

for(int i=0; i<1 e6 && !IsStopped(); i++)
{

}
 

Hallo zusammen.

Können Sie mir sagen, ob es möglich ist, eine Schleife durch Variablen mit folgenden Namen zu ziehen: L1, L2, L3 ... Ln zum Schreiben in ein zweidimensionales Array

extern string L1       = "1.15110;1.14105;1.13240;1.12370;1.11640;1.11170;1.10655;1.09895;1.08850;1.07850;1.06475;";
extern string L2       = "1.32130;1.31030;1.29860;1.29042;1.27985;1.25605;1.24725;1.23565;1.22505;1.20815;1.20115;1.18850;1.16690;1.14465;"; 
extern string L3       = "0.94947;0.93222;0.91472;0.90077;0.89075;0.88658;0.86814;0.84687;0.82795;0.81132;0.79022;0.75976;"; 

...

extern string Ln      = " ... ";    
 
Alexandr Sokolov:

1) In der Schleife kommt es zu einem Überlauf des Arrays - wenn die Puffergröße 60 beträgt, dann ist der letzte Index 59, da der erste Index 0 ist

2) Der Code ist nicht vollständig - z.B. wie ist Tf definiert und mit was wurde die Kerze initialisiert?


* Beim Kopieren von Preisen wird die Indexierung um eins verschoben, da Sie 60 Elemente ab dem ersten Index kopieren, d.h. die Preise des ersten geschlossenen Balkens befinden sich bereits unter Index 0.

DANKE für Ihre Antwort. Vollständiger Code. Erhöht die statische Größe des Arrays. Null-Kontrollsatz in Operatoren entfernt. Allgemeiner "Dummy". Ich möchte immer noch nicht verstehen, WARUM es nicht als Zusatz zählt. Was steht jetzt nicht in meinem Code? Vielen Dank für die Tipps. Ich habe noch nicht mit statischen Arrays in mql5 gearbeitet.....

ICH HABE DEN CODE AKTUALISIERT. Die Frage ist dieselbe...

//+------------------------------------------------------------------+
//|                                                          123.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, "
//---- номер версии индикатора
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
//----
input int       nBars = 20;
//----
int    limit=0,br=0,to_copy=nBars;
double corrHL,corrOC;
double averpips,averpipsH;
double candle,candleHL;
double opn,hgh,lw,cls;
double Open[65],High[65],Low[65],Close[65];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
   Comment("");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   

      //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if(CopyOpen(NULL,PERIOD_H4,0,to_copy,Open)<to_copy)
      return(0);
   if(CopyHigh(NULL,PERIOD_H4,0,to_copy,High)<to_copy)
      return(0);
   if(CopyLow(NULL,PERIOD_H4,0,to_copy,Low)<to_copy)
      return(0);
   if(CopyClose(NULL,PERIOD_H4,0,to_copy,Close)<to_copy)
      return(0);
     int indexmass=ArraySize(Open);
//----
   if(Tf==true)
     {
      if(prev_calculated==0)
         for(int j=1; j<=to_copy; j++) // поменять на ноль?????
           {
            opn=Open[j];
            hgh=High[j];
            lw=Low[j];
            cls=Close[j];
            if(opn>cls)
               candle+=opn-cls;
            if(cls>opn)
               candle+=cls-opn;
            candleHL+=hgh-lw;
            br+=1;
           } //for j
      if(br>0)
        {
         averpips=candle/br;
         averpips=NormalizeDouble(averpips,_Digits);
         averpipsHL=candleHL/br;
         averpipsHL=NormalizeDouble(averpipsHL,_Digits);
        }
      }
   Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpipsHL ",averpipsHL);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Comment("indexmass  ",indexmass,"  Open ",Open[10],"  candle  ",candle,"  averpips ",averpips);
Die Werte der Array-Elemente sind größer als Null. Bei Berechnungen, Null
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
stepystr:

Hallo zusammen.

Können Sie mir sagen, ob es möglich ist, eine Schleife durch Variablen mit den Namen L1, L2, L3 ... Ln zum Schreiben in ein zweidimensionales Array

den Beitrag gelöscht - Sie kennen sich mit Arrays aus

aber noch nicht möglich

als Option, um eine Makro-Substitution zu schreiben, schreiben Sie ein konkretes Beispiel - vielleicht wird jemand ein Makro zu Ihrer Aufgabe schreiben, ich bin schlecht im Schreiben von Makros.

 

Leute!!! (Hinweis ... )))

Vollständiger Code. Die Größe des statischen Arrays wurde erhöht. Entfernte Schreib-Null-Kontrolle in Operatoren... Allgemeiner "Dummy". Ich möchte immer noch nicht verstehen, WARUM es nicht als Addition zählt. Was steht jetzt nicht in meinem Code? Vielen Dank für die Tipps. Ich habe noch nicht mitstatischen Arrays in mql5 gearbeitet.....

ICH HABE DEN CODE AKTUALISIERT. Die Frage ist dieselbe...

Die Werte der Array-Elemente sind größer als Null. Bei Berechnungen, Null
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Допускается объявление не более чем 4-мерного массива. При объявлении динамического массива (массива с неуказанным значением в первой паре квадратных скобок) компилятор автоматически создает переменную указанной выше структуры (объект динамического массива) и обеспечивает код для правильной инициализации.   Статические массивы При явном...
 
kopeyka2:

DANKE für die Antwort. Vollständiger Code. Die Größe des statischen Arrays wurde erhöht. Nullkontrolleintrag in Operatoren entfernt... Allgemeiner "Dummy". Ich versuche immer noch herauszufinden, warum sie nicht hinzugefügt wird. Was fehlt jetzt noch in meinem Code? Vielen Dank für die Tipps. Ich habe noch nicht mit statischen Arrays in mql5 gearbeitet.....

ICH HABE DEN CODE AKTUALISIERT. Die Frage ist dieselbe...

Ich kenne mich mit Indikatoren nicht aus, aber das ist einfach unnötig. Ich habe es bereits ))))

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[])
  {
   

      //+------------------------------------------------------------------+
//| Поиск события и установка меток  на графике                      |
//+------------------------------------------------------------------+
   if(CopyOpen(NULL,PERIOD_H4,0,to_copy,Open)<to_copy)
      return(0);
   if(CopyHigh(NULL,PERIOD_H4,0,to_copy,High)<to_copy)
      return(0);
   if(CopyLow(NULL,PERIOD_H4,0,to_copy,Low)<to_copy)
      return(0);
   if(CopyClose(NULL,PERIOD_H4,0,to_copy,Close)<to_copy)
      return(0);
     int indexmass=ArraySize(Open);
Grund der Beschwerde: