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

 

Guten Abend, liebe Programmierer!

Helfen Sie mir, ein einfaches Problem zu lösen. Es gibt einen Code aus MQL4. Ich möchte ihn an 5 anpassen. Das heißt, um ähnlich in MQL5 zu arbeiten.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



Meine Variante offensichtlich nicht passieren, aus irgendeinem Grund gibt es eine Menge von Fehlern):

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

Guten Abend, liebe Programmierer!

Helfen Sie mir, ein einfaches Problem zu lösen. Es gibt einen Code aus MQL4. Ich möchte ihn an 5 anpassen. Das heißt, es sollte ähnlich in MQL5 funktionieren.


Schauen Sie in der Hilfe

iHigh

und ähnliche Funktionen

Wenn es nicht funktioniert, liegt ein Fehler in der Schleife vor.

und Sie können nicht sehen, zu welcher Variablen Sie Daten hinzufügen

 
lynxntech #:

siehe in der Hilfe

und ähnliche Funktionen

wenn es nicht funktioniert, liegt ein Fehler in der Schleife vor

und Sie können nicht sehen, zu welcher Variablen Sie Daten hinzufügen

Höchster/niedrigster Wert sollte angezeigt werden.

Ich habe mir das hier angeschaut:

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

Sehr nahe dran, aber noch nicht.

Nun, es zeigt die NUMMER der letzten 10 (beginnend mit der ersten "1") Candlestick mit den meisten niedrig. Aber ich brauche den Preis Wert, nicht die Kerze Nummer.

 

Im Allgemeinen ist es notwendig, nicht rückwärts, sondern vorwärts zu schauen.

Zum Beispiel: Suche nach dem "Minimum" vom Beginn der vorherigen Kerze (die mit "1" nummeriert ist) während der nächsten 100 Kerzen.

 
lynxntech #:

es kann alles gemacht werden, die Frage war an diejenigen, die die eigentliche Arbeit gemessen haben, und besser an die Entwickler, wer weiß, was sie dort in ihren Plänen haben

Ichwill nicht experimentieren, es gibt viele andere Aufgaben.

Aber gut. Nicht ein königliches Geschäft in .........

 
Alexey Viktorov #:

Ja, das ist richtig. Nicht die Angelegenheit des Königs, .........

vielleicht sollten wir den Thread "Fragen von Anfängern" schließen? Alexej, wenn du nicht helfen willst, halte dich bitte raus, es gibt zu viele Beschwerden von dir.

Ich war an einer professionellen Antwort interessiert, um eine Vorstellung davon zu bekommen, wie die Plattform funktioniert.

 
Alexey Belyakov #:

Guten Abend, liebe Programmierer!

Helfen Sie mir, ein einfaches Problem zu lösen. Es gibt einen Code aus MQL4. Ich möchte ihn an 5 anpassen. Das heißt, es sollte ähnlich in MQL5 funktionieren.




Meine Variante funktioniert offensichtlich nicht, aus irgendeinem Grund gibt es eine Menge von Fehlern):

Offensichtlich sind Sie mit dem Programmieren völlig unvertraut. Deshalb werden Sie mit allen Ratschlägen, die man Ihnen gibt, keinen Erfolg haben .

Aber trotzdem... versuchen Sie, die Funktion zu verstehen

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

und die Funktion der Arbeit mit Arrays

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

Es gibt andere Varianten, dieses Problem zu lösen.

 
Alexey Belyakov #:

Guten Abend, liebe Programmierer!

Helfen Sie mir, ein einfaches Problem zu lösen. Es gibt einen Code aus MQL4. Ich möchte ihn an 5 anpassen. Das heißt, es sollte ähnlich in MQL5 funktionieren.




Meine Variante funktioniert offensichtlich nicht, aus irgendeinem Grund gibt es eine Menge von Fehlern):

CopyRates() statt einer Reihe von Indikatoren und Code-Edits werden minimal, der Code bleibt kompakt und lesbar.

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

In Wirklichkeit sollten Sie auch eine Prüfung für geschwungene Anführungszeichen hinzufügen

 
Maxim Kuznetsov #:

CopyRates() anstelle einer Reihe von Indikatoren und Codeänderungen werden minimal sein, der Code wird kompakt und lesbar bleiben.

In Wirklichkeit sollten Sie auch eine Prüfung für geschwungene Anführungszeichen hinzufügen

Maxim, wird CopyRates nicht so dargestellt, als ob es alle Funktionen eines Symbols hätte?

billiger gibt es einzelne Funktionen

 
lynxntech #:

Maxim, wird CopyRates nicht so dargestellt, dass es alle Eigenschaften des Charakters erhält?

billiger gibt es einzelne Merkmale

da 1) nach den Worten der Entwickler virtuelles Kopieren, d.h. es werden möglichst keine Daten übertragen, sondern interne Referenzen 2) selbst bei vollem Kopieren ist es schneller als CopyBuffer für iHigh,iLow getrennt (1 Aufruf statt 2, die immer noch in die gleichen Terminalstrukturen gehen).

und schließlich das Wichtigste: Beim Portieren ist es sehr wichtig, dass der Code dem Original so ähnlich wie möglich ist, auch optisch. Man muss sich absolut sicher sein, dass er (der Code) genau dasselbe tut wie das Original. Und kleine Optimierungen werden im Nachhinein vorgenommen, und nur dort, wo es wirklich kritisch ist.