Fehler, Irrtümer, Fragen - Seite 1936

 
Aleksey Vyazmikin:

Ich kann den Code noch nicht zeigen, weil ich

Aber bereit, Profiling-Ergebnisse von MT5 zu zeigen - wie ich verstehe, sind Handelsfunktionen nicht in Frage.



Für die OHLC-Umgebung verwende ich die folgenden Funktionen

Vielleicht mache ich etwas falsch?

Leider machen Sie das alles falsch.

Anstatt einen nativen und effizienten MQL5-Code zu schreiben, verwenden Sie einen furchtbar ineffizienten MQL4-Emulator, der den Vorgang um ein Vielfaches verl angsamt.

Das Schlimme daran ist, dass Sie nicht einmal wissen, was Sie tun, da Sie Fragen zur Geschwindigkeit stellen.
 
Aleksey Vyazmikin:

Das Ergebnis ist der folgende Code

https://www.mql5.com/ru/code/18305

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • Stimmen: 19
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Эта библиотека предоставляет молниеносный доступ к таймсериям для реализации привычных методов MQL4 (например, iBarShift) в чувствительных к задержкам приложениях на MQL5.
 

Danke - ich habe diese Bibliothek gesehen - die Beschreibung war verwirrend


Diemeiste Zeit wird in der Initialisierungsphase verbracht. Wenn Sie nicht vorhaben, mehrfach auf die Zeitreihendaten zuzugreifen - mehr als ein paar tausend Mal während der Balkenbildung - sollten Sie alternative Methoden in Betracht ziehen.

Mein Expert Advisor funktioniert nur bei der Bar-Eröffnung - halten Sie es für sinnvoll, es zu versuchen?
 
Renat Fatkhullin:

Leider machen Sie das alles falsch.

Anstatt einen nativen und effizienten MQL5-Code zu schreiben, verwenden Sie einen furchtbar ineffizienten MQL4-Emulator, der den Vorgang um ein Vielfaches verl angsamt.

Das Schlimme daran ist, dass Sie nicht einmal verstehen, was Sie tun, da Sie Fragen zur Geschwindigkeit stellen.

Natürlich habe ich nach einer Lösung gesucht - wie man MQL4-Funktionen durch MQL5 ersetzen kann, insbesondere in Bezug auf Zeitreihen, und habe gesehen, dass dies eines der Probleme ist, auf die die meisten Leute beim Wechsel zu MQL5 stoßen.

Dementsprechend fand ich die Lösung auf derselben Website, wo in einem der Artikel meine Methode empfohlen wurde.

Ich persönlich verstehe nicht, warum man eine gute und praktische Funktion aus der Sprache ausschließt.

Meine Frage lautet also: Wie empfängt man Informationen richtig, und wie kann man die Vorteile von MQL5 nutzen?

 
Aleksey Vyazmikin:

Meine Frage an Sie lautet also: Wie organisiert man den Datenempfang richtig, um die Vorteile von MQL5 zu nutzen?

Die nativen, produktiveren Funktionen von MQL5 zu nutzen und sich nicht an den MQL4-Code zu klammern. Jeder MQL4 -> MQL5-Konverter/Splitter ist dutzendfach langsamer, da er versucht, Direktzugriffs-Mikrofunktionen von MQL4 über MQL5-Massenoperationen zu emulieren. Und die Emulation erfolgt völlig ohne Optimierung und Zwischenspeicherung.

Am Anfang der Verwendung einer bestimmten Funktion (ein Stück Code, einschließlich des Codes anderer Leute) sollte ein Verständnis dafür stehen, was genau getan wird. Sonst heißt es: "Ich habe gerade den Code eines anderen verwendet, und die Geschwindigkeit ist gesunken! Man kann kein gutes Ergebnis erzielen, wenn man das Werkzeug nicht versteht und weiß, was man damit macht.


Neben der Frage, "wie man es richtig macht", sollte ich klarstellen, dass die Aufgabe, "programmieren zu lernen", extrem schwierig ist, sobald man über die grundlegendste Ebene des Arbeitens (nicht einmal des Verstehens, nämlich des Arbeitens) mit einer Sprache hinauskommt. Ich sehe also keine andere Möglichkeit, als massenhaft Artikel, Dokumentationen, vorgefertigten Code in der Bibliothek zu lesen und mehrere Jahre lang zu üben.
 
Renat Fatkhullin:

Verwenden Sie die nativen, produktiveren Funktionen der MQL5-Sprache und halten Sie nicht am MQL4-Code fest.

Die Verwendung einer bestimmten Funktion (eines Stücks Code, einschließlich des Codes anderer Personen) sollte auf dem Verständnis dessen beruhen, was getan wird. Andernfalls heißt es: "Ich habe gerade den Code von jemand anderem verwendet, und siehe da - die Geschwindigkeit ist gesunken! Ohne das Werkzeug zu verstehen und zu wissen, was man damit macht, kann man kein gutes Ergebnis erzielen.


Zusätzlich zu der Frage, "wie man es richtig macht", sollte ich klarstellen, dass die Aufgabe, "Programmieren zu lernen", extrem schwierig ist, sobald man über die grundlegendste Ebene der Bedienung (nicht einmal des Verstehens, sondern der Bedienung) der Sprache hinauskommt. Deshalb sehe ich keine andere Möglichkeit zu lernen, als Artikel, Dokumentationen, fertigen Code in der Bibliothek zu lesen und mehrere Jahre lang zu üben.

