Fehler bei der Größenänderung von Arrays in Beta-Build 530 - Seite 3

 
RaptorUK:

Ich kenne mich mit MT3 nicht aus, aber ich gehe davon aus, dass Code, der auf MT3 lief, auch auf MT4 lief ... das ist das Problem mit MT4 --> MT5 und der Grund, warum die Situation anders ist.

Die Mehrheit der MT4-Benutzer kann nicht programmieren, und wenn es ihre Lieblingsindikatoren auf MT4 nicht auf MT5 gibt, werden sie MT5 nicht benutzen.

Soweit ich weiß, läuft MT3-Code nicht auf MT4, die Sprache ist sehr unterschiedlich. Diese Debatte über MT4/MT5 ist endlos, es gibt eine Menge Faktoren, die zum Überleben von MT4 führen, ich bin mir nicht einmal sicher, dass MT5 MT4 vollständig ersetzen sollte.

Wie auch immer, über die neue Version, Metaquotes sagte, es wird rückwärts kompatibel auf ex4 Ebene, aber nicht wirklich auf mq4 Ebene.

 

Ich habe einen kurzen Blick in die neue Metaeditor-Hilfe geworfen. Die neue Version mql4 unterscheidet sich viel mehr von der alten Version, als ich dachte.

 
angevoyageur:

Soweit ich weiß, läuft MT3-Code nicht auf MT4, die Sprache ist sehr unterschiedlich. Diese Debatte über MT4/MT5 ist endlos, es gibt eine Menge von Faktoren, die zum Überleben von MT4 führt, ich bin nicht einmal sicher, dass MT5 beabsichtigt war, MT4 vollständig zu ersetzen.

Wie auch immer, über die neue Version, Metaquotes sagte, es wird rückwärts kompatibel auf ex4 Ebene, aber nicht wirklich auf mq4 Ebene.

Bei der Kompatibilität mit aktuellen .ex4-Indikatoren, -Skripten und -EAs geht es nicht nur um die Sprache, sondern auch um das Terminal und Änderungen an dessen Funktionsweise. Zum Beispiel könnten Änderungen am Strategietester EAs zerstören, die in erster Linie für den Strategietester entwickelt wurden, während derselbe EA auf einem Live-Chart gut funktioniert, aber seine Hauptfunktion nicht mehr erfüllt.
 
angevoyageur:

Soweit ich weiß, läuft MT3-Code nicht auf MT4, die Sprache ist sehr unterschiedlich. Diese Debatte über MT4/MT5 ist endlos, es gibt eine Menge von Faktoren, die zum Überleben von MT4 führt, ich bin nicht einmal sicher, dass MT5 beabsichtigt war, MT4 vollständig zu ersetzen.

Wie auch immer, Metaquotes sagte, dass die neue Version auf ex4-Ebene abwärtskompatibel sein wird, aber nicht wirklich auf mq4-Ebene.

Für mich sieht es so aus, als ob es auf mq4-Ebene abwärtskompatibel sein soll, die enthaltenen benutzerdefinierten Indikatoren sind die ursprünglichen mql4-Versionen mit einer Änderung des Namens der init()-Funktion, die sie im neuen Compiler kompilieren und auf dem neuen Terminal ausführen, das muss bedeuten, dass wir immer noch Indikatoren mit IndicatorCounted() codieren können, wenn wir wollen ...

init() heißt jetzt int OnInit(void) und gibt (INIT_SUCCEEDED) zurück;

 
SDC:

Für mich sieht es so aus, als ob es auf der mq4-Ebene rückwärtskompatibel sein soll, die enthaltenen benutzerdefinierten Indikatoren sind die ursprünglichen mql4-Versionen mit einer Änderung des Namens der init()-Funktion, die sie im neuen Compiler kompilieren und auf dem neuen Terminal ausführen, das muss bedeuten, dass wir immer noch Indikatoren mit IndicatorCounted() kodieren können, wenn wir das wollen ...

init() heißt jetzt int OnInit(void) und gibt (INIT_SUCCEEDED) zurück;

Sorry, aber es wird nicht abwärtskompatibel auf mq4 Ebene sein, siehe die Ankündigung der ersten Beta.

Unterschiede zur alten MQL4-Version:

  • Die Priorität der logischen Operationen AND/OR wurde geändert. Jetzt ist alles ähnlich dem Standard C/C++

  • Verkürzte Auswertung von logischen Ausdrücken eingeführt. Wenn nun ein logischer Ausdruck vor seinem Ende ausgewertet wird, werden die verbleibenden nachfolgenden Ausdrücke nicht ausgewertet, wie in C/C++.

  • Im Switch-Operator werden jetzt nur noch Integer-Werte verwendet. Vorher konnten auch reelle Werte verwendet werden.

  • Ein Punktsymbol kann nicht mehr in Variablennamen verwendet werden. Außerdem können die Symbole '@', '$' und '?' nicht in Variablennamen verwendet werden.

  • Verschärfte Anforderungen für die Startfunktion. Bisher konnten in der Startfunktion Parameter gesetzt werden. Jetzt sollten alle Init-, Start-, Deinit-, OnInit-, OnStart-, OnTick-, OnTimer- und andere Einstiegspunkte genau ihren Signaturen entsprechen

  • Aufgrund der Erweiterung der Schlüsselwörter können Namen wie short, long, float, const, virtual, input, delete, new, do, char jetzt nicht mehr verwendet werden.

  • Jetzt können importierte DLL-Funktionen keine MQL-String-Arrays als Parameter akzeptieren, wie in MQL5

  • Einführung von vordefinierten _Period, _Symbol, _LastError, _CriticalError, _StopFlag, _Point, _Digits, _UninitReason, _RandomSeed Variablennamen, die in Konflikt mit einfachen Variablen kommen können, die unter denselben Namen in bestehenden Quelldateien deklariert sind

  • datetime ist jetzt ein 8-Byte-Typ, wie in MQL5.

Die Unterschiede sind nicht kritisch und können im Code leicht korrigiert werden. Im Gegenzug erhalten wir Zugang zu mehreren MQL5-Funktionen, verbesserter Ausführungsgeschwindigkeit und viel strengerer Qualitätskontrolle.

Es ist nicht schwer Änderungen, aber es bedeutet keine 100% abwärtskompatibel (mq4).
 
SDC:

...

init() wird jetzt int OnInit(void) genannt und gibt (INIT_SUCCEEDED) zurück;

Sie können beide Versionen verwenden.
 

Mir gefallen die neuen Funktionen im Metaeditor

 

Ich denke, wenn die neue Version veröffentlicht wird, wird es eine Menge Verwirrung im Forum für Neulinge geben, weil die neue mql4-Dokumentation auf mql5-Codierung basiert. Das bedeutet, dass vieles von dem, was in diesem Forum und in der Codebase beschrieben wird, in der mql4-Dokumentation widerlegt wird.

Einrichten eines Indikatorpuffers aus den neuen mql4-Dokumenten: (Dies ist tatsächlich fehlerhaft und lässt sich nicht kompilieren)

#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input bool               AsSeries=true;
input int                period=15;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input int                shift=0;
//--- indicator buffers
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Indicator buffer is timeseries = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Indicator buffer after SetIndexBuffer() is timeseries = ",
         ArrayGetAsSeries(MABuffer));
   
//--- change the oredr of accessing elements of the indicator buffer
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- Copy the values of the moving average in the buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// Depending on the value AsSeries
                                      // Will receive a very old value
                                      // Or for the current unfinished bar
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
SDC:

Ich denke, wenn die neue Version veröffentlicht wird, wird es eine Menge Verwirrung im Forum für Neulinge geben, weil die neue mql4-Dokumentation auf mql5-Codierung basiert. Das bedeutet, dass vieles von dem, was in diesem Forum und in der Codebase beschrieben wird, in der mql4-Dokumentation widerlegt wird.

Einrichten eines Indikatorpuffers aus den neuen mql4-Dokumenten: (Dies ist tatsächlich fehlerhaft und lässt sich nicht kompilieren)

Ja, Sie haben Recht, es wird ein schwieriger Übergang sein. Allerdings denke ich, dass es nicht für Neulinge schwierig wird, sondern für erfahrene mql4-Programmierer, die mql5 noch nicht kennen. Im Allgemeinen lesen Neulinge die Dokumentation nicht.
 

Haben Sie bereits in MQL5 angevoyageur kodiert worden?