Renat, haben Sie sich die Codebasis angesehen? Ich habe einen Code mit genau angepassten Funktionen aus der Sprache MQL4.

Ich bitte Sie ausdrücklich zu schreiben, wie man die richtigen Informationen über die Umwelt erhält - der Verweis auf abstrakte Bücher ist nicht produktiv und bestärkt nur meine (wahrscheinlich falsche) Vorstellung, dass dies nur eine Ausrede ist, die Sie nicht überprüfen können.

Zu sagen, ich sei so dumm, dass ich die Bedeutung einer Funktion nicht verstehe, die darin besteht, Informationen in ein Feld zu kopieren, bedeutet, dass die Dokumentation zur Programmiersprache mangelhaft ist. Ich verstehe nicht den Nutzen dieses Kopierens von einem Array in ein anderes und warum eine Funktion, die Informationen aus einem Array nach Bedarf abruft, schrecklicher Code ist.

 
Aleksey Vyazmikin:

Natürlich habe ich nach einer Lösung gesucht - wie man MQL4-Funktionen durch MQL5 ersetzen kann, insbesondere in Bezug auf Zeitreihen, und habe gesehen, dass dies eines der Probleme ist, auf die die meisten Leute beim Wechsel zu MQL5 stoßen.

Dementsprechend fand ich die Lösung auf derselben Website, wo in einem der Artikel meine Methode empfohlen wurde.

Ich persönlich verstehe nicht, warum man eine gute und praktische Funktion aus der Sprache ausschließt.

Deshalb frage ich Sie, wie ich die Informationen am besten erhalte, um die Vorteile von MQL5 zu nutzen?

Vielleicht habe ich nicht richtig gesucht? Hier haben Sie alles, was Sie brauchen, statt des gesamten Codes in einer Kopie

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Aleksey Vyazmikin, 2017.07.21 01:20

Danke - ich habe es korrigiert.

Der Code sieht daher wie folgt aus

//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   int copied=CopyOpen(Symbol(),0,index,1,Open);
   if(copied>0) open=Open[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   int copied=CopyLow(Symbol(),0,index,1,Low);
   if(copied>0) low=Low[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   int copied=CopyHigh(Symbol(),0,index,1,High);
   if(copied>0) high=High[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   int copied=CopyClose(Symbol(),0,index,1,Close);
   if(copied>0) close=Close[0];
   return(close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,OpenI);
   if(copied>0) open=OpenI[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   int copied=CopyLow(symbol,timeframe,index,1,LowI);
   if(copied>0) low=LowI[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   int copied=CopyHigh(symbol,timeframe,index,1,HighI);
   if(copied>0) high=HighI[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,CloseI);
   if(copied>0) close=CloseI[0];
   return(close);
  }

Die Zeit im Tester hat sich verlängert - ich bin das Warten schon leid :)

Um sie zu nutzen, müssen Sie nur die Struktur verstehen

struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

Vielleicht habe ich nicht genau genug hingesehen? Hier erhalten Sie in einem Exemplar alles, was Sie brauchen, anstatt all dieses Codes

Um dies zu nutzen, müssen Sie nur verstehen, was die Struktur ist



Wir bekommen das Gleiche - und zwar...

Die von Ihnen vorgeschlagene Variante passt, ifle:

- Die Berechnung findet nur bei der Öffnung eines Balkens statt.

- Sie wissen im Voraus, wie viele Stäbe benötigt werden

Ich habe Schleifen in meinem Code, der Betrag der Berechnung kann vorher unbekannt sein.

Und was macht es für einen Sinn, bei jedem Öffnen Informationen für, sagen wir, 300 Takte zu kopieren, wenn es sinnvoller wäre, einfach Informationen über einen neuen Takt hinzuzufügen - warum ist der Entwickler nicht diesen Weg gegangen?

 
Es tut mir leid, aber ich habe absolut keine Zeit, jedem einzelnen Anfänger das Programmieren beizubringen. Vor allem, wenn man sieht, dass die Person noch nicht einmal die Grundlagen des Programmierens verstanden hat und triviale Dinge fragt.


Aber ich werde Ihnen die Richtung zeigen:

  1. MQL5-Dokumentation
  2. Codebase
  3. Artikel
  4. Forum (nicht im Sinne von "schreibe für mich, warum unterrichtest du mich nicht und machst meine Arbeit")
  5. Freelance (hier können sie es richtig schreiben)
  6. Unabhängige Arbeit mit durchdachter Analyse: "Warum sollte dieser Wrapper langsamer werden und Ressourcen verschwenden, vielleicht optimal umgeschrieben werden?"
  7. Verwendung eines Profilers, der den tatsächlichen Ressourcenverbrauch in jeder Codezeile anzeigt
Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы, таких как время выполнения отдельных ее фрагментов (функций, строк). В MetaEditor встроена...
 

Ich habe keine Lust, auf diese Weise zu kommunizieren. Anstatt zu versuchen, zu verstehen, was gesagt wird, um herauszufinden, was passieren wird, werden unglaubliche Einwände vorgebracht.

Grund der Beschwerde